ETH Price: $3,102.88 (+0.63%)
Gas: 5 Gwei

Token

Mini Shkreli (MSHKI)
 

Overview

Max Total Supply

10,000,000,000,000 MSHKI

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
100,000,000 MSHKI

Value
$0.00
0x0ddb96a86c6d7aac935eb05e2d8d23aab6d09057
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:
MiniShkreli

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-19
*/

// File: CollapsingBirthRate.sol

// An honourary token for Martin Shkreli and all of the degens who missed the $MSI pump. Let's send this and donate 50% of the proceeds to Martin!

// https://t.me/MiniShkreli


pragma solidity ^0.8.13;
 
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);
 
    /**
     *
     * 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 MiniShkreli is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private devOpsWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyDevOpsFee;
    uint256 public buyLiquidityFee;
 
    uint256 public sellTotalFees;
    uint256 public sellDevOpsFee;
    uint256 public sellLiquidityFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellDevOpsFee;
 
    uint256 public tokensForDevOps;
    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 devOpsWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Mini Shkreli", "MSHKI") {
 
        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 _buyDevOpsFee = 5;
        uint256 _buyLiquidityFee = 1;
 
        uint256 _sellDevOpsFee = 5;
        uint256 _sellLiquidityFee = 1;
 
        uint256 _earlySellLiquidityFee = 1;
        uint256 _earlySellDevOpsFee = 5;
 
        uint256 totalSupply = 1 * 1e13 * 1e18;
 
        maxTransactionAmount = totalSupply * 40 / 1000; // 3% maxTransactionAmountTxn
        maxWallet = totalSupply * 40 / 1000; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyDevOpsFee = _buyDevOpsFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyDevOpsFee + buyLiquidityFee;
 
        sellDevOpsFee = _sellDevOpsFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellDevOpsFee + sellLiquidityFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellDevOpsFee = _earlySellDevOpsFee;
 
        devOpsWallet = address(0x7BF77f2FF12B7A80F8Cf027Cc086904afAB0BBbe); // set as devOps wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0x7BF77f2FF12B7A80F8Cf027Cc086904afAB0BBbe), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(0x7BF77f2FF12B7A80F8Cf027Cc086904afAB0BBbe), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        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;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _devOpsFee, uint256 _liquidityFee) external onlyOwner {
        buyDevOpsFee = _devOpsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevOpsFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _devOpsFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellDevOpsFee) external onlyOwner {
        sellDevOpsFee = _devOpsFee;
        sellLiquidityFee = _liquidityFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellDevOpsFee = _earlySellDevOpsFee;
        sellTotalFees = sellDevOpsFee + sellLiquidityFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        require(block.number < launchedAt + 40, "Waited too long to blacklist");
        _blacklist[account] = isBlacklisted;
    }
 
    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 updateDevOpsWallet(address newDevOpsWallet) external onlyOwner {
        emit devOpsWalletUpdated(newDevOpsWallet, devOpsWallet);
        devOpsWallet = newDevOpsWallet;
    }
 
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        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) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellDevOpsFee = earlySellDevOpsFee;
                sellTotalFees = sellDevOpsFee + sellLiquidityFee;
            } 
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
        }
 
        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;
                tokensForDevOps += fees * sellDevOpsFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDevOps += fees * buyDevOpsFee / 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 + tokensForDevOps + 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 ethForDevOps = ethBalance.mul(tokensForDevOps).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDevOps - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDevOps = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devOpsWallet).call{value: address(this).balance}("");
    }

}

// https://t.me/MiniShkreli

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devOpsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevOpsFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"earlySellDevOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevOpsFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"tokensForDevOps","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":"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":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevOpsWallet","type":"address"}],"name":"updateDevOpsWallet","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":"_devOpsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevOpsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600a60036101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600c81526020017f4d696e692053686b72656c6900000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d53484b4900000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000b92565b5080600490805190602001906200013692919062000b92565b50505060006200014b6200065f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002168160016200066760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000cac565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000cac565b6040518363ffffffff1660e01b81526004016200036992919062000cef565b6020604051808303816000875af115801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000cac565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f760a05160016200066760201b60201c565b6200040c60a05160016200076460201b60201c565b60006005905060006001905060006005905060006001905060006001905060006005905060006c7e37be2022c0914b268000000090506103e860288262000454919062000d55565b62000460919062000de5565b6007819055506103e860288262000478919062000d55565b62000484919062000de5565b600981905550612710600a826200049c919062000d55565b620004a8919062000de5565b6008819055508660108190555085601181905550601154601054620004ce919062000e1d565b600f819055508460138190555083601481905550601454601354620004f4919062000e1d565b6012819055508260158190555081601681905550737bf77f2ff12b7a80f8cf027cc086904afab0bbbe600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057f620005716200080560201b60201c565b60016200082f60201b60201c565b620005923060016200082f60201b60201c565b620005a761dead60016200082f60201b60201c565b620005ce737bf77f2ff12b7a80f8cf027cc086904afab0bbbe60016200082f60201b60201c565b620005f0620005e26200080560201b60201c565b60016200066760201b60201c565b620006033060016200066760201b60201c565b6200061861dead60016200066760201b60201c565b6200063f737bf77f2ff12b7a80f8cf027cc086904afab0bbbe60016200066760201b60201c565b6200065133826200097c60201b60201c565b5050505050505050620010ad565b600033905090565b620006776200065f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000709576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007009062000edb565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200083f6200065f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c89062000edb565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000970919062000f1a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e59062000f87565b60405180910390fd5b62000a026000838362000b2a60201b60201c565b62000a1e8160025462000b2f60201b6200259b1790919060201c565b60028190555062000a7c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2f60201b6200259b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1e919062000fba565b60405180910390a35050565b505050565b600080828462000b40919062000e1d565b90508381101562000b88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7f9062001027565b60405180910390fd5b8091505092915050565b82805462000ba09062001078565b90600052602060002090601f01602090048101928262000bc4576000855562000c10565b82601f1062000bdf57805160ff191683800117855562000c10565b8280016001018555821562000c10579182015b8281111562000c0f57825182559160200191906001019062000bf2565b5b50905062000c1f919062000c23565b5090565b5b8082111562000c3e57600081600090555060010162000c24565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c748262000c47565b9050919050565b62000c868162000c67565b811462000c9257600080fd5b50565b60008151905062000ca68162000c7b565b92915050565b60006020828403121562000cc55762000cc462000c42565b5b600062000cd58482850162000c95565b91505092915050565b62000ce98162000c67565b82525050565b600060408201905062000d06600083018562000cde565b62000d15602083018462000cde565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d628262000d1c565b915062000d6f8362000d1c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dab5762000daa62000d26565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000df28262000d1c565b915062000dff8362000d1c565b92508262000e125762000e1162000db6565b5b828204905092915050565b600062000e2a8262000d1c565b915062000e378362000d1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e6f5762000e6e62000d26565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ec360208362000e7a565b915062000ed08262000e8b565b602082019050919050565b6000602082019050818103600083015262000ef68162000eb4565b9050919050565b60008115159050919050565b62000f148162000efd565b82525050565b600060208201905062000f31600083018462000f09565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f6f601f8362000e7a565b915062000f7c8262000f37565b602082019050919050565b6000602082019050818103600083015262000fa28162000f60565b9050919050565b62000fb48162000d1c565b82525050565b600060208201905062000fd1600083018462000fa9565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200100f601b8362000e7a565b91506200101c8262000fd7565b602082019050919050565b60006020820190508181036000830152620010428162001000565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200109157607f821691505b602082108103620010a757620010a662001049565b5b50919050565b60805160a05161571962001112600039600081816111a40152818161198501528181612c62015261306b015260008181610d6901528181612c0a01528181613e5101528181613f3201528181613f5901528181613ff5015261401c01526157196000f3fe60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c5565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614280565b610d29565b60405161038991906142db565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f6565b610d47565b6040516103c691906142db565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614382565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ac565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ac565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ac565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c7565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f4565b610ecb565b6040516104d891906142db565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614473565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144cf565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614280565b6110ef565b60405161056991906142db565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f9565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142db565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f6565b6111d9565b6040516105fc91906142db565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ac565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614514565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ac565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142db565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f6565b611353565b6040516106e391906143ac565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142db565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614473565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ac565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f9565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614554565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c5565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614473565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ac565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614554565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614280565b611ad9565b6040516108c991906142db565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142db565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ac565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614280565b611bbf565b60405161095c91906142db565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ac565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f6565b611be3565b6040516109c491906142db565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142db565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f6565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614473565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c7565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142db565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ac565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c7565b611ff0565b604051610afd91906142db565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ac565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614581565b612166565b604051610b6591906143ac565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ac565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c1565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142db565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ac565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f6565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ac565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ac565b60405180910390f35b606060038054610ca690614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614657565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d4565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614723565b610e6291906147ac565b610e6c91906147ac565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484f565b60405180910390fd5b670de0b6b3a764000081610ec29190614723565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d4565b60405180910390fd5b6028601a5461104a919061486f565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614911565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d4565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486f565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497d565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d4565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d4565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614657565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614657565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0f565b60405180910390fd5b611a1b8282613712565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d4565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156bf6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142db565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d4565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614723565b611f6e91906147ac565b611f7891906147ac565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa1565b60405180910390fd5b670de0b6b3a764000081611fce9190614723565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d4565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614723565b6120ab91906147ac565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b33565b60405180910390fd5b6103e860056120fa610d8b565b6121049190614723565b61210e91906147ac565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc5565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d4565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486f565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497d565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486f565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ac565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9d565b60405180910390fd5b600081036129a45761299f838360006137b3565b6136a9565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615009565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c1565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615153565b60405180910390fd5b600954612e7683611353565b82612e81919061486f565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151bf565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615251565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486f565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151bf565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a9576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613173919061486f565b10155b156131a45760155460148190555060165460138190555060145460135461319d919061486f565b6012819055505b613236565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132355742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324130611353565b9050600060085482101590508080156132665750600a60029054906101000a900460ff165b801561327f5750600560149054906101000a900460ff16155b80156132d55750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133815750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c5576001600560146101000a81548160ff0219169083151502179055506133a9613a46565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348557600090505b6000811561369857601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e857506000601254115b1561358257613515606461350760125489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050601254601454826135289190614723565b61353291906147ac565b60186000828254613543919061486f565b925050819055506012546013548261355b9190614723565b61356591906147ac565b60176000828254613576919061486f565b92505081905550613674565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dd57506000600f54115b156136735761360a60646135fc600f5489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050600f546011548261361d9190614723565b61362791906147ac565b60186000828254613638919061486f565b92505081905550600f54601054826136509190614723565b61365a91906147ac565b6017600082825461366b919061486f565b925050819055505b5b6000811115613689576136888830836137b3565b5b80866136959190615271565b95505b6136a38888886137b3565b50505050505b505050565b60008383111582906136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed91906141c5565b60405180910390fd5b50600083856137059190615271565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388890614f0b565b60405180910390fd5b61389c838383613d63565b61390781604051806060016040528060268152602001615671602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3991906143ac565b60405180910390a3505050565b6000613a5130611353565b90506000601954601754601854613a68919061486f565b613a72919061486f565b9050600080831480613a845750600082145b15613a9157505050613c9d565b6014600854613aa09190614723565b831115613ab9576014600854613ab69190614723565b92505b600060028360185486613acc9190614723565b613ad691906147ac565b613ae091906147ac565b90506000613af78286613d6890919063ffffffff16565b90506000479050613b0782613db2565b6000613b1c8247613d6890919063ffffffff16565b90506000613b4787613b3960175485613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000613b7288613b6460195486613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000818385613b839190615271565b613b8d9190615271565b9050600060188190555060006017819055506000601981905550600087118015613bb75750600081115b15613c0457613bc68782613fef565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfb939291906152a5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4a9061530d565b60006040518083038185875af1925050503d8060008114613c87576040519150601f19603f3d011682016040523d82523d6000602084013e613c8c565b606091505b505080985050505050505050505050505b565b6000808303613cb15760009050613d13565b60008284613cbf9190614723565b9050828482613cce91906147ac565b14613d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0590615394565b60405180910390fd5b809150505b92915050565b6000613d5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c9565b905092915050565b505050565b6000613daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ae565b905092915050565b6000600267ffffffffffffffff811115613dcf57613dce6153b4565b5b604051908082528060200260200182016040528015613dfd5781602001602082028036833780820191505090505b5090503081600081518110613e1557613e146153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190615427565b81600181518110613ef257613ef16153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f57307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb995949392919061554d565b600060405180830381600087803b158015613fd357600080fd5b505af1158015613fe7573d6000803e3d6000fd5b505050505050565b61401a307f000000000000000000000000000000000000000000000000000000000000000084612601565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407f969594939291906155a7565b60606040518083038185885af115801561409d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c2919061561d565b5050505050565b60008083118290614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410791906141c5565b60405180910390fd5b506000838561411f91906147ac565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416657808201518184015260208101905061414b565b83811115614175576000848401525b50505050565b6000601f19601f8301169050919050565b60006141978261412c565b6141a18185614137565b93506141b1818560208601614148565b6141ba8161417b565b840191505092915050565b600060208201905081810360008301526141df818461418c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b811461423257600080fd5b50565b6000813590506142448161421e565b92915050565b6000819050919050565b61425d8161424a565b811461426857600080fd5b50565b60008135905061427a81614254565b92915050565b60008060408385031215614297576142966141e7565b5b60006142a585828601614235565b92505060206142b68582860161426b565b9150509250929050565b60008115159050919050565b6142d5816142c0565b82525050565b60006020820190506142f060008301846142cc565b92915050565b60006020828403121561430c5761430b6141e7565b5b600061431a84828501614235565b91505092915050565b6000819050919050565b600061434861434361433e846141ec565b614323565b6141ec565b9050919050565b600061435a8261432d565b9050919050565b600061436c8261434f565b9050919050565b61437c81614361565b82525050565b60006020820190506143976000830184614373565b92915050565b6143a68161424a565b82525050565b60006020820190506143c1600083018461439d565b92915050565b6000602082840312156143dd576143dc6141e7565b5b60006143eb8482850161426b565b91505092915050565b60008060006060848603121561440d5761440c6141e7565b5b600061441b86828701614235565b935050602061442c86828701614235565b925050604061443d8682870161426b565b9150509250925092565b614450816142c0565b811461445b57600080fd5b50565b60008135905061446d81614447565b92915050565b6000806040838503121561448a576144896141e7565b5b600061449885828601614235565b92505060206144a98582860161445e565b9150509250929050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b6144f38161420c565b82525050565b600060208201905061450e60008301846144ea565b92915050565b6000806040838503121561452b5761452a6141e7565b5b60006145398582860161426b565b925050602061454a8582860161426b565b9150509250929050565b60006020828403121561456a576145696141e7565b5b60006145788482850161445e565b91505092915050565b60008060408385031215614598576145976141e7565b5b60006145a685828601614235565b92505060206145b785828601614235565b9150509250929050565b600080600080608085870312156145db576145da6141e7565b5b60006145e98782880161426b565b94505060206145fa8782880161426b565b935050604061460b8782880161426b565b925050606061461c8782880161426b565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466f57607f821691505b60208210810361468257614681614628565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146be602083614137565b91506146c982614688565b602082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472e8261424a565b91506147398361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614772576147716146f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b78261424a565b91506147c28361424a565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f83614137565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b600061487a8261424a565b91506148858361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ba576148b96146f4565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fb601c83614137565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614967601d83614137565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f9603983614137565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602483614137565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1d603583614137565b9150614b2882614ac1565b604082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614baf603483614137565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c41602683614137565b9150614c4c82614be5565b604082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cad601b83614137565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602483614137565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd1602283614137565b9150614ddc82614d75565b604082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e63602583614137565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef5602383614137565b9150614f0082614e99565b604082019050919050565b60006020820190508181036000830152614f2481614ee8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f87603183614137565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff3601683614137565b9150614ffe82614fbd565b602082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ab604983614137565b91506150b682615029565b606082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513d603583614137565b9150615148826150e1565b604082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a9601383614137565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523b603683614137565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b600061527c8261424a565b91506152878361424a565b92508282101561529a576152996146f4565b5b828203905092915050565b60006060820190506152ba600083018661439d565b6152c7602083018561439d565b6152d4604083018461439d565b949350505050565b600081905092915050565b50565b60006152f76000836152dc565b9150615302826152e7565b600082019050919050565b6000615318826152ea565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537e602183614137565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154218161421e565b92915050565b60006020828403121561543d5761543c6141e7565b5b600061544b84828501615412565b91505092915050565b6000819050919050565b600061547961547461546f84615454565b614323565b61424a565b9050919050565b6154898161545e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c48161420c565b82525050565b60006154d683836154bb565b60208301905092915050565b6000602082019050919050565b60006154fa8261548f565b615504818561549a565b935061550f836154ab565b8060005b8381101561554057815161552788826154ca565b9750615532836154e2565b925050600181019050615513565b5085935050505092915050565b600060a082019050615562600083018861439d565b61556f6020830187615480565b818103604083015261558181866154ef565b905061559060608301856144ea565b61559d608083018461439d565b9695505050505050565b600060c0820190506155bc60008301896144ea565b6155c9602083018861439d565b6155d66040830187615480565b6155e36060830186615480565b6155f060808301856144ea565b6155fd60a083018461439d565b979650505050505050565b60008151905061561781614254565b92915050565b600080600060608486031215615636576156356141e7565b5b600061564486828701615608565b935050602061565586828701615608565b925050604061566686828701615608565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053e7b1628a4832cdf5ea8060e676d08728ba5af60ee8f156d5aa9e59377da12764736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063924de9b7116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bed578063f2fde38b14610c18578063f637434214610c41578063f8b45b0514610c6c57610325565b8063e2f4560514610b6e578063e7ad9fcd14610b99578063e884f26014610bc257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9e578063d257b34f14610ac9578063d85ba06314610b06578063dd62ed3e14610b3157610325565b8063c024666814610a21578063c18bc19514610a4a578063c876d0b914610a7357610325565b8063a4d15b6411610164578063b2b2c0bb1161013e578063b2b2c0bb14610965578063b62496f514610990578063bbc0c742146109cd578063bde73318146109f857610325565b8063a4d15b64146108d2578063a5cf68ef146108fd578063a9059cbb1461092857610325565b8063924de9b7146107c457806395d89b41146107ed5780639a7a23d6146108185780639fccce3214610841578063a26577781461086c578063a457c2d71461089557610325565b80634a62bb651161026a57806370a08231116102235780637571336a116101fd5780637571336a1461072e578063762d868a146107575780638a8c523c146107825780638da5cb5b1461079957610325565b806370a08231146106af578063715018a6146106ec578063751039fc1461070357610325565b80634a62bb651461059d5780634fbee193146105c8578063541a43cf1461060557806366ca9b83146106305780636a486a8e146106595780636ddd17131461068457610325565b80631b5cc613116102d75780632d5a5d34116102b15780632d5a5d34146104e1578063313ce5671461050a578063395093511461053557806349bd5a5e1461057257610325565b80631b5cc61314610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c97565b60405161034c91906141c5565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614280565b610d29565b60405161038991906142db565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906142f6565b610d47565b6040516103c691906142db565b60405180910390f35b3480156103db57600080fd5b506103e4610d67565b6040516103f19190614382565b60405180910390f35b34801561040657600080fd5b5061040f610d8b565b60405161041c91906143ac565b60405180910390f35b34801561043157600080fd5b5061043a610d95565b60405161044791906143ac565b60405180910390f35b34801561045c57600080fd5b50610465610d9b565b60405161047291906143ac565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906143c7565b610da1565b005b3480156104b057600080fd5b506104cb60048036038101906104c691906143f4565b610ecb565b6040516104d891906142db565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614473565b610fa4565b005b34801561051657600080fd5b5061051f6110e6565b60405161052c91906144cf565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614280565b6110ef565b60405161056991906142db565b60405180910390f35b34801561057e57600080fd5b506105876111a2565b60405161059491906144f9565b60405180910390f35b3480156105a957600080fd5b506105b26111c6565b6040516105bf91906142db565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906142f6565b6111d9565b6040516105fc91906142db565b60405180910390f35b34801561061157600080fd5b5061061a61122f565b60405161062791906143ac565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190614514565b611235565b005b34801561066557600080fd5b5061066e61133a565b60405161067b91906143ac565b60405180910390f35b34801561069057600080fd5b50610699611340565b6040516106a691906142db565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906142f6565b611353565b6040516106e391906143ac565b60405180910390f35b3480156106f857600080fd5b5061070161139b565b005b34801561070f57600080fd5b506107186114f3565b60405161072591906142db565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614473565b6115ae565b005b34801561076357600080fd5b5061076c6116a0565b60405161077991906143ac565b60405180910390f35b34801561078e57600080fd5b506107976116a6565b005b3480156107a557600080fd5b506107ae61177c565b6040516107bb91906144f9565b60405180910390f35b3480156107d057600080fd5b506107eb60048036038101906107e69190614554565b6117a6565b005b3480156107f957600080fd5b5061080261185a565b60405161080f91906141c5565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614473565b6118ec565b005b34801561084d57600080fd5b50610856611a1f565b60405161086391906143ac565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190614554565b611a25565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614280565b611ad9565b6040516108c991906142db565b60405180910390f35b3480156108de57600080fd5b506108e7611ba6565b6040516108f491906142db565b60405180910390f35b34801561090957600080fd5b50610912611bb9565b60405161091f91906143ac565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190614280565b611bbf565b60405161095c91906142db565b60405180910390f35b34801561097157600080fd5b5061097a611bdd565b60405161098791906143ac565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b291906142f6565b611be3565b6040516109c491906142db565b60405180910390f35b3480156109d957600080fd5b506109e2611c03565b6040516109ef91906142db565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a91906142f6565b611c16565b005b348015610a2d57600080fd5b50610a486004803603810190610a439190614473565b611d6d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906143c7565b611ead565b005b348015610a7f57600080fd5b50610a88611fd7565b604051610a9591906142db565b60405180910390f35b348015610aaa57600080fd5b50610ab3611fea565b604051610ac091906143ac565b60405180910390f35b348015610ad557600080fd5b50610af06004803603810190610aeb91906143c7565b611ff0565b604051610afd91906142db565b60405180910390f35b348015610b1257600080fd5b50610b1b612160565b604051610b2891906143ac565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b539190614581565b612166565b604051610b6591906143ac565b60405180910390f35b348015610b7a57600080fd5b50610b836121ed565b604051610b9091906143ac565b60405180910390f35b348015610ba557600080fd5b50610bc06004803603810190610bbb91906145c1565b6121f3565b005b348015610bce57600080fd5b50610bd7612308565b604051610be491906142db565b60405180910390f35b348015610bf957600080fd5b50610c026123c3565b604051610c0f91906143ac565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a91906142f6565b6123c9565b005b348015610c4d57600080fd5b50610c5661258f565b604051610c6391906143ac565b60405180910390f35b348015610c7857600080fd5b50610c81612595565b604051610c8e91906143ac565b60405180910390f35b606060038054610ca690614657565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd290614657565b8015610d1f5780601f10610cf457610100808354040283529160200191610d1f565b820191906000526020600020905b815481529060010190602001808311610d0257829003601f168201915b5050505050905090565b6000610d3d610d366125f9565b8484612601565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60165481565b610da96125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f906146d4565b60405180910390fd5b670de0b6b3a76400006103e86001610e4e610d8b565b610e589190614723565b610e6291906147ac565b610e6c91906147ac565b811015610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061484f565b60405180910390fd5b670de0b6b3a764000081610ec29190614723565b60078190555050565b6000610ed88484846127ca565b610f9984610ee46125f9565b610f948560405180606001604052806028815260200161569760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f4a6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b600190509392505050565b610fac6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611032906146d4565b60405180910390fd5b6028601a5461104a919061486f565b431061108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290614911565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111986110fc6125f9565b84611193856001600061110d6125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b612601565b6001905092915050565b7f000000000000000000000000fe6a5a61f8878c5029d8c2c94ec44a4e166dddcf81565b600a60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61123d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906146d4565b60405180910390fd5b81601081905550806011819055506011546010546112ea919061486f565b600f819055506014600f541115611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061497d565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113a36125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114fd6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906146d4565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6115b66125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c906146d4565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6116ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906146d4565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117ae6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611834906146d4565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461186990614657565b80601f016020809104026020016040519081016040528092919081815260200182805461189590614657565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b6118f46125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a906146d4565b60405180910390fd5b7f000000000000000000000000fe6a5a61f8878c5029d8c2c94ec44a4e166dddcf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614a0f565b60405180910390fd5b611a1b8282613712565b5050565b60195481565b611a2d6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab3906146d4565b60405180910390fd5b80600a60036101000a81548160ff02191690831515021790555050565b6000611b9c611ae66125f9565b84611b97856040518060600160405280602581526020016156bf6025913960016000611b106125f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b612601565b6001905092915050565b600a60039054906101000a900460ff1681565b60105481565b6000611bd3611bcc6125f9565b84846127ca565b6001905092915050565b60175481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611c1e6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906146d4565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbdcddef9ef45c223fdd883851191fd9fa95aa9b793f97f720258493ceed93d7560405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d756125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfb906146d4565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ea191906142db565b60405180910390a25050565b611eb56125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b906146d4565b60405180910390fd5b670de0b6b3a76400006103e86005611f5a610d8b565b611f649190614723565b611f6e91906147ac565b611f7891906147ac565b811015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614aa1565b60405180910390fd5b670de0b6b3a764000081611fce9190614723565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b6000611ffa6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612080906146d4565b60405180910390fd5b620186a06001612097610d8b565b6120a19190614723565b6120ab91906147ac565b8210156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614b33565b60405180910390fd5b6103e860056120fa610d8b565b6121049190614723565b61210e91906147ac565b821115612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614bc5565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121fb6125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906146d4565b60405180910390fd5b836013819055508260148190555081601581905550806016819055506014546013546122b6919061486f565b60128190555060146012541115612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f99061497d565b60405180910390fd5b50505050565b60006123126125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906146d4565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123d16125f9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612457906146d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614c57565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b60095481565b60008082846125aa919061486f565b9050838110156125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614cc3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614de7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127bd91906143ac565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614f0b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561294c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61298b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298290614f9d565b60405180910390fd5b600081036129a45761299f838360006137b3565b6136a9565b600a60009054906101000a900460ff1615613067576129c161177c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a2f57506129ff61177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a685750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abb5750600560149054906101000a900460ff16155b1561306657600a60019054906101000a900460ff16612bb557601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b755750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90615009565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d7d57612bd261177c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c5957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb157507f000000000000000000000000fe6a5a61f8878c5029d8c2c94ec44a4e166dddcf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d7c5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e906150c1565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e205750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757600754811115612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190615153565b60405180910390fd5b600954612e7683611353565b82612e81919061486f565b1115612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb9906151bf565b60405180910390fd5b613065565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6a5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fb957600754811115612fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fab90615251565b60405180910390fd5b613064565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130635760095461301683611353565b82613021919061486f565b1115613062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613059906151bf565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000fe6a5a61f8878c5029d8c2c94ec44a4e166dddcf73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130d45750600a60039054906101000a900460ff165b156131a9576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561317657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613173919061486f565b10155b156131a45760155460148190555060165460138190555060145460135461319d919061486f565b6012819055505b613236565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036132355742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600061324130611353565b9050600060085482101590508080156132665750600a60029054906101000a900460ff165b801561327f5750600560149054906101000a900460ff16155b80156132d55750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561332b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133815750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133c5576001600560146101000a81548160ff0219169083151502179055506133a9613a46565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061347b5750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348557600090505b6000811561369857601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e857506000601254115b1561358257613515606461350760125489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050601254601454826135289190614723565b61353291906147ac565b60186000828254613543919061486f565b925050819055506012546013548261355b9190614723565b61356591906147ac565b60176000828254613576919061486f565b92505081905550613674565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135dd57506000600f54115b156136735761360a60646135fc600f5489613c9f90919063ffffffff16565b613d1990919063ffffffff16565b9050600f546011548261361d9190614723565b61362791906147ac565b60186000828254613638919061486f565b92505081905550600f54601054826136509190614723565b61365a91906147ac565b6017600082825461366b919061486f565b925050819055505b5b6000811115613689576136888830836137b3565b5b80866136959190615271565b95505b6136a38888886137b3565b50505050505b505050565b60008383111582906136f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ed91906141c5565b60405180910390fd5b50600083856137059190615271565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381990614e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388890614f0b565b60405180910390fd5b61389c838383613d63565b61390781604051806060016040528060268152602001615671602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ae9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3991906143ac565b60405180910390a3505050565b6000613a5130611353565b90506000601954601754601854613a68919061486f565b613a72919061486f565b9050600080831480613a845750600082145b15613a9157505050613c9d565b6014600854613aa09190614723565b831115613ab9576014600854613ab69190614723565b92505b600060028360185486613acc9190614723565b613ad691906147ac565b613ae091906147ac565b90506000613af78286613d6890919063ffffffff16565b90506000479050613b0782613db2565b6000613b1c8247613d6890919063ffffffff16565b90506000613b4787613b3960175485613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000613b7288613b6460195486613c9f90919063ffffffff16565b613d1990919063ffffffff16565b90506000818385613b839190615271565b613b8d9190615271565b9050600060188190555060006017819055506000601981905550600087118015613bb75750600081115b15613c0457613bc68782613fef565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613bfb939291906152a5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613c4a9061530d565b60006040518083038185875af1925050503d8060008114613c87576040519150601f19603f3d011682016040523d82523d6000602084013e613c8c565b606091505b505080985050505050505050505050505b565b6000808303613cb15760009050613d13565b60008284613cbf9190614723565b9050828482613cce91906147ac565b14613d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0590615394565b60405180910390fd5b809150505b92915050565b6000613d5b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140c9565b905092915050565b505050565b6000613daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ae565b905092915050565b6000600267ffffffffffffffff811115613dcf57613dce6153b4565b5b604051908082528060200260200182016040528015613dfd5781602001602082028036833780820191505090505b5090503081600081518110613e1557613e146153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ede9190615427565b81600181518110613ef257613ef16153e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f57307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb995949392919061554d565b600060405180830381600087803b158015613fd357600080fd5b505af1158015613fe7573d6000803e3d6000fd5b505050505050565b61401a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612601565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161407f969594939291906155a7565b60606040518083038185885af115801561409d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c2919061561d565b5050505050565b60008083118290614110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161410791906141c5565b60405180910390fd5b506000838561411f91906147ac565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561416657808201518184015260208101905061414b565b83811115614175576000848401525b50505050565b6000601f19601f8301169050919050565b60006141978261412c565b6141a18185614137565b93506141b1818560208601614148565b6141ba8161417b565b840191505092915050565b600060208201905081810360008301526141df818461418c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b811461423257600080fd5b50565b6000813590506142448161421e565b92915050565b6000819050919050565b61425d8161424a565b811461426857600080fd5b50565b60008135905061427a81614254565b92915050565b60008060408385031215614297576142966141e7565b5b60006142a585828601614235565b92505060206142b68582860161426b565b9150509250929050565b60008115159050919050565b6142d5816142c0565b82525050565b60006020820190506142f060008301846142cc565b92915050565b60006020828403121561430c5761430b6141e7565b5b600061431a84828501614235565b91505092915050565b6000819050919050565b600061434861434361433e846141ec565b614323565b6141ec565b9050919050565b600061435a8261432d565b9050919050565b600061436c8261434f565b9050919050565b61437c81614361565b82525050565b60006020820190506143976000830184614373565b92915050565b6143a68161424a565b82525050565b60006020820190506143c1600083018461439d565b92915050565b6000602082840312156143dd576143dc6141e7565b5b60006143eb8482850161426b565b91505092915050565b60008060006060848603121561440d5761440c6141e7565b5b600061441b86828701614235565b935050602061442c86828701614235565b925050604061443d8682870161426b565b9150509250925092565b614450816142c0565b811461445b57600080fd5b50565b60008135905061446d81614447565b92915050565b6000806040838503121561448a576144896141e7565b5b600061449885828601614235565b92505060206144a98582860161445e565b9150509250929050565b600060ff82169050919050565b6144c9816144b3565b82525050565b60006020820190506144e460008301846144c0565b92915050565b6144f38161420c565b82525050565b600060208201905061450e60008301846144ea565b92915050565b6000806040838503121561452b5761452a6141e7565b5b60006145398582860161426b565b925050602061454a8582860161426b565b9150509250929050565b60006020828403121561456a576145696141e7565b5b60006145788482850161445e565b91505092915050565b60008060408385031215614598576145976141e7565b5b60006145a685828601614235565b92505060206145b785828601614235565b9150509250929050565b600080600080608085870312156145db576145da6141e7565b5b60006145e98782880161426b565b94505060206145fa8782880161426b565b935050604061460b8782880161426b565b925050606061461c8782880161426b565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061466f57607f821691505b60208210810361468257614681614628565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146be602083614137565b91506146c982614688565b602082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061472e8261424a565b91506147398361424a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614772576147716146f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147b78261424a565b91506147c28361424a565b9250826147d2576147d161477d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614839602f83614137565b9150614844826147dd565b604082019050919050565b600060208201905081810360008301526148688161482c565b9050919050565b600061487a8261424a565b91506148858361424a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ba576148b96146f4565b5b828201905092915050565b7f57616974656420746f6f206c6f6e6720746f20626c61636b6c69737400000000600082015250565b60006148fb601c83614137565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614967601d83614137565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149f9603983614137565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a8b602483614137565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b1d603583614137565b9150614b2882614ac1565b604082019050919050565b60006020820190508181036000830152614b4c81614b10565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614baf603483614137565b9150614bba82614b53565b604082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c41602683614137565b9150614c4c82614be5565b604082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cad601b83614137565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602483614137565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd1602283614137565b9150614ddc82614d75565b604082019050919050565b60006020820190508181036000830152614e0081614dc4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e63602583614137565b9150614e6e82614e07565b604082019050919050565b60006020820190508181036000830152614e9281614e56565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef5602383614137565b9150614f0082614e99565b604082019050919050565b60006020820190508181036000830152614f2481614ee8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614f87603183614137565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ff3601683614137565b9150614ffe82614fbd565b602082019050919050565b6000602082019050818103600083015261502281614fe6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006150ab604983614137565b91506150b682615029565b606082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061513d603583614137565b9150615148826150e1565b604082019050919050565b6000602082019050818103600083015261516c81615130565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006151a9601383614137565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061523b603683614137565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b600061527c8261424a565b91506152878361424a565b92508282101561529a576152996146f4565b5b828203905092915050565b60006060820190506152ba600083018661439d565b6152c7602083018561439d565b6152d4604083018461439d565b949350505050565b600081905092915050565b50565b60006152f76000836152dc565b9150615302826152e7565b600082019050919050565b6000615318826152ea565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061537e602183614137565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154218161421e565b92915050565b60006020828403121561543d5761543c6141e7565b5b600061544b84828501615412565b91505092915050565b6000819050919050565b600061547961547461546f84615454565b614323565b61424a565b9050919050565b6154898161545e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154c48161420c565b82525050565b60006154d683836154bb565b60208301905092915050565b6000602082019050919050565b60006154fa8261548f565b615504818561549a565b935061550f836154ab565b8060005b8381101561554057815161552788826154ca565b9750615532836154e2565b925050600181019050615513565b5085935050505092915050565b600060a082019050615562600083018861439d565b61556f6020830187615480565b818103604083015261558181866154ef565b905061559060608301856144ea565b61559d608083018461439d565b9695505050505050565b600060c0820190506155bc60008301896144ea565b6155c9602083018861439d565b6155d66040830187615480565b6155e36060830186615480565b6155f060808301856144ea565b6155fd60a083018461439d565b979650505050505050565b60008151905061561781614254565b92915050565b600080600060608486031215615636576156356141e7565b5b600061564486828701615608565b935050602061565586828701615608565b925050604061566686828701615608565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122053e7b1628a4832cdf5ea8060e676d08728ba5af60ee8f156d5aa9e59377da12764736f6c634300080d0033

Deployed Bytecode Sourcemap

28979:16033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9251:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30539:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29061:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8200:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30253:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30173;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34900:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9903:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36699:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8041:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10668:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29119:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29352:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37579:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30130:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35718:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30019:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29432:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8372:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21579:148;;;;;;;;;;;;;:::i;:::-;;34006:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35367:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30054:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33805:148;;;;;;;;;;;;;:::i;:::-;;20935:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35608:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7297:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36925:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30293:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34331:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11390:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29470:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29945:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8713:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30216:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30762:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29392:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37377:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36508:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35143:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29862:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29236:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34505:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29911:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8952:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29278:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36025:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34188:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29979:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21883:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30089:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29318:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7077:100;7131:13;7164:5;7157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7077:100;:::o;9251:169::-;9334:4;9351:39;9360:12;:10;:12::i;:::-;9374:7;9383:6;9351:8;:39::i;:::-;9408:4;9401:11;;9251:169;;;;:::o;30539:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29061:51::-;;;:::o;8200:108::-;8261:7;8288:12;;8281:19;;8200:108;:::o;30253:33::-;;;;:::o;30173:::-;;;;:::o;34900:234::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35019:4:::1;35013;35009:1;34993:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34992:31;;;;:::i;:::-;34982:6;:41;;34974:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35119:6;35109;:17;;;;:::i;:::-;35086:20;:40;;;;34900:234:::0;:::o;9903:355::-;10043:4;10060:36;10070:6;10078:9;10089:6;10060:9;:36::i;:::-;10107:121;10116:6;10124:12;:10;:12::i;:::-;10138:89;10176:6;10138:89;;;;;;;;;;;;;;;;;:11;:19;10150:6;10138:19;;;;;;;;;;;;;;;:33;10158:12;:10;:12::i;:::-;10138:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10107:8;:121::i;:::-;10246:4;10239:11;;9903:355;;;;;:::o;36699:217::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36827:2:::1;36814:10;;:15;;;;:::i;:::-;36799:12;:30;36791:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36895:13;36873:10;:19;36884:7;36873:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;36699:217:::0;;:::o;8041:93::-;8099:5;8124:2;8117:9;;8041:93;:::o;10668:218::-;10756:4;10773:83;10782:12;:10;:12::i;:::-;10796:7;10805:50;10844:10;10805:11;:25;10817:12;:10;:12::i;:::-;10805:25;;;;;;;;;;;;;;;:34;10831:7;10805:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10773:8;:83::i;:::-;10874:4;10867:11;;10668:218;;;;:::o;29119:38::-;;;:::o;29352:33::-;;;;;;;;;;;;;:::o;37579:125::-;37644:4;37668:19;:28;37688:7;37668:28;;;;;;;;;;;;;;;;;;;;;;;;;37661:35;;37579:125;;;:::o;30130:36::-;;;;:::o;35718:298::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35829:10:::1;35814:12;:25;;;;35868:13;35850:15;:31;;;;35922:15;;35907:12;;:30;;;;:::i;:::-;35892:12;:45;;;;35972:2;35956:12;;:18;;35948:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35718:298:::0;;:::o;30019:28::-;;;;:::o;29432:31::-;;;;;;;;;;;;;:::o;8372:127::-;8446:7;8473:9;:18;8483:7;8473:18;;;;;;;;;;;;;;;;8466:25;;8372:127;;;:::o;21579:148::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21686:1:::1;21649:40;;21670:6;;;;;;;;;;;21649:40;;;;;;;;;;;;21717:1;21700:6;;:19;;;;;;;;;;;;;;;;;;21579:148::o:0;34006:120::-;34058:4;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34091:5:::1;34074:14;;:22;;;;;;;;;;;;;;;;;;34114:4;34107:11;;34006:120:::0;:::o;35367:144::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35499:4:::1;35457:31;:39;35489:6;35457:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35367:144:::0;;:::o;30054:28::-;;;;:::o;33805:148::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33876:4:::1;33860:13;;:20;;;;;;;;;;;;;;;;;;33905:4;33891:11;;:18;;;;;;;;;;;;;;;;;;33933:12;33920:10;:25;;;;33805:148::o:0;20935:79::-;20973:7;21000:6;;;;;;;;;;;20993:13;;20935:79;:::o;35608:101::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35694:7:::1;35680:11;;:21;;;;;;;;;;;;;;;;;;35608:101:::0;:::o;7297:104::-;7353:13;7386:7;7379:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7297:104;:::o;36925:245::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37032:13:::1;37024:21;;:4;:21;;::::0;37016:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37121:41;37150:4;37156:5;37121:28;:41::i;:::-;36925:245:::0;;:::o;30293:27::-;;;;:::o;34331:102::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34420:5:::1;34399:18;;:26;;;;;;;;;;;;;;;;;;34331:102:::0;:::o;11390:269::-;11483:4;11500:129;11509:12;:10;:12::i;:::-;11523:7;11532:96;11571:15;11532:96;;;;;;;;;;;;;;;;;:11;:25;11544:12;:10;:12::i;:::-;11532:25;;;;;;;;;;;;;;;:34;11558:7;11532:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11500:8;:129::i;:::-;11647:4;11640:11;;11390:269;;;;:::o;29470:37::-;;;;;;;;;;;;;:::o;29945:27::-;;;;:::o;8713:175::-;8799:4;8816:42;8826:12;:10;:12::i;:::-;8840:9;8851:6;8816:9;:42::i;:::-;8876:4;8869:11;;8713:175;;;;:::o;30216:30::-;;;;:::o;30762:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29392:33::-;;;;;;;;;;;;;:::o;37377:187::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37502:12:::1;;;;;;;;;;;37465:50;;37485:15;37465:50;;;;;;;;;;;;37541:15;37526:12;;:30;;;;;;;;;;;;;;;;;;37377:187:::0;:::o;36508:182::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36624:8:::1;36593:19;:28;36613:7;36593:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36664:7;36648:34;;;36673:8;36648:34;;;;;;:::i;:::-;;;;;;;;36508:182:::0;;:::o;35143:215::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35265:4:::1;35259;35255:1;35239:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35238:31;;;;:::i;:::-;35228:6;:41;;35220:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35343:6;35333;:17;;;;:::i;:::-;35321:9;:29;;;;35143:215:::0;:::o;29862:39::-;;;;;;;;;;;;;:::o;29236:35::-;;;;:::o;34505:386::-;34586:4;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34643:6:::1;34639:1;34623:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34610:9;:39;;34602:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:4;34755:1;34739:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34726:9;:37;;34718:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34852:9;34831:18;:30;;;;34879:4;34872:11;;34505:386:::0;;;:::o;29911:27::-;;;;:::o;8952:151::-;9041:7;9068:11;:18;9080:5;9068:18;;;;;;;;;;;;;;;:27;9087:7;9068:27;;;;;;;;;;;;;;;;9061:34;;8952:151;;;;:::o;29278:33::-;;;;:::o;36025:474::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36199:10:::1;36183:13;:26;;;;36239:13;36220:16;:32;;;;36287:22;36263:21;:46;;;;36341:19;36320:18;:40;;;;36403:16;;36387:13;;:32;;;;:::i;:::-;36371:13;:48;;;;36455:2;36438:13;;:19;;36430:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36025:474:::0;;;;:::o;34188:134::-;34248:4;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34287:5:::1;34264:20;;:28;;;;;;;;;;;;;;;;;;34310:4;34303:11;;34188:134:::0;:::o;29979:30::-;;;;:::o;21883:244::-;21158:12;:10;:12::i;:::-;21148:22;;:6;;;;;;;;;;;:22;;;21140:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21992:1:::1;21972:22;;:8;:22;;::::0;21964:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22082:8;22053:38;;22074:6;;;;;;;;;;;22053:38;;;;;;;;;;;;22111:8;22102:6;;:17;;;;;;;;;;;;;;;;;;21883:244:::0;:::o;30089:31::-;;;;:::o;29318:24::-;;;;:::o;15967:182::-;16025:7;16045:9;16061:1;16057;:5;;;;:::i;:::-;16045:17;;16086:1;16081;:6;;16073:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16140:1;16133:8;;;15967:182;;;;:::o;281:98::-;334:7;361:10;354:17;;281:98;:::o;14586:381::-;14739:1;14722:19;;:5;:19;;;14714:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14820:1;14801:21;;:7;:21;;;14793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14905:6;14875:11;:18;14887:5;14875:18;;;;;;;;;;;;;;;:27;14894:7;14875:27;;;;;;;;;;;;;;;:36;;;;14943:7;14927:32;;14936:5;14927:32;;;14952:6;14927:32;;;;;;:::i;:::-;;;;;;;;14586:381;;;:::o;37764:4621::-;37912:1;37896:18;;:4;:18;;;37888:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37989:1;37975:16;;:2;:16;;;37967:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38051:10;:14;38062:2;38051:14;;;;;;;;;;;;;;;;;;;;;;;;;38050:15;:36;;;;;38070:10;:16;38081:4;38070:16;;;;;;;;;;;;;;;;;;;;;;;;;38069:17;38050:36;38042:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38165:1;38155:6;:11;38152:92;;38183:28;38199:4;38205:2;38209:1;38183:15;:28::i;:::-;38226:7;;38152:92;38260:14;;;;;;;;;;;38257:1811;;;38320:7;:5;:7::i;:::-;38312:15;;:4;:15;;;;:49;;;;;38354:7;:5;:7::i;:::-;38348:13;;:2;:13;;;;38312:49;:86;;;;;38396:1;38382:16;;:2;:16;;;;38312:86;:128;;;;;38433:6;38419:21;;:2;:21;;;;38312:128;:158;;;;;38462:8;;;;;;;;;;;38461:9;38312:158;38290:1767;;;38508:13;;;;;;;;;;;38504:148;;38553:19;:25;38573:4;38553:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38582:19;:23;38602:2;38582:23;;;;;;;;;;;;;;;;;;;;;;;;;38553:52;38545:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38504:148;38811:20;;;;;;;;;;;38807:423;;;38865:7;:5;:7::i;:::-;38859:13;;:2;:13;;;;:47;;;;;38890:15;38876:30;;:2;:30;;;;38859:47;:79;;;;;38924:13;38910:28;;:2;:28;;;;38859:79;38855:356;;;39016:12;38974:28;:39;39003:9;38974:39;;;;;;;;;;;;;;;;:54;38966:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39175:12;39133:28;:39;39162:9;39133:39;;;;;;;;;;;;;;;:54;;;;38855:356;38807:423;39283:25;:31;39309:4;39283:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39319:31;:35;39351:2;39319:35;;;;;;;;;;;;;;;;;;;;;;;;;39318:36;39283:71;39279:763;;;39401:20;;39391:6;:30;;39383:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39540:9;;39523:13;39533:2;39523:9;:13::i;:::-;39514:6;:22;;;;:::i;:::-;:35;;39506:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39279:763;;;39652:25;:29;39678:2;39652:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39686:31;:37;39718:4;39686:37;;;;;;;;;;;;;;;;;;;;;;;;;39685:38;39652:71;39648:394;;;39770:20;;39760:6;:30;;39752:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39648:394;;;39896:31;:35;39928:2;39896:35;;;;;;;;;;;;;;;;;;;;;;;;;39892:150;;39989:9;;39972:13;39982:2;39972:9;:13::i;:::-;39963:6;:22;;;;:::i;:::-;:35;;39955:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39892:150;39648:394;39279:763;38290:1767;38257:1811;40110:10;40131:13;40123:21;;:4;:21;;;40110:34;;40160:5;40159:6;:28;;;;;40169:18;;;;;;;;;;;40159:28;40155:535;;;40242:1;40208:24;:30;40233:4;40208:30;;;;;;;;;;;;;;;;:35;;:120;;;;;40312:15;40299:8;40265:24;:30;40290:4;40265:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40208:120;40204:322;;;40369:21;;40350:16;:40;;;;40425:18;;40409:13;:34;;;;40494:16;;40478:13;;:32;;;;:::i;:::-;40462:13;:48;;;;40204:322;40155:535;;;40595:1;40563:24;:28;40588:2;40563:28;;;;;;;;;;;;;;;;:33;40559:120;;40648:15;40617:24;:28;40642:2;40617:28;;;;;;;;;;;;;;;:46;;;;40559:120;40155:535;40703:28;40734:24;40752:4;40734:9;:24::i;:::-;40703:55;;40772:12;40811:18;;40787:20;:42;;40772:57;;40861:7;:35;;;;;40885:11;;;;;;;;;;;40861:35;:61;;;;;40914:8;;;;;;;;;;;40913:9;40861:61;:110;;;;;40940:25;:31;40966:4;40940:31;;;;;;;;;;;;;;;;;;;;;;;;;40939:32;40861:110;:153;;;;;40989:19;:25;41009:4;40989:25;;;;;;;;;;;;;;;;;;;;;;;;;40988:26;40861:153;:194;;;;;41032:19;:23;41052:2;41032:23;;;;;;;;;;;;;;;;;;;;;;;;;41031:24;40861:194;40843:328;;;41093:4;41082:8;;:15;;;;;;;;;;;;;;;;;;41115:10;:8;:10::i;:::-;41154:5;41143:8;;:16;;;;;;;;;;;;;;;;;;40843:328;41184:12;41200:8;;;;;;;;;;;41199:9;41184:24;;41310:19;:25;41330:4;41310:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41339:19;:23;41359:2;41339:23;;;;;;;;;;;;;;;;;;;;;;;;;41310:52;41307:99;;;41389:5;41379:15;;41307:99;41419:12;41523:7;41520:811;;;41574:25;:29;41600:2;41574:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41623:1;41607:13;;:17;41574:50;41570:608;;;41651:34;41681:3;41651:25;41662:13;;41651:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41644:41;;41752:13;;41733:16;;41726:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41704:18;;:61;;;;;;;:::i;:::-;;;;;;;;41826:13;;41810;;41803:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41784:15;;:55;;;;;;;:::i;:::-;;;;;;;;41570:608;;;41900:25;:31;41926:4;41900:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41950:1;41935:12;;:16;41900:51;41897:281;;;41979:33;42008:3;41979:24;41990:12;;41979:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41972:40;;42078:12;;42060:15;;42053:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42031:18;;:59;;;;;;;:::i;:::-;;;;;;;;42150:12;;42135;;42128:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;42109:15;;:53;;;;;;;:::i;:::-;;;;;;;;41897:281;41570:608;42205:1;42198:4;:8;42195:93;;;42230:42;42246:4;42260;42267;42230:15;:42::i;:::-;42195:93;42315:4;42305:14;;;;;:::i;:::-;;;41520:811;42344:33;42360:4;42366:2;42370:6;42344:15;:33::i;:::-;37877:4508;;;;;37764:4621;;;;:::o;16873:193::-;16959:7;16992:1;16987;:6;;16995:12;16979:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17019:9;17035:1;17031;:5;;;;:::i;:::-;17019:17;;17057:1;17050:8;;;16873:193;;;;;:::o;37179:189::-;37296:5;37262:25;:31;37288:4;37262:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37354:5;37320:40;;37348:4;37320:40;;;;;;;;;;;;37179:189;;:::o;12150:575::-;12308:1;12290:20;;:6;:20;;;12282:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12392:1;12371:23;;:9;:23;;;12363:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12448:47;12469:6;12477:9;12488:6;12448:20;:47::i;:::-;12529:71;12551:6;12529:71;;;;;;;;;;;;;;;;;:9;:17;12539:6;12529:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12509:9;:17;12519:6;12509:17;;;;;;;;;;;;;;;:91;;;;12634:32;12659:6;12634:9;:20;12644:9;12634:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12611:9;:20;12621:9;12611:20;;;;;;;;;;;;;;;:55;;;;12699:9;12682:35;;12691:6;12682:35;;;12710:6;12682:35;;;;;;:::i;:::-;;;;;;;;12150:575;;;:::o;43529:1478::-;43568:23;43594:24;43612:4;43594:9;:24::i;:::-;43568:50;;43629:25;43696:12;;43678:15;;43657:18;;:36;;;;:::i;:::-;:51;;;;:::i;:::-;43629:79;;43719:12;43767:1;43748:15;:20;:46;;;;43793:1;43772:17;:22;43748:46;43745:60;;;43797:7;;;;;43745:60;43860:2;43839:18;;:23;;;;:::i;:::-;43821:15;:41;43818:111;;;43915:2;43894:18;;:23;;;;:::i;:::-;43876:41;;43818:111;43991:23;44076:1;44056:17;44035:18;;44017:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43991:86;;44088:26;44117:36;44137:15;44117;:19;;:36;;;;:::i;:::-;44088:65;;44167:25;44195:21;44167:49;;44230:36;44247:18;44230:16;:36::i;:::-;44281:18;44302:44;44328:17;44302:21;:25;;:44;;;;:::i;:::-;44281:65;;44360:20;44383:54;44419:17;44383:31;44398:15;;44383:10;:14;;:31;;;;:::i;:::-;:35;;:54;;;;:::i;:::-;44360:77;;44448:17;44468:51;44501:17;44468:28;44483:12;;44468:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44448:71;;44530:23;44584:9;44569:12;44556:10;:25;;;;:::i;:::-;:37;;;;:::i;:::-;44530:63;;44631:1;44610:18;:22;;;;44661:1;44643:15;:19;;;;44688:1;44673:12;:16;;;;44724:1;44706:15;:19;:42;;;;;44747:1;44729:15;:19;44706:42;44703:210;;;44764:46;44777:15;44794;44764:12;:46::i;:::-;44830:71;44845:18;44865:15;44882:18;;44830:71;;;;;;;;:::i;:::-;;;;;;;;44703:210;44947:12;;;;;;;;;;;44939:26;;44973:21;44939:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44926:73;;;;;43557:1450;;;;;;;;;;43529:1478;:::o;17326:473::-;17384:7;17634:1;17629;:6;17625:47;;17659:1;17652:8;;;;17625:47;17685:9;17701:1;17697;:5;;;;:::i;:::-;17685:17;;17730:1;17725;17721;:5;;;;:::i;:::-;:10;17713:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17790:1;17783:8;;;17326:473;;;;;:::o;18276:132::-;18334:7;18361:39;18365:1;18368;18361:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18354:46;;18276:132;;;;:::o;15571:125::-;;;;:::o;16433:136::-;16491:7;16518:43;16522:1;16525;16518:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16511:50;;16433:136;;;;:::o;42394:597::-;42523:21;42561:1;42547:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42523:40;;42592:4;42574;42579:1;42574:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42618:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42608:4;42613:1;42608:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42654:62;42671:4;42686:15;42704:11;42654:8;:62::i;:::-;42756:15;:66;;;42837:11;42863:1;42907:4;42934;42954:15;42756:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42449:542;42394:597;:::o;43000:520::-;43148:62;43165:4;43180:15;43198:11;43148:8;:62::i;:::-;43254:15;:31;;;43293:9;43326:4;43346:11;43372:1;43415;43466:4;43486:15;43254:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43000:520;;:::o;18905:279::-;18991:7;19023:1;19019;:5;19026:12;19011:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19050:9;19066:1;19062;:5;;;;:::i;:::-;19050:17;;19175:1;19168:8;;;18905: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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:116::-;6189:21;6204:5;6189:21;:::i;:::-;6182:5;6179:32;6169:60;;6225:1;6222;6215:12;6169:60;6119:116;:::o;6241:133::-;6284:5;6322:6;6309:20;6300:29;;6338:30;6362:5;6338:30;:::i;:::-;6241:133;;;;:::o;6380:468::-;6445:6;6453;6502:2;6490:9;6481:7;6477:23;6473:32;6470:119;;;6508:79;;:::i;:::-;6470:119;6628:1;6653:53;6698:7;6689:6;6678:9;6674:22;6653:53;:::i;:::-;6643:63;;6599:117;6755:2;6781:50;6823:7;6814:6;6803:9;6799:22;6781:50;:::i;:::-;6771:60;;6726:115;6380:468;;;;;:::o;6854:86::-;6889:7;6929:4;6922:5;6918:16;6907:27;;6854:86;;;:::o;6946:112::-;7029:22;7045:5;7029:22;:::i;:::-;7024:3;7017:35;6946:112;;:::o;7064:214::-;7153:4;7191:2;7180:9;7176:18;7168:26;;7204:67;7268:1;7257:9;7253:17;7244:6;7204:67;:::i;:::-;7064:214;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:765::-;9011:6;9019;9027;9035;9084:3;9072:9;9063:7;9059:23;9055:33;9052:120;;;9091:79;;:::i;:::-;9052:120;9211:1;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9182:117;9338:2;9364:53;9409:7;9400:6;9389:9;9385:22;9364:53;:::i;:::-;9354:63;;9309:118;9466:2;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9437:118;9594:2;9620:53;9665:7;9656:6;9645:9;9641:22;9620:53;:::i;:::-;9610:63;;9565:118;8925:765;;;;;;;:::o;9696:180::-;9744:77;9741:1;9734:88;9841:4;9838:1;9831:15;9865:4;9862:1;9855:15;9882:320;9926:6;9963:1;9957:4;9953:12;9943:22;;10010:1;10004:4;10000:12;10031:18;10021:81;;10087:4;10079:6;10075:17;10065:27;;10021:81;10149:2;10141:6;10138:14;10118:18;10115:38;10112:84;;10168:18;;:::i;:::-;10112:84;9933:269;9882:320;;;:::o;10208:182::-;10348:34;10344:1;10336:6;10332:14;10325:58;10208:182;:::o;10396:366::-;10538:3;10559:67;10623:2;10618:3;10559:67;:::i;:::-;10552:74;;10635:93;10724:3;10635:93;:::i;:::-;10753:2;10748:3;10744:12;10737:19;;10396:366;;;:::o;10768:419::-;10934:4;10972:2;10961:9;10957:18;10949:26;;11021:9;11015:4;11011:20;11007:1;10996:9;10992:17;10985:47;11049:131;11175:4;11049:131;:::i;:::-;11041:139;;10768:419;;;:::o;11193:180::-;11241:77;11238:1;11231:88;11338:4;11335:1;11328:15;11362:4;11359:1;11352:15;11379:348;11419:7;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11476:20;11494:1;11476:20;:::i;:::-;11471:25;;11664:1;11596:66;11592:74;11589:1;11586:81;11581:1;11574:9;11567:17;11563:105;11560:131;;;11671:18;;:::i;:::-;11560:131;11719:1;11716;11712:9;11701:20;;11379:348;;;;:::o;11733:180::-;11781:77;11778:1;11771:88;11878:4;11875:1;11868:15;11902:4;11899:1;11892:15;11919:185;11959:1;11976:20;11994:1;11976:20;:::i;:::-;11971:25;;12010:20;12028:1;12010:20;:::i;:::-;12005:25;;12049:1;12039:35;;12054:18;;:::i;:::-;12039:35;12096:1;12093;12089:9;12084:14;;11919:185;;;;:::o;12110:234::-;12250:34;12246:1;12238:6;12234:14;12227:58;12319:17;12314:2;12306:6;12302:15;12295:42;12110:234;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:419::-;12888:4;12926:2;12915:9;12911:18;12903:26;;12975:9;12969:4;12965:20;12961:1;12950:9;12946:17;12939:47;13003:131;13129:4;13003:131;:::i;:::-;12995:139;;12722:419;;;:::o;13147:305::-;13187:3;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13240:20;13258:1;13240:20;:::i;:::-;13235:25;;13394:1;13326:66;13322:74;13319:1;13316:81;13313:107;;;13400:18;;:::i;:::-;13313:107;13444:1;13441;13437:9;13430:16;;13147:305;;;;:::o;13458:178::-;13598:30;13594:1;13586:6;13582:14;13575:54;13458:178;:::o;13642:366::-;13784:3;13805:67;13869:2;13864:3;13805:67;:::i;:::-;13798:74;;13881:93;13970:3;13881:93;:::i;:::-;13999:2;13994:3;13990:12;13983:19;;13642:366;;;:::o;14014:419::-;14180:4;14218:2;14207:9;14203:18;14195:26;;14267:9;14261:4;14257:20;14253:1;14242:9;14238:17;14231:47;14295:131;14421:4;14295:131;:::i;:::-;14287:139;;14014:419;;;:::o;14439:179::-;14579:31;14575:1;14567:6;14563:14;14556:55;14439:179;:::o;14624:366::-;14766:3;14787:67;14851:2;14846:3;14787:67;:::i;:::-;14780:74;;14863:93;14952:3;14863:93;:::i;:::-;14981:2;14976:3;14972:12;14965:19;;14624:366;;;:::o;14996:419::-;15162:4;15200:2;15189:9;15185:18;15177:26;;15249:9;15243:4;15239:20;15235:1;15224:9;15220:17;15213:47;15277:131;15403:4;15277:131;:::i;:::-;15269:139;;14996:419;;;:::o;15421:244::-;15561:34;15557:1;15549:6;15545:14;15538:58;15630:27;15625:2;15617:6;15613:15;15606:52;15421:244;:::o;15671:366::-;15813:3;15834:67;15898:2;15893:3;15834:67;:::i;:::-;15827:74;;15910:93;15999:3;15910:93;:::i;:::-;16028:2;16023:3;16019:12;16012:19;;15671:366;;;:::o;16043:419::-;16209:4;16247:2;16236:9;16232:18;16224:26;;16296:9;16290:4;16286:20;16282:1;16271:9;16267:17;16260:47;16324:131;16450:4;16324:131;:::i;:::-;16316:139;;16043:419;;;:::o;16468:223::-;16608:34;16604:1;16596:6;16592:14;16585:58;16677:6;16672:2;16664:6;16660:15;16653:31;16468:223;:::o;16697:366::-;16839:3;16860:67;16924:2;16919:3;16860:67;:::i;:::-;16853:74;;16936:93;17025:3;16936:93;:::i;:::-;17054:2;17049:3;17045:12;17038:19;;16697:366;;;:::o;17069:419::-;17235:4;17273:2;17262:9;17258:18;17250:26;;17322:9;17316:4;17312:20;17308:1;17297:9;17293:17;17286:47;17350:131;17476:4;17350:131;:::i;:::-;17342:139;;17069:419;;;:::o;17494:240::-;17634:34;17630:1;17622:6;17618:14;17611:58;17703:23;17698:2;17690:6;17686:15;17679:48;17494:240;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18112:419;;;:::o;18537:239::-;18677:34;18673:1;18665:6;18661:14;18654:58;18746:22;18741:2;18733:6;18729:15;18722:47;18537:239;:::o;18782:366::-;18924:3;18945:67;19009:2;19004:3;18945:67;:::i;:::-;18938:74;;19021:93;19110:3;19021:93;:::i;:::-;19139:2;19134:3;19130:12;19123:19;;18782:366;;;:::o;19154:419::-;19320:4;19358:2;19347:9;19343:18;19335:26;;19407:9;19401:4;19397:20;19393:1;19382:9;19378:17;19371:47;19435:131;19561:4;19435:131;:::i;:::-;19427:139;;19154:419;;;:::o;19579:225::-;19719:34;19715:1;19707:6;19703:14;19696:58;19788:8;19783:2;19775:6;19771:15;19764:33;19579:225;:::o;19810:366::-;19952:3;19973:67;20037:2;20032:3;19973:67;:::i;:::-;19966:74;;20049:93;20138:3;20049:93;:::i;:::-;20167:2;20162:3;20158:12;20151:19;;19810:366;;;:::o;20182:419::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20435:9;20429:4;20425:20;20421:1;20410:9;20406:17;20399:47;20463:131;20589:4;20463:131;:::i;:::-;20455:139;;20182:419;;;:::o;20607:177::-;20747:29;20743:1;20735:6;20731:14;20724:53;20607:177;:::o;20790:366::-;20932:3;20953:67;21017:2;21012:3;20953:67;:::i;:::-;20946:74;;21029:93;21118:3;21029:93;:::i;:::-;21147:2;21142:3;21138:12;21131:19;;20790:366;;;:::o;21162:419::-;21328:4;21366:2;21355:9;21351:18;21343:26;;21415:9;21409:4;21405:20;21401:1;21390:9;21386:17;21379:47;21443:131;21569:4;21443:131;:::i;:::-;21435:139;;21162:419;;;:::o;21587:223::-;21727:34;21723:1;21715:6;21711:14;21704:58;21796:6;21791:2;21783:6;21779:15;21772:31;21587:223;:::o;21816:366::-;21958:3;21979:67;22043:2;22038:3;21979:67;:::i;:::-;21972:74;;22055:93;22144:3;22055:93;:::i;:::-;22173:2;22168:3;22164:12;22157:19;;21816:366;;;:::o;22188:419::-;22354:4;22392:2;22381:9;22377:18;22369:26;;22441:9;22435:4;22431:20;22427:1;22416:9;22412:17;22405:47;22469:131;22595:4;22469:131;:::i;:::-;22461:139;;22188:419;;;:::o;22613:221::-;22753:34;22749:1;22741:6;22737:14;22730:58;22822:4;22817:2;22809:6;22805:15;22798:29;22613:221;:::o;22840:366::-;22982:3;23003:67;23067:2;23062:3;23003:67;:::i;:::-;22996:74;;23079:93;23168:3;23079:93;:::i;:::-;23197:2;23192:3;23188:12;23181:19;;22840:366;;;:::o;23212:419::-;23378:4;23416:2;23405:9;23401:18;23393:26;;23465:9;23459:4;23455:20;23451:1;23440:9;23436:17;23429:47;23493:131;23619:4;23493:131;:::i;:::-;23485:139;;23212:419;;;:::o;23637:224::-;23777:34;23773:1;23765:6;23761:14;23754:58;23846:7;23841:2;23833:6;23829:15;23822:32;23637:224;:::o;23867:366::-;24009:3;24030:67;24094:2;24089:3;24030:67;:::i;:::-;24023:74;;24106:93;24195:3;24106:93;:::i;:::-;24224:2;24219:3;24215:12;24208:19;;23867:366;;;:::o;24239:419::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:131;24646:4;24520:131;:::i;:::-;24512:139;;24239:419;;;:::o;24664:222::-;24804:34;24800:1;24792:6;24788:14;24781:58;24873:5;24868:2;24860:6;24856:15;24849:30;24664:222;:::o;24892:366::-;25034:3;25055:67;25119:2;25114:3;25055:67;:::i;:::-;25048:74;;25131:93;25220:3;25131:93;:::i;:::-;25249:2;25244:3;25240:12;25233:19;;24892:366;;;:::o;25264:419::-;25430:4;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25264:419;;;:::o;25689:236::-;25829:34;25825:1;25817:6;25813:14;25806:58;25898:19;25893:2;25885:6;25881:15;25874:44;25689:236;:::o;25931:366::-;26073:3;26094:67;26158:2;26153:3;26094:67;:::i;:::-;26087:74;;26170:93;26259:3;26170:93;:::i;:::-;26288:2;26283:3;26279:12;26272:19;;25931:366;;;:::o;26303:419::-;26469:4;26507:2;26496:9;26492:18;26484:26;;26556:9;26550:4;26546:20;26542:1;26531:9;26527:17;26520:47;26584:131;26710:4;26584:131;:::i;:::-;26576:139;;26303:419;;;:::o;26728:172::-;26868:24;26864:1;26856:6;26852:14;26845:48;26728:172;:::o;26906:366::-;27048:3;27069:67;27133:2;27128:3;27069:67;:::i;:::-;27062:74;;27145:93;27234:3;27145:93;:::i;:::-;27263:2;27258:3;27254:12;27247:19;;26906:366;;;:::o;27278:419::-;27444:4;27482:2;27471:9;27467:18;27459:26;;27531:9;27525:4;27521:20;27517:1;27506:9;27502:17;27495:47;27559:131;27685:4;27559:131;:::i;:::-;27551:139;;27278:419;;;:::o;27703:297::-;27843:34;27839:1;27831:6;27827:14;27820:58;27912:34;27907:2;27899:6;27895:15;27888:59;27981:11;27976:2;27968:6;27964:15;27957:36;27703:297;:::o;28006:366::-;28148:3;28169:67;28233:2;28228:3;28169:67;:::i;:::-;28162:74;;28245:93;28334:3;28245:93;:::i;:::-;28363:2;28358:3;28354:12;28347:19;;28006:366;;;:::o;28378:419::-;28544:4;28582:2;28571:9;28567:18;28559:26;;28631:9;28625:4;28621:20;28617:1;28606:9;28602:17;28595:47;28659:131;28785:4;28659:131;:::i;:::-;28651:139;;28378:419;;;:::o;28803:240::-;28943:34;28939:1;28931:6;28927:14;28920:58;29012:23;29007:2;28999:6;28995:15;28988:48;28803:240;:::o;29049:366::-;29191:3;29212:67;29276:2;29271:3;29212:67;:::i;:::-;29205:74;;29288:93;29377:3;29288:93;:::i;:::-;29406:2;29401:3;29397:12;29390:19;;29049:366;;;:::o;29421:419::-;29587:4;29625:2;29614:9;29610:18;29602:26;;29674:9;29668:4;29664:20;29660:1;29649:9;29645:17;29638:47;29702:131;29828:4;29702:131;:::i;:::-;29694:139;;29421:419;;;:::o;29846:169::-;29986:21;29982:1;29974:6;29970:14;29963:45;29846:169;:::o;30021:366::-;30163:3;30184:67;30248:2;30243:3;30184:67;:::i;:::-;30177:74;;30260:93;30349:3;30260:93;:::i;:::-;30378:2;30373:3;30369:12;30362:19;;30021:366;;;:::o;30393:419::-;30559:4;30597:2;30586:9;30582:18;30574:26;;30646:9;30640:4;30636:20;30632:1;30621:9;30617:17;30610:47;30674:131;30800:4;30674:131;:::i;:::-;30666:139;;30393:419;;;:::o;30818:241::-;30958:34;30954:1;30946:6;30942:14;30935:58;31027:24;31022:2;31014:6;31010:15;31003:49;30818:241;:::o;31065:366::-;31207:3;31228:67;31292:2;31287:3;31228:67;:::i;:::-;31221:74;;31304:93;31393:3;31304:93;:::i;:::-;31422:2;31417:3;31413:12;31406:19;;31065:366;;;:::o;31437:419::-;31603:4;31641:2;31630:9;31626:18;31618:26;;31690:9;31684:4;31680:20;31676:1;31665:9;31661:17;31654:47;31718:131;31844:4;31718:131;:::i;:::-;31710:139;;31437:419;;;:::o;31862:191::-;31902:4;31922:20;31940:1;31922:20;:::i;:::-;31917:25;;31956:20;31974:1;31956:20;:::i;:::-;31951:25;;31995:1;31992;31989:8;31986:34;;;32000:18;;:::i;:::-;31986:34;32045:1;32042;32038:9;32030:17;;31862:191;;;;:::o;32059:442::-;32208:4;32246:2;32235:9;32231:18;32223:26;;32259:71;32327:1;32316:9;32312:17;32303:6;32259:71;:::i;:::-;32340:72;32408:2;32397:9;32393:18;32384:6;32340:72;:::i;:::-;32422;32490:2;32479:9;32475:18;32466:6;32422:72;:::i;:::-;32059:442;;;;;;:::o;32507:147::-;32608:11;32645:3;32630:18;;32507:147;;;;:::o;32660:114::-;;:::o;32780:398::-;32939:3;32960:83;33041:1;33036:3;32960:83;:::i;:::-;32953:90;;33052:93;33141:3;33052:93;:::i;:::-;33170:1;33165:3;33161:11;33154:18;;32780:398;;;:::o;33184:379::-;33368:3;33390:147;33533:3;33390:147;:::i;:::-;33383:154;;33554:3;33547:10;;33184:379;;;:::o;33569:220::-;33709:34;33705:1;33697:6;33693:14;33686:58;33778:3;33773:2;33765:6;33761:15;33754:28;33569:220;:::o;33795:366::-;33937:3;33958:67;34022:2;34017:3;33958:67;:::i;:::-;33951:74;;34034:93;34123:3;34034:93;:::i;:::-;34152:2;34147:3;34143:12;34136:19;;33795:366;;;:::o;34167:419::-;34333:4;34371:2;34360:9;34356:18;34348:26;;34420:9;34414:4;34410:20;34406:1;34395:9;34391:17;34384:47;34448:131;34574:4;34448:131;:::i;:::-;34440:139;;34167:419;;;:::o;34592:180::-;34640:77;34637:1;34630:88;34737:4;34734:1;34727:15;34761:4;34758:1;34751:15;34778:180;34826:77;34823:1;34816:88;34923:4;34920:1;34913:15;34947:4;34944:1;34937:15;34964:143;35021:5;35052:6;35046:13;35037:22;;35068:33;35095:5;35068:33;:::i;:::-;34964:143;;;;:::o;35113:351::-;35183:6;35232:2;35220:9;35211:7;35207:23;35203:32;35200:119;;;35238:79;;:::i;:::-;35200:119;35358:1;35383:64;35439:7;35430:6;35419:9;35415:22;35383:64;:::i;:::-;35373:74;;35329:128;35113:351;;;;:::o;35470:85::-;35515:7;35544:5;35533:16;;35470:85;;;:::o;35561:158::-;35619:9;35652:61;35670:42;35679:32;35705:5;35679:32;:::i;:::-;35670:42;:::i;:::-;35652:61;:::i;:::-;35639:74;;35561:158;;;:::o;35725:147::-;35820:45;35859:5;35820:45;:::i;:::-;35815:3;35808:58;35725:147;;:::o;35878:114::-;35945:6;35979:5;35973:12;35963:22;;35878:114;;;:::o;35998:184::-;36097:11;36131:6;36126:3;36119:19;36171:4;36166:3;36162:14;36147:29;;35998:184;;;;:::o;36188:132::-;36255:4;36278:3;36270:11;;36308:4;36303:3;36299:14;36291:22;;36188:132;;;:::o;36326:108::-;36403:24;36421:5;36403:24;:::i;:::-;36398:3;36391:37;36326:108;;:::o;36440:179::-;36509:10;36530:46;36572:3;36564:6;36530:46;:::i;:::-;36608:4;36603:3;36599:14;36585:28;;36440:179;;;;:::o;36625:113::-;36695:4;36727;36722:3;36718:14;36710:22;;36625:113;;;:::o;36774:732::-;36893:3;36922:54;36970:5;36922:54;:::i;:::-;36992:86;37071:6;37066:3;36992:86;:::i;:::-;36985:93;;37102:56;37152:5;37102:56;:::i;:::-;37181:7;37212:1;37197:284;37222:6;37219:1;37216:13;37197:284;;;37298:6;37292:13;37325:63;37384:3;37369:13;37325:63;:::i;:::-;37318:70;;37411:60;37464:6;37411:60;:::i;:::-;37401:70;;37257:224;37244:1;37241;37237:9;37232:14;;37197:284;;;37201:14;37497:3;37490:10;;36898:608;;;36774:732;;;;:::o;37512:831::-;37775:4;37813:3;37802:9;37798:19;37790:27;;37827:71;37895:1;37884:9;37880:17;37871:6;37827:71;:::i;:::-;37908:80;37984:2;37973:9;37969:18;37960:6;37908:80;:::i;:::-;38035:9;38029:4;38025:20;38020:2;38009:9;38005:18;37998:48;38063:108;38166:4;38157:6;38063:108;:::i;:::-;38055:116;;38181:72;38249:2;38238:9;38234:18;38225:6;38181:72;:::i;:::-;38263:73;38331:3;38320:9;38316:19;38307:6;38263:73;:::i;:::-;37512:831;;;;;;;;:::o;38349:807::-;38598:4;38636:3;38625:9;38621:19;38613:27;;38650:71;38718:1;38707:9;38703:17;38694:6;38650:71;:::i;:::-;38731:72;38799:2;38788:9;38784:18;38775:6;38731:72;:::i;:::-;38813:80;38889:2;38878:9;38874:18;38865:6;38813:80;:::i;:::-;38903;38979:2;38968:9;38964:18;38955:6;38903:80;:::i;:::-;38993:73;39061:3;39050:9;39046:19;39037:6;38993:73;:::i;:::-;39076;39144:3;39133:9;39129:19;39120:6;39076:73;:::i;:::-;38349:807;;;;;;;;;:::o;39162:143::-;39219:5;39250:6;39244:13;39235:22;;39266:33;39293:5;39266:33;:::i;:::-;39162:143;;;;:::o;39311:663::-;39399:6;39407;39415;39464:2;39452:9;39443:7;39439:23;39435:32;39432:119;;;39470:79;;:::i;:::-;39432:119;39590:1;39615:64;39671:7;39662:6;39651:9;39647:22;39615:64;:::i;:::-;39605:74;;39561:128;39728:2;39754:64;39810:7;39801:6;39790:9;39786:22;39754:64;:::i;:::-;39744:74;;39699:129;39867:2;39893:64;39949:7;39940:6;39929:9;39925:22;39893:64;:::i;:::-;39883:74;;39838:129;39311:663;;;;;:::o

Swarm Source

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