ETH Price: $2,517.64 (+3.38%)

Token

Burn Them All (TARGARYEN INU)
 

Overview

Max Total Supply

1,000,000,000,000,000,000,000,000,000,000 TARGARYEN INU

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
17,047,394,097,650,239,576,931,966.547488 TARGARYEN INU

Value
$0.00
0xc2843a83fc9dbc16f8ad3922e8b0d1c1f9334f53
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:
TargaryenInu

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-29
*/

/*

“Then the storm broke, and the dragons danced.”
― George R.R. Martin, Fire & Blood

*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

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

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

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

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

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

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event 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 6;
    }

    /**
     * @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.17;

contract TargaryenInu 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;

    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;
    uint256 public swapDigit;
    
    /******************/

    // 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("Burn Them All", "TARGARYEN INU") {
        
        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 = 2;
        uint256 _buyDevFee = 3;

        uint256 _sellBurnFee = 2;
        uint256 _sellDevFee = 3;
        
        uint256 totalSupply = 1 * 1e30 * 1e6;
        supply += totalSupply;
        
        walletDigit = 2;
        transDigit = 2;
        delayDigit = 0;
        swapDigit = 300;

        maxTransactionAmount = supply * transDigit / 100;
        swapTokensAtAmount = supply * swapDigit / 1000000; // 0.01% swap wallet;
        maxWallet = supply * walletDigit / 100;

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

        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 = 10;
        buyTotalFees = buyBurnFee + buyDevFee;

        sellBurnFee = 5;
        sellDevFee = 10;
        sellTotalFees = sellBurnFee + sellDevFee;

        delayDigit = 5;
    }
    
    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 updateSwapDigit(uint256 newNum) external onlyOwner {
        require(newNum >= 1);
        swapDigit = 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;
        require(buyTotalFees <= 15, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _burnFee, uint256 _devFee) external onlyOwner {
        sellBurnFee = _burnFee;
        sellDevFee = _devFee;
        sellTotalFees = sellBurnFee + sellDevFee;
        require(sellTotalFees <= 15, "Must keep fees at 25% or less");
    }

    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 * swapDigit / 1000000; // 0.01% 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(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}("");
    }

}

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":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"swapDigit","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":"updateSwapDigit","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"}]

60c06040526001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff0219169083151502179055506001600a60166101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600d81526020017f4275726e205468656d20416c6c000000000000000000000000000000000000008152506040518060400160405280600d81526020017f54415247415259454e20494e55000000000000000000000000000000000000008152508160039081620000fb919062000fb4565b5080600490816200010d919062000fb4565b5050506000620001226200063660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200063e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062001105565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062001105565b6040518363ffffffff1660e01b81526004016200034092919062001148565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062001105565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200063e60201b60201c565b620003e360a05160016200073b60201b60201c565b60006002905060006003905060006002905060006003905060006ec097ce7bc90715b34b9f100000000090508060096000828254620004239190620011a4565b9250508190555060026015819055506002601681905550600060178190555061012c60188190555060646016546009546200045f9190620011df565b6200046b919062001259565b600681905550620f4240601854600954620004879190620011df565b62000493919062001259565b6007819055506064601554600954620004ad9190620011df565b620004b9919062001259565b60088190555084600d8190555083600e81905550600e54600d54620004df9190620011a4565b600f819055508260108190555081601181905550601154601054620005059190620011a4565b6012819055507360fdbba9b0502c282bcc15a86c2b2c411a545841600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058262000574620007dc60201b60201c565b60016200080660201b60201c565b620005953060016200080660201b60201c565b620005aa61dead60016200080660201b60201c565b620005cc620005be620007dc60201b60201c565b60016200063e60201b60201c565b620005df3060016200063e60201b60201c565b620005f461dead60016200063e60201b60201c565b6200061862000608620007dc60201b60201c565b608051836200095360201b60201c565b6200062a338262000b2460201b60201c565b50505050505062001590565b600033905090565b6200064e6200063660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d790620012f2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008166200063660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089f90620012f2565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000947919062001331565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620009c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bc90620013c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2e906200145c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b1791906200148f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8d90620014fc565b60405180910390fd5b62000baa6000838362000cd260201b60201c565b62000bc68160025462000cd760201b62001fd61790919060201c565b60028190555062000c24816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cd760201b62001fd61790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cc691906200148f565b60405180910390a35050565b505050565b600080828462000ce89190620011a4565b90508381101562000d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d27906200156e565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dbc57607f821691505b60208210810362000dd25762000dd162000d74565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e3c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dfd565b62000e48868362000dfd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e9562000e8f62000e898462000e60565b62000e6a565b62000e60565b9050919050565b6000819050919050565b62000eb18362000e74565b62000ec962000ec08262000e9c565b84845462000e0a565b825550505050565b600090565b62000ee062000ed1565b62000eed81848462000ea6565b505050565b5b8181101562000f155762000f0960008262000ed6565b60018101905062000ef3565b5050565b601f82111562000f645762000f2e8162000dd8565b62000f398462000ded565b8101602085101562000f49578190505b62000f6162000f588562000ded565b83018262000ef2565b50505b505050565b600082821c905092915050565b600062000f896000198460080262000f69565b1980831691505092915050565b600062000fa4838362000f76565b9150826002028217905092915050565b62000fbf8262000d3a565b67ffffffffffffffff81111562000fdb5762000fda62000d45565b5b62000fe7825462000da3565b62000ff482828562000f19565b600060209050601f8311600181146200102c576000841562001017578287015190505b62001023858262000f96565b86555062001093565b601f1984166200103c8662000dd8565b60005b8281101562001066578489015182556001820191506020850194506020810190506200103f565b8683101562001086578489015162001082601f89168262000f76565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010cd82620010a0565b9050919050565b620010df81620010c0565b8114620010eb57600080fd5b50565b600081519050620010ff81620010d4565b92915050565b6000602082840312156200111e576200111d6200109b565b5b60006200112e84828501620010ee565b91505092915050565b6200114281620010c0565b82525050565b60006040820190506200115f600083018562001137565b6200116e602083018462001137565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011b18262000e60565b9150620011be8362000e60565b9250828201905080821115620011d957620011d862001175565b5b92915050565b6000620011ec8262000e60565b9150620011f98362000e60565b9250828202620012098162000e60565b9150828204841483151762001223576200122262001175565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012668262000e60565b9150620012738362000e60565b9250826200128657620012856200122a565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012da60208362001291565b9150620012e782620012a2565b602082019050919050565b600060208201905081810360008301526200130d81620012cb565b9050919050565b60008115159050919050565b6200132b8162001314565b82525050565b600060208201905062001348600083018462001320565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620013ac60248362001291565b9150620013b9826200134e565b604082019050919050565b60006020820190508181036000830152620013df816200139d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200144460228362001291565b91506200145182620013e6565b604082019050919050565b60006020820190508181036000830152620014778162001435565b9050919050565b620014898162000e60565b82525050565b6000602082019050620014a660008301846200147e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620014e4601f8362001291565b9150620014f182620014ac565b602082019050919050565b600060208201905081810360008301526200151781620014d5565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001556601b8362001291565b915062001563826200151e565b602082019050919050565b60006020820190508181036000830152620015898162001547565b9050919050565b60805160a051614ab4620015e060003960008181611236015281816118ea0152612624015260008181610ed5015281816125cc015281816136790152818161375a01526137810152614ab46000f3fe6080604052600436106103035760003560e01c80638a8c523c11610190578063adb873bd116100dc578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610b97578063f203acb614610bc2578063f2fde38b14610bed578063f8b45b0514610c165761030a565b8063d85ba06314610b04578063dd62ed3e14610b2f578063e2f4560514610b6c5761030a565b8063adb873bd146109f2578063b62496f514610a1d578063bbc0c74214610a5a578063c024666814610a85578063c876d0b914610aae578063c8c8ebe414610ad95761030a565b80639c3b4fdc11610149578063a0d82dc511610123578063a0d82dc514610924578063a457c2d71461094f578063a9059cbb1461098c578063aafe9cc9146109c95761030a565b80639c3b4fdc146108a55780639fccce32146108d05780639fdc4824146108fb5761030a565b80638a8c523c146107b95780638da5cb5b146107d05780638ea5220f146107fb57806395d89b4114610826578063975d71e2146108515780639a7a23d61461087c5761030a565b8063313ce5671161024f5780636a486a8e1161020857806370a08231116101e257806370a0823114610711578063715018a61461074e5780637571336a146107655780637ab439831461078e5761030a565b80636a486a8e146106905780636c2acb56146106bb5780636ddd1713146106e65761030a565b8063313ce5671461056c578063395093511461059757806349bd5a5e146105d45780634a62bb65146105ff5780634fbee1931461062a57806366ca9b83146106675761030a565b80631694505e116102bc5780631d777856116102965780631d777856146104b05780631fa07da5146104db57806323b872dd1461050457806327c8f835146105415761030a565b80631694505e1461043157806318160ddd1461045c5780631816467f146104875761030a565b806302dbd8f81461030f578063047fc9aa1461033857806306fdde0314610363578063095ea7b31461038e57806310d5de53146103cb578063150de0bb146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610336600480360381019061033191906138ff565b610c41565b005b34801561034457600080fd5b5061034d610d46565b60405161035a919061394e565b60405180910390f35b34801561036f57600080fd5b50610378610d4c565b60405161038591906139f9565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613a79565b610dde565b6040516103c29190613ad4565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613aef565b610dfc565b6040516103ff9190613ad4565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613b1c565b610e1c565b005b34801561043d57600080fd5b50610446610ed3565b6040516104539190613ba8565b60405180910390f35b34801561046857600080fd5b50610471610ef7565b60405161047e919061394e565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190613aef565b610f01565b005b3480156104bc57600080fd5b506104c5610fdc565b6040516104d2919061394e565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613b1c565b610fe2565b005b34801561051057600080fd5b5061052b60048036038101906105269190613bc3565b611099565b6040516105389190613ad4565b60405180910390f35b34801561054d57600080fd5b50610556611172565b6040516105639190613c25565b60405180910390f35b34801561057857600080fd5b50610581611178565b60405161058e9190613c5c565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613a79565b611181565b6040516105cb9190613ad4565b60405180910390f35b3480156105e057600080fd5b506105e9611234565b6040516105f69190613c25565b60405180910390f35b34801561060b57600080fd5b50610614611258565b6040516106219190613ad4565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613aef565b61126b565b60405161065e9190613ad4565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906138ff565b6112c1565b005b34801561069c57600080fd5b506106a56113c5565b6040516106b2919061394e565b60405180910390f35b3480156106c757600080fd5b506106d06113cb565b6040516106dd919061394e565b60405180910390f35b3480156106f257600080fd5b506106fb6113d1565b6040516107089190613ad4565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613aef565b6113e4565b604051610745919061394e565b60405180910390f35b34801561075a57600080fd5b5061076361142c565b005b34801561077157600080fd5b5061078c60048036038101906107879190613ca3565b611584565b005b34801561079a57600080fd5b506107a3611676565b6040516107b0919061394e565b60405180910390f35b3480156107c557600080fd5b506107ce61167c565b005b3480156107dc57600080fd5b506107e5611769565b6040516107f29190613c25565b60405180910390f35b34801561080757600080fd5b50610810611793565b60405161081d9190613c25565b60405180910390f35b34801561083257600080fd5b5061083b6117b9565b60405161084891906139f9565b60405180910390f35b34801561085d57600080fd5b5061086661184b565b604051610873919061394e565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190613ca3565b611851565b005b3480156108b157600080fd5b506108ba611984565b6040516108c7919061394e565b60405180910390f35b3480156108dc57600080fd5b506108e561198a565b6040516108f2919061394e565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613b1c565b611990565b005b34801561093057600080fd5b50610939611a31565b604051610946919061394e565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190613a79565b611a37565b6040516109839190613ad4565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae9190613a79565b611b04565b6040516109c09190613ad4565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613b1c565b611b22565b005b3480156109fe57600080fd5b50610a07611bd9565b604051610a14919061394e565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190613aef565b611bdf565b604051610a519190613ad4565b60405180910390f35b348015610a6657600080fd5b50610a6f611bff565b604051610a7c9190613ad4565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa79190613ca3565b611c12565b005b348015610aba57600080fd5b50610ac3611d52565b604051610ad09190613ad4565b60405180910390f35b348015610ae557600080fd5b50610aee611d65565b604051610afb919061394e565b60405180910390f35b348015610b1057600080fd5b50610b19611d6b565b604051610b26919061394e565b60405180910390f35b348015610b3b57600080fd5b50610b566004803603810190610b519190613ce3565b611d71565b604051610b63919061394e565b60405180910390f35b348015610b7857600080fd5b50610b81611df8565b604051610b8e919061394e565b60405180910390f35b348015610ba357600080fd5b50610bac611dfe565b604051610bb9919061394e565b60405180910390f35b348015610bce57600080fd5b50610bd7611e04565b604051610be4919061394e565b60405180910390f35b348015610bf957600080fd5b50610c146004803603810190610c0f9190613aef565b611e0a565b005b348015610c2257600080fd5b50610c2b611fd0565b604051610c38919061394e565b60405180910390f35b610c49612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613d6f565b60405180910390fd5b8160108190555080601181905550601154601054610cf69190613dbe565b601281905550600f6012541115610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613e3e565b60405180910390fd5b5050565b60095481565b606060038054610d5b90613e8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8790613e8d565b8015610dd45780601f10610da957610100808354040283529160200191610dd4565b820191906000526020600020905b815481529060010190602001808311610db757829003601f168201915b5050505050905090565b6000610df2610deb612034565b848461203c565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610e24612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613d6f565b60405180910390fd5b6001811015610ec157600080fd5b80601581905550610ed0612205565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f09612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90613d6f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b610fea612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613d6f565b60405180910390fd5b600181101561108757600080fd5b80601681905550611096612205565b50565b60006110a684848461226f565b611167846110b2612034565b61116285604051806060016040528060288152602001614a3260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611118612034565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b61203c565b600190509392505050565b61dead81565b60006006905090565b600061122a61118e612034565b84611225856001600061119f612034565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b61203c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60149054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112c9612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613d6f565b60405180910390fd5b81600d8190555080600e81905550600e54600d546113769190613dbe565b600f81905550600f805411156113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890613f0a565b60405180910390fd5b5050565b60125481565b60185481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611434612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613d6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61158c612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613d6f565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611684612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613d6f565b60405180910390fd5b6005600d81905550600a600e81905550600e54600d546117339190613dbe565b600f819055506005601081905550600a6011819055506011546010546117599190613dbe565b6012819055506005601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546117c890613e8d565b80601f01602080910402602001604051908101604052809291908181526020018280546117f490613e8d565b80156118415780601f1061181657610100808354040283529160200191611841565b820191906000526020600020905b81548152906001019060200180831161182457829003601f168201915b5050505050905090565b60165481565b611859612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613d6f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613f9c565b60405180910390fd5b6119808282612f47565b5050565b600e5481565b60145481565b611998612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613d6f565b60405180910390fd5b8060178190555050565b60115481565b6000611afa611a44612034565b84611af585604051806060016040528060258152602001614a5a6025913960016000611a6e612034565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b61203c565b6001905092915050565b6000611b18611b11612034565b848461226f565b6001905092915050565b611b2a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613d6f565b60405180910390fd5b6001811015611bc757600080fd5b80601881905550611bd6612205565b50565b60105481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611c1a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090613d6f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d469190613ad4565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60065481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600d5481565b60175481565b611e12612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613d6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061402e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000808284611fe59190613dbe565b90508381101561202a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120219061409a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061412c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906141be565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061394e565b60405180910390a3505050565b606460165460095461221791906141de565b612221919061424f565b600681905550620f424060185460095461223b91906141de565b612245919061424f565b600781905550606460155460095461225d91906141de565b612267919061424f565b600881905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d5906142f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490614384565b60405180910390fd5b600081036123665761236183836000612fe8565b612ede565b600a60149054906101000a900460ff1615612a3657612383611769565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123f157506123c1611769565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561242a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612464575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247d5750600560149054906101000a900460ff16155b15612a3557600a60159054906101000a900460ff1661257757601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125375750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d906143f0565b60405180910390fd5b5b600c60009054906101000a900460ff161561274c57612594611769565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561261b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561267357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561274b5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f0906144a8565b60405180910390fd5b601754436127079190613dbe565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127ef5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289657600654811115612839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128309061453a565b60405180910390fd5b600854612845836113e4565b826128509190613dbe565b1115612891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612888906145a6565b60405180910390fd5b612a34565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129395750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561298857600654811115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a90614638565b60405180910390fd5b612a33565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a32576008546129e5836113e4565b826129f09190613dbe565b1115612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906145a6565b60405180910390fd5b5b5b5b5b5b6000612a41306113e4565b905060006007548210159050808015612a675750600560149054906101000a900460ff16155b8015612a7f5750600a60169054906101000a900460ff165b8015612ad55750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b2b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b815750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bc5576001600560146101000a81548160ff021916908315150217905550612ba961327b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c7b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8557600090505b60008115612ece57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce857506000601254115b15612d8257612d156064612d076012548861336490919063ffffffff16565b6133de90919063ffffffff16565b905060125460105482612d2891906141de565b612d32919061424f565b60136000828254612d439190613dbe565b9250508190555060125460115482612d5b91906141de565b612d65919061424f565b60146000828254612d769190613dbe565b92505081905550612e74565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ddd57506000600f54115b15612e7357612e0a6064612dfc600f548861336490919063ffffffff16565b6133de90919063ffffffff16565b9050600f54600d5482612e1d91906141de565b612e27919061424f565b60136000828254612e389190613dbe565b92505081905550600f54600e5482612e5091906141de565b612e5a919061424f565b60146000828254612e6b9190613dbe565b925050819055505b5b6000811115612ebf57612e88873083612fe8565b60006013541115612ebe57612e9f30601354613428565b612ea7610ef7565b600981905550612eb5612205565b60006013819055505b5b8085612ecb9190614658565b94505b612ed9878787612fe8565b505050505b505050565b6000838311158290612f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2291906139f9565b60405180910390fd5b5060008385612f3a9190614658565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304e906142f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bd90614384565b60405180910390fd5b6130d18383836135d5565b61313c81604051806060016040528060268152602001614a0c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131cf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161326e919061394e565b60405180910390a3505050565b6000613286306113e4565b90506000808203613298575050613362565b60146007546132a791906141de565b8211156132c05760146007546132bd91906141de565b91505b6132c9826135da565b6000601481905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613317906146bd565b60006040518083038185875af1925050503d8060008114613354576040519150601f19603f3d011682016040523d82523d6000602084013e613359565b606091505b50508091505050505b565b600080830361337657600090506133d8565b6000828461338491906141de565b9050828482613393919061424f565b146133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca90614744565b60405180910390fd5b809150505b92915050565b600061342083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613817565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348e906147d6565b60405180910390fd5b6134a3826000836135d5565b61350e816040518060600160405280602281526020016149ea602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135658160025461387a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c9919061394e565b60405180910390a35050565b505050565b6000600267ffffffffffffffff8111156135f7576135f66147f6565b5b6040519080825280602002602001820160405280156136255781602001602082028036833780820191505090505b509050308160008151811061363d5761363c614825565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137069190614869565b8160018151811061371a57613719614825565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061377f307f00000000000000000000000000000000000000000000000000000000000000008461203c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137e195949392919061498f565b600060405180830381600087803b1580156137fb57600080fd5b505af115801561380f573d6000803e3d6000fd5b505050505050565b6000808311829061385e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385591906139f9565b60405180910390fd5b506000838561386d919061424f565b9050809150509392505050565b60006138bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee3565b905092915050565b600080fd5b6000819050919050565b6138dc816138c9565b81146138e757600080fd5b50565b6000813590506138f9816138d3565b92915050565b60008060408385031215613916576139156138c4565b5b6000613924858286016138ea565b9250506020613935858286016138ea565b9150509250929050565b613948816138c9565b82525050565b6000602082019050613963600083018461393f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139a3578082015181840152602081019050613988565b60008484015250505050565b6000601f19601f8301169050919050565b60006139cb82613969565b6139d58185613974565b93506139e5818560208601613985565b6139ee816139af565b840191505092915050565b60006020820190508181036000830152613a1381846139c0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4682613a1b565b9050919050565b613a5681613a3b565b8114613a6157600080fd5b50565b600081359050613a7381613a4d565b92915050565b60008060408385031215613a9057613a8f6138c4565b5b6000613a9e85828601613a64565b9250506020613aaf858286016138ea565b9150509250929050565b60008115159050919050565b613ace81613ab9565b82525050565b6000602082019050613ae96000830184613ac5565b92915050565b600060208284031215613b0557613b046138c4565b5b6000613b1384828501613a64565b91505092915050565b600060208284031215613b3257613b316138c4565b5b6000613b40848285016138ea565b91505092915050565b6000819050919050565b6000613b6e613b69613b6484613a1b565b613b49565b613a1b565b9050919050565b6000613b8082613b53565b9050919050565b6000613b9282613b75565b9050919050565b613ba281613b87565b82525050565b6000602082019050613bbd6000830184613b99565b92915050565b600080600060608486031215613bdc57613bdb6138c4565b5b6000613bea86828701613a64565b9350506020613bfb86828701613a64565b9250506040613c0c868287016138ea565b9150509250925092565b613c1f81613a3b565b82525050565b6000602082019050613c3a6000830184613c16565b92915050565b600060ff82169050919050565b613c5681613c40565b82525050565b6000602082019050613c716000830184613c4d565b92915050565b613c8081613ab9565b8114613c8b57600080fd5b50565b600081359050613c9d81613c77565b92915050565b60008060408385031215613cba57613cb96138c4565b5b6000613cc885828601613a64565b9250506020613cd985828601613c8e565b9150509250929050565b60008060408385031215613cfa57613cf96138c4565b5b6000613d0885828601613a64565b9250506020613d1985828601613a64565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d59602083613974565b9150613d6482613d23565b602082019050919050565b60006020820190508181036000830152613d8881613d4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dc9826138c9565b9150613dd4836138c9565b9250828201905080821115613dec57613deb613d8f565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613e28601d83613974565b9150613e3382613df2565b602082019050919050565b60006020820190508181036000830152613e5781613e1b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ea557607f821691505b602082108103613eb857613eb7613e5e565b5b50919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613ef4601d83613974565b9150613eff82613ebe565b602082019050919050565b60006020820190508181036000830152613f2381613ee7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f86603983613974565b9150613f9182613f2a565b604082019050919050565b60006020820190508181036000830152613fb581613f79565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614018602683613974565b915061402382613fbc565b604082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614084601b83613974565b915061408f8261404e565b602082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614116602483613974565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a8602283613974565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b60006141e9826138c9565b91506141f4836138c9565b9250828202614202816138c9565b9150828204841483151761421957614218613d8f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061425a826138c9565b9150614265836138c9565b92508261427557614274614220565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142dc602583613974565b91506142e782614280565b604082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061436e602383613974565b915061437982614312565b604082019050919050565b6000602082019050818103600083015261439d81614361565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143da601683613974565b91506143e5826143a4565b602082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614492604983613974565b915061449d82614410565b606082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614524603583613974565b915061452f826144c8565b604082019050919050565b6000602082019050818103600083015261455381614517565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614590601383613974565b915061459b8261455a565b602082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614622603683613974565b915061462d826145c6565b604082019050919050565b6000602082019050818103600083015261465181614615565b9050919050565b6000614663826138c9565b915061466e836138c9565b925082820390508181111561468657614685613d8f565b5b92915050565b600081905092915050565b50565b60006146a760008361468c565b91506146b282614697565b600082019050919050565b60006146c88261469a565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061472e602183613974565b9150614739826146d2565b604082019050919050565b6000602082019050818103600083015261475d81614721565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147c0602183613974565b91506147cb82614764565b604082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061486381613a4d565b92915050565b60006020828403121561487f5761487e6138c4565b5b600061488d84828501614854565b91505092915050565b6000819050919050565b60006148bb6148b66148b184614896565b613b49565b6138c9565b9050919050565b6148cb816148a0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61490681613a3b565b82525050565b600061491883836148fd565b60208301905092915050565b6000602082019050919050565b600061493c826148d1565b61494681856148dc565b9350614951836148ed565b8060005b83811015614982578151614969888261490c565b975061497483614924565b925050600181019050614955565b5085935050505092915050565b600060a0820190506149a4600083018861393f565b6149b160208301876148c2565b81810360408301526149c38186614931565b90506149d26060830185613c16565b6149df608083018461393f565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e20cdbb01e5fb3b60d59f5b75475656b4d318354fcfad86dd569cae1b4a837264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638a8c523c11610190578063adb873bd116100dc578063d85ba06311610095578063e71dc3f51161006f578063e71dc3f514610b97578063f203acb614610bc2578063f2fde38b14610bed578063f8b45b0514610c165761030a565b8063d85ba06314610b04578063dd62ed3e14610b2f578063e2f4560514610b6c5761030a565b8063adb873bd146109f2578063b62496f514610a1d578063bbc0c74214610a5a578063c024666814610a85578063c876d0b914610aae578063c8c8ebe414610ad95761030a565b80639c3b4fdc11610149578063a0d82dc511610123578063a0d82dc514610924578063a457c2d71461094f578063a9059cbb1461098c578063aafe9cc9146109c95761030a565b80639c3b4fdc146108a55780639fccce32146108d05780639fdc4824146108fb5761030a565b80638a8c523c146107b95780638da5cb5b146107d05780638ea5220f146107fb57806395d89b4114610826578063975d71e2146108515780639a7a23d61461087c5761030a565b8063313ce5671161024f5780636a486a8e1161020857806370a08231116101e257806370a0823114610711578063715018a61461074e5780637571336a146107655780637ab439831461078e5761030a565b80636a486a8e146106905780636c2acb56146106bb5780636ddd1713146106e65761030a565b8063313ce5671461056c578063395093511461059757806349bd5a5e146105d45780634a62bb65146105ff5780634fbee1931461062a57806366ca9b83146106675761030a565b80631694505e116102bc5780631d777856116102965780631d777856146104b05780631fa07da5146104db57806323b872dd1461050457806327c8f835146105415761030a565b80631694505e1461043157806318160ddd1461045c5780631816467f146104875761030a565b806302dbd8f81461030f578063047fc9aa1461033857806306fdde0314610363578063095ea7b31461038e57806310d5de53146103cb578063150de0bb146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610336600480360381019061033191906138ff565b610c41565b005b34801561034457600080fd5b5061034d610d46565b60405161035a919061394e565b60405180910390f35b34801561036f57600080fd5b50610378610d4c565b60405161038591906139f9565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613a79565b610dde565b6040516103c29190613ad4565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613aef565b610dfc565b6040516103ff9190613ad4565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613b1c565b610e1c565b005b34801561043d57600080fd5b50610446610ed3565b6040516104539190613ba8565b60405180910390f35b34801561046857600080fd5b50610471610ef7565b60405161047e919061394e565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a99190613aef565b610f01565b005b3480156104bc57600080fd5b506104c5610fdc565b6040516104d2919061394e565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613b1c565b610fe2565b005b34801561051057600080fd5b5061052b60048036038101906105269190613bc3565b611099565b6040516105389190613ad4565b60405180910390f35b34801561054d57600080fd5b50610556611172565b6040516105639190613c25565b60405180910390f35b34801561057857600080fd5b50610581611178565b60405161058e9190613c5c565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b99190613a79565b611181565b6040516105cb9190613ad4565b60405180910390f35b3480156105e057600080fd5b506105e9611234565b6040516105f69190613c25565b60405180910390f35b34801561060b57600080fd5b50610614611258565b6040516106219190613ad4565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613aef565b61126b565b60405161065e9190613ad4565b60405180910390f35b34801561067357600080fd5b5061068e600480360381019061068991906138ff565b6112c1565b005b34801561069c57600080fd5b506106a56113c5565b6040516106b2919061394e565b60405180910390f35b3480156106c757600080fd5b506106d06113cb565b6040516106dd919061394e565b60405180910390f35b3480156106f257600080fd5b506106fb6113d1565b6040516107089190613ad4565b60405180910390f35b34801561071d57600080fd5b5061073860048036038101906107339190613aef565b6113e4565b604051610745919061394e565b60405180910390f35b34801561075a57600080fd5b5061076361142c565b005b34801561077157600080fd5b5061078c60048036038101906107879190613ca3565b611584565b005b34801561079a57600080fd5b506107a3611676565b6040516107b0919061394e565b60405180910390f35b3480156107c557600080fd5b506107ce61167c565b005b3480156107dc57600080fd5b506107e5611769565b6040516107f29190613c25565b60405180910390f35b34801561080757600080fd5b50610810611793565b60405161081d9190613c25565b60405180910390f35b34801561083257600080fd5b5061083b6117b9565b60405161084891906139f9565b60405180910390f35b34801561085d57600080fd5b5061086661184b565b604051610873919061394e565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190613ca3565b611851565b005b3480156108b157600080fd5b506108ba611984565b6040516108c7919061394e565b60405180910390f35b3480156108dc57600080fd5b506108e561198a565b6040516108f2919061394e565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613b1c565b611990565b005b34801561093057600080fd5b50610939611a31565b604051610946919061394e565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190613a79565b611a37565b6040516109839190613ad4565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae9190613a79565b611b04565b6040516109c09190613ad4565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613b1c565b611b22565b005b3480156109fe57600080fd5b50610a07611bd9565b604051610a14919061394e565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190613aef565b611bdf565b604051610a519190613ad4565b60405180910390f35b348015610a6657600080fd5b50610a6f611bff565b604051610a7c9190613ad4565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa79190613ca3565b611c12565b005b348015610aba57600080fd5b50610ac3611d52565b604051610ad09190613ad4565b60405180910390f35b348015610ae557600080fd5b50610aee611d65565b604051610afb919061394e565b60405180910390f35b348015610b1057600080fd5b50610b19611d6b565b604051610b26919061394e565b60405180910390f35b348015610b3b57600080fd5b50610b566004803603810190610b519190613ce3565b611d71565b604051610b63919061394e565b60405180910390f35b348015610b7857600080fd5b50610b81611df8565b604051610b8e919061394e565b60405180910390f35b348015610ba357600080fd5b50610bac611dfe565b604051610bb9919061394e565b60405180910390f35b348015610bce57600080fd5b50610bd7611e04565b604051610be4919061394e565b60405180910390f35b348015610bf957600080fd5b50610c146004803603810190610c0f9190613aef565b611e0a565b005b348015610c2257600080fd5b50610c2b611fd0565b604051610c38919061394e565b60405180910390f35b610c49612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613d6f565b60405180910390fd5b8160108190555080601181905550601154601054610cf69190613dbe565b601281905550600f6012541115610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613e3e565b60405180910390fd5b5050565b60095481565b606060038054610d5b90613e8d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8790613e8d565b8015610dd45780601f10610da957610100808354040283529160200191610dd4565b820191906000526020600020905b815481529060010190602001808311610db757829003601f168201915b5050505050905090565b6000610df2610deb612034565b848461203c565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610e24612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613d6f565b60405180910390fd5b6001811015610ec157600080fd5b80601581905550610ed0612205565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f09612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f90613d6f565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b610fea612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613d6f565b60405180910390fd5b600181101561108757600080fd5b80601681905550611096612205565b50565b60006110a684848461226f565b611167846110b2612034565b61116285604051806060016040528060288152602001614a3260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611118612034565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b61203c565b600190509392505050565b61dead81565b60006006905090565b600061122a61118e612034565b84611225856001600061119f612034565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b61203c565b6001905092915050565b7f000000000000000000000000b20517bdb1a44bd6ffd56708737a36d7e19dab0e81565b600a60149054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112c9612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613d6f565b60405180910390fd5b81600d8190555080600e81905550600e54600d546113769190613dbe565b600f81905550600f805411156113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890613f0a565b60405180910390fd5b5050565b60125481565b60185481565b600a60169054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611434612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90613d6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61158c612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613d6f565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611684612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613d6f565b60405180910390fd5b6005600d81905550600a600e81905550600e54600d546117339190613dbe565b600f819055506005601081905550600a6011819055506011546010546117599190613dbe565b6012819055506005601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546117c890613e8d565b80601f01602080910402602001604051908101604052809291908181526020018280546117f490613e8d565b80156118415780601f1061181657610100808354040283529160200191611841565b820191906000526020600020905b81548152906001019060200180831161182457829003601f168201915b5050505050905090565b60165481565b611859612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613d6f565b60405180910390fd5b7f000000000000000000000000b20517bdb1a44bd6ffd56708737a36d7e19dab0e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613f9c565b60405180910390fd5b6119808282612f47565b5050565b600e5481565b60145481565b611998612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613d6f565b60405180910390fd5b8060178190555050565b60115481565b6000611afa611a44612034565b84611af585604051806060016040528060258152602001614a5a6025913960016000611a6e612034565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b61203c565b6001905092915050565b6000611b18611b11612034565b848461226f565b6001905092915050565b611b2a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613d6f565b60405180910390fd5b6001811015611bc757600080fd5b80601881905550611bd6612205565b50565b60105481565b601b6020528060005260406000206000915054906101000a900460ff1681565b600a60159054906101000a900460ff1681565b611c1a612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090613d6f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d469190613ad4565b60405180910390a25050565b600c60009054906101000a900460ff1681565b60065481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600d5481565b60175481565b611e12612034565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9890613d6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061402e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000808284611fe59190613dbe565b90508381101561202a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120219061409a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a29061412c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361211a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612111906141be565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f8919061394e565b60405180910390a3505050565b606460165460095461221791906141de565b612221919061424f565b600681905550620f424060185460095461223b91906141de565b612245919061424f565b600781905550606460155460095461225d91906141de565b612267919061424f565b600881905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d5906142f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490614384565b60405180910390fd5b600081036123665761236183836000612fe8565b612ede565b600a60149054906101000a900460ff1615612a3657612383611769565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123f157506123c1611769565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561242a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612464575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247d5750600560149054906101000a900460ff16155b15612a3557600a60159054906101000a900460ff1661257757601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125375750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d906143f0565b60405180910390fd5b5b600c60009054906101000a900460ff161561274c57612594611769565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561261b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561267357507f000000000000000000000000b20517bdb1a44bd6ffd56708737a36d7e19dab0e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561274b5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106126f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f0906144a8565b60405180910390fd5b601754436127079190613dbe565b600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127ef5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289657600654811115612839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128309061453a565b60405180910390fd5b600854612845836113e4565b826128509190613dbe565b1115612891576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612888906145a6565b60405180910390fd5b612a34565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129395750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561298857600654811115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a90614638565b60405180910390fd5b612a33565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a32576008546129e5836113e4565b826129f09190613dbe565b1115612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a28906145a6565b60405180910390fd5b5b5b5b5b5b6000612a41306113e4565b905060006007548210159050808015612a675750600560149054906101000a900460ff16155b8015612a7f5750600a60169054906101000a900460ff165b8015612ad55750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b2b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b815750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bc5576001600560146101000a81548160ff021916908315150217905550612ba961327b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c7b5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c8557600090505b60008115612ece57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce857506000601254115b15612d8257612d156064612d076012548861336490919063ffffffff16565b6133de90919063ffffffff16565b905060125460105482612d2891906141de565b612d32919061424f565b60136000828254612d439190613dbe565b9250508190555060125460115482612d5b91906141de565b612d65919061424f565b60146000828254612d769190613dbe565b92505081905550612e74565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ddd57506000600f54115b15612e7357612e0a6064612dfc600f548861336490919063ffffffff16565b6133de90919063ffffffff16565b9050600f54600d5482612e1d91906141de565b612e27919061424f565b60136000828254612e389190613dbe565b92505081905550600f54600e5482612e5091906141de565b612e5a919061424f565b60146000828254612e6b9190613dbe565b925050819055505b5b6000811115612ebf57612e88873083612fe8565b60006013541115612ebe57612e9f30601354613428565b612ea7610ef7565b600981905550612eb5612205565b60006013819055505b5b8085612ecb9190614658565b94505b612ed9878787612fe8565b505050505b505050565b6000838311158290612f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2291906139f9565b60405180910390fd5b5060008385612f3a9190614658565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304e906142f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bd90614384565b60405180910390fd5b6130d18383836135d5565b61313c81604051806060016040528060268152602001614a0c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131cf816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161326e919061394e565b60405180910390a3505050565b6000613286306113e4565b90506000808203613298575050613362565b60146007546132a791906141de565b8211156132c05760146007546132bd91906141de565b91505b6132c9826135da565b6000601481905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613317906146bd565b60006040518083038185875af1925050503d8060008114613354576040519150601f19603f3d011682016040523d82523d6000602084013e613359565b606091505b50508091505050505b565b600080830361337657600090506133d8565b6000828461338491906141de565b9050828482613393919061424f565b146133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca90614744565b60405180910390fd5b809150505b92915050565b600061342083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613817565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348e906147d6565b60405180910390fd5b6134a3826000836135d5565b61350e816040518060600160405280602281526020016149ea602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee39092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135658160025461387a90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c9919061394e565b60405180910390a35050565b505050565b6000600267ffffffffffffffff8111156135f7576135f66147f6565b5b6040519080825280602002602001820160405280156136255781602001602082028036833780820191505090505b509050308160008151811061363d5761363c614825565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137069190614869565b8160018151811061371a57613719614825565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061377f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461203c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137e195949392919061498f565b600060405180830381600087803b1580156137fb57600080fd5b505af115801561380f573d6000803e3d6000fd5b505050505050565b6000808311829061385e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385591906139f9565b60405180910390fd5b506000838561386d919061424f565b9050809150509392505050565b60006138bc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee3565b905092915050565b600080fd5b6000819050919050565b6138dc816138c9565b81146138e757600080fd5b50565b6000813590506138f9816138d3565b92915050565b60008060408385031215613916576139156138c4565b5b6000613924858286016138ea565b9250506020613935858286016138ea565b9150509250929050565b613948816138c9565b82525050565b6000602082019050613963600083018461393f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139a3578082015181840152602081019050613988565b60008484015250505050565b6000601f19601f8301169050919050565b60006139cb82613969565b6139d58185613974565b93506139e5818560208601613985565b6139ee816139af565b840191505092915050565b60006020820190508181036000830152613a1381846139c0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4682613a1b565b9050919050565b613a5681613a3b565b8114613a6157600080fd5b50565b600081359050613a7381613a4d565b92915050565b60008060408385031215613a9057613a8f6138c4565b5b6000613a9e85828601613a64565b9250506020613aaf858286016138ea565b9150509250929050565b60008115159050919050565b613ace81613ab9565b82525050565b6000602082019050613ae96000830184613ac5565b92915050565b600060208284031215613b0557613b046138c4565b5b6000613b1384828501613a64565b91505092915050565b600060208284031215613b3257613b316138c4565b5b6000613b40848285016138ea565b91505092915050565b6000819050919050565b6000613b6e613b69613b6484613a1b565b613b49565b613a1b565b9050919050565b6000613b8082613b53565b9050919050565b6000613b9282613b75565b9050919050565b613ba281613b87565b82525050565b6000602082019050613bbd6000830184613b99565b92915050565b600080600060608486031215613bdc57613bdb6138c4565b5b6000613bea86828701613a64565b9350506020613bfb86828701613a64565b9250506040613c0c868287016138ea565b9150509250925092565b613c1f81613a3b565b82525050565b6000602082019050613c3a6000830184613c16565b92915050565b600060ff82169050919050565b613c5681613c40565b82525050565b6000602082019050613c716000830184613c4d565b92915050565b613c8081613ab9565b8114613c8b57600080fd5b50565b600081359050613c9d81613c77565b92915050565b60008060408385031215613cba57613cb96138c4565b5b6000613cc885828601613a64565b9250506020613cd985828601613c8e565b9150509250929050565b60008060408385031215613cfa57613cf96138c4565b5b6000613d0885828601613a64565b9250506020613d1985828601613a64565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d59602083613974565b9150613d6482613d23565b602082019050919050565b60006020820190508181036000830152613d8881613d4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dc9826138c9565b9150613dd4836138c9565b9250828201905080821115613dec57613deb613d8f565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000613e28601d83613974565b9150613e3382613df2565b602082019050919050565b60006020820190508181036000830152613e5781613e1b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ea557607f821691505b602082108103613eb857613eb7613e5e565b5b50919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613ef4601d83613974565b9150613eff82613ebe565b602082019050919050565b60006020820190508181036000830152613f2381613ee7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f86603983613974565b9150613f9182613f2a565b604082019050919050565b60006020820190508181036000830152613fb581613f79565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614018602683613974565b915061402382613fbc565b604082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614084601b83613974565b915061408f8261404e565b602082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614116602483613974565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a8602283613974565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b60006141e9826138c9565b91506141f4836138c9565b9250828202614202816138c9565b9150828204841483151761421957614218613d8f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061425a826138c9565b9150614265836138c9565b92508261427557614274614220565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142dc602583613974565b91506142e782614280565b604082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061436e602383613974565b915061437982614312565b604082019050919050565b6000602082019050818103600083015261439d81614361565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143da601683613974565b91506143e5826143a4565b602082019050919050565b60006020820190508181036000830152614409816143cd565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614492604983613974565b915061449d82614410565b606082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614524603583613974565b915061452f826144c8565b604082019050919050565b6000602082019050818103600083015261455381614517565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614590601383613974565b915061459b8261455a565b602082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614622603683613974565b915061462d826145c6565b604082019050919050565b6000602082019050818103600083015261465181614615565b9050919050565b6000614663826138c9565b915061466e836138c9565b925082820390508181111561468657614685613d8f565b5b92915050565b600081905092915050565b50565b60006146a760008361468c565b91506146b282614697565b600082019050919050565b60006146c88261469a565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061472e602183613974565b9150614739826146d2565b604082019050919050565b6000602082019050818103600083015261475d81614721565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147c0602183613974565b91506147cb82614764565b604082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061486381613a4d565b92915050565b60006020828403121561487f5761487e6138c4565b5b600061488d84828501614854565b91505092915050565b6000819050919050565b60006148bb6148b66148b184614896565b613b49565b6138c9565b9050919050565b6148cb816148a0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61490681613a3b565b82525050565b600061491883836148fd565b60208301905092915050565b6000602082019050919050565b600061493c826148d1565b61494681856148dc565b9350614951836148ed565b8060005b83811015614982578151614969888261490c565b975061497483614924565b925050600181019050614955565b5085935050505092915050565b600060a0820190506149a4600083018861393f565b6149b160208301876148c2565b81810360408301526149c38186614931565b90506149d26060830185613c16565b6149df608083018461393f565b969550505050505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202e20cdbb01e5fb3b60d59f5b75475656b4d318354fcfad86dd569cae1b4a837264736f6c63430008110033

Deployed Bytecode Sourcemap

29430:11586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34480:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29834:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7560:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9726:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30694:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33610:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29512:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8679:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34761:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30348:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33447:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10377:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29615:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8522:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11141:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29570:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35748:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34202:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30304:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30516:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29980:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8850:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22024:148;;;;;;;;;;;;;:::i;:::-;;34046:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30419:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33153:282;;;;;;;;;;;;;:::i;:::-;;21382:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29864:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7779:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30452:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35300:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30172:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30383:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33936:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30272:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11862:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9190:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33775:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30239:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30916:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29941:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34872:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30092:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29715:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30203:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9428:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29757:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30140:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30484;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22327:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29797:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34480:273;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34583:8:::1;34569:11;:22;;;;34615:7;34602:10;:20;;;;34663:10;;34649:11;;:24;;;;:::i;:::-;34633:13;:40;;;;34709:2;34692:13;;:19;;34684:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34480:273:::0;;:::o;29834:21::-;;;;:::o;7560:100::-;7614:13;7647:5;7640:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7560:100;:::o;9726:169::-;9809:4;9826:39;9835:12;:10;:12::i;:::-;9849:7;9858:6;9826:8;:39::i;:::-;9883:4;9876:11;;9726:169;;;;:::o;30694:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;33610:157::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33701:1:::1;33691:6;:11;;33683:20;;;::::0;::::1;;33728:6;33714:11;:20;;;;33745:14;:12;:14::i;:::-;33610:157:::0;:::o;29512:51::-;;;:::o;8679:108::-;8740:7;8767:12;;8760:19;;8679:108;:::o;34761:103::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34847:9:::1;34835;;:21;;;;;;;;;;;;;;;;;;34761:103:::0;:::o;30348:28::-;;;;:::o;33447:155::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33537:1:::1;33527:6;:11;;33519:20;;;::::0;::::1;;33563:6;33550:10;:19;;;;33580:14;:12;:14::i;:::-;33447:155:::0;:::o;10377:355::-;10517:4;10534:36;10544:6;10552:9;10563:6;10534:9;:36::i;:::-;10581:121;10590:6;10598:12;:10;:12::i;:::-;10612:89;10650:6;10612:89;;;;;;;;;;;;;;;;;:11;:19;10624:6;10612:19;;;;;;;;;;;;;;;:33;10632:12;:10;:12::i;:::-;10612:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10581:8;:121::i;:::-;10720:4;10713:11;;10377:355;;;;;:::o;29615:53::-;29661:6;29615:53;:::o;8522:92::-;8580:5;8605:1;8598:8;;8522:92;:::o;11141:218::-;11229:4;11246:83;11255:12;:10;:12::i;:::-;11269:7;11278:50;11317:10;11278:11;:25;11290:12;:10;:12::i;:::-;11278:25;;;;;;;;;;;;;;;:34;11304:7;11278:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11246:8;:83::i;:::-;11347:4;11340:11;;11141:218;;;;:::o;29570:38::-;;;:::o;29901:33::-;;;;;;;;;;;;;:::o;35748:125::-;35813:4;35837:19;:28;35857:7;35837:28;;;;;;;;;;;;;;;;;;;;;;;;;35830:35;;35748:125;;;:::o;34202:266::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34303:8:::1;34290:10;:21;;;;34334:7;34322:9;:19;;;;34380:9;;34367:10;;:22;;;;:::i;:::-;34352:12;:37;;;;34424:2;34408:12:::0;::::1;:18;;34400:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34202:266:::0;;:::o;30304:28::-;;;;:::o;30516:24::-;;;;:::o;29980:30::-;;;;;;;;;;;;;:::o;8850:127::-;8924:7;8951:9;:18;8961:7;8951:18;;;;;;;;;;;;;;;;8944:25;;8850:127;;;:::o;22024:148::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22131:1:::1;22094:40;;22115:6;;;;;;;;;;;22094:40;;;;;;;;;;;;22162:1;22145:6;;:19;;;;;;;;;;;;;;;;;;22024:148::o:0;34046:144::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34178:4:::1;34136:31;:39;34168:6;34136:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34046:144:::0;;:::o;30419:26::-;;;;:::o;33153:282::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33221:1:::1;33208:10;:14;;;;33245:2;33233:9;:14;;;;33286:9;;33273:10;;:22;;;;:::i;:::-;33258:12;:37;;;;33322:1;33308:11;:15;;;;33347:2;33334:10;:15;;;;33390:10;;33376:11;;:24;;;;:::i;:::-;33360:13;:40;;;;33426:1;33413:10;:14;;;;33153:282::o:0;21382:79::-;21420:7;21447:6;;;;;;;;;;;21440:13;;21382:79;:::o;29864:24::-;;;;;;;;;;;;;:::o;7779:104::-;7835:13;7868:7;7861:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7779:104;:::o;30452:25::-;;;;:::o;35300:244::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35407:13:::1;35399:21;;:4;:21;;::::0;35391:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35495:41;35524:4;35530:5;35495:28;:41::i;:::-;35300:244:::0;;:::o;30172:24::-;;;;:::o;30383:27::-;;;;:::o;33936:98::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34020:6:::1;34007:10;:19;;;;33936:98:::0;:::o;30272:25::-;;;;:::o;11862:269::-;11955:4;11972:129;11981:12;:10;:12::i;:::-;11995:7;12004:96;12043:15;12004:96;;;;;;;;;;;;;;;;;:11;:25;12016:12;:10;:12::i;:::-;12004:25;;;;;;;;;;;;;;;:34;12030:7;12004:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11972:8;:129::i;:::-;12119:4;12112:11;;11862:269;;;;:::o;9190:175::-;9276:4;9293:42;9303:12;:10;:12::i;:::-;9317:9;9328:6;9293:9;:42::i;:::-;9353:4;9346:11;;9190:175;;;;:::o;33775:153::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33864:1:::1;33854:6;:11;;33846:20;;;::::0;::::1;;33889:6;33877:9;:18;;;;33906:14;:12;:14::i;:::-;33775:153:::0;:::o;30239:26::-;;;;:::o;30916:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29941:32::-;;;;;;;;;;;;;:::o;34872:182::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34988:8:::1;34957:19;:28;34977:7;34957:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35028:7;35012:34;;;35037:8;35012:34;;;;;;:::i;:::-;;;;;;;;34872:182:::0;;:::o;30092:39::-;;;;;;;;;;;;;:::o;29715:35::-;;;;:::o;30203:27::-;;;;:::o;9428:151::-;9517:7;9544:11;:18;9556:5;9544:18;;;;;;;;;;;;;;;:27;9563:7;9544:27;;;;;;;;;;;;;;;;9537:34;;9428:151;;;;:::o;29757:33::-;;;;:::o;30140:25::-;;;;:::o;30484:::-;;;;:::o;22327:244::-;21604:12;:10;:12::i;:::-;21594:22;;:6;;;;;;;;;;;:22;;;21586:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22436:1:::1;22416:22;;:8;:22;;::::0;22408:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22526:8;22497:38;;22518:6;;;;;;;;;;;22497:38;;;;;;;;;;;;22555:8;22546:6;;:17;;;;;;;;;;;;;;;;;;22327:244:::0;:::o;29797:24::-;;;;:::o;16426:181::-;16484:7;16504:9;16520:1;16516;:5;;;;:::i;:::-;16504:17;;16545:1;16540;:6;;16532:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16598:1;16591:8;;;16426:181;;;;:::o;196:98::-;249:7;276:10;269:17;;196:98;:::o;15048:380::-;15201:1;15184:19;;:5;:19;;;15176:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15282:1;15263:21;;:7;:21;;;15255:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15366:6;15336:11;:18;15348:5;15336:18;;;;;;;;;;;;;;;:27;15355:7;15336:27;;;;;;;;;;;;;;;:36;;;;15404:7;15388:32;;15397:5;15388:32;;;15413:6;15388:32;;;;;;:::i;:::-;;;;;;;;15048:380;;;:::o;35062:230::-;35150:3;35137:10;;35128:6;;:19;;;;:::i;:::-;:25;;;;:::i;:::-;35105:20;:48;;;;35206:7;35194:9;;35185:6;;:18;;;;:::i;:::-;:28;;;;:::i;:::-;35164:18;:49;;;;35281:3;35267:11;;35258:6;;:20;;;;:::i;:::-;:26;;;;:::i;:::-;35246:9;:38;;;;35062:230::o;35885:4041::-;36033:1;36017:18;;:4;:18;;;36009:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36110:1;36096:16;;:2;:16;;;36088:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36187:1;36177:6;:11;36174:92;;36205:28;36221:4;36227:2;36231:1;36205:15;:28::i;:::-;36248:7;;36174:92;36289:14;;;;;;;;;;;36286:1854;;;36349:7;:5;:7::i;:::-;36341:15;;:4;:15;;;;:49;;;;;36383:7;:5;:7::i;:::-;36377:13;;:2;:13;;;;36341:49;:86;;;;;36425:1;36411:16;;:2;:16;;;;36341:86;:128;;;;;36462:6;36448:21;;:2;:21;;;;36341:128;:158;;;;;36491:8;;;;;;;;;;;36490:9;36341:158;36319:1810;;;36537:13;;;;;;;;;;;36533:148;;36582:19;:25;36602:4;36582:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36611:19;:23;36631:2;36611:23;;;;;;;;;;;;;;;;;;;;;;;;;36582:52;36574:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36533:148;36839:20;;;;;;;;;;;36835:436;;;36893:7;:5;:7::i;:::-;36887:13;;:2;:13;;;;:47;;;;;36918:15;36904:30;;:2;:30;;;;36887:47;:79;;;;;36952:13;36938:28;;:2;:28;;;;36887:79;36883:369;;;37044:12;37002:28;:39;37031:9;37002:39;;;;;;;;;;;;;;;;:54;36994:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37218:10;;37203:12;:25;;;;:::i;:::-;37161:28;:39;37190:9;37161:39;;;;;;;;;;;;;;;:67;;;;36883:369;36835:436;37340:25;:31;37366:4;37340:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37376:31;:35;37408:2;37376:35;;;;;;;;;;;;;;;;;;;;;;;;;37375:36;37340:71;37336:778;;;37458:20;;37448:6;:30;;37440:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37597:9;;37580:13;37590:2;37580:9;:13::i;:::-;37571:6;:22;;;;:::i;:::-;:35;;37563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37336:778;;;37724:25;:29;37750:2;37724:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37758:31;:37;37790:4;37758:37;;;;;;;;;;;;;;;;;;;;;;;;;37757:38;37724:71;37720:394;;;37842:20;;37832:6;:30;;37824:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37720:394;;;37968:31;:35;38000:2;37968:35;;;;;;;;;;;;;;;;;;;;;;;;;37964:150;;38061:9;;38044:13;38054:2;38044:9;:13::i;:::-;38035:6;:22;;;;:::i;:::-;:35;;38027:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37964:150;37720:394;37336:778;36319:1810;36286:1854;38150:28;38181:24;38199:4;38181:9;:24::i;:::-;38150:55;;38226:12;38265:18;;38241:20;:42;;38226:57;;38314:7;:33;;;;;38339:8;;;;;;;;;;;38338:9;38314:33;:61;;;;;38364:11;;;;;;;;;;;38314:61;:110;;;;;38393:25;:31;38419:4;38393:31;;;;;;;;;;;;;;;;;;;;;;;;;38392:32;38314:110;:153;;;;;38442:19;:25;38462:4;38442:25;;;;;;;;;;;;;;;;;;;;;;;;;38441:26;38314:153;:194;;;;;38485:19;:23;38505:2;38485:23;;;;;;;;;;;;;;;;;;;;;;;;;38484:24;38314:194;38296:338;;;38546:4;38535:8;;:15;;;;;;;;;;;;;;;;;;38579:10;:8;:10::i;:::-;38617:5;38606:8;;:16;;;;;;;;;;;;;;;;;;38296:338;38654:12;38670:8;;;;;;;;;;;38669:9;38654:24;;38694:19;:25;38714:4;38694:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38723:19;:23;38743:2;38723:23;;;;;;;;;;;;;;;;;;;;;;;;;38694:52;38691:99;;;38773:5;38763:15;;38691:99;38810:12;38842:7;38839:1034;;;38893:25;:29;38919:2;38893:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38942:1;38926:13;;:17;38893:50;38889:574;;;38970:34;39000:3;38970:25;38981:13;;38970:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38963:41;;39061:13;;39047:11;;39040:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;39023:13;;:51;;;;;;;:::i;:::-;;;;;;;;39129:13;;39116:10;;39109:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39093:12;;:49;;;;;;;:::i;:::-;;;;;;;;38889:574;;;39205:25;:31;39231:4;39205:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39255:1;39240:12;;:16;39205:51;39202:261;;;39283:33;39312:3;39283:24;39294:12;;39283:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39276:40;;39369:12;;39356:10;;39349:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;39332:13;;:49;;;;;;;:::i;:::-;;;;;;;;39435:12;;39423:9;;39416:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39400:12;;:47;;;;;;;:::i;:::-;;;;;;;;39202:261;38889:574;39501:1;39494:4;:8;39491:334;;;39526:42;39542:4;39556;39563;39526:15;:42::i;:::-;39607:1;39591:13;;:17;39587:223;;;39633:35;39647:4;39654:13;;39633:5;:35::i;:::-;39700:13;:11;:13::i;:::-;39691:6;:22;;;;39736:14;:12;:14::i;:::-;39789:1;39773:13;:17;;;;39587:223;39491:334;39857:4;39847:14;;;;;:::i;:::-;;;38839:1034;39885:33;39901:4;39907:2;39911:6;39885:15;:33::i;:::-;35998:3928;;;;35885:4041;;;;:::o;17329:192::-;17415:7;17448:1;17443;:6;;17451:12;17435:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17475:9;17491:1;17487;:5;;;;:::i;:::-;17475:17;;17512:1;17505:8;;;17329:192;;;;;:::o;35552:188::-;35669:5;35635:25;:31;35661:4;35635:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35726:5;35692:40;;35720:4;35692:40;;;;;;;;;;;;35552:188;;:::o;12621:573::-;12779:1;12761:20;;:6;:20;;;12753:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12863:1;12842:23;;:9;:23;;;12834:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12918:47;12939:6;12947:9;12958:6;12918:20;:47::i;:::-;12998:71;13020:6;12998:71;;;;;;;;;;;;;;;;;:9;:17;13008:6;12998:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12978:9;:17;12988:6;12978:17;;;;;;;;;;;;;;;:91;;;;13103:32;13128:6;13103:9;:20;13113:9;13103:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13080:9;:20;13090:9;13080:20;;;;;;;;;;;;;;;:55;;;;13168:9;13151:35;;13160:6;13151:35;;;13179:6;13151:35;;;;;;:::i;:::-;;;;;;;;12621:573;;;:::o;40547:464::-;40586:23;40612:24;40630:4;40612:9;:24::i;:::-;40586:50;;40647:12;40702:1;40683:15;:20;40680:34;;40706:7;;;;40680:34;40768:2;40747:18;;:23;;;;:::i;:::-;40729:15;:41;40726:111;;;40823:2;40802:18;;:23;;;;:::i;:::-;40784:41;;40726:111;40849:33;40866:15;40849:16;:33::i;:::-;40919:1;40904:12;:16;;;;40954:9;;;;;;;;;;;40946:23;;40977:21;40946:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40933:70;;;;;40575:436;;40547:464;:::o;17780:471::-;17838:7;18088:1;18083;:6;18079:47;;18113:1;18106:8;;;;18079:47;18138:9;18154:1;18150;:5;;;;:::i;:::-;18138:17;;18183:1;18178;18174;:5;;;;:::i;:::-;:10;18166:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18242:1;18235:8;;;17780:471;;;;;:::o;18727:132::-;18785:7;18812:39;18816:1;18819;18812:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18805:46;;18727:132;;;;:::o;14192:418::-;14295:1;14276:21;;:7;:21;;;14268:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14348:49;14369:7;14386:1;14390:6;14348:20;:49::i;:::-;14431:68;14454:6;14431:68;;;;;;;;;;;;;;;;;:9;:18;14441:7;14431:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;14410:9;:18;14420:7;14410:18;;;;;;;;;;;;;;;:89;;;;14525:24;14542:6;14525:12;;:16;;:24;;;;:::i;:::-;14510:12;:39;;;;14591:1;14565:37;;14574:7;14565:37;;;14595:6;14565:37;;;;;;:::i;:::-;;;;;;;;14192:418;;:::o;16031:125::-;;;;:::o;39934:601::-;40062:21;40100:1;40086:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40062:40;;40131:4;40113;40118:1;40113:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40157:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40147:4;40152:1;40147:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40192:62;40209:4;40224:15;40242:11;40192:8;:62::i;:::-;40293:15;:66;;;40374:11;40400:1;40444:4;40471;40491:15;40293:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39989:546;39934:601;:::o;19355:278::-;19441:7;19473:1;19469;:5;19476:12;19461:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19500:9;19516:1;19512;:5;;;;:::i;:::-;19500:17;;19624:1;19617:8;;;19355:278;;;;;:::o;16890:136::-;16948:7;16975:43;16979:1;16982;16975:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16968:50;;16890:136;;;;:::o;88:117:1:-;197:1;194;187: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:246::-;1883:1;1893:113;1907:6;1904:1;1901:13;1893:113;;;1992:1;1987:3;1983:11;1977:18;1973:1;1968:3;1964:11;1957:39;1929:2;1926:1;1922:10;1917:15;;1893:113;;;2040:1;2031:6;2026:3;2022:16;2015:27;1864:184;1802:246;;;:::o;2054:102::-;2095:6;2146:2;2142:7;2137:2;2130:5;2126:14;2122:28;2112:38;;2054:102;;;:::o;2162:377::-;2250:3;2278:39;2311:5;2278:39;:::i;:::-;2333:71;2397:6;2392:3;2333:71;:::i;:::-;2326:78;;2413:65;2471:6;2466:3;2459:4;2452:5;2448:16;2413:65;:::i;:::-;2503:29;2525:6;2503:29;:::i;:::-;2498:3;2494:39;2487:46;;2254:285;2162:377;;;;:::o;2545:313::-;2658:4;2696:2;2685:9;2681:18;2673:26;;2745:9;2739:4;2735:20;2731:1;2720:9;2716:17;2709:47;2773:78;2846:4;2837:6;2773:78;:::i;:::-;2765:86;;2545:313;;;;:::o;2864:126::-;2901:7;2941:42;2934:5;2930:54;2919:65;;2864:126;;;:::o;2996:96::-;3033:7;3062:24;3080:5;3062:24;:::i;:::-;3051:35;;2996:96;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:::-;4672:6;4721:2;4709:9;4700:7;4696:23;4692:32;4689:119;;;4727:79;;:::i;:::-;4689:119;4847:1;4872:53;4917:7;4908:6;4897:9;4893:22;4872:53;:::i;:::-;4862:63;;4818:117;4613:329;;;;:::o;4948:60::-;4976:3;4997:5;4990:12;;4948:60;;;:::o;5014:142::-;5064:9;5097:53;5115:34;5124:24;5142:5;5124:24;:::i;:::-;5115:34;:::i;:::-;5097:53;:::i;:::-;5084:66;;5014:142;;;:::o;5162:126::-;5212:9;5245:37;5276:5;5245:37;:::i;:::-;5232:50;;5162:126;;;:::o;5294:153::-;5371:9;5404:37;5435:5;5404:37;:::i;:::-;5391:50;;5294:153;;;:::o;5453:185::-;5567:64;5625:5;5567:64;:::i;:::-;5562:3;5555:77;5453:185;;:::o;5644:276::-;5764:4;5802:2;5791:9;5787:18;5779:26;;5815:98;5910:1;5899:9;5895:17;5886:6;5815:98;:::i;:::-;5644:276;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:474::-;8136:6;8144;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:53;8389:7;8380:6;8369:9;8365:22;8344:53;:::i;:::-;8334:63;;8290:117;8446:2;8472:53;8517:7;8508:6;8497:9;8493:22;8472:53;:::i;:::-;8462:63;;8417:118;8068:474;;;;;:::o;8548:182::-;8688:34;8684:1;8676:6;8672:14;8665:58;8548:182;:::o;8736:366::-;8878:3;8899:67;8963:2;8958:3;8899:67;:::i;:::-;8892:74;;8975:93;9064:3;8975:93;:::i;:::-;9093:2;9088:3;9084:12;9077:19;;8736:366;;;:::o;9108:419::-;9274:4;9312:2;9301:9;9297:18;9289:26;;9361:9;9355:4;9351:20;9347:1;9336:9;9332:17;9325:47;9389:131;9515:4;9389:131;:::i;:::-;9381:139;;9108:419;;;:::o;9533:180::-;9581:77;9578:1;9571:88;9678:4;9675:1;9668:15;9702:4;9699:1;9692:15;9719:191;9759:3;9778:20;9796:1;9778:20;:::i;:::-;9773:25;;9812:20;9830:1;9812:20;:::i;:::-;9807:25;;9855:1;9852;9848:9;9841:16;;9876:3;9873:1;9870:10;9867:36;;;9883:18;;:::i;:::-;9867:36;9719:191;;;;:::o;9916:179::-;10056:31;10052:1;10044:6;10040:14;10033:55;9916:179;:::o;10101:366::-;10243:3;10264:67;10328:2;10323:3;10264:67;:::i;:::-;10257:74;;10340:93;10429:3;10340:93;:::i;:::-;10458:2;10453:3;10449:12;10442:19;;10101:366;;;:::o;10473:419::-;10639:4;10677:2;10666:9;10662:18;10654:26;;10726:9;10720:4;10716:20;10712:1;10701:9;10697:17;10690:47;10754:131;10880:4;10754:131;:::i;:::-;10746:139;;10473:419;;;:::o;10898:180::-;10946:77;10943:1;10936:88;11043:4;11040:1;11033:15;11067:4;11064:1;11057:15;11084:320;11128:6;11165:1;11159:4;11155:12;11145:22;;11212:1;11206:4;11202:12;11233:18;11223:81;;11289:4;11281:6;11277:17;11267:27;;11223:81;11351:2;11343:6;11340:14;11320:18;11317:38;11314:84;;11370:18;;:::i;:::-;11314:84;11135:269;11084:320;;;:::o;11410:179::-;11550:31;11546:1;11538:6;11534:14;11527:55;11410:179;:::o;11595:366::-;11737:3;11758:67;11822:2;11817:3;11758:67;:::i;:::-;11751:74;;11834:93;11923:3;11834:93;:::i;:::-;11952:2;11947:3;11943:12;11936:19;;11595:366;;;:::o;11967:419::-;12133:4;12171:2;12160:9;12156:18;12148:26;;12220:9;12214:4;12210:20;12206:1;12195:9;12191:17;12184:47;12248:131;12374:4;12248:131;:::i;:::-;12240:139;;11967:419;;;:::o;12392:244::-;12532:34;12528:1;12520:6;12516:14;12509:58;12601:27;12596:2;12588:6;12584:15;12577:52;12392:244;:::o;12642:366::-;12784:3;12805:67;12869:2;12864:3;12805:67;:::i;:::-;12798:74;;12881:93;12970:3;12881:93;:::i;:::-;12999:2;12994:3;12990:12;12983:19;;12642:366;;;:::o;13014:419::-;13180:4;13218:2;13207:9;13203:18;13195:26;;13267:9;13261:4;13257:20;13253:1;13242:9;13238:17;13231:47;13295:131;13421:4;13295:131;:::i;:::-;13287:139;;13014:419;;;:::o;13439:225::-;13579:34;13575:1;13567:6;13563:14;13556:58;13648:8;13643:2;13635:6;13631:15;13624:33;13439:225;:::o;13670:366::-;13812:3;13833:67;13897:2;13892:3;13833:67;:::i;:::-;13826:74;;13909:93;13998:3;13909:93;:::i;:::-;14027:2;14022:3;14018:12;14011:19;;13670:366;;;:::o;14042:419::-;14208:4;14246:2;14235:9;14231:18;14223:26;;14295:9;14289:4;14285:20;14281:1;14270:9;14266:17;14259:47;14323:131;14449:4;14323:131;:::i;:::-;14315:139;;14042:419;;;:::o;14467:177::-;14607:29;14603:1;14595:6;14591:14;14584:53;14467:177;:::o;14650:366::-;14792:3;14813:67;14877:2;14872:3;14813:67;:::i;:::-;14806:74;;14889:93;14978:3;14889:93;:::i;:::-;15007:2;15002:3;14998:12;14991:19;;14650:366;;;:::o;15022:419::-;15188:4;15226:2;15215:9;15211:18;15203:26;;15275:9;15269:4;15265:20;15261:1;15250:9;15246:17;15239:47;15303:131;15429:4;15303:131;:::i;:::-;15295:139;;15022:419;;;:::o;15447:223::-;15587:34;15583:1;15575:6;15571:14;15564:58;15656:6;15651:2;15643:6;15639:15;15632:31;15447:223;:::o;15676:366::-;15818:3;15839:67;15903:2;15898:3;15839:67;:::i;:::-;15832:74;;15915:93;16004:3;15915:93;:::i;:::-;16033:2;16028:3;16024:12;16017:19;;15676:366;;;:::o;16048:419::-;16214:4;16252:2;16241:9;16237:18;16229:26;;16301:9;16295:4;16291:20;16287:1;16276:9;16272:17;16265:47;16329:131;16455:4;16329:131;:::i;:::-;16321:139;;16048:419;;;:::o;16473:221::-;16613:34;16609:1;16601:6;16597:14;16590:58;16682:4;16677:2;16669:6;16665:15;16658:29;16473:221;:::o;16700:366::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16700:366;;;:::o;17072:419::-;17238:4;17276:2;17265:9;17261:18;17253:26;;17325:9;17319:4;17315:20;17311:1;17300:9;17296:17;17289:47;17353:131;17479:4;17353:131;:::i;:::-;17345:139;;17072:419;;;:::o;17497:410::-;17537:7;17560:20;17578:1;17560:20;:::i;:::-;17555:25;;17594:20;17612:1;17594:20;:::i;:::-;17589:25;;17649:1;17646;17642:9;17671:30;17689:11;17671:30;:::i;:::-;17660:41;;17850:1;17841:7;17837:15;17834:1;17831:22;17811:1;17804:9;17784:83;17761:139;;17880:18;;:::i;:::-;17761:139;17545:362;17497:410;;;;:::o;17913:180::-;17961:77;17958:1;17951:88;18058:4;18055:1;18048:15;18082:4;18079:1;18072:15;18099:185;18139:1;18156:20;18174:1;18156:20;:::i;:::-;18151:25;;18190:20;18208:1;18190:20;:::i;:::-;18185:25;;18229:1;18219:35;;18234:18;;:::i;:::-;18219:35;18276:1;18273;18269:9;18264:14;;18099:185;;;;:::o;18290:224::-;18430:34;18426:1;18418:6;18414:14;18407:58;18499:7;18494:2;18486:6;18482:15;18475:32;18290:224;:::o;18520:366::-;18662:3;18683:67;18747:2;18742:3;18683:67;:::i;:::-;18676:74;;18759:93;18848:3;18759:93;:::i;:::-;18877:2;18872:3;18868:12;18861:19;;18520:366;;;:::o;18892:419::-;19058:4;19096:2;19085:9;19081:18;19073:26;;19145:9;19139:4;19135:20;19131:1;19120:9;19116:17;19109:47;19173:131;19299:4;19173:131;:::i;:::-;19165:139;;18892:419;;;:::o;19317:222::-;19457:34;19453:1;19445:6;19441:14;19434:58;19526:5;19521:2;19513:6;19509:15;19502:30;19317:222;:::o;19545:366::-;19687:3;19708:67;19772:2;19767:3;19708:67;:::i;:::-;19701:74;;19784:93;19873:3;19784:93;:::i;:::-;19902:2;19897:3;19893:12;19886:19;;19545:366;;;:::o;19917:419::-;20083:4;20121:2;20110:9;20106:18;20098:26;;20170:9;20164:4;20160:20;20156:1;20145:9;20141:17;20134:47;20198:131;20324:4;20198:131;:::i;:::-;20190:139;;19917:419;;;:::o;20342:172::-;20482:24;20478:1;20470:6;20466:14;20459:48;20342:172;:::o;20520:366::-;20662:3;20683:67;20747:2;20742:3;20683:67;:::i;:::-;20676:74;;20759:93;20848:3;20759:93;:::i;:::-;20877:2;20872:3;20868:12;20861:19;;20520:366;;;:::o;20892:419::-;21058:4;21096:2;21085:9;21081:18;21073:26;;21145:9;21139:4;21135:20;21131:1;21120:9;21116:17;21109:47;21173:131;21299:4;21173:131;:::i;:::-;21165:139;;20892:419;;;:::o;21317:297::-;21457:34;21453:1;21445:6;21441:14;21434:58;21526:34;21521:2;21513:6;21509:15;21502:59;21595:11;21590:2;21582:6;21578:15;21571:36;21317:297;:::o;21620:366::-;21762:3;21783:67;21847:2;21842:3;21783:67;:::i;:::-;21776:74;;21859:93;21948:3;21859:93;:::i;:::-;21977:2;21972:3;21968:12;21961:19;;21620:366;;;:::o;21992:419::-;22158:4;22196:2;22185:9;22181:18;22173:26;;22245:9;22239:4;22235:20;22231:1;22220:9;22216:17;22209:47;22273:131;22399:4;22273:131;:::i;:::-;22265:139;;21992:419;;;:::o;22417:240::-;22557:34;22553:1;22545:6;22541:14;22534:58;22626:23;22621:2;22613:6;22609:15;22602:48;22417:240;:::o;22663:366::-;22805:3;22826:67;22890:2;22885:3;22826:67;:::i;:::-;22819:74;;22902:93;22991:3;22902:93;:::i;:::-;23020:2;23015:3;23011:12;23004:19;;22663:366;;;:::o;23035:419::-;23201:4;23239:2;23228:9;23224:18;23216:26;;23288:9;23282:4;23278:20;23274:1;23263:9;23259:17;23252:47;23316:131;23442:4;23316:131;:::i;:::-;23308:139;;23035:419;;;:::o;23460:169::-;23600:21;23596:1;23588:6;23584:14;23577:45;23460:169;:::o;23635:366::-;23777:3;23798:67;23862:2;23857:3;23798:67;:::i;:::-;23791:74;;23874:93;23963:3;23874:93;:::i;:::-;23992:2;23987:3;23983:12;23976:19;;23635:366;;;:::o;24007:419::-;24173:4;24211:2;24200:9;24196:18;24188:26;;24260:9;24254:4;24250:20;24246:1;24235:9;24231:17;24224:47;24288:131;24414:4;24288:131;:::i;:::-;24280:139;;24007:419;;;:::o;24432:241::-;24572:34;24568:1;24560:6;24556:14;24549:58;24641:24;24636:2;24628:6;24624:15;24617:49;24432:241;:::o;24679:366::-;24821:3;24842:67;24906:2;24901:3;24842:67;:::i;:::-;24835:74;;24918:93;25007:3;24918:93;:::i;:::-;25036:2;25031:3;25027:12;25020:19;;24679:366;;;:::o;25051:419::-;25217:4;25255:2;25244:9;25240:18;25232:26;;25304:9;25298:4;25294:20;25290:1;25279:9;25275:17;25268:47;25332:131;25458:4;25332:131;:::i;:::-;25324:139;;25051:419;;;:::o;25476:194::-;25516:4;25536:20;25554:1;25536:20;:::i;:::-;25531:25;;25570:20;25588:1;25570:20;:::i;:::-;25565:25;;25614:1;25611;25607:9;25599:17;;25638:1;25632:4;25629:11;25626:37;;;25643:18;;:::i;:::-;25626:37;25476:194;;;;:::o;25676:147::-;25777:11;25814:3;25799:18;;25676:147;;;;:::o;25829:114::-;;:::o;25949:398::-;26108:3;26129:83;26210:1;26205:3;26129:83;:::i;:::-;26122:90;;26221:93;26310:3;26221:93;:::i;:::-;26339:1;26334:3;26330:11;26323:18;;25949:398;;;:::o;26353:379::-;26537:3;26559:147;26702:3;26559:147;:::i;:::-;26552:154;;26723:3;26716:10;;26353:379;;;:::o;26738:220::-;26878:34;26874:1;26866:6;26862:14;26855:58;26947:3;26942:2;26934:6;26930:15;26923:28;26738:220;:::o;26964:366::-;27106:3;27127:67;27191:2;27186:3;27127:67;:::i;:::-;27120:74;;27203:93;27292:3;27203:93;:::i;:::-;27321:2;27316:3;27312:12;27305:19;;26964:366;;;:::o;27336:419::-;27502:4;27540:2;27529:9;27525:18;27517:26;;27589:9;27583:4;27579:20;27575:1;27564:9;27560:17;27553:47;27617:131;27743:4;27617:131;:::i;:::-;27609:139;;27336:419;;;:::o;27761:220::-;27901:34;27897:1;27889:6;27885:14;27878:58;27970:3;27965:2;27957:6;27953:15;27946:28;27761:220;:::o;27987:366::-;28129:3;28150:67;28214:2;28209:3;28150:67;:::i;:::-;28143:74;;28226:93;28315:3;28226:93;:::i;:::-;28344:2;28339:3;28335:12;28328:19;;27987:366;;;:::o;28359:419::-;28525:4;28563:2;28552:9;28548:18;28540:26;;28612:9;28606:4;28602:20;28598:1;28587:9;28583:17;28576:47;28640:131;28766:4;28640:131;:::i;:::-;28632:139;;28359:419;;;:::o;28784:180::-;28832:77;28829:1;28822:88;28929:4;28926:1;28919:15;28953:4;28950:1;28943:15;28970:180;29018:77;29015:1;29008:88;29115:4;29112:1;29105:15;29139:4;29136:1;29129:15;29156:143;29213:5;29244:6;29238:13;29229:22;;29260:33;29287:5;29260:33;:::i;:::-;29156:143;;;;:::o;29305:351::-;29375:6;29424:2;29412:9;29403:7;29399:23;29395:32;29392:119;;;29430:79;;:::i;:::-;29392:119;29550:1;29575:64;29631:7;29622:6;29611:9;29607:22;29575:64;:::i;:::-;29565:74;;29521:128;29305:351;;;;:::o;29662:85::-;29707:7;29736:5;29725:16;;29662:85;;;:::o;29753:158::-;29811:9;29844:61;29862:42;29871:32;29897:5;29871:32;:::i;:::-;29862:42;:::i;:::-;29844:61;:::i;:::-;29831:74;;29753:158;;;:::o;29917:147::-;30012:45;30051:5;30012:45;:::i;:::-;30007:3;30000:58;29917:147;;:::o;30070:114::-;30137:6;30171:5;30165:12;30155:22;;30070:114;;;:::o;30190:184::-;30289:11;30323:6;30318:3;30311:19;30363:4;30358:3;30354:14;30339:29;;30190:184;;;;:::o;30380:132::-;30447:4;30470:3;30462:11;;30500:4;30495:3;30491:14;30483:22;;30380:132;;;:::o;30518:108::-;30595:24;30613:5;30595:24;:::i;:::-;30590:3;30583:37;30518:108;;:::o;30632:179::-;30701:10;30722:46;30764:3;30756:6;30722:46;:::i;:::-;30800:4;30795:3;30791:14;30777:28;;30632:179;;;;:::o;30817:113::-;30887:4;30919;30914:3;30910:14;30902:22;;30817:113;;;:::o;30966:732::-;31085:3;31114:54;31162:5;31114:54;:::i;:::-;31184:86;31263:6;31258:3;31184:86;:::i;:::-;31177:93;;31294:56;31344:5;31294:56;:::i;:::-;31373:7;31404:1;31389:284;31414:6;31411:1;31408:13;31389:284;;;31490:6;31484:13;31517:63;31576:3;31561:13;31517:63;:::i;:::-;31510:70;;31603:60;31656:6;31603:60;:::i;:::-;31593:70;;31449:224;31436:1;31433;31429:9;31424:14;;31389:284;;;31393:14;31689:3;31682:10;;31090:608;;;30966:732;;;;:::o;31704:831::-;31967:4;32005:3;31994:9;31990:19;31982:27;;32019:71;32087:1;32076:9;32072:17;32063:6;32019:71;:::i;:::-;32100:80;32176:2;32165:9;32161:18;32152:6;32100:80;:::i;:::-;32227:9;32221:4;32217:20;32212:2;32201:9;32197:18;32190:48;32255:108;32358:4;32349:6;32255:108;:::i;:::-;32247:116;;32373:72;32441:2;32430:9;32426:18;32417:6;32373:72;:::i;:::-;32455:73;32523:3;32512:9;32508:19;32499:6;32455:73;:::i;:::-;31704:831;;;;;;;;:::o

Swarm Source

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