ETH Price: $2,629.45 (+6.54%)

Token

Squeeze Protocol (Alpha-1)
 

Overview

Max Total Supply

82,268.388025296473086444 Alpha-1

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.885197543226402535 Alpha-1

Value
$0.00
0xab4cbd42b4e0bba39efe35692035b472f8bf9af0
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:
SQUEEZEPROTOCOL

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-16
*/

/**
Squeeze Protocol - Alpha1 by Alpha-Connector 
*/

/*
https://www.squeeze-protocol.com/
https://t.me/SqueezeProtocol
https://t.me/AlphaConnectorCalls
https://twitter.com/ConnectTehAlpha
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


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

    mapping(address => uint256) private _balances;

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


    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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




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

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

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

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


        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

pragma solidity 0.8.9;

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

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

    bool private swapping;
        
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public supply;

    address public devWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping (address => bool) public _isBlacklisted;

    bool public transferDelayEnabled = true;

    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public buyTotalFees;

    uint256 public sellBurnFee;
    uint256 public sellDevFee;
    uint256 public sellTotalFees;   
    
    uint256 public tokensForBurn;
    uint256 public tokensForDev;

    uint256 public walletDigit;
    uint256 public transDigit;
    uint256 public delayDigit;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20("Squeeze Protocol", "Alpha-1") {
        
        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 _buyBurnFee = 5;
        uint256 _buyDevFee = 35;

        uint256 _sellBurnFee = 5;
        uint256 _sellDevFee = 90;
        
        uint256 totalSupply = 10 * 1e4 * 1e18;
        supply += totalSupply;
        
        walletDigit = 2;
        transDigit = 2;
        delayDigit = 1;

        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 10 / 10000; // 0.1% swap wallet;
        maxWallet = supply * walletDigit / 100;

        buyBurnFee = _buyBurnFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyBurnFee + buyDevFee;
        
        sellBurnFee = _sellBurnFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellBurnFee + sellDevFee;
        
        devWallet = 0x644fD74fB2c78c0e36Bb5aEe58BAd6183d461517;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _approve(owner(), address(uniswapV2Router), totalSupply);
        _mint(msg.sender, totalSupply);

    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        buyBurnFee = 5;
        buyDevFee = 35;
        buyTotalFees = buyBurnFee + buyDevFee;

        sellBurnFee = 5;
        sellDevFee = 35;
        sellTotalFees = sellBurnFee + sellDevFee;

        delayDigit = 1;
    }
      
      function addToBlackList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }
    
    function updateTransDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        transDigit = newNum;
        updateLimits();
    }

    function updateWalletDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        walletDigit = newNum;
        updateLimits();
    }

    function updateDelayDigit(uint256 newNum) external onlyOwner{
        delayDigit = newNum;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        buyBurnFee = _burnFee;
        buyDevFee = _devFee;
        buyTotalFees = buyBurnFee + buyDevFee;
    
    }
    
    function updateSellFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        sellBurnFee = _burnFee;
        sellDevFee = _devFee;
        sellTotalFees = sellBurnFee + sellDevFee;
    
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function updateLimits() private {
        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * 5 / 10000; // 0.05% swap wallet;
        maxWallet = supply * walletDigit / 100;
    }

    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 isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
        
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                    
                }
                

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number + delayDigit;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {

        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForBurn += fees * buyBurnFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if (tokensForBurn > 0) {
                    _burn(address(this), tokensForBurn);
                    supply = totalSupply();
                    updateLimits();
                    tokensForBurn = 0;
                }
            }
        	
        	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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        
        if(contractBalance == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }

        swapTokensForEth(contractBalance); 
        
        tokensForDev = 0;

        (success,) = address(devWallet).call{value: address(this).balance}("");
    }

}
// TehAlpha1

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delayDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDelayDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateTransDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateWalletDigit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDigit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff0219169083151502179055506001600a60166101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280601081526020017f53717565657a652050726f746f636f6c000000000000000000000000000000008152506040518060400160405280600781526020017f416c7068612d310000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000d6b565b5080600490805190602001906200011b92919062000d6b565b5050506000620001306200066460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200066c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000e85565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000e85565b6040518363ffffffff1660e01b81526004016200036e92919062000ec8565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000e85565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200066c60201b60201c565b6200042160a05160016200076960201b60201c565b6000600590506000602390506000600590506000605a9050600069152d02c7e14af6800000905080600960008282546200045c919062000f2e565b9250508190555060026016819055506002601781905550600160188190555060646017546009546200048f919062000f8b565b6200049b91906200101b565b600681905550612710600a600954620004b5919062000f8b565b620004c191906200101b565b6007819055506064601654600954620004db919062000f8b565b620004e791906200101b565b60088190555084600e8190555083600f81905550600f54600e546200050d919062000f2e565b601081905550826011819055508160128190555060125460115462000533919062000f2e565b60138190555073644fd74fb2c78c0e36bb5aee58bad6183d461517600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b0620005a26200080a60201b60201c565b60016200083460201b60201c565b620005c33060016200083460201b60201c565b620005d861dead60016200083460201b60201c565b620005fa620005ec6200080a60201b60201c565b60016200066c60201b60201c565b6200060d3060016200066c60201b60201c565b6200062261dead60016200066c60201b60201c565b62000646620006366200080a60201b60201c565b608051836200098160201b60201c565b62000658338262000b5460201b60201c565b505050505050620013b7565b600033905090565b6200067c6200066460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070590620010b4565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008446200066460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008cd90620010b4565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009759190620010f3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009eb9062001186565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5e906200121e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b47919062001251565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bbe90620012be565b60405180910390fd5b62000bdb6000838362000d0360201b60201c565b62000bf78160025462000d0860201b62001ffc1790919060201c565b60028190555062000c55816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d0860201b62001ffc1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cf7919062001251565b60405180910390a35050565b505050565b600080828462000d19919062000f2e565b90508381101562000d61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d589062001330565b60405180910390fd5b8091505092915050565b82805462000d799062001381565b90600052602060002090601f01602090048101928262000d9d576000855562000de9565b82601f1062000db857805160ff191683800117855562000de9565b8280016001018555821562000de9579182015b8281111562000de857825182559160200191906001019062000dcb565b5b50905062000df8919062000dfc565b5090565b5b8082111562000e1757600081600090555060010162000dfd565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e4d8262000e20565b9050919050565b62000e5f8162000e40565b811462000e6b57600080fd5b50565b60008151905062000e7f8162000e54565b92915050565b60006020828403121562000e9e5762000e9d62000e1b565b5b600062000eae8482850162000e6e565b91505092915050565b62000ec28162000e40565b82525050565b600060408201905062000edf600083018562000eb7565b62000eee602083018462000eb7565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f3b8262000ef5565b915062000f488362000ef5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f805762000f7f62000eff565b5b828201905092915050565b600062000f988262000ef5565b915062000fa58362000ef5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fe15762000fe062000eff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010288262000ef5565b9150620010358362000ef5565b92508262001048576200104762000fec565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109c60208362001053565b9150620010a98262001064565b602082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b60008115159050919050565b620010ed81620010d6565b82525050565b60006020820190506200110a6000830184620010e2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200116e60248362001053565b91506200117b8262001110565b604082019050919050565b60006020820190508181036000830152620011a1816200115f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200120660228362001053565b91506200121382620011a8565b604082019050919050565b600060208201905081810360008301526200123981620011f7565b9050919050565b6200124b8162000ef5565b82525050565b600060208201905062001268600083018462001240565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012a6601f8362001053565b9150620012b3826200126e565b602082019050919050565b60006020820190508181036000830152620012d98162001297565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001318601b8362001053565b91506200132582620012e0565b602082019050919050565b600060208201905081810360008301526200134b8162001309565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200139a57607f821691505b60208210811415620013b157620013b062001352565b5b50919050565b60805160a051614cac62001407600039600081816112220152818161188b0152612730015260008181610ea1015281816126d80152818161378a0152818161387a01526138a10152614cac6000f3fe6080604052600436106103035760003560e01c80638a8c523c11610190578063b62496f5116100dc578063dd62ed3e11610095578063f203acb61161006f578063f203acb614610bab578063f2fde38b14610bd6578063f8b45b0514610bff578063ff89757014610c2a5761030a565b8063dd62ed3e14610b18578063e2f4560514610b55578063e71dc3f514610b805761030a565b8063b62496f514610a06578063bbc0c74214610a43578063c024666814610a6e578063c876d0b914610a97578063c8c8ebe414610ac2578063d85ba06314610aed5761030a565b80639c3b4fdc11610149578063a0d82dc511610123578063a0d82dc514610936578063a457c2d714610961578063a9059cbb1461099e578063adb873bd146109db5761030a565b80639c3b4fdc146108b75780639fccce32146108e25780639fdc48241461090d5761030a565b80638a8c523c146107cb5780638da5cb5b146107e25780638ea5220f1461080d57806395d89b4114610838578063975d71e2146108635780639a7a23d61461088e5761030a565b806327c8f8351161024f57806366ca9b831161020857806370a08231116101e257806370a0823114610723578063715018a6146107605780637571336a146107775780637ab43983146107a05761030a565b806366ca9b83146106a45780636a486a8e146106cd5780636ddd1713146106f85761030a565b806327c8f8351461057e578063313ce567146105a957806339509351146105d457806349bd5a5e146106115780634a62bb651461063c5780634fbee193146106675761030a565b80631694505e116102bc5780631cdd3be3116102965780631cdd3be3146104b05780631d777856146104ed5780631fa07da51461051857806323b872dd146105415761030a565b80631694505e1461043157806318160ddd1461045c5780631816467f146104875761030a565b806302dbd8f81461030f578063047fc9aa1461033857806306fdde0314610363578063095ea7b31461038e57806310d5de53146103cb578063150de0bb146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613a24565b610c53565b005b34801561034457600080fd5b5061034d610d12565b60405161035a9190613a73565b60405180910390f35b34801561036f57600080fd5b50610378610d18565b6040516103859190613b27565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613ba7565b610daa565b6040516103c29190613c02565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613c1d565b610dc8565b6040516103ff9190613c02565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613c4a565b610de8565b005b34801561043d57600080fd5b50610446610e9f565b6040516104539190613cd6565b60405180910390f35b34801561046857600080fd5b50610471610ec3565b60405161047e9190613a73565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190613c1d565b610ecd565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613c1d565b610fa8565b6040516104e49190613c02565b60405180910390f35b3480156104f957600080fd5b50610502610fc8565b60405161050f9190613a73565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190613c4a565b610fce565b005b34801561054d57600080fd5b5061056860048036038101906105639190613cf1565b611085565b6040516105759190613c02565b60405180910390f35b34801561058a57600080fd5b5061059361115e565b6040516105a09190613d53565b60405180910390f35b3480156105b557600080fd5b506105be611164565b6040516105cb9190613d8a565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613ba7565b61116d565b6040516106089190613c02565b60405180910390f35b34801561061d57600080fd5b50610626611220565b6040516106339190613d53565b60405180910390f35b34801561064857600080fd5b50610651611244565b60405161065e9190613c02565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613c1d565b611257565b60405161069b9190613c02565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613a24565b6112ad565b005b3480156106d957600080fd5b506106e261136c565b6040516106ef9190613a73565b60405180910390f35b34801561070457600080fd5b5061070d611372565b60405161071a9190613c02565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190613c1d565b611385565b6040516107579190613a73565b60405180910390f35b34801561076c57600080fd5b506107756113cd565b005b34801561078357600080fd5b5061079e60048036038101906107999190613dd1565b611525565b005b3480156107ac57600080fd5b506107b5611617565b6040516107c29190613a73565b60405180910390f35b3480156107d757600080fd5b506107e061161d565b005b3480156107ee57600080fd5b506107f761170a565b6040516108049190613d53565b60405180910390f35b34801561081957600080fd5b50610822611734565b60405161082f9190613d53565b60405180910390f35b34801561084457600080fd5b5061084d61175a565b60405161085a9190613b27565b60405180910390f35b34801561086f57600080fd5b506108786117ec565b6040516108859190613a73565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190613dd1565b6117f2565b005b3480156108c357600080fd5b506108cc611926565b6040516108d99190613a73565b60405180910390f35b3480156108ee57600080fd5b506108f761192c565b6040516109049190613a73565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613c4a565b611932565b005b34801561094257600080fd5b5061094b6119d3565b6040516109589190613a73565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613ba7565b6119d9565b6040516109959190613c02565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613ba7565b611aa6565b6040516109d29190613c02565b60405180910390f35b3480156109e757600080fd5b506109f0611ac4565b6040516109fd9190613a73565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a289190613c1d565b611aca565b604051610a3a9190613c02565b60405180910390f35b348015610a4f57600080fd5b50610a58611aea565b604051610a659190613c02565b60405180910390f35b348015610a7a57600080fd5b50610a956004803603810190610a909190613dd1565b611afd565b005b348015610aa357600080fd5b50610aac611c3d565b604051610ab99190613c02565b60405180910390f35b348015610ace57600080fd5b50610ad7611c50565b604051610ae49190613a73565b60405180910390f35b348015610af957600080fd5b50610b02611c56565b604051610b0f9190613a73565b60405180910390f35b348015610b2457600080fd5b50610b3f6004803603810190610b3a9190613e11565b611c5c565b604051610b4c9190613a73565b60405180910390f35b348015610b6157600080fd5b50610b6a611ce3565b604051610b779190613a73565b60405180910390f35b348015610b8c57600080fd5b50610b95611ce9565b604051610ba29190613a73565b60405180910390f35b348015610bb757600080fd5b50610bc0611cef565b604051610bcd9190613a73565b60405180910390f35b348015610be257600080fd5b50610bfd6004803603810190610bf89190613c1d565b611cf5565b005b348015610c0b57600080fd5b50610c14611ebc565b604051610c219190613a73565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613eb6565b611ec2565b005b610c5b61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190613f4f565b60405180910390fd5b8160118190555080601281905550601254601154610d089190613f9e565b6013819055505050565b60095481565b606060038054610d2790614023565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5390614023565b8015610da05780601f10610d7557610100808354040283529160200191610da0565b820191906000526020600020905b815481529060010190602001808311610d8357829003601f168201915b5050505050905090565b6000610dbe610db761205a565b8484612062565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610df061205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690613f4f565b60405180910390fd5b6001811015610e8d57600080fd5b80601681905550610e9c61222d565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ed561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90613f4f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60145481565b610fd661205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90613f4f565b60405180910390fd5b600181101561107357600080fd5b8060178190555061108261222d565b50565b6000611092848484612295565b6111538461109e61205a565b61114e85604051806060016040528060288152602001614c2a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061110461205a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b612062565b600190509392505050565b61dead81565b60006012905090565b600061121661117a61205a565b84611211856001600061118b61205a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc90919063ffffffff16565b612062565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60149054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112b561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613f4f565b60405180910390fd5b81600e8190555080600f81905550600f54600e546113629190613f9e565b6010819055505050565b60135481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113d561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61152d61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390613f4f565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b61162561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613f4f565b60405180910390fd5b6005600e819055506023600f81905550600f54600e546116d49190613f9e565b601081905550600560118190555060236012819055506012546011546116fa9190613f9e565b6013819055506001601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461176990614023565b80601f016020809104026020016040519081016040528092919081815260200182805461179590614023565b80156117e25780601f106117b7576101008083540402835291602001916117e2565b820191906000526020600020905b8154815290600101906020018083116117c557829003601f168201915b5050505050905090565b60175481565b6117fa61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613f4f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906140c7565b60405180910390fd5b6119228282613053565b5050565b600f5481565b60155481565b61193a61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613f4f565b60405180910390fd5b8060188190555050565b60125481565b6000611a9c6119e661205a565b84611a9785604051806060016040528060258152602001614c526025913960016000611a1061205a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b612062565b6001905092915050565b6000611aba611ab361205a565b8484612295565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611b0561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90613f4f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c319190613c02565b60405180910390a25050565b600d60009054906101000a900460ff1681565b60065481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600e5481565b60185481565b611cfd61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390613f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614159565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b611eca61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090613f4f565b60405180910390fd5b60005b82829050811015611ff7576001600c6000858585818110611f8057611f7f614179565b5b9050602002016020810190611f959190613c1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611ff0906141a8565b9050611f5c565b505050565b600080828461200b9190613f9e565b905083811015612050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120479061423d565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c9906142cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990614361565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122209190613a73565b60405180910390a3505050565b606460175460095461223f9190614381565b612249919061440a565b60068190555061271060056009546122619190614381565b61226b919061440a565b60078190555060646016546009546122839190614381565b61228d919061440a565b600881905550565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123395750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f90614487565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df90614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f906145ab565b60405180910390fd5b60008114156124725761246d838360006130f4565b612fea565b600a60149054906101000a900460ff1615612b425761248f61170a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124fd57506124cd61170a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125365750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612570575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125895750600560149054906101000a900460ff16155b15612b4157600a60159054906101000a900460ff1661268357601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126435750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614617565b60405180910390fd5b5b600d60009054906101000a900460ff1615612858576126a061170a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561272757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561277f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128575743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fc906146cf565b60405180910390fd5b601854436128139190613f9e565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128fb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129a257600654811115612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90614761565b60405180910390fd5b60085461295183611385565b8261295c9190613f9e565b111561299d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612994906147cd565b60405180910390fd5b612b40565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a455750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9457600654811115612a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a869061485f565b60405180910390fd5b612b3f565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b3e57600854612af183611385565b82612afc9190613f9e565b1115612b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b34906147cd565b60405180910390fd5b5b5b5b5b5b6000612b4d30611385565b905060006007548210159050808015612b735750600560149054906101000a900460ff16155b8015612b8b5750600a60169054906101000a900460ff165b8015612be15750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c375750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c8d5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cd1576001600560146101000a81548160ff021916908315150217905550612cb5613389565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d875750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d9157600090505b60008115612fda57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612df457506000601354115b15612e8e57612e216064612e136013548861347390919063ffffffff16565b6134ee90919063ffffffff16565b905060135460115482612e349190614381565b612e3e919061440a565b60146000828254612e4f9190613f9e565b9250508190555060135460125482612e679190614381565b612e71919061440a565b60156000828254612e829190613f9e565b92505081905550612f80565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee957506000601054115b15612f7f57612f166064612f086010548861347390919063ffffffff16565b6134ee90919063ffffffff16565b9050601054600e5482612f299190614381565b612f33919061440a565b60146000828254612f449190613f9e565b92505081905550601054600f5482612f5c9190614381565b612f66919061440a565b60156000828254612f779190613f9e565b925050819055505b5b6000811115612fcb57612f948730836130f4565b60006014541115612fca57612fab30601454613538565b612fb3610ec3565b600981905550612fc161222d565b60006014819055505b5b8085612fd7919061487f565b94505b612fe58787876130f4565b505050505b505050565b6000838311158290613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e9190613b27565b60405180910390fd5b5060008385613046919061487f565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315b90614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb906145ab565b60405180910390fd5b6131df8383836136e6565b61324a81604051806060016040528060268152602001614c04602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132dd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161337c9190613a73565b60405180910390a3505050565b600061339430611385565b90506000808214156133a7575050613471565b60146007546133b69190614381565b8211156133cf5760146007546133cc9190614381565b91505b6133d8826136eb565b6000601581905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613426906148e4565b60006040518083038185875af1925050503d8060008114613463576040519150601f19603f3d011682016040523d82523d6000602084013e613468565b606091505b50508091505050505b565b60008083141561348657600090506134e8565b600082846134949190614381565b90508284826134a3919061440a565b146134e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134da9061496b565b60405180910390fd5b809150505b92915050565b600061353083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613937565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359f906149fd565b60405180910390fd5b6135b4826000836136e6565b61361f81604051806060016040528060228152602001614be2602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136768160025461399a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136da9190613a73565b60405180910390a35050565b505050565b6000600267ffffffffffffffff81111561370857613707614a1d565b5b6040519080825280602002602001820160405280156137365781602001602082028036833780820191505090505b509050308160008151811061374e5761374d614179565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137ee57600080fd5b505afa158015613802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138269190614a61565b8160018151811061383a57613839614179565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061389f307f000000000000000000000000000000000000000000000000000000000000000084612062565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613901959493929190614b87565b600060405180830381600087803b15801561391b57600080fd5b505af115801561392f573d6000803e3d6000fd5b505050505050565b6000808311829061397e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139759190613b27565b60405180910390fd5b506000838561398d919061440a565b9050809150509392505050565b60006139dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fef565b905092915050565b600080fd5b600080fd5b6000819050919050565b613a01816139ee565b8114613a0c57600080fd5b50565b600081359050613a1e816139f8565b92915050565b60008060408385031215613a3b57613a3a6139e4565b5b6000613a4985828601613a0f565b9250506020613a5a85828601613a0f565b9150509250929050565b613a6d816139ee565b82525050565b6000602082019050613a886000830184613a64565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ac8578082015181840152602081019050613aad565b83811115613ad7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613af982613a8e565b613b038185613a99565b9350613b13818560208601613aaa565b613b1c81613add565b840191505092915050565b60006020820190508181036000830152613b418184613aee565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7482613b49565b9050919050565b613b8481613b69565b8114613b8f57600080fd5b50565b600081359050613ba181613b7b565b92915050565b60008060408385031215613bbe57613bbd6139e4565b5b6000613bcc85828601613b92565b9250506020613bdd85828601613a0f565b9150509250929050565b60008115159050919050565b613bfc81613be7565b82525050565b6000602082019050613c176000830184613bf3565b92915050565b600060208284031215613c3357613c326139e4565b5b6000613c4184828501613b92565b91505092915050565b600060208284031215613c6057613c5f6139e4565b5b6000613c6e84828501613a0f565b91505092915050565b6000819050919050565b6000613c9c613c97613c9284613b49565b613c77565b613b49565b9050919050565b6000613cae82613c81565b9050919050565b6000613cc082613ca3565b9050919050565b613cd081613cb5565b82525050565b6000602082019050613ceb6000830184613cc7565b92915050565b600080600060608486031215613d0a57613d096139e4565b5b6000613d1886828701613b92565b9350506020613d2986828701613b92565b9250506040613d3a86828701613a0f565b9150509250925092565b613d4d81613b69565b82525050565b6000602082019050613d686000830184613d44565b92915050565b600060ff82169050919050565b613d8481613d6e565b82525050565b6000602082019050613d9f6000830184613d7b565b92915050565b613dae81613be7565b8114613db957600080fd5b50565b600081359050613dcb81613da5565b92915050565b60008060408385031215613de857613de76139e4565b5b6000613df685828601613b92565b9250506020613e0785828601613dbc565b9150509250929050565b60008060408385031215613e2857613e276139e4565b5b6000613e3685828601613b92565b9250506020613e4785828601613b92565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7657613e75613e51565b5b8235905067ffffffffffffffff811115613e9357613e92613e56565b5b602083019150836020820283011115613eaf57613eae613e5b565b5b9250929050565b60008060208385031215613ecd57613ecc6139e4565b5b600083013567ffffffffffffffff811115613eeb57613eea6139e9565b5b613ef785828601613e60565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f39602083613a99565b9150613f4482613f03565b602082019050919050565b60006020820190508181036000830152613f6881613f2c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fa9826139ee565b9150613fb4836139ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe957613fe8613f6f565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061403b57607f821691505b6020821081141561404f5761404e613ff4565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140b1603983613a99565b91506140bc82614055565b604082019050919050565b600060208201905081810360008301526140e0816140a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614143602683613a99565b915061414e826140e7565b604082019050919050565b6000602082019050818103600083015261417281614136565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006141b3826139ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141e6576141e5613f6f565b5b600182019050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614227601b83613a99565b9150614232826141f1565b602082019050919050565b600060208201905081810360008301526142568161421a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142b9602483613a99565b91506142c48261425d565b604082019050919050565b600060208201905081810360008301526142e8816142ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061434b602283613a99565b9150614356826142ef565b604082019050919050565b6000602082019050818103600083015261437a8161433e565b9050919050565b600061438c826139ee565b9150614397836139ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143d0576143cf613f6f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614415826139ee565b9150614420836139ee565b9250826144305761442f6143db565b5b828204905092915050565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b6000614471601b83613a99565b915061447c8261443b565b602082019050919050565b600060208201905081810360008301526144a081614464565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614503602583613a99565b915061450e826144a7565b604082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614595602383613a99565b91506145a082614539565b604082019050919050565b600060208201905081810360008301526145c481614588565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614601601683613a99565b915061460c826145cb565b602082019050919050565b60006020820190508181036000830152614630816145f4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006146b9604983613a99565b91506146c482614637565b606082019050919050565b600060208201905081810360008301526146e8816146ac565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061474b603583613a99565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006147b7601383613a99565b91506147c282614781565b602082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614849603683613a99565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b600061488a826139ee565b9150614895836139ee565b9250828210156148a8576148a7613f6f565b5b828203905092915050565b600081905092915050565b50565b60006148ce6000836148b3565b91506148d9826148be565b600082019050919050565b60006148ef826148c1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614955602183613a99565b9150614960826148f9565b604082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149e7602183613a99565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614a5b81613b7b565b92915050565b600060208284031215614a7757614a766139e4565b5b6000614a8584828501614a4c565b91505092915050565b6000819050919050565b6000614ab3614aae614aa984614a8e565b613c77565b6139ee565b9050919050565b614ac381614a98565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614afe81613b69565b82525050565b6000614b108383614af5565b60208301905092915050565b6000602082019050919050565b6000614b3482614ac9565b614b3e8185614ad4565b9350614b4983614ae5565b8060005b83811015614b7a578151614b618882614b04565b9750614b6c83614b1c565b925050600181019050614b4d565b5085935050505092915050565b600060a082019050614b9c6000830188613a64565b614ba96020830187614aba565b8181036040830152614bbb8186614b29565b9050614bca6060830185613d44565b614bd76080830184613a64565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122000e8f64233d7af1f3136c3e2f98e2b2ca24e33f5653ce5abbff13729c2985aea64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638a8c523c11610190578063b62496f5116100dc578063dd62ed3e11610095578063f203acb61161006f578063f203acb614610bab578063f2fde38b14610bd6578063f8b45b0514610bff578063ff89757014610c2a5761030a565b8063dd62ed3e14610b18578063e2f4560514610b55578063e71dc3f514610b805761030a565b8063b62496f514610a06578063bbc0c74214610a43578063c024666814610a6e578063c876d0b914610a97578063c8c8ebe414610ac2578063d85ba06314610aed5761030a565b80639c3b4fdc11610149578063a0d82dc511610123578063a0d82dc514610936578063a457c2d714610961578063a9059cbb1461099e578063adb873bd146109db5761030a565b80639c3b4fdc146108b75780639fccce32146108e25780639fdc48241461090d5761030a565b80638a8c523c146107cb5780638da5cb5b146107e25780638ea5220f1461080d57806395d89b4114610838578063975d71e2146108635780639a7a23d61461088e5761030a565b806327c8f8351161024f57806366ca9b831161020857806370a08231116101e257806370a0823114610723578063715018a6146107605780637571336a146107775780637ab43983146107a05761030a565b806366ca9b83146106a45780636a486a8e146106cd5780636ddd1713146106f85761030a565b806327c8f8351461057e578063313ce567146105a957806339509351146105d457806349bd5a5e146106115780634a62bb651461063c5780634fbee193146106675761030a565b80631694505e116102bc5780631cdd3be3116102965780631cdd3be3146104b05780631d777856146104ed5780631fa07da51461051857806323b872dd146105415761030a565b80631694505e1461043157806318160ddd1461045c5780631816467f146104875761030a565b806302dbd8f81461030f578063047fc9aa1461033857806306fdde0314610363578063095ea7b31461038e57806310d5de53146103cb578063150de0bb146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613a24565b610c53565b005b34801561034457600080fd5b5061034d610d12565b60405161035a9190613a73565b60405180910390f35b34801561036f57600080fd5b50610378610d18565b6040516103859190613b27565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613ba7565b610daa565b6040516103c29190613c02565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613c1d565b610dc8565b6040516103ff9190613c02565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613c4a565b610de8565b005b34801561043d57600080fd5b50610446610e9f565b6040516104539190613cd6565b60405180910390f35b34801561046857600080fd5b50610471610ec3565b60405161047e9190613a73565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190613c1d565b610ecd565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613c1d565b610fa8565b6040516104e49190613c02565b60405180910390f35b3480156104f957600080fd5b50610502610fc8565b60405161050f9190613a73565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190613c4a565b610fce565b005b34801561054d57600080fd5b5061056860048036038101906105639190613cf1565b611085565b6040516105759190613c02565b60405180910390f35b34801561058a57600080fd5b5061059361115e565b6040516105a09190613d53565b60405180910390f35b3480156105b557600080fd5b506105be611164565b6040516105cb9190613d8a565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613ba7565b61116d565b6040516106089190613c02565b60405180910390f35b34801561061d57600080fd5b50610626611220565b6040516106339190613d53565b60405180910390f35b34801561064857600080fd5b50610651611244565b60405161065e9190613c02565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613c1d565b611257565b60405161069b9190613c02565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613a24565b6112ad565b005b3480156106d957600080fd5b506106e261136c565b6040516106ef9190613a73565b60405180910390f35b34801561070457600080fd5b5061070d611372565b60405161071a9190613c02565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190613c1d565b611385565b6040516107579190613a73565b60405180910390f35b34801561076c57600080fd5b506107756113cd565b005b34801561078357600080fd5b5061079e60048036038101906107999190613dd1565b611525565b005b3480156107ac57600080fd5b506107b5611617565b6040516107c29190613a73565b60405180910390f35b3480156107d757600080fd5b506107e061161d565b005b3480156107ee57600080fd5b506107f761170a565b6040516108049190613d53565b60405180910390f35b34801561081957600080fd5b50610822611734565b60405161082f9190613d53565b60405180910390f35b34801561084457600080fd5b5061084d61175a565b60405161085a9190613b27565b60405180910390f35b34801561086f57600080fd5b506108786117ec565b6040516108859190613a73565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b09190613dd1565b6117f2565b005b3480156108c357600080fd5b506108cc611926565b6040516108d99190613a73565b60405180910390f35b3480156108ee57600080fd5b506108f761192c565b6040516109049190613a73565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613c4a565b611932565b005b34801561094257600080fd5b5061094b6119d3565b6040516109589190613a73565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613ba7565b6119d9565b6040516109959190613c02565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613ba7565b611aa6565b6040516109d29190613c02565b60405180910390f35b3480156109e757600080fd5b506109f0611ac4565b6040516109fd9190613a73565b60405180910390f35b348015610a1257600080fd5b50610a2d6004803603810190610a289190613c1d565b611aca565b604051610a3a9190613c02565b60405180910390f35b348015610a4f57600080fd5b50610a58611aea565b604051610a659190613c02565b60405180910390f35b348015610a7a57600080fd5b50610a956004803603810190610a909190613dd1565b611afd565b005b348015610aa357600080fd5b50610aac611c3d565b604051610ab99190613c02565b60405180910390f35b348015610ace57600080fd5b50610ad7611c50565b604051610ae49190613a73565b60405180910390f35b348015610af957600080fd5b50610b02611c56565b604051610b0f9190613a73565b60405180910390f35b348015610b2457600080fd5b50610b3f6004803603810190610b3a9190613e11565b611c5c565b604051610b4c9190613a73565b60405180910390f35b348015610b6157600080fd5b50610b6a611ce3565b604051610b779190613a73565b60405180910390f35b348015610b8c57600080fd5b50610b95611ce9565b604051610ba29190613a73565b60405180910390f35b348015610bb757600080fd5b50610bc0611cef565b604051610bcd9190613a73565b60405180910390f35b348015610be257600080fd5b50610bfd6004803603810190610bf89190613c1d565b611cf5565b005b348015610c0b57600080fd5b50610c14611ebc565b604051610c219190613a73565b60405180910390f35b348015610c3657600080fd5b50610c516004803603810190610c4c9190613eb6565b611ec2565b005b610c5b61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190613f4f565b60405180910390fd5b8160118190555080601281905550601254601154610d089190613f9e565b6013819055505050565b60095481565b606060038054610d2790614023565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5390614023565b8015610da05780601f10610d7557610100808354040283529160200191610da0565b820191906000526020600020905b815481529060010190602001808311610d8357829003601f168201915b5050505050905090565b6000610dbe610db761205a565b8484612062565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610df061205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690613f4f565b60405180910390fd5b6001811015610e8d57600080fd5b80601681905550610e9c61222d565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ed561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90613f4f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60145481565b610fd661205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c90613f4f565b60405180910390fd5b600181101561107357600080fd5b8060178190555061108261222d565b50565b6000611092848484612295565b6111538461109e61205a565b61114e85604051806060016040528060288152602001614c2a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061110461205a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b612062565b600190509392505050565b61dead81565b60006012905090565b600061121661117a61205a565b84611211856001600061118b61205a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc90919063ffffffff16565b612062565b6001905092915050565b7f00000000000000000000000090dec06872b118861842aec57a3bb525b2c970c681565b600a60149054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112b561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613f4f565b60405180910390fd5b81600e8190555080600f81905550600f54600e546113629190613f9e565b6010819055505050565b60135481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113d561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90613f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61152d61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390613f4f565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b61162561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613f4f565b60405180910390fd5b6005600e819055506023600f81905550600f54600e546116d49190613f9e565b601081905550600560118190555060236012819055506012546011546116fa9190613f9e565b6013819055506001601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461176990614023565b80601f016020809104026020016040519081016040528092919081815260200182805461179590614023565b80156117e25780601f106117b7576101008083540402835291602001916117e2565b820191906000526020600020905b8154815290600101906020018083116117c557829003601f168201915b5050505050905090565b60175481565b6117fa61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090613f4f565b60405180910390fd5b7f00000000000000000000000090dec06872b118861842aec57a3bb525b2c970c673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f906140c7565b60405180910390fd5b6119228282613053565b5050565b600f5481565b60155481565b61193a61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c090613f4f565b60405180910390fd5b8060188190555050565b60125481565b6000611a9c6119e661205a565b84611a9785604051806060016040528060258152602001614c526025913960016000611a1061205a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b612062565b6001905092915050565b6000611aba611ab361205a565b8484612295565b6001905092915050565b60115481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611b0561205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b90613f4f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c319190613c02565b60405180910390a25050565b600d60009054906101000a900460ff1681565b60065481565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600e5481565b60185481565b611cfd61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390613f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614159565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b611eca61205a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090613f4f565b60405180910390fd5b60005b82829050811015611ff7576001600c6000858585818110611f8057611f7f614179565b5b9050602002016020810190611f959190613c1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611ff0906141a8565b9050611f5c565b505050565b600080828461200b9190613f9e565b905083811015612050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120479061423d565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c9906142cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990614361565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122209190613a73565b60405180910390a3505050565b606460175460095461223f9190614381565b612249919061440a565b60068190555061271060056009546122619190614381565b61226b919061440a565b60078190555060646016546009546122839190614381565b61228d919061440a565b600881905550565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123395750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f90614487565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df90614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f906145ab565b60405180910390fd5b60008114156124725761246d838360006130f4565b612fea565b600a60149054906101000a900460ff1615612b425761248f61170a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124fd57506124cd61170a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125365750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612570575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125895750600560149054906101000a900460ff16155b15612b4157600a60159054906101000a900460ff1661268357601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126435750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614617565b60405180910390fd5b5b600d60009054906101000a900460ff1615612858576126a061170a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561272757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561277f57507f00000000000000000000000090dec06872b118861842aec57a3bb525b2c970c673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128575743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fc906146cf565b60405180910390fd5b601854436128139190613f9e565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128fb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129a257600654811115612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90614761565b60405180910390fd5b60085461295183611385565b8261295c9190613f9e565b111561299d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612994906147cd565b60405180910390fd5b612b40565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a455750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9457600654811115612a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a869061485f565b60405180910390fd5b612b3f565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b3e57600854612af183611385565b82612afc9190613f9e565b1115612b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b34906147cd565b60405180910390fd5b5b5b5b5b5b6000612b4d30611385565b905060006007548210159050808015612b735750600560149054906101000a900460ff16155b8015612b8b5750600a60169054906101000a900460ff165b8015612be15750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c375750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c8d5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cd1576001600560146101000a81548160ff021916908315150217905550612cb5613389565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d875750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d9157600090505b60008115612fda57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612df457506000601354115b15612e8e57612e216064612e136013548861347390919063ffffffff16565b6134ee90919063ffffffff16565b905060135460115482612e349190614381565b612e3e919061440a565b60146000828254612e4f9190613f9e565b9250508190555060135460125482612e679190614381565b612e71919061440a565b60156000828254612e829190613f9e565b92505081905550612f80565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee957506000601054115b15612f7f57612f166064612f086010548861347390919063ffffffff16565b6134ee90919063ffffffff16565b9050601054600e5482612f299190614381565b612f33919061440a565b60146000828254612f449190613f9e565b92505081905550601054600f5482612f5c9190614381565b612f66919061440a565b60156000828254612f779190613f9e565b925050819055505b5b6000811115612fcb57612f948730836130f4565b60006014541115612fca57612fab30601454613538565b612fb3610ec3565b600981905550612fc161222d565b60006014819055505b5b8085612fd7919061487f565b94505b612fe58787876130f4565b505050505b505050565b6000838311158290613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e9190613b27565b60405180910390fd5b5060008385613046919061487f565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315b90614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb906145ab565b60405180910390fd5b6131df8383836136e6565b61324a81604051806060016040528060268152602001614c04602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132dd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ffc90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161337c9190613a73565b60405180910390a3505050565b600061339430611385565b90506000808214156133a7575050613471565b60146007546133b69190614381565b8211156133cf5760146007546133cc9190614381565b91505b6133d8826136eb565b6000601581905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613426906148e4565b60006040518083038185875af1925050503d8060008114613463576040519150601f19603f3d011682016040523d82523d6000602084013e613468565b606091505b50508091505050505b565b60008083141561348657600090506134e8565b600082846134949190614381565b90508284826134a3919061440a565b146134e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134da9061496b565b60405180910390fd5b809150505b92915050565b600061353083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613937565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359f906149fd565b60405180910390fd5b6135b4826000836136e6565b61361f81604051806060016040528060228152602001614be2602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fef9092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136768160025461399a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136da9190613a73565b60405180910390a35050565b505050565b6000600267ffffffffffffffff81111561370857613707614a1d565b5b6040519080825280602002602001820160405280156137365781602001602082028036833780820191505090505b509050308160008151811061374e5761374d614179565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137ee57600080fd5b505afa158015613802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138269190614a61565b8160018151811061383a57613839614179565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061389f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612062565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613901959493929190614b87565b600060405180830381600087803b15801561391b57600080fd5b505af115801561392f573d6000803e3d6000fd5b505050505050565b6000808311829061397e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139759190613b27565b60405180910390fd5b506000838561398d919061440a565b9050809150509392505050565b60006139dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fef565b905092915050565b600080fd5b600080fd5b6000819050919050565b613a01816139ee565b8114613a0c57600080fd5b50565b600081359050613a1e816139f8565b92915050565b60008060408385031215613a3b57613a3a6139e4565b5b6000613a4985828601613a0f565b9250506020613a5a85828601613a0f565b9150509250929050565b613a6d816139ee565b82525050565b6000602082019050613a886000830184613a64565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ac8578082015181840152602081019050613aad565b83811115613ad7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613af982613a8e565b613b038185613a99565b9350613b13818560208601613aaa565b613b1c81613add565b840191505092915050565b60006020820190508181036000830152613b418184613aee565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b7482613b49565b9050919050565b613b8481613b69565b8114613b8f57600080fd5b50565b600081359050613ba181613b7b565b92915050565b60008060408385031215613bbe57613bbd6139e4565b5b6000613bcc85828601613b92565b9250506020613bdd85828601613a0f565b9150509250929050565b60008115159050919050565b613bfc81613be7565b82525050565b6000602082019050613c176000830184613bf3565b92915050565b600060208284031215613c3357613c326139e4565b5b6000613c4184828501613b92565b91505092915050565b600060208284031215613c6057613c5f6139e4565b5b6000613c6e84828501613a0f565b91505092915050565b6000819050919050565b6000613c9c613c97613c9284613b49565b613c77565b613b49565b9050919050565b6000613cae82613c81565b9050919050565b6000613cc082613ca3565b9050919050565b613cd081613cb5565b82525050565b6000602082019050613ceb6000830184613cc7565b92915050565b600080600060608486031215613d0a57613d096139e4565b5b6000613d1886828701613b92565b9350506020613d2986828701613b92565b9250506040613d3a86828701613a0f565b9150509250925092565b613d4d81613b69565b82525050565b6000602082019050613d686000830184613d44565b92915050565b600060ff82169050919050565b613d8481613d6e565b82525050565b6000602082019050613d9f6000830184613d7b565b92915050565b613dae81613be7565b8114613db957600080fd5b50565b600081359050613dcb81613da5565b92915050565b60008060408385031215613de857613de76139e4565b5b6000613df685828601613b92565b9250506020613e0785828601613dbc565b9150509250929050565b60008060408385031215613e2857613e276139e4565b5b6000613e3685828601613b92565b9250506020613e4785828601613b92565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7657613e75613e51565b5b8235905067ffffffffffffffff811115613e9357613e92613e56565b5b602083019150836020820283011115613eaf57613eae613e5b565b5b9250929050565b60008060208385031215613ecd57613ecc6139e4565b5b600083013567ffffffffffffffff811115613eeb57613eea6139e9565b5b613ef785828601613e60565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f39602083613a99565b9150613f4482613f03565b602082019050919050565b60006020820190508181036000830152613f6881613f2c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fa9826139ee565b9150613fb4836139ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fe957613fe8613f6f565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061403b57607f821691505b6020821081141561404f5761404e613ff4565b5b50919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140b1603983613a99565b91506140bc82614055565b604082019050919050565b600060208201905081810360008301526140e0816140a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614143602683613a99565b915061414e826140e7565b604082019050919050565b6000602082019050818103600083015261417281614136565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006141b3826139ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141e6576141e5613f6f565b5b600182019050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614227601b83613a99565b9150614232826141f1565b602082019050919050565b600060208201905081810360008301526142568161421a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142b9602483613a99565b91506142c48261425d565b604082019050919050565b600060208201905081810360008301526142e8816142ac565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061434b602283613a99565b9150614356826142ef565b604082019050919050565b6000602082019050818103600083015261437a8161433e565b9050919050565b600061438c826139ee565b9150614397836139ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143d0576143cf613f6f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614415826139ee565b9150614420836139ee565b9250826144305761442f6143db565b5b828204905092915050565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b6000614471601b83613a99565b915061447c8261443b565b602082019050919050565b600060208201905081810360008301526144a081614464565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614503602583613a99565b915061450e826144a7565b604082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614595602383613a99565b91506145a082614539565b604082019050919050565b600060208201905081810360008301526145c481614588565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614601601683613a99565b915061460c826145cb565b602082019050919050565b60006020820190508181036000830152614630816145f4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006146b9604983613a99565b91506146c482614637565b606082019050919050565b600060208201905081810360008301526146e8816146ac565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061474b603583613a99565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006147b7601383613a99565b91506147c282614781565b602082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614849603683613a99565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b600061488a826139ee565b9150614895836139ee565b9250828210156148a8576148a7613f6f565b5b828203905092915050565b600081905092915050565b50565b60006148ce6000836148b3565b91506148d9826148be565b600082019050919050565b60006148ef826148c1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614955602183613a99565b9150614960826148f9565b604082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149e7602183613a99565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614a5b81613b7b565b92915050565b600060208284031215614a7757614a766139e4565b5b6000614a8584828501614a4c565b91505092915050565b6000819050919050565b6000614ab3614aae614aa984614a8e565b613c77565b6139ee565b9050919050565b614ac381614a98565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614afe81613b69565b82525050565b6000614b108383614af5565b60208301905092915050565b6000602082019050919050565b6000614b3482614ac9565b614b3e8185614ad4565b9350614b4983614ae5565b8060005b83811015614b7a578151614b618882614b04565b9750614b6c83614b1c565b925050600181019050614b4d565b5085935050505092915050565b600060a082019050614b9c6000830188613a64565b614ba96020830187614aba565b8181036040830152614bbb8186614b29565b9050614bca6060830185613d44565b614bd76080830184613a64565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122000e8f64233d7af1f3136c3e2f98e2b2ca24e33f5653ce5abbff13729c2985aea64736f6c63430008090033

Deployed Bytecode Sourcemap

29542:11639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34560:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29949:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7664:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9831:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30832:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33916:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29627:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8784:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34775:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30205:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30517:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33753:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10488:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29730:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8626:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11252:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29685:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35752:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34347:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30473:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30095:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8955:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22137:148;;;;;;;;;;;;;:::i;:::-;;34191:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30588:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33255:282;;;;;;;;;;;;;:::i;:::-;;21495:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29979:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7883:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30621:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35304:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30341:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30552:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34081:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30441:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11973:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9295:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30408:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31054:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30056:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34886:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30261:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29830:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30372:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9533:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29872:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30309:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30653;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22440:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29912:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33553:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34560:207;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34663:8:::1;34649:11;:22;;;;34695:7;34682:10;:20;;;;34743:10;;34729:11;;:24;;;;:::i;:::-;34713:13;:40;;;;34560:207:::0;;:::o;29949:21::-;;;;:::o;7664:100::-;7718:13;7751:5;7744:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7664:100;:::o;9831:169::-;9914:4;9931:39;9940:12;:10;:12::i;:::-;9954:7;9963:6;9931:8;:39::i;:::-;9988:4;9981:11;;9831:169;;;;:::o;30832:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;33916:157::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34007:1:::1;33997:6;:11;;33989:20;;;::::0;::::1;;34034:6;34020:11;:20;;;;34051:14;:12;:14::i;:::-;33916:157:::0;:::o;29627:51::-;;;:::o;8784:108::-;8845:7;8872:12;;8865:19;;8784:108;:::o;34775:103::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34861:9:::1;34849;;:21;;;;;;;;;;;;;;;;;;34775:103:::0;:::o;30205:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;30517:28::-;;;;:::o;33753:155::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33843:1:::1;33833:6;:11;;33825:20;;;::::0;::::1;;33869:6;33856:10;:19;;;;33886:14;:12;:14::i;:::-;33753:155:::0;:::o;10488:355::-;10628:4;10645:36;10655:6;10663:9;10674:6;10645:9;:36::i;:::-;10692:121;10701:6;10709:12;:10;:12::i;:::-;10723:89;10761:6;10723:89;;;;;;;;;;;;;;;;;:11;:19;10735:6;10723:19;;;;;;;;;;;;;;;:33;10743:12;:10;:12::i;:::-;10723:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10692:8;:121::i;:::-;10831:4;10824:11;;10488:355;;;;;:::o;29730:53::-;29776:6;29730:53;:::o;8626:93::-;8684:5;8709:2;8702:9;;8626:93;:::o;11252:218::-;11340:4;11357:83;11366:12;:10;:12::i;:::-;11380:7;11389:50;11428:10;11389:11;:25;11401:12;:10;:12::i;:::-;11389:25;;;;;;;;;;;;;;;:34;11415:7;11389:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11357:8;:83::i;:::-;11458:4;11451:11;;11252:218;;;;:::o;29685:38::-;;;:::o;30016:33::-;;;;;;;;;;;;;:::o;35752:125::-;35817:4;35841:19;:28;35861:7;35841:28;;;;;;;;;;;;;;;;;;;;;;;;;35834:35;;35752:125;;;:::o;34347:201::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34448:8:::1;34435:10;:21;;;;34479:7;34467:9;:19;;;;34525:9;;34512:10;;:22;;;;:::i;:::-;34497:12;:37;;;;34347:201:::0;;:::o;30473:28::-;;;;:::o;30095:30::-;;;;;;;;;;;;;:::o;8955:127::-;9029:7;9056:9;:18;9066:7;9056:18;;;;;;;;;;;;;;;;9049:25;;8955:127;;;:::o;22137:148::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22244:1:::1;22207:40;;22228:6;;;;;;;;;;;22207:40;;;;;;;;;;;;22275:1;22258:6;;:19;;;;;;;;;;;;;;;;;;22137:148::o:0;34191:144::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34323:4:::1;34281:31;:39;34313:6;34281:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34191:144:::0;;:::o;30588:26::-;;;;:::o;33255:282::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33323:1:::1;33310:10;:14;;;;33347:2;33335:9;:14;;;;33388:9;;33375:10;;:22;;;;:::i;:::-;33360:12;:37;;;;33424:1;33410:11;:15;;;;33449:2;33436:10;:15;;;;33492:10;;33478:11;;:24;;;;:::i;:::-;33462:13;:40;;;;33528:1;33515:10;:14;;;;33255:282::o:0;21495:79::-;21533:7;21560:6;;;;;;;;;;;21553:13;;21495:79;:::o;29979:24::-;;;;;;;;;;;;;:::o;7883:104::-;7939:13;7972:7;7965:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7883:104;:::o;30621:25::-;;;;:::o;35304:244::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35411:13:::1;35403:21;;:4;:21;;;;35395:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35499:41;35528:4;35534:5;35499:28;:41::i;:::-;35304:244:::0;;:::o;30341:24::-;;;;:::o;30552:27::-;;;;:::o;34081:98::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34165:6:::1;34152:10;:19;;;;34081:98:::0;:::o;30441:25::-;;;;:::o;11973:269::-;12066:4;12083:129;12092:12;:10;:12::i;:::-;12106:7;12115:96;12154:15;12115:96;;;;;;;;;;;;;;;;;:11;:25;12127:12;:10;:12::i;:::-;12115:25;;;;;;;;;;;;;;;:34;12141:7;12115:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12083:8;:129::i;:::-;12230:4;12223:11;;11973:269;;;;:::o;9295:175::-;9381:4;9398:42;9408:12;:10;:12::i;:::-;9422:9;9433:6;9398:9;:42::i;:::-;9458:4;9451:11;;9295:175;;;;:::o;30408:26::-;;;;:::o;31054:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30056:32::-;;;;;;;;;;;;;:::o;34886:182::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35002:8:::1;34971:19;:28;34991:7;34971:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35042:7;35026:34;;;35051:8;35026:34;;;;;;:::i;:::-;;;;;;;;34886:182:::0;;:::o;30261:39::-;;;;;;;;;;;;;:::o;29830:35::-;;;;:::o;30372:27::-;;;;:::o;9533:151::-;9622:7;9649:11;:18;9661:5;9649:18;;;;;;;;;;;;;;;:27;9668:7;9649:27;;;;;;;;;;;;;;;;9642:34;;9533:151;;;;:::o;29872:33::-;;;;:::o;30309:25::-;;;;:::o;30653:::-;;;;:::o;22440:244::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22549:1:::1;22529:22;;:8;:22;;;;22521:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22639:8;22610:38;;22631:6;;;;;;;;;;;22610:38;;;;;;;;;;;;22668:8;22659:6;;:17;;;;;;;;;;;;;;;;;;22440:244:::0;:::o;29912:24::-;;;;:::o;33553:188::-;21717:12;:10;:12::i;:::-;21707:22;;:6;;;;;;;;;;;:22;;;21699:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33640:9:::1;33635:99;33655:9;;:16;;33651:1;:20;33635:99;;;33720:4;33689:14;:28;33704:9;;33714:1;33704:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33689:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33673:3;;;;:::i;:::-;;;33635:99;;;;33553:188:::0;;:::o;16539:181::-;16597:7;16617:9;16633:1;16629;:5;;;;:::i;:::-;16617:17;;16658:1;16653;:6;;16645:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16711:1;16704:8;;;16539:181;;;;:::o;298:98::-;351:7;378:10;371:17;;298:98;:::o;15161:380::-;15314:1;15297:19;;:5;:19;;;;15289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15395:1;15376:21;;:7;:21;;;;15368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15479:6;15449:11;:18;15461:5;15449:18;;;;;;;;;;;;;;;:27;15468:7;15449:27;;;;;;;;;;;;;;;:36;;;;15517:7;15501:32;;15510:5;15501:32;;;15526:6;15501:32;;;;;;:::i;:::-;;;;;;;;15161:380;;;:::o;35076:220::-;35164:3;35151:10;;35142:6;;:19;;;;:::i;:::-;:25;;;;:::i;:::-;35119:20;:48;;;;35212:5;35208:1;35199:6;;:10;;;;:::i;:::-;:18;;;;:::i;:::-;35178;:39;;;;35285:3;35271:11;;35262:6;;:20;;;;:::i;:::-;:26;;;;:::i;:::-;35250:9;:38;;;;35076:220::o;35889:4196::-;36022:14;:20;36037:4;36022:20;;;;;;;;;;;;;;;;;;;;;;;;;36021:21;:44;;;;;36047:14;:18;36062:2;36047:18;;;;;;;;;;;;;;;;;;;;;;;;;36046:19;36021:44;36013:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;36132:1;36116:18;;:4;:18;;;;36108:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36209:1;36195:16;;:2;:16;;;;36187:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36306:1;36296:6;:11;36293:92;;;36324:28;36340:4;36346:2;36350:1;36324:15;:28::i;:::-;36367:7;;36293:92;36408:14;;;;;;;;;;;36405:1894;;;36468:7;:5;:7::i;:::-;36460:15;;:4;:15;;;;:49;;;;;36502:7;:5;:7::i;:::-;36496:13;;:2;:13;;;;36460:49;:86;;;;;36544:1;36530:16;;:2;:16;;;;36460:86;:128;;;;;36581:6;36567:21;;:2;:21;;;;36460:128;:158;;;;;36610:8;;;;;;;;;;;36609:9;36460:158;36438:1850;;;36656:13;;;;;;;;;;;36652:170;;36701:19;:25;36721:4;36701:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36730:19;:23;36750:2;36730:23;;;;;;;;;;;;;;;;;;;;;;;;;36701:52;36693:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36652:170;36998:20;;;;;;;;;;;36994:436;;;37052:7;:5;:7::i;:::-;37046:13;;:2;:13;;;;:47;;;;;37077:15;37063:30;;:2;:30;;;;37046:47;:79;;;;;37111:13;37097:28;;:2;:28;;;;37046:79;37042:369;;;37203:12;37161:28;:39;37190:9;37161:39;;;;;;;;;;;;;;;;:54;37153:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37377:10;;37362:12;:25;;;;:::i;:::-;37320:28;:39;37349:9;37320:39;;;;;;;;;;;;;;;:67;;;;37042:369;36994:436;37499:25;:31;37525:4;37499:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37535:31;:35;37567:2;37535:35;;;;;;;;;;;;;;;;;;;;;;;;;37534:36;37499:71;37495:778;;;37617:20;;37607:6;:30;;37599:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37756:9;;37739:13;37749:2;37739:9;:13::i;:::-;37730:6;:22;;;;:::i;:::-;:35;;37722:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37495:778;;;37883:25;:29;37909:2;37883:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37917:31;:37;37949:4;37917:37;;;;;;;;;;;;;;;;;;;;;;;;;37916:38;37883:71;37879:394;;;38001:20;;37991:6;:30;;37983:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37879:394;;;38127:31;:35;38159:2;38127:35;;;;;;;;;;;;;;;;;;;;;;;;;38123:150;;38220:9;;38203:13;38213:2;38203:9;:13::i;:::-;38194:6;:22;;;;:::i;:::-;:35;;38186:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38123:150;37879:394;37495:778;36438:1850;36405:1894;38309:28;38340:24;38358:4;38340:9;:24::i;:::-;38309:55;;38385:12;38424:18;;38400:20;:42;;38385:57;;38473:7;:33;;;;;38498:8;;;;;;;;;;;38497:9;38473:33;:61;;;;;38523:11;;;;;;;;;;;38473:61;:110;;;;;38552:25;:31;38578:4;38552:31;;;;;;;;;;;;;;;;;;;;;;;;;38551:32;38473:110;:153;;;;;38601:19;:25;38621:4;38601:25;;;;;;;;;;;;;;;;;;;;;;;;;38600:26;38473:153;:194;;;;;38644:19;:23;38664:2;38644:23;;;;;;;;;;;;;;;;;;;;;;;;;38643:24;38473:194;38455:338;;;38705:4;38694:8;;:15;;;;;;;;;;;;;;;;;;38738:10;:8;:10::i;:::-;38776:5;38765:8;;:16;;;;;;;;;;;;;;;;;;38455:338;38813:12;38829:8;;;;;;;;;;;38828:9;38813:24;;38853:19;:25;38873:4;38853:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38882:19;:23;38902:2;38882:23;;;;;;;;;;;;;;;;;;;;;;;;;38853:52;38850:99;;;38932:5;38922:15;;38850:99;38969:12;39001:7;38998:1034;;;39052:25;:29;39078:2;39052:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39101:1;39085:13;;:17;39052:50;39048:574;;;39129:34;39159:3;39129:25;39140:13;;39129:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39122:41;;39220:13;;39206:11;;39199:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;39182:13;;:51;;;;;;;:::i;:::-;;;;;;;;39288:13;;39275:10;;39268:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39252:12;;:49;;;;;;;:::i;:::-;;;;;;;;39048:574;;;39364:25;:31;39390:4;39364:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39414:1;39399:12;;:16;39364:51;39361:261;;;39442:33;39471:3;39442:24;39453:12;;39442:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39435:40;;39528:12;;39515:10;;39508:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;39491:13;;:49;;;;;;;:::i;:::-;;;;;;;;39594:12;;39582:9;;39575:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39559:12;;:47;;;;;;;:::i;:::-;;;;;;;;39361:261;39048:574;39660:1;39653:4;:8;39650:334;;;39685:42;39701:4;39715;39722;39685:15;:42::i;:::-;39766:1;39750:13;;:17;39746:223;;;39792:35;39806:4;39813:13;;39792:5;:35::i;:::-;39859:13;:11;:13::i;:::-;39850:6;:22;;;;39895:14;:12;:14::i;:::-;39948:1;39932:13;:17;;;;39746:223;39650:334;40016:4;40006:14;;;;;:::i;:::-;;;38998:1034;40044:33;40060:4;40066:2;40070:6;40044:15;:33::i;:::-;36002:4083;;;;35889:4196;;;;:::o;17442:192::-;17528:7;17561:1;17556;:6;;17564:12;17548:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17588:9;17604:1;17600;:5;;;;:::i;:::-;17588:17;;17625:1;17618:8;;;17442:192;;;;;:::o;35556:188::-;35673:5;35639:25;:31;35665:4;35639:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35730:5;35696:40;;35724:4;35696:40;;;;;;;;;;;;35556:188;;:::o;12732:575::-;12890:1;12872:20;;:6;:20;;;;12864:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12974:1;12953:23;;:9;:23;;;;12945:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13031:47;13052:6;13060:9;13071:6;13031:20;:47::i;:::-;13111:71;13133:6;13111:71;;;;;;;;;;;;;;;;;:9;:17;13121:6;13111:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13091:9;:17;13101:6;13091:17;;;;;;;;;;;;;;;:91;;;;13216:32;13241:6;13216:9;:20;13226:9;13216:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13193:9;:20;13203:9;13193:20;;;;;;;;;;;;;;;:55;;;;13281:9;13264:35;;13273:6;13264:35;;;13292:6;13264:35;;;;;;:::i;:::-;;;;;;;;12732:575;;;:::o;40712:464::-;40751:23;40777:24;40795:4;40777:9;:24::i;:::-;40751:50;;40812:12;40867:1;40848:15;:20;40845:34;;;40871:7;;;;40845:34;40933:2;40912:18;;:23;;;;:::i;:::-;40894:15;:41;40891:111;;;40988:2;40967:18;;:23;;;;:::i;:::-;40949:41;;40891:111;41014:33;41031:15;41014:16;:33::i;:::-;41084:1;41069:12;:16;;;;41119:9;;;;;;;;;;;41111:23;;41142:21;41111:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41098:70;;;;;40740:436;;40712:464;:::o;17893:471::-;17951:7;18201:1;18196;:6;18192:47;;;18226:1;18219:8;;;;18192:47;18251:9;18267:1;18263;:5;;;;:::i;:::-;18251:17;;18296:1;18291;18287;:5;;;;:::i;:::-;:10;18279:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18355:1;18348:8;;;17893:471;;;;;:::o;18840:132::-;18898:7;18925:39;18929:1;18932;18925:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18918:46;;18840:132;;;;:::o;14305:418::-;14408:1;14389:21;;:7;:21;;;;14381:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14461:49;14482:7;14499:1;14503:6;14461:20;:49::i;:::-;14544:68;14567:6;14544:68;;;;;;;;;;;;;;;;;:9;:18;14554:7;14544:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14523:9;:18;14533:7;14523:18;;;;;;;;;;;;;;;:89;;;;14638:24;14655:6;14638:12;;:16;;:24;;;;:::i;:::-;14623:12;:39;;;;14704:1;14678:37;;14687:7;14678:37;;;14708:6;14678:37;;;;;;:::i;:::-;;;;;;;;14305:418;;:::o;16144:125::-;;;;:::o;40093:601::-;40221:21;40259:1;40245:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40221:40;;40290:4;40272;40277:1;40272:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40316:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40306:4;40311:1;40306:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40351:62;40368:4;40383:15;40401:11;40351:8;:62::i;:::-;40452:15;:66;;;40533:11;40559:1;40603:4;40630;40650:15;40452:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40148:546;40093:601;:::o;19468:278::-;19554:7;19586:1;19582;:5;19589:12;19574:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19613:9;19629:1;19625;:5;;;;:::i;:::-;19613:17;;19737:1;19730:8;;;19468:278;;;;;:::o;17003:136::-;17061:7;17088:43;17092:1;17095;17088:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17081:50;;17003:136;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:99::-;1574:6;1608:5;1602:12;1592:22;;1522:99;;;:::o;1627:169::-;1711:11;1745:6;1740:3;1733:19;1785:4;1780:3;1776:14;1761:29;;1627:169;;;;:::o;1802:307::-;1870:1;1880:113;1894:6;1891:1;1888:13;1880:113;;;1979:1;1974:3;1970:11;1964:18;1960:1;1955:3;1951:11;1944:39;1916:2;1913:1;1909:10;1904:15;;1880:113;;;2011:6;2008:1;2005:13;2002:101;;;2091:1;2082:6;2077:3;2073:16;2066:27;2002:101;1851:258;1802:307;;;:::o;2115:102::-;2156:6;2207:2;2203:7;2198:2;2191:5;2187:14;2183:28;2173:38;;2115:102;;;:::o;2223:364::-;2311:3;2339:39;2372:5;2339:39;:::i;:::-;2394:71;2458:6;2453:3;2394:71;:::i;:::-;2387:78;;2474:52;2519:6;2514:3;2507:4;2500:5;2496:16;2474:52;:::i;:::-;2551:29;2573:6;2551:29;:::i;:::-;2546:3;2542:39;2535:46;;2315:272;2223:364;;;;:::o;2593:313::-;2706:4;2744:2;2733:9;2729:18;2721:26;;2793:9;2787:4;2783:20;2779:1;2768:9;2764:17;2757:47;2821:78;2894:4;2885:6;2821:78;:::i;:::-;2813:86;;2593:313;;;;:::o;2912:126::-;2949:7;2989:42;2982:5;2978:54;2967:65;;2912:126;;;:::o;3044:96::-;3081:7;3110:24;3128:5;3110:24;:::i;:::-;3099:35;;3044:96;;;:::o;3146:122::-;3219:24;3237:5;3219:24;:::i;:::-;3212:5;3209:35;3199:63;;3258:1;3255;3248:12;3199:63;3146:122;:::o;3274:139::-;3320:5;3358:6;3345:20;3336:29;;3374:33;3401:5;3374:33;:::i;:::-;3274:139;;;;:::o;3419:474::-;3487:6;3495;3544:2;3532:9;3523:7;3519:23;3515:32;3512:119;;;3550:79;;:::i;:::-;3512:119;3670:1;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3641:117;3797:2;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3768:118;3419:474;;;;;:::o;3899:90::-;3933:7;3976:5;3969:13;3962:21;3951:32;;3899:90;;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;3995:109;;:::o;4110:210::-;4197:4;4235:2;4224:9;4220:18;4212:26;;4248:65;4310:1;4299:9;4295:17;4286:6;4248:65;:::i;:::-;4110:210;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:::-;4720:6;4769:2;4757:9;4748:7;4744:23;4740:32;4737:119;;;4775:79;;:::i;:::-;4737:119;4895:1;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4866:117;4661:329;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:474::-;8184:6;8192;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8494:2;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8465:118;8116:474;;;;;:::o;8596:117::-;8705:1;8702;8695:12;8719:117;8828:1;8825;8818:12;8842:117;8951:1;8948;8941:12;8982:568;9055:8;9065:6;9115:3;9108:4;9100:6;9096:17;9092:27;9082:122;;9123:79;;:::i;:::-;9082:122;9236:6;9223:20;9213:30;;9266:18;9258:6;9255:30;9252:117;;;9288:79;;:::i;:::-;9252:117;9402:4;9394:6;9390:17;9378:29;;9456:3;9448:4;9440:6;9436:17;9426:8;9422:32;9419:41;9416:128;;;9463:79;;:::i;:::-;9416:128;8982:568;;;;;:::o;9556:559::-;9642:6;9650;9699:2;9687:9;9678:7;9674:23;9670:32;9667:119;;;9705:79;;:::i;:::-;9667:119;9853:1;9842:9;9838:17;9825:31;9883:18;9875:6;9872:30;9869:117;;;9905:79;;:::i;:::-;9869:117;10018:80;10090:7;10081:6;10070:9;10066:22;10018:80;:::i;:::-;10000:98;;;;9796:312;9556:559;;;;;:::o;10121:182::-;10261:34;10257:1;10249:6;10245:14;10238:58;10121:182;:::o;10309:366::-;10451:3;10472:67;10536:2;10531:3;10472:67;:::i;:::-;10465:74;;10548:93;10637:3;10548:93;:::i;:::-;10666:2;10661:3;10657:12;10650:19;;10309:366;;;:::o;10681:419::-;10847:4;10885:2;10874:9;10870:18;10862:26;;10934:9;10928:4;10924:20;10920:1;10909:9;10905:17;10898:47;10962:131;11088:4;10962:131;:::i;:::-;10954:139;;10681:419;;;:::o;11106:180::-;11154:77;11151:1;11144:88;11251:4;11248:1;11241:15;11275:4;11272:1;11265:15;11292:305;11332:3;11351:20;11369:1;11351:20;:::i;:::-;11346:25;;11385:20;11403:1;11385:20;:::i;:::-;11380:25;;11539:1;11471:66;11467:74;11464:1;11461:81;11458:107;;;11545:18;;:::i;:::-;11458:107;11589:1;11586;11582:9;11575:16;;11292:305;;;;:::o;11603:180::-;11651:77;11648:1;11641:88;11748:4;11745:1;11738:15;11772:4;11769:1;11762:15;11789:320;11833:6;11870:1;11864:4;11860:12;11850:22;;11917:1;11911:4;11907:12;11938:18;11928:81;;11994:4;11986:6;11982:17;11972:27;;11928:81;12056:2;12048:6;12045:14;12025:18;12022:38;12019:84;;;12075:18;;:::i;:::-;12019:84;11840:269;11789:320;;;:::o;12115:244::-;12255:34;12251:1;12243:6;12239:14;12232:58;12324:27;12319:2;12311:6;12307:15;12300:52;12115:244;:::o;12365:366::-;12507:3;12528:67;12592:2;12587:3;12528:67;:::i;:::-;12521:74;;12604:93;12693:3;12604:93;:::i;:::-;12722:2;12717:3;12713:12;12706:19;;12365:366;;;:::o;12737:419::-;12903:4;12941:2;12930:9;12926:18;12918:26;;12990:9;12984:4;12980:20;12976:1;12965:9;12961:17;12954:47;13018:131;13144:4;13018:131;:::i;:::-;13010:139;;12737:419;;;:::o;13162:225::-;13302:34;13298:1;13290:6;13286:14;13279:58;13371:8;13366:2;13358:6;13354:15;13347:33;13162:225;:::o;13393:366::-;13535:3;13556:67;13620:2;13615:3;13556:67;:::i;:::-;13549:74;;13632:93;13721:3;13632:93;:::i;:::-;13750:2;13745:3;13741:12;13734:19;;13393:366;;;:::o;13765:419::-;13931:4;13969:2;13958:9;13954:18;13946:26;;14018:9;14012:4;14008:20;14004:1;13993:9;13989:17;13982:47;14046:131;14172:4;14046:131;:::i;:::-;14038:139;;13765:419;;;:::o;14190:180::-;14238:77;14235:1;14228:88;14335:4;14332:1;14325:15;14359:4;14356:1;14349:15;14376:233;14415:3;14438:24;14456:5;14438:24;:::i;:::-;14429:33;;14484:66;14477:5;14474:77;14471:103;;;14554:18;;:::i;:::-;14471:103;14601:1;14594:5;14590:13;14583:20;;14376:233;;;:::o;14615:177::-;14755:29;14751:1;14743:6;14739:14;14732:53;14615:177;:::o;14798:366::-;14940:3;14961:67;15025:2;15020:3;14961:67;:::i;:::-;14954:74;;15037:93;15126:3;15037:93;:::i;:::-;15155:2;15150:3;15146:12;15139:19;;14798:366;;;:::o;15170:419::-;15336:4;15374:2;15363:9;15359:18;15351:26;;15423:9;15417:4;15413:20;15409:1;15398:9;15394:17;15387:47;15451:131;15577:4;15451:131;:::i;:::-;15443:139;;15170:419;;;:::o;15595:223::-;15735:34;15731:1;15723:6;15719:14;15712:58;15804:6;15799:2;15791:6;15787:15;15780:31;15595:223;:::o;15824:366::-;15966:3;15987:67;16051:2;16046:3;15987:67;:::i;:::-;15980:74;;16063:93;16152:3;16063:93;:::i;:::-;16181:2;16176:3;16172:12;16165:19;;15824:366;;;:::o;16196:419::-;16362:4;16400:2;16389:9;16385:18;16377:26;;16449:9;16443:4;16439:20;16435:1;16424:9;16420:17;16413:47;16477:131;16603:4;16477:131;:::i;:::-;16469:139;;16196:419;;;:::o;16621:221::-;16761:34;16757:1;16749:6;16745:14;16738:58;16830:4;16825:2;16817:6;16813:15;16806:29;16621:221;:::o;16848:366::-;16990:3;17011:67;17075:2;17070:3;17011:67;:::i;:::-;17004:74;;17087:93;17176:3;17087:93;:::i;:::-;17205:2;17200:3;17196:12;17189:19;;16848:366;;;:::o;17220:419::-;17386:4;17424:2;17413:9;17409:18;17401:26;;17473:9;17467:4;17463:20;17459:1;17448:9;17444:17;17437:47;17501:131;17627:4;17501:131;:::i;:::-;17493:139;;17220:419;;;:::o;17645:348::-;17685:7;17708:20;17726:1;17708:20;:::i;:::-;17703:25;;17742:20;17760:1;17742:20;:::i;:::-;17737:25;;17930:1;17862:66;17858:74;17855:1;17852:81;17847:1;17840:9;17833:17;17829:105;17826:131;;;17937:18;;:::i;:::-;17826:131;17985:1;17982;17978:9;17967:20;;17645:348;;;;:::o;17999:180::-;18047:77;18044:1;18037:88;18144:4;18141:1;18134:15;18168:4;18165:1;18158:15;18185:185;18225:1;18242:20;18260:1;18242:20;:::i;:::-;18237:25;;18276:20;18294:1;18276:20;:::i;:::-;18271:25;;18315:1;18305:35;;18320:18;;:::i;:::-;18305:35;18362:1;18359;18355:9;18350:14;;18185:185;;;;:::o;18376:177::-;18516:29;18512:1;18504:6;18500:14;18493:53;18376:177;:::o;18559:366::-;18701:3;18722:67;18786:2;18781:3;18722:67;:::i;:::-;18715:74;;18798:93;18887:3;18798:93;:::i;:::-;18916:2;18911:3;18907:12;18900:19;;18559:366;;;:::o;18931:419::-;19097:4;19135:2;19124:9;19120:18;19112:26;;19184:9;19178:4;19174:20;19170:1;19159:9;19155:17;19148:47;19212:131;19338:4;19212:131;:::i;:::-;19204:139;;18931:419;;;:::o;19356:224::-;19496:34;19492:1;19484:6;19480:14;19473:58;19565:7;19560:2;19552:6;19548:15;19541:32;19356:224;:::o;19586:366::-;19728:3;19749:67;19813:2;19808:3;19749:67;:::i;:::-;19742:74;;19825:93;19914:3;19825:93;:::i;:::-;19943:2;19938:3;19934:12;19927:19;;19586:366;;;:::o;19958:419::-;20124:4;20162:2;20151:9;20147:18;20139:26;;20211:9;20205:4;20201:20;20197:1;20186:9;20182:17;20175:47;20239:131;20365:4;20239:131;:::i;:::-;20231:139;;19958:419;;;:::o;20383:222::-;20523:34;20519:1;20511:6;20507:14;20500:58;20592:5;20587:2;20579:6;20575:15;20568:30;20383:222;:::o;20611:366::-;20753:3;20774:67;20838:2;20833:3;20774:67;:::i;:::-;20767:74;;20850:93;20939:3;20850:93;:::i;:::-;20968:2;20963:3;20959:12;20952:19;;20611:366;;;:::o;20983:419::-;21149:4;21187:2;21176:9;21172:18;21164:26;;21236:9;21230:4;21226:20;21222:1;21211:9;21207:17;21200:47;21264:131;21390:4;21264:131;:::i;:::-;21256:139;;20983:419;;;:::o;21408:172::-;21548:24;21544:1;21536:6;21532:14;21525:48;21408:172;:::o;21586:366::-;21728:3;21749:67;21813:2;21808:3;21749:67;:::i;:::-;21742:74;;21825:93;21914:3;21825:93;:::i;:::-;21943:2;21938:3;21934:12;21927:19;;21586:366;;;:::o;21958:419::-;22124:4;22162:2;22151:9;22147:18;22139:26;;22211:9;22205:4;22201:20;22197:1;22186:9;22182:17;22175:47;22239:131;22365:4;22239:131;:::i;:::-;22231:139;;21958:419;;;:::o;22383:297::-;22523:34;22519:1;22511:6;22507:14;22500:58;22592:34;22587:2;22579:6;22575:15;22568:59;22661:11;22656:2;22648:6;22644:15;22637:36;22383:297;:::o;22686:366::-;22828:3;22849:67;22913:2;22908:3;22849:67;:::i;:::-;22842:74;;22925:93;23014:3;22925:93;:::i;:::-;23043:2;23038:3;23034:12;23027:19;;22686:366;;;:::o;23058:419::-;23224:4;23262:2;23251:9;23247:18;23239:26;;23311:9;23305:4;23301:20;23297:1;23286:9;23282:17;23275:47;23339:131;23465:4;23339:131;:::i;:::-;23331:139;;23058:419;;;:::o;23483:240::-;23623:34;23619:1;23611:6;23607:14;23600:58;23692:23;23687:2;23679:6;23675:15;23668:48;23483:240;:::o;23729:366::-;23871:3;23892:67;23956:2;23951:3;23892:67;:::i;:::-;23885:74;;23968:93;24057:3;23968:93;:::i;:::-;24086:2;24081:3;24077:12;24070:19;;23729:366;;;:::o;24101:419::-;24267:4;24305:2;24294:9;24290:18;24282:26;;24354:9;24348:4;24344:20;24340:1;24329:9;24325:17;24318:47;24382:131;24508:4;24382:131;:::i;:::-;24374:139;;24101:419;;;:::o;24526:169::-;24666:21;24662:1;24654:6;24650:14;24643:45;24526:169;:::o;24701:366::-;24843:3;24864:67;24928:2;24923:3;24864:67;:::i;:::-;24857:74;;24940:93;25029:3;24940:93;:::i;:::-;25058:2;25053:3;25049:12;25042:19;;24701:366;;;:::o;25073:419::-;25239:4;25277:2;25266:9;25262:18;25254:26;;25326:9;25320:4;25316:20;25312:1;25301:9;25297:17;25290:47;25354:131;25480:4;25354:131;:::i;:::-;25346:139;;25073:419;;;:::o;25498:241::-;25638:34;25634:1;25626:6;25622:14;25615:58;25707:24;25702:2;25694:6;25690:15;25683:49;25498:241;:::o;25745:366::-;25887:3;25908:67;25972:2;25967:3;25908:67;:::i;:::-;25901:74;;25984:93;26073:3;25984:93;:::i;:::-;26102:2;26097:3;26093:12;26086:19;;25745:366;;;:::o;26117:419::-;26283:4;26321:2;26310:9;26306:18;26298:26;;26370:9;26364:4;26360:20;26356:1;26345:9;26341:17;26334:47;26398:131;26524:4;26398:131;:::i;:::-;26390:139;;26117:419;;;:::o;26542:191::-;26582:4;26602:20;26620:1;26602:20;:::i;:::-;26597:25;;26636:20;26654:1;26636:20;:::i;:::-;26631:25;;26675:1;26672;26669:8;26666:34;;;26680:18;;:::i;:::-;26666:34;26725:1;26722;26718:9;26710:17;;26542:191;;;;:::o;26739:147::-;26840:11;26877:3;26862:18;;26739:147;;;;:::o;26892:114::-;;:::o;27012:398::-;27171:3;27192:83;27273:1;27268:3;27192:83;:::i;:::-;27185:90;;27284:93;27373:3;27284:93;:::i;:::-;27402:1;27397:3;27393:11;27386:18;;27012:398;;;:::o;27416:379::-;27600:3;27622:147;27765:3;27622:147;:::i;:::-;27615:154;;27786:3;27779:10;;27416:379;;;:::o;27801:220::-;27941:34;27937:1;27929:6;27925:14;27918:58;28010:3;28005:2;27997:6;27993:15;27986:28;27801:220;:::o;28027:366::-;28169:3;28190:67;28254:2;28249:3;28190:67;:::i;:::-;28183:74;;28266:93;28355:3;28266:93;:::i;:::-;28384:2;28379:3;28375:12;28368:19;;28027:366;;;:::o;28399:419::-;28565:4;28603:2;28592:9;28588:18;28580:26;;28652:9;28646:4;28642:20;28638:1;28627:9;28623:17;28616:47;28680:131;28806:4;28680:131;:::i;:::-;28672:139;;28399:419;;;:::o;28824:220::-;28964:34;28960:1;28952:6;28948:14;28941:58;29033:3;29028:2;29020:6;29016:15;29009:28;28824:220;:::o;29050:366::-;29192:3;29213:67;29277:2;29272:3;29213:67;:::i;:::-;29206:74;;29289:93;29378:3;29289:93;:::i;:::-;29407:2;29402:3;29398:12;29391:19;;29050:366;;;:::o;29422:419::-;29588:4;29626:2;29615:9;29611:18;29603:26;;29675:9;29669:4;29665:20;29661:1;29650:9;29646:17;29639:47;29703:131;29829:4;29703:131;:::i;:::-;29695:139;;29422:419;;;:::o;29847:180::-;29895:77;29892:1;29885:88;29992:4;29989:1;29982:15;30016:4;30013:1;30006:15;30033:143;30090:5;30121:6;30115:13;30106:22;;30137:33;30164:5;30137:33;:::i;:::-;30033:143;;;;:::o;30182:351::-;30252:6;30301:2;30289:9;30280:7;30276:23;30272:32;30269:119;;;30307:79;;:::i;:::-;30269:119;30427:1;30452:64;30508:7;30499:6;30488:9;30484:22;30452:64;:::i;:::-;30442:74;;30398:128;30182:351;;;;:::o;30539:85::-;30584:7;30613:5;30602:16;;30539:85;;;:::o;30630:158::-;30688:9;30721:61;30739:42;30748:32;30774:5;30748:32;:::i;:::-;30739:42;:::i;:::-;30721:61;:::i;:::-;30708:74;;30630:158;;;:::o;30794:147::-;30889:45;30928:5;30889:45;:::i;:::-;30884:3;30877:58;30794:147;;:::o;30947:114::-;31014:6;31048:5;31042:12;31032:22;;30947:114;;;:::o;31067:184::-;31166:11;31200:6;31195:3;31188:19;31240:4;31235:3;31231:14;31216:29;;31067:184;;;;:::o;31257:132::-;31324:4;31347:3;31339:11;;31377:4;31372:3;31368:14;31360:22;;31257:132;;;:::o;31395:108::-;31472:24;31490:5;31472:24;:::i;:::-;31467:3;31460:37;31395:108;;:::o;31509:179::-;31578:10;31599:46;31641:3;31633:6;31599:46;:::i;:::-;31677:4;31672:3;31668:14;31654:28;;31509:179;;;;:::o;31694:113::-;31764:4;31796;31791:3;31787:14;31779:22;;31694:113;;;:::o;31843:732::-;31962:3;31991:54;32039:5;31991:54;:::i;:::-;32061:86;32140:6;32135:3;32061:86;:::i;:::-;32054:93;;32171:56;32221:5;32171:56;:::i;:::-;32250:7;32281:1;32266:284;32291:6;32288:1;32285:13;32266:284;;;32367:6;32361:13;32394:63;32453:3;32438:13;32394:63;:::i;:::-;32387:70;;32480:60;32533:6;32480:60;:::i;:::-;32470:70;;32326:224;32313:1;32310;32306:9;32301:14;;32266:284;;;32270:14;32566:3;32559:10;;31967:608;;;31843:732;;;;:::o;32581:831::-;32844:4;32882:3;32871:9;32867:19;32859:27;;32896:71;32964:1;32953:9;32949:17;32940:6;32896:71;:::i;:::-;32977:80;33053:2;33042:9;33038:18;33029:6;32977:80;:::i;:::-;33104:9;33098:4;33094:20;33089:2;33078:9;33074:18;33067:48;33132:108;33235:4;33226:6;33132:108;:::i;:::-;33124:116;;33250:72;33318:2;33307:9;33303:18;33294:6;33250:72;:::i;:::-;33332:73;33400:3;33389:9;33385:19;33376:6;33332:73;:::i;:::-;32581:831;;;;;;;;:::o

Swarm Source

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