ETH Price: $3,953.85 (+1.47%)

Token

ERC-20: The Road To Ryoshi (TRTR)
 

Overview

Max Total Supply

1,000,000 TRTR

Holders

90

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000250615 TRTR

Value
$0.00
0x3449828f6ccb8687d0d9f3103101041eb35fa2f6
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:
TheRoadToRyoshi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-27
*/

/**
The Road to Ryoshi
*/

// https://t.me/RoadtoRyoshi
// 

// 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;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
} 

// Safe Math Helpers 
// --------------------------------------------------------------
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 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;
    uint8 private _decimals;

    /**
     * @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_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    /**
     * @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 _decimals;
    }

    /**
     * @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 _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: cannot send 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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// Uniswap Router 
// --------------------------------------------------------------
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function allPairsLength() external view returns (uint256);
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);
    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);
    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);
    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


// Main Contract Logic 
// --------------------------------------------------------------
contract TheRoadToRyoshi is Context, IERC20, Ownable {
    // Imports
    using SafeMath for uint256;
    using Address for address;

    // Configurables -----------------------------
    
    // Context";
    string private _name = "The Road To Ryoshi";
    string private _symbol = "TRTR";
    uint8 private _decimals = 18;

    // Supply 
    uint256 private _totalSupply = 1 * 1e6 * 1e18;    
    uint256 private minimumTokensBeforeSwap = _totalSupply * 1 / 500;    

    // Restrictions
    uint256 public _maxTxAmount = (_totalSupply * 30) / 1000;      
    uint256 public _walletMax = (_totalSupply * 30) / 1000; 
    bool public checkWalletLimit = true;
    
    // wallets
    address payable public liquidityWallet = payable(0xAf698a5cd320C3FDCFA0505080C3426dEceC63bD);
    address payable public operationsWallet =  payable(0xAf698a5cd320C3FDCFA0505080C3426dEceC63bD);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    // fees    
    uint256 public liquidityFeeBuy = 10;
    uint256 public operationsFeeBuy = 20;
    uint256 public totalFeesBuy;
    uint256 public maxTotalFeeBuy = 30;

    // fees
    uint256 public liquidityFeeSell = 25;
    uint256 public operationsFeeSell = 50;
    uint256 public totalFeesSell;
    uint256 public maxTotalFeeSell = 75;

    // distribution ratio
    uint256 public _liquiditySharePercentage = 0;
    uint256 public _operationsSharePercentage = 100;
    uint256 public _totalDistributionShares;

    // max amounts    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) isTxLimitExempt;

    // Router Information    
    mapping (address => bool) public isMarketPair;
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair; 
    
    // toggle swap back (fees)
    bool inSwapAndLiquify;
    uint256 public tokensForLiquidity;
    uint256 public tokensForOperations;    

    // Launch Settings
    bool public tradingOpen = true;    

    // events    
    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);
    event OperationsWalletUpdated(address indexed newOperationsWallet, address indexed oldOperationsWallet); 
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); 
    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    // toogle to stop swap if already underway
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {

        // load total fees 
        totalFeesBuy = operationsFeeBuy + liquidityFeeBuy;
        totalFeesSell = operationsFeeSell + liquidityFeeSell; 

        // load total distribution 
        _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage;
        
        // create router ------------------------------
        IUniswapV2Router02 _uniswapV2Router;
        if (block.chainid == 1) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 5) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else revert();

         // Create a uniswap pair for this new token         
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router; 
        isMarketPair[address(uniswapPair)] = true;

        // set allowances        
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        
        // exclude from paying fees or having max transaction amount
        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[address(0xdead)] = true; 
        isExcludedFromFee[liquidityWallet] = true; 
        isExcludedFromFee[operationsWallet] = true; 
        
        // exclude contracts from max wallet size
        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[liquidityWallet] = true; 
        isWalletLimitExempt[operationsWallet] = true; 
        
        // exclude contracts from max wallet size
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        
        _balances[_msgSender()] = _totalSupply;   
        emit Transfer(address(0), _msgSender(), _totalSupply);  
    }

    receive() external payable {

  	}
  	
  	// @dev Public read functions start -------------------------------------
    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    // custom allowance methods
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    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;
    }
    
    // get minimum tokens before swap
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    // approve spending methods
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }
    
    function getBlock()public view returns (uint256) {
        return block.number;
    }

  	// @dev Owner functions start -------------------------------------
    
    // toogle market pair status
    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    // set excluded xx limit 
    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    // update max tx amount
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    // set excluded tax 
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }
    
    // update fees
    function updateFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        operationsFeeBuy = _operationsFee;
        liquidityFeeBuy = _liquidityFee;
        totalFeesBuy = operationsFeeBuy + liquidityFeeBuy;
        require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less");
    }

    function updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner {
        operationsFeeSell = _operationsFee;
        liquidityFeeSell = _liquidityFee;
        totalFeesSell = operationsFeeSell + liquidityFeeSell;
        require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less");
    }
    
    // set distribution settings
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newOperationsShare) external onlyOwner() {
        _liquiditySharePercentage = newLiquidityShare;
        _operationsSharePercentage = newOperationsShare; 
        _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage;
        require(_totalDistributionShares == 100, "Distribution needs to total to 100");
    }

    // remove wallet limit
    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }
    
    // set excluded wallet limit 
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }
    
    // update wallet limit
    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }
    
    // change the minimum amount of tokens to sell from fees
    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    // sets the wallet that receives LP tokens to lock
    function updateLiquidityWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Cannot set to address 0");
        isExcludedFromFee[newAddress] = true;
        isExcludedFromFee[liquidityWallet] = false;
        emit LiquidityWalletUpdated(newAddress, liquidityWallet);
        liquidityWallet =  payable(newAddress);
    }
    
    // updates the operations wallet (marketing, charity, etc.)
    function updateOperationsWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Cannot set to address 0");
        isExcludedFromFee[newAddress] = true;
        isExcludedFromFee[operationsWallet] = false;
        emit OperationsWalletUpdated(newAddress, operationsWallet);
        operationsWallet = payable(newAddress);
    }    

    // transfer amount to address
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    // change router address
    function changeRouterAddress(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 
        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        // check if new pair deployed
        if(newPairAddress == address(0)) 
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; 
        uniswapV2Router = _uniswapV2Router; 
        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

    // once enabled, can never be turned off
    function setTrading() public onlyOwner {
        tradingOpen = true;
    }
          
    // pre airdrop to any holders    
    function airdropToWallets(address[] memory airdropWallets, uint256[] memory amount) external onlyOwner() {
        require(airdropWallets.length == amount.length, "airdropToWallets:: Arrays must be the same length");
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i];
            emit Transfer(msg.sender, wallet, airdropAmount);
        }
    }

    // @dev Views start here ------------------------------------

    // @dev User Callable Functions start here! ---------------------------------------------  

     function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }   

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        // check trading open
        if (!tradingOpen) {
            require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {   
            // required for wallet distribution    
            if (sender != owner() && recipient != owner()){ 
                _checkTxLimit(sender,amount); 
            }

            // check can swap for fees and liq
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) 
            {
                swapAndLiquify(contractTokenBalance);    
            }

            // check senders balance
            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            // check wallet holding limit
            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            // continue    
            _balances[recipient] = _balances[recipient].add(finalAmount);
            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    // transfer for     
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    // take fee method
    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(totalFeesBuy).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(totalFeesSell).div(100);
        }
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }
        return amount.sub(feeAmount);
    }

    // swap tokens for fees and liq
    function swapAndLiquify(uint256 swapAmount) private lockTheSwap {

        // check there are currently tokens to sell
        uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = swapAmount.sub(tokensForLP);   

        // swap tokens
        swapTokensForEth(tokensForSwap);

        // received amount
        uint256 amountReceived = address(this).balance;
        
        // work out distribution
        uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2));
        uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2);                
        uint256 amountOperations = amountReceived.sub(amountLiquidity);

        if(amountOperations > 0)
            transferToAddressETH(operationsWallet, amountOperations);

        if(amountLiquidity > 0 && tokensForLP > 0){
            addLiquidity(tokensForLP, amountLiquidity);
            emit SwapAndLiquify(tokensForSwap, amountLiquidity, tokensForLP);
        }
    }

    // swap tokens to eth
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this), 
            block.timestamp
        );
        emit SwapTokensForETH(tokenAmount, path);
    }

    // add liqiudity 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }
    
    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function _checkTxLimit(address sender, uint256 amount) private view{ 
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }
}

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":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldOperationsWallet","type":"address"}],"name":"OperationsWalletUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_liquiditySharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":"operationsFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newOperationsShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","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":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"uniswapPair","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280601281526020017f54686520526f616420546f2052796f7368690000000000000000000000000000815250600190816200004a919062000f39565b506040518060400160405280600481526020017f54525452000000000000000000000000000000000000000000000000000000008152506002908162000091919062000f39565b506012600360006101000a81548160ff021916908360ff16021790555069d3c21bcecceda10000006004556101f46001600454620000d091906200104f565b620000dc9190620010c9565b6005556103e8601e600454620000f391906200104f565b620000ff9190620010c9565b6006556103e8601e6004546200011691906200104f565b620001229190620010c9565b6007556001600860006101000a81548160ff02191690831515021790555073af698a5cd320c3fdcfa0505080c3426decec63bd600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073af698a5cd320c3fdcfa0505080c3426decec63bd600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250600a80556014600b55601e600d556019600e556032600f55604b601155600060125560646013556001601f60006101000a81548160ff0219169083151502179055503480156200026e57600080fd5b5060006200028162000c8e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600b5462000331919062001101565b600c81905550600e54600f5462000349919062001101565b60108190555060135460125462000361919062001101565b6014819055506000600146036200038f57737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bb565b60054603620003b557737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003ba565b600080fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d9190620011a6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000495573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bb9190620011a6565b6040518363ffffffff1660e01b8152600401620004da929190620011e9565b6020604051808303816000875af1158015620004fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005209190620011a6565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600454601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160176000620006d662000c9660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620008e362000c9660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600062000b1062000c9660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004546015600062000bd062000c8e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c1e62000c8e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000c7f919062001227565b60405180910390a35062001244565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4157607f821691505b60208210810362000d575762000d5662000cf9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d82565b62000dcd868362000d82565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1a62000e1462000e0e8462000de5565b62000def565b62000de5565b9050919050565b6000819050919050565b62000e368362000df9565b62000e4e62000e458262000e21565b84845462000d8f565b825550505050565b600090565b62000e6562000e56565b62000e7281848462000e2b565b505050565b5b8181101562000e9a5762000e8e60008262000e5b565b60018101905062000e78565b5050565b601f82111562000ee95762000eb38162000d5d565b62000ebe8462000d72565b8101602085101562000ece578190505b62000ee662000edd8562000d72565b83018262000e77565b50505b505050565b600082821c905092915050565b600062000f0e6000198460080262000eee565b1980831691505092915050565b600062000f29838362000efb565b9150826002028217905092915050565b62000f448262000cbf565b67ffffffffffffffff81111562000f605762000f5f62000cca565b5b62000f6c825462000d28565b62000f7982828562000e9e565b600060209050601f83116001811462000fb1576000841562000f9c578287015190505b62000fa8858262000f1b565b86555062001018565b601f19841662000fc18662000d5d565b60005b8281101562000feb5784890151825560018201915060208501945060208101905062000fc4565b868310156200100b578489015162001007601f89168262000efb565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200105c8262000de5565b9150620010698362000de5565b9250828202620010798162000de5565b9150828204841483151762001093576200109262001020565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010d68262000de5565b9150620010e38362000de5565b925082620010f657620010f56200109a565b5b828204905092915050565b60006200110e8262000de5565b91506200111b8362000de5565b925082820190508082111562001136576200113562001020565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200116e8262001141565b9050919050565b620011808162001161565b81146200118c57600080fd5b50565b600081519050620011a08162001175565b92915050565b600060208284031215620011bf57620011be6200113c565b5b6000620011cf848285016200118f565b91505092915050565b620011e38162001161565b82525050565b6000604082019050620012006000830185620011d8565b6200120f6020830184620011d8565b9392505050565b620012218162000de5565b82525050565b60006020820190506200123e600083018462001216565b92915050565b6080516159536200126760003960008181611824015261185001526159536000f3fe6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d59578063fc155d1d14610d84578063fd72e22a14610dad578063ffb54a9914610dd857610397565b8063f1d5f51714610cb3578063f2fde38b14610cdc578063f84ba65d14610d05578063f872858a14610d2e57610397565b8063e37ba8f9116100dc578063e37ba8f914610c0f578063ec28438a14610c38578063eea5b63f14610c61578063ef422a1814610c8a57610397565b8063d469801614610b7c578063dd62ed3e14610ba7578063e10e9f3214610be457610397565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610aac578063ac23ca5914610ae9578063c816841b14610b14578063c867d60b14610b3f57610397565b806395d89b41146109ee578063a073d37f14610a19578063a08e671f14610a44578063a457c2d714610a6f57610397565b806382d20116116101b657806382d2011614610946578063844d591c14610971578063876b6f8e1461099a5780638da5cb5b146109c357610397565b80637c519ffb146108d95780637d1db4a5146108f0578063807c2d9c1461091b57610397565b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db794371461083157806370a082311461085a578063715018a6146108975780637849c1cd146108ae57610397565b80633b97084a146107635780633ecad2711461078c5780634b743995146107c95780635342acb4146107f457610397565b80632e97766d1161029b5780632e97766d146106a757806330d5d18d146106d2578063313ce567146106fb578063395093511461072657610397565b806327c8f835146106265780632b112e49146106515780632baa72171461067c57610397565b806318160ddd1161032e5780632198cf6c116103085780632198cf6c1461056e5780632307b4411461059757806323b872dd146105c05780632563ae83146105fd57610397565b806318160ddd146104ed57806319c59e2c146105185780631a8145bb1461054357610397565b8063095ea7b31161036a578063095ea7b31461042f5780630e47e8221461046c5780631107b3a5146104975780631694505e146104c257610397565b8063031d6cd01461039c57806304db6e68146103c757806306fdde031461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e03565b6040516103be919061444f565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906144dc565b610e09565b6040516103fb9190614518565b60405180910390f35b34801561041057600080fd5b5061041961130c565b60405161042691906145c3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614611565b61139e565b604051610463919061466c565b60405180910390f35b34801561047857600080fd5b506104816113bc565b60405161048e919061444f565b60405180910390f35b3480156104a357600080fd5b506104ac6113c2565b6040516104b9919061444f565b60405180910390f35b3480156104ce57600080fd5b506104d76113c8565b6040516104e491906146e6565b60405180910390f35b3480156104f957600080fd5b506105026113ee565b60405161050f919061444f565b60405180910390f35b34801561052457600080fd5b5061052d6113f8565b60405161053a919061444f565b60405180910390f35b34801561054f57600080fd5b506105586113fe565b604051610565919061444f565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061472d565b611404565b005b3480156105a357600080fd5b506105be60048036038101906105b99190614978565b6114f4565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906149f0565b611696565b6040516105f4919061466c565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190614a43565b611770565b005b34801561063257600080fd5b5061063b611822565b6040516106489190614518565b60405180910390f35b34801561065d57600080fd5b50610666611846565b604051610673919061444f565b60405180910390f35b34801561068857600080fd5b5061069161188a565b60405161069e919061444f565b60405180910390f35b3480156106b357600080fd5b506106bc611890565b6040516106c9919061444f565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906144dc565b611898565b005b34801561070757600080fd5b50610710611b2e565b60405161071d9190614a8c565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614611565b611b45565b60405161075a919061466c565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614aa7565b611bf8565b005b34801561079857600080fd5b506107b360048036038101906107ae91906144dc565b611c97565b6040516107c0919061466c565b60405180910390f35b3480156107d557600080fd5b506107de611cb7565b6040516107eb919061444f565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906144dc565b611cbd565b604051610828919061466c565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614ad4565b611cdd565b005b34801561086657600080fd5b50610881600480360381019061087c91906144dc565b611de1565b60405161088e919061444f565b60405180910390f35b3480156108a357600080fd5b506108ac611e2a565b005b3480156108ba57600080fd5b506108c3611f7d565b6040516108d0919061444f565b60405180910390f35b3480156108e557600080fd5b506108ee611f83565b005b3480156108fc57600080fd5b50610905612035565b604051610912919061444f565b60405180910390f35b34801561092757600080fd5b5061093061203b565b60405161093d919061444f565b60405180910390f35b34801561095257600080fd5b5061095b612041565b604051610968919061444f565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061472d565b612047565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614ad4565b612137565b005b3480156109cf57600080fd5b506109d861223b565b6040516109e59190614518565b60405180910390f35b3480156109fa57600080fd5b50610a03612264565b604051610a1091906145c3565b60405180910390f35b348015610a2557600080fd5b50610a2e6122f6565b604051610a3b919061444f565b60405180910390f35b348015610a5057600080fd5b50610a59612300565b604051610a66919061444f565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614611565b612306565b604051610aa3919061466c565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614611565b6123d3565b604051610ae0919061466c565b60405180910390f35b348015610af557600080fd5b50610afe6123f2565b604051610b0b919061444f565b60405180910390f35b348015610b2057600080fd5b50610b296123f8565b604051610b369190614518565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b6191906144dc565b61241e565b604051610b73919061466c565b60405180910390f35b348015610b8857600080fd5b50610b9161243e565b604051610b9e9190614b35565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614b50565b612464565b604051610bdb919061444f565b60405180910390f35b348015610bf057600080fd5b50610bf96124eb565b604051610c06919061444f565b60405180910390f35b348015610c1b57600080fd5b50610c366004803603810190610c3191906144dc565b6124f1565b005b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614aa7565b612787565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614ad4565b612826565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061472d565b612928565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614aa7565b612a18565b005b348015610ce857600080fd5b50610d036004803603810190610cfe91906144dc565b612ab7565b005b348015610d1157600080fd5b50610d2c6004803603810190610d27919061472d565b612c78565b005b348015610d3a57600080fd5b50610d43612d68565b604051610d50919061466c565b60405180910390f35b348015610d6557600080fd5b50610d6e612d7b565b604051610d7b919061444f565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da69190614aa7565b612d81565b005b348015610db957600080fd5b50610dc261302d565b604051610dcf9190614b35565b60405180910390f35b348015610de457600080fd5b50610ded613053565b604051610dfa919061466c565b60405180910390f35b600f5481565b6000610e13613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790614bdc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614c11565b6040518363ffffffff1660e01b8152600401610fbc929190614c3e565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190614c11565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190614c11565b6040518363ffffffff1660e01b815260040161114a929190614c3e565b6020604051808303816000875af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614c11565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60606001805461131b90614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614c96565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b5050505050905090565b60006113b26113ab613066565b848461306e565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b61140c613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090614bdc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114fc613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614bdc565b60405180910390fd5b80518251146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614d39565b60405180910390fd5b60005b82518110156116915760008382815181106115ee576115ed614d59565b5b60200260200101519050600083838151811061160d5761160c614d59565b5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611674919061444f565b60405180910390a35050808061168990614db7565b9150506115d0565b505050565b60006116a3848484613237565b50611765846116b0613066565b611760856040518060600160405280602881526020016158d160289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611716613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b600190509392505050565b611778613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614bdc565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006118856118747f0000000000000000000000000000000000000000000000000000000000000000611de1565b60045461386c90919063ffffffff16565b905090565b60135481565b600043905090565b6118a0613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611bee611b52613066565b84611be98560166000611b63613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b61306e565b6001905092915050565b611c00613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614bdc565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611ce5613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614bdc565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611d909190614e6b565b600c81905550600d54600c541115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614f11565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e32613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611f8b613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614bdc565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b61204f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614bdc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61213f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614bdc565b60405180910390fd5b81600f8190555080600e81905550600e54600f546121ea9190614e6b565b6010819055506011546010541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614fa3565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461227390614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461229f90614c96565b80156122ec5780601f106122c1576101008083540402835291602001916122ec565b820191906000526020600020905b8154815290600101906020018083116122cf57829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006123c9612313613066565b846123c4856040518060600160405280602581526020016158f9602591396016600061233d613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b6001905092915050565b60006123e76123e0613066565b8484613237565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6124f9613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257d90614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614bdc565b60405180910390fd5b8060068190555050565b61282e613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614bdc565b60405180910390fd5b81601281905550806013819055506013546012546128d99190614e6b565b601481905550606460145414612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90615035565b60405180910390fd5b5050565b612930613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614bdc565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612a20613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614bdc565b60405180910390fd5b8060078190555050565b612abf613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c80613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614bdc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612d89613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614bdc565b60405180910390fd5b6000600267ffffffffffffffff811115612e3357612e32614772565b5b604051908082528060200260200182016040528015612e615781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614c11565b81600081518110612f0957612f08614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612f5857612f57614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ff794939291906151e0565b6000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061529e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314390615330565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161322a919061444f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e906153c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90615454565b60405180910390fd5b601f60009054906101000a900460ff166133a05761333261223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461339f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613396906154e6565b60405180910390fd5b5b601c60149054906101000a900460ff16156133c7576133c0848484613914565b9050613801565b6133cf61223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561343d575061340d61223b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5761344c8483613ae7565b5b600061345830611de1565b90506000600554821015905080801561347e5750601c60149054906101000a900460ff16155b80156134d45750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e3576134e282613b84565b5b61356c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136525750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366657613661878787613d3c565b613668565b845b9050600860009054906101000a900460ff1680156136d05750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ff576007546136f3826136e589611de1565b6138b690919063ffffffff16565b11156136fe57600080fd5b5b61375181601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f1919061444f565b60405180910390a3600193505050505b9392505050565b6000838311158290613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384791906145c3565b60405180910390fd5b506000838561385f9190615506565b9050809150509392505050565b60006138ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613808565b905092915050565b60008082846138c59190614e6b565b90508381101561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190615586565b60405180910390fd5b8091505092915050565b600061399f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad4919061444f565b60405180910390a3600190509392505050565b60065481111580613b415750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906155f2565b60405180910390fd5b5050565b6001601c60146101000a81548160ff0219169083151502179055506000613bdd6002613bcf601454613bc160125487613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613bf4828461386c90919063ffffffff16565b9050613bff81614027565b60004790506000613c30613c1f6002601254613fdd90919063ffffffff16565b60145461386c90919063ffffffff16565b90506000613c6e6002613c6084613c5260125488613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613c85828561386c90919063ffffffff16565b90506000811115613cbd57613cbc600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826142a3565b5b600082118015613ccd5750600086115b15613d1857613cdc86836142ee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613d0f93929190615612565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc457613dbd6064613daf600c5486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b9050613e42565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4157613e3e6064613e3060105486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b90505b5b6000811115613f4657613e9d81601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f3d919061444f565b60405180910390a35b613f59818461386c90919063ffffffff16565b9150509392505050565b6000808303613f755760009050613fd7565b60008284613f839190615649565b9050828482613f9291906156ba565b14613fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc99061575d565b60405180910390fd5b809150505b92915050565b600061401f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143d3565b905092915050565b6000600267ffffffffffffffff81111561404457614043614772565b5b6040519080825280602002602001820160405280156140725781602001602082028036833780820191505090505b509050308160008151811061408a57614089614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141559190614c11565b8160018151811061416957614168614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d030601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161423495949392919061577d565b600060405180830381600087803b15801561424e57600080fd5b505af1158015614262573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516142979291906157d7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142e9573d6000803e3d6000fd5b505050565b61431b30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061436761223b565b426040518863ffffffff1660e01b815260040161438996959493929190615807565b60606040518083038185885af11580156143a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143cc919061587d565b5050505050565b6000808311829061441a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441191906145c3565b60405180910390fd5b506000838561442991906156ba565b9050809150509392505050565b6000819050919050565b61444981614436565b82525050565b60006020820190506144646000830184614440565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a98261447e565b9050919050565b6144b98161449e565b81146144c457600080fd5b50565b6000813590506144d6816144b0565b92915050565b6000602082840312156144f2576144f1614474565b5b6000614500848285016144c7565b91505092915050565b6145128161449e565b82525050565b600060208201905061452d6000830184614509565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456d578082015181840152602081019050614552565b60008484015250505050565b6000601f19601f8301169050919050565b600061459582614533565b61459f818561453e565b93506145af81856020860161454f565b6145b881614579565b840191505092915050565b600060208201905081810360008301526145dd818461458a565b905092915050565b6145ee81614436565b81146145f957600080fd5b50565b60008135905061460b816145e5565b92915050565b6000806040838503121561462857614627614474565b5b6000614636858286016144c7565b9250506020614647858286016145fc565b9150509250929050565b60008115159050919050565b61466681614651565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000819050919050565b60006146ac6146a76146a28461447e565b614687565b61447e565b9050919050565b60006146be82614691565b9050919050565b60006146d0826146b3565b9050919050565b6146e0816146c5565b82525050565b60006020820190506146fb60008301846146d7565b92915050565b61470a81614651565b811461471557600080fd5b50565b60008135905061472781614701565b92915050565b6000806040838503121561474457614743614474565b5b6000614752858286016144c7565b925050602061476385828601614718565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147aa82614579565b810181811067ffffffffffffffff821117156147c9576147c8614772565b5b80604052505050565b60006147dc61446a565b90506147e882826147a1565b919050565b600067ffffffffffffffff82111561480857614807614772565b5b602082029050602081019050919050565b600080fd5b600061483161482c846147ed565b6147d2565b9050808382526020820190506020840283018581111561485457614853614819565b5b835b8181101561487d578061486988826144c7565b845260208401935050602081019050614856565b5050509392505050565b600082601f83011261489c5761489b61476d565b5b81356148ac84826020860161481e565b91505092915050565b600067ffffffffffffffff8211156148d0576148cf614772565b5b602082029050602081019050919050565b60006148f46148ef846148b5565b6147d2565b9050808382526020820190506020840283018581111561491757614916614819565b5b835b81811015614940578061492c88826145fc565b845260208401935050602081019050614919565b5050509392505050565b600082601f83011261495f5761495e61476d565b5b813561496f8482602086016148e1565b91505092915050565b6000806040838503121561498f5761498e614474565b5b600083013567ffffffffffffffff8111156149ad576149ac614479565b5b6149b985828601614887565b925050602083013567ffffffffffffffff8111156149da576149d9614479565b5b6149e68582860161494a565b9150509250929050565b600080600060608486031215614a0957614a08614474565b5b6000614a17868287016144c7565b9350506020614a28868287016144c7565b9250506040614a39868287016145fc565b9150509250925092565b600060208284031215614a5957614a58614474565b5b6000614a6784828501614718565b91505092915050565b600060ff82169050919050565b614a8681614a70565b82525050565b6000602082019050614aa16000830184614a7d565b92915050565b600060208284031215614abd57614abc614474565b5b6000614acb848285016145fc565b91505092915050565b60008060408385031215614aeb57614aea614474565b5b6000614af9858286016145fc565b9250506020614b0a858286016145fc565b9150509250929050565b6000614b1f8261447e565b9050919050565b614b2f81614b14565b82525050565b6000602082019050614b4a6000830184614b26565b92915050565b60008060408385031215614b6757614b66614474565b5b6000614b75858286016144c7565b9250506020614b86858286016144c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc660208361453e565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b600081519050614c0b816144b0565b92915050565b600060208284031215614c2757614c26614474565b5b6000614c3584828501614bfc565b91505092915050565b6000604082019050614c536000830185614509565b614c606020830184614509565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cae57607f821691505b602082108103614cc157614cc0614c67565b5b50919050565b7f61697264726f70546f57616c6c6574733a3a20417272617973206d757374206260008201527f65207468652073616d65206c656e677468000000000000000000000000000000602082015250565b6000614d2360318361453e565b9150614d2e82614cc7565b604082019050919050565b60006020820190508181036000830152614d5281614d16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dc282614436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df457614df3614d88565b5b600182019050919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614e3560178361453e565b9150614e4082614dff565b602082019050919050565b60006020820190508181036000830152614e6481614e28565b9050919050565b6000614e7682614436565b9150614e8183614436565b9250828201905080821115614e9957614e98614d88565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614efb60288361453e565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614f8d60298361453e565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061501f60228361453e565b915061502a82614fc3565b604082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b160268361453e565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b6000819050919050565b600061510c615107615102846150e7565b614687565b614436565b9050919050565b61511c816150f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151578161449e565b82525050565b6000615169838361514e565b60208301905092915050565b6000602082019050919050565b600061518d82615122565b615197818561512d565b93506151a28361513e565b8060005b838110156151d35781516151ba888261515d565b97506151c583615175565b9250506001810190506151a6565b5085935050505092915050565b60006080820190506151f56000830187615113565b81810360208301526152078186615182565b90506152166040830185614509565b6152236060830184614440565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528860248361453e565b91506152938261522c565b604082019050919050565b600060208201905081810360008301526152b78161527b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531a60228361453e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ac60258361453e565b91506153b782615350565b604082019050919050565b600060208201905081810360008301526153db8161539f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061543e60238361453e565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006154d0603f8361453e565b91506154db82615474565b604082019050919050565b600060208201905081810360008301526154ff816154c3565b9050919050565b600061551182614436565b915061551c83614436565b925082820390508181111561553457615533614d88565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615570601b8361453e565b915061557b8261553a565b602082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006155dc60118361453e565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b60006060820190506156276000830186614440565b6156346020830185614440565b6156416040830184614440565b949350505050565b600061565482614436565b915061565f83614436565b925082820261566d81614436565b9150828204841483151761568457615683614d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c582614436565b91506156d083614436565b9250826156e0576156df61568b565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061574760218361453e565b9150615752826156eb565b604082019050919050565b600060208201905081810360008301526157768161573a565b9050919050565b600060a0820190506157926000830188614440565b61579f6020830187615113565b81810360408301526157b18186615182565b90506157c06060830185614509565b6157cd6080830184614440565b9695505050505050565b60006040820190506157ec6000830185614440565b81810360208301526157fe8184615182565b90509392505050565b600060c08201905061581c6000830189614509565b6158296020830188614440565b6158366040830187615113565b6158436060830186615113565b6158506080830185614509565b61585d60a0830184614440565b979650505050505050565b600081519050615877816145e5565b92915050565b60008060006060848603121561589657615895614474565b5b60006158a486828701615868565b93505060206158b586828701615868565b92505060406158c686828701615868565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207124d39d46dc519cbf1e3984958d15cc6408eaf1c1b221f9dbcff7107e7bfa8d64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d59578063fc155d1d14610d84578063fd72e22a14610dad578063ffb54a9914610dd857610397565b8063f1d5f51714610cb3578063f2fde38b14610cdc578063f84ba65d14610d05578063f872858a14610d2e57610397565b8063e37ba8f9116100dc578063e37ba8f914610c0f578063ec28438a14610c38578063eea5b63f14610c61578063ef422a1814610c8a57610397565b8063d469801614610b7c578063dd62ed3e14610ba7578063e10e9f3214610be457610397565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610aac578063ac23ca5914610ae9578063c816841b14610b14578063c867d60b14610b3f57610397565b806395d89b41146109ee578063a073d37f14610a19578063a08e671f14610a44578063a457c2d714610a6f57610397565b806382d20116116101b657806382d2011614610946578063844d591c14610971578063876b6f8e1461099a5780638da5cb5b146109c357610397565b80637c519ffb146108d95780637d1db4a5146108f0578063807c2d9c1461091b57610397565b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db794371461083157806370a082311461085a578063715018a6146108975780637849c1cd146108ae57610397565b80633b97084a146107635780633ecad2711461078c5780634b743995146107c95780635342acb4146107f457610397565b80632e97766d1161029b5780632e97766d146106a757806330d5d18d146106d2578063313ce567146106fb578063395093511461072657610397565b806327c8f835146106265780632b112e49146106515780632baa72171461067c57610397565b806318160ddd1161032e5780632198cf6c116103085780632198cf6c1461056e5780632307b4411461059757806323b872dd146105c05780632563ae83146105fd57610397565b806318160ddd146104ed57806319c59e2c146105185780631a8145bb1461054357610397565b8063095ea7b31161036a578063095ea7b31461042f5780630e47e8221461046c5780631107b3a5146104975780631694505e146104c257610397565b8063031d6cd01461039c57806304db6e68146103c757806306fdde031461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e03565b6040516103be919061444f565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906144dc565b610e09565b6040516103fb9190614518565b60405180910390f35b34801561041057600080fd5b5061041961130c565b60405161042691906145c3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614611565b61139e565b604051610463919061466c565b60405180910390f35b34801561047857600080fd5b506104816113bc565b60405161048e919061444f565b60405180910390f35b3480156104a357600080fd5b506104ac6113c2565b6040516104b9919061444f565b60405180910390f35b3480156104ce57600080fd5b506104d76113c8565b6040516104e491906146e6565b60405180910390f35b3480156104f957600080fd5b506105026113ee565b60405161050f919061444f565b60405180910390f35b34801561052457600080fd5b5061052d6113f8565b60405161053a919061444f565b60405180910390f35b34801561054f57600080fd5b506105586113fe565b604051610565919061444f565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061472d565b611404565b005b3480156105a357600080fd5b506105be60048036038101906105b99190614978565b6114f4565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906149f0565b611696565b6040516105f4919061466c565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190614a43565b611770565b005b34801561063257600080fd5b5061063b611822565b6040516106489190614518565b60405180910390f35b34801561065d57600080fd5b50610666611846565b604051610673919061444f565b60405180910390f35b34801561068857600080fd5b5061069161188a565b60405161069e919061444f565b60405180910390f35b3480156106b357600080fd5b506106bc611890565b6040516106c9919061444f565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906144dc565b611898565b005b34801561070757600080fd5b50610710611b2e565b60405161071d9190614a8c565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614611565b611b45565b60405161075a919061466c565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614aa7565b611bf8565b005b34801561079857600080fd5b506107b360048036038101906107ae91906144dc565b611c97565b6040516107c0919061466c565b60405180910390f35b3480156107d557600080fd5b506107de611cb7565b6040516107eb919061444f565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906144dc565b611cbd565b604051610828919061466c565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614ad4565b611cdd565b005b34801561086657600080fd5b50610881600480360381019061087c91906144dc565b611de1565b60405161088e919061444f565b60405180910390f35b3480156108a357600080fd5b506108ac611e2a565b005b3480156108ba57600080fd5b506108c3611f7d565b6040516108d0919061444f565b60405180910390f35b3480156108e557600080fd5b506108ee611f83565b005b3480156108fc57600080fd5b50610905612035565b604051610912919061444f565b60405180910390f35b34801561092757600080fd5b5061093061203b565b60405161093d919061444f565b60405180910390f35b34801561095257600080fd5b5061095b612041565b604051610968919061444f565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061472d565b612047565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614ad4565b612137565b005b3480156109cf57600080fd5b506109d861223b565b6040516109e59190614518565b60405180910390f35b3480156109fa57600080fd5b50610a03612264565b604051610a1091906145c3565b60405180910390f35b348015610a2557600080fd5b50610a2e6122f6565b604051610a3b919061444f565b60405180910390f35b348015610a5057600080fd5b50610a59612300565b604051610a66919061444f565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614611565b612306565b604051610aa3919061466c565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614611565b6123d3565b604051610ae0919061466c565b60405180910390f35b348015610af557600080fd5b50610afe6123f2565b604051610b0b919061444f565b60405180910390f35b348015610b2057600080fd5b50610b296123f8565b604051610b369190614518565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b6191906144dc565b61241e565b604051610b73919061466c565b60405180910390f35b348015610b8857600080fd5b50610b9161243e565b604051610b9e9190614b35565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614b50565b612464565b604051610bdb919061444f565b60405180910390f35b348015610bf057600080fd5b50610bf96124eb565b604051610c06919061444f565b60405180910390f35b348015610c1b57600080fd5b50610c366004803603810190610c3191906144dc565b6124f1565b005b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614aa7565b612787565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614ad4565b612826565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061472d565b612928565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614aa7565b612a18565b005b348015610ce857600080fd5b50610d036004803603810190610cfe91906144dc565b612ab7565b005b348015610d1157600080fd5b50610d2c6004803603810190610d27919061472d565b612c78565b005b348015610d3a57600080fd5b50610d43612d68565b604051610d50919061466c565b60405180910390f35b348015610d6557600080fd5b50610d6e612d7b565b604051610d7b919061444f565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da69190614aa7565b612d81565b005b348015610db957600080fd5b50610dc261302d565b604051610dcf9190614b35565b60405180910390f35b348015610de457600080fd5b50610ded613053565b604051610dfa919061466c565b60405180910390f35b600f5481565b6000610e13613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790614bdc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614c11565b6040518363ffffffff1660e01b8152600401610fbc929190614c3e565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190614c11565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190614c11565b6040518363ffffffff1660e01b815260040161114a929190614c3e565b6020604051808303816000875af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614c11565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60606001805461131b90614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614c96565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b5050505050905090565b60006113b26113ab613066565b848461306e565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b61140c613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090614bdc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114fc613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614bdc565b60405180910390fd5b80518251146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614d39565b60405180910390fd5b60005b82518110156116915760008382815181106115ee576115ed614d59565b5b60200260200101519050600083838151811061160d5761160c614d59565b5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611674919061444f565b60405180910390a35050808061168990614db7565b9150506115d0565b505050565b60006116a3848484613237565b50611765846116b0613066565b611760856040518060600160405280602881526020016158d160289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611716613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b600190509392505050565b611778613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614bdc565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006118856118747f000000000000000000000000000000000000000000000000000000000000dead611de1565b60045461386c90919063ffffffff16565b905090565b60135481565b600043905090565b6118a0613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611bee611b52613066565b84611be98560166000611b63613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b61306e565b6001905092915050565b611c00613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614bdc565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611ce5613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614bdc565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611d909190614e6b565b600c81905550600d54600c541115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614f11565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e32613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611f8b613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614bdc565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b61204f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614bdc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61213f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614bdc565b60405180910390fd5b81600f8190555080600e81905550600e54600f546121ea9190614e6b565b6010819055506011546010541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614fa3565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461227390614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461229f90614c96565b80156122ec5780601f106122c1576101008083540402835291602001916122ec565b820191906000526020600020905b8154815290600101906020018083116122cf57829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006123c9612313613066565b846123c4856040518060600160405280602581526020016158f9602591396016600061233d613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b6001905092915050565b60006123e76123e0613066565b8484613237565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6124f9613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257d90614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614bdc565b60405180910390fd5b8060068190555050565b61282e613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614bdc565b60405180910390fd5b81601281905550806013819055506013546012546128d99190614e6b565b601481905550606460145414612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90615035565b60405180910390fd5b5050565b612930613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614bdc565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612a20613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614bdc565b60405180910390fd5b8060078190555050565b612abf613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c80613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614bdc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612d89613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614bdc565b60405180910390fd5b6000600267ffffffffffffffff811115612e3357612e32614772565b5b604051908082528060200260200182016040528015612e615781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614c11565b81600081518110612f0957612f08614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612f5857612f57614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ff794939291906151e0565b6000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061529e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314390615330565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161322a919061444f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e906153c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90615454565b60405180910390fd5b601f60009054906101000a900460ff166133a05761333261223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461339f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613396906154e6565b60405180910390fd5b5b601c60149054906101000a900460ff16156133c7576133c0848484613914565b9050613801565b6133cf61223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561343d575061340d61223b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5761344c8483613ae7565b5b600061345830611de1565b90506000600554821015905080801561347e5750601c60149054906101000a900460ff16155b80156134d45750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e3576134e282613b84565b5b61356c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136525750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366657613661878787613d3c565b613668565b845b9050600860009054906101000a900460ff1680156136d05750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ff576007546136f3826136e589611de1565b6138b690919063ffffffff16565b11156136fe57600080fd5b5b61375181601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f1919061444f565b60405180910390a3600193505050505b9392505050565b6000838311158290613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384791906145c3565b60405180910390fd5b506000838561385f9190615506565b9050809150509392505050565b60006138ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613808565b905092915050565b60008082846138c59190614e6b565b90508381101561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190615586565b60405180910390fd5b8091505092915050565b600061399f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad4919061444f565b60405180910390a3600190509392505050565b60065481111580613b415750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906155f2565b60405180910390fd5b5050565b6001601c60146101000a81548160ff0219169083151502179055506000613bdd6002613bcf601454613bc160125487613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613bf4828461386c90919063ffffffff16565b9050613bff81614027565b60004790506000613c30613c1f6002601254613fdd90919063ffffffff16565b60145461386c90919063ffffffff16565b90506000613c6e6002613c6084613c5260125488613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613c85828561386c90919063ffffffff16565b90506000811115613cbd57613cbc600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826142a3565b5b600082118015613ccd5750600086115b15613d1857613cdc86836142ee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613d0f93929190615612565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc457613dbd6064613daf600c5486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b9050613e42565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4157613e3e6064613e3060105486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b90505b5b6000811115613f4657613e9d81601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f3d919061444f565b60405180910390a35b613f59818461386c90919063ffffffff16565b9150509392505050565b6000808303613f755760009050613fd7565b60008284613f839190615649565b9050828482613f9291906156ba565b14613fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc99061575d565b60405180910390fd5b809150505b92915050565b600061401f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143d3565b905092915050565b6000600267ffffffffffffffff81111561404457614043614772565b5b6040519080825280602002602001820160405280156140725781602001602082028036833780820191505090505b509050308160008151811061408a57614089614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141559190614c11565b8160018151811061416957614168614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d030601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161423495949392919061577d565b600060405180830381600087803b15801561424e57600080fd5b505af1158015614262573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516142979291906157d7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142e9573d6000803e3d6000fd5b505050565b61431b30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061436761223b565b426040518863ffffffff1660e01b815260040161438996959493929190615807565b60606040518083038185885af11580156143a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143cc919061587d565b5050505050565b6000808311829061441a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441191906145c3565b60405180910390fd5b506000838561442991906156ba565b9050809150509392505050565b6000819050919050565b61444981614436565b82525050565b60006020820190506144646000830184614440565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a98261447e565b9050919050565b6144b98161449e565b81146144c457600080fd5b50565b6000813590506144d6816144b0565b92915050565b6000602082840312156144f2576144f1614474565b5b6000614500848285016144c7565b91505092915050565b6145128161449e565b82525050565b600060208201905061452d6000830184614509565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456d578082015181840152602081019050614552565b60008484015250505050565b6000601f19601f8301169050919050565b600061459582614533565b61459f818561453e565b93506145af81856020860161454f565b6145b881614579565b840191505092915050565b600060208201905081810360008301526145dd818461458a565b905092915050565b6145ee81614436565b81146145f957600080fd5b50565b60008135905061460b816145e5565b92915050565b6000806040838503121561462857614627614474565b5b6000614636858286016144c7565b9250506020614647858286016145fc565b9150509250929050565b60008115159050919050565b61466681614651565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000819050919050565b60006146ac6146a76146a28461447e565b614687565b61447e565b9050919050565b60006146be82614691565b9050919050565b60006146d0826146b3565b9050919050565b6146e0816146c5565b82525050565b60006020820190506146fb60008301846146d7565b92915050565b61470a81614651565b811461471557600080fd5b50565b60008135905061472781614701565b92915050565b6000806040838503121561474457614743614474565b5b6000614752858286016144c7565b925050602061476385828601614718565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147aa82614579565b810181811067ffffffffffffffff821117156147c9576147c8614772565b5b80604052505050565b60006147dc61446a565b90506147e882826147a1565b919050565b600067ffffffffffffffff82111561480857614807614772565b5b602082029050602081019050919050565b600080fd5b600061483161482c846147ed565b6147d2565b9050808382526020820190506020840283018581111561485457614853614819565b5b835b8181101561487d578061486988826144c7565b845260208401935050602081019050614856565b5050509392505050565b600082601f83011261489c5761489b61476d565b5b81356148ac84826020860161481e565b91505092915050565b600067ffffffffffffffff8211156148d0576148cf614772565b5b602082029050602081019050919050565b60006148f46148ef846148b5565b6147d2565b9050808382526020820190506020840283018581111561491757614916614819565b5b835b81811015614940578061492c88826145fc565b845260208401935050602081019050614919565b5050509392505050565b600082601f83011261495f5761495e61476d565b5b813561496f8482602086016148e1565b91505092915050565b6000806040838503121561498f5761498e614474565b5b600083013567ffffffffffffffff8111156149ad576149ac614479565b5b6149b985828601614887565b925050602083013567ffffffffffffffff8111156149da576149d9614479565b5b6149e68582860161494a565b9150509250929050565b600080600060608486031215614a0957614a08614474565b5b6000614a17868287016144c7565b9350506020614a28868287016144c7565b9250506040614a39868287016145fc565b9150509250925092565b600060208284031215614a5957614a58614474565b5b6000614a6784828501614718565b91505092915050565b600060ff82169050919050565b614a8681614a70565b82525050565b6000602082019050614aa16000830184614a7d565b92915050565b600060208284031215614abd57614abc614474565b5b6000614acb848285016145fc565b91505092915050565b60008060408385031215614aeb57614aea614474565b5b6000614af9858286016145fc565b9250506020614b0a858286016145fc565b9150509250929050565b6000614b1f8261447e565b9050919050565b614b2f81614b14565b82525050565b6000602082019050614b4a6000830184614b26565b92915050565b60008060408385031215614b6757614b66614474565b5b6000614b75858286016144c7565b9250506020614b86858286016144c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc660208361453e565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b600081519050614c0b816144b0565b92915050565b600060208284031215614c2757614c26614474565b5b6000614c3584828501614bfc565b91505092915050565b6000604082019050614c536000830185614509565b614c606020830184614509565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cae57607f821691505b602082108103614cc157614cc0614c67565b5b50919050565b7f61697264726f70546f57616c6c6574733a3a20417272617973206d757374206260008201527f65207468652073616d65206c656e677468000000000000000000000000000000602082015250565b6000614d2360318361453e565b9150614d2e82614cc7565b604082019050919050565b60006020820190508181036000830152614d5281614d16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dc282614436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df457614df3614d88565b5b600182019050919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614e3560178361453e565b9150614e4082614dff565b602082019050919050565b60006020820190508181036000830152614e6481614e28565b9050919050565b6000614e7682614436565b9150614e8183614436565b9250828201905080821115614e9957614e98614d88565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614efb60288361453e565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614f8d60298361453e565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061501f60228361453e565b915061502a82614fc3565b604082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b160268361453e565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b6000819050919050565b600061510c615107615102846150e7565b614687565b614436565b9050919050565b61511c816150f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151578161449e565b82525050565b6000615169838361514e565b60208301905092915050565b6000602082019050919050565b600061518d82615122565b615197818561512d565b93506151a28361513e565b8060005b838110156151d35781516151ba888261515d565b97506151c583615175565b9250506001810190506151a6565b5085935050505092915050565b60006080820190506151f56000830187615113565b81810360208301526152078186615182565b90506152166040830185614509565b6152236060830184614440565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528860248361453e565b91506152938261522c565b604082019050919050565b600060208201905081810360008301526152b78161527b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531a60228361453e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ac60258361453e565b91506153b782615350565b604082019050919050565b600060208201905081810360008301526153db8161539f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061543e60238361453e565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006154d0603f8361453e565b91506154db82615474565b604082019050919050565b600060208201905081810360008301526154ff816154c3565b9050919050565b600061551182614436565b915061551c83614436565b925082820390508181111561553457615533614d88565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615570601b8361453e565b915061557b8261553a565b602082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006155dc60118361453e565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b60006060820190506156276000830186614440565b6156346020830185614440565b6156416040830184614440565b949350505050565b600061565482614436565b915061565f83614436565b925082820261566d81614436565b9150828204841483151761568457615683614d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c582614436565b91506156d083614436565b9250826156e0576156df61568b565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061574760218361453e565b9150615752826156eb565b604082019050919050565b600060208201905081810360008301526157768161573a565b9050919050565b600060a0820190506157926000830188614440565b61579f6020830187615113565b81810360408301526157b18186615182565b90506157c06060830185614509565b6157cd6080830184614440565b9695505050505050565b60006040820190506157ec6000830185614440565b81810360208301526157fe8184615182565b90509392505050565b600060c08201905061581c6000830189614509565b6158296020830188614440565b6158366040830187615113565b6158436060830186615113565b6158506080830185614509565b61585d60a0830184614440565b979650505050505050565b600081519050615877816145e5565b92915050565b60008060006060848603121561589657615895614474565b5b60006158a486828701615868565b93505060206158b586828701615868565b92505060406158c686828701615868565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207124d39d46dc519cbf1e3984958d15cc6408eaf1c1b221f9dbcff7107e7bfa8d64736f6c63430008110033

Deployed Bytecode Sourcemap

31241:18666:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32479:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42063:772;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36255:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37654:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32523:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32436:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33176:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36532:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32346:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33324:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40502:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43022:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43830:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40342:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32150:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38168:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32680:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38308:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41483:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36441:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36949:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40853:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33124:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32558:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32927:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39159:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36640:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4250:148;;;;;;;;;;;;;:::i;:::-;;32303:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42889:76;;;;;;;;;;;;;:::i;:::-;;31755:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31824:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32261:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38515:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39501:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3608:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36346:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37493:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32734:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37173:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43655:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32629:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33224:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32984:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31950:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36800:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32380:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41041:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38847:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39893:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38992:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40677:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4553:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38683:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31886:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33364:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49203:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32049:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33435:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32479:37;;;;:::o;42063:772::-;42143:22;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42180:35:::1;42237:16;42180:74;;42301:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42283:53;;;42345:4;42352:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42283:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42266:110;;42457:1;42431:28;;:14;:28;;::::0;42428:201:::1;;42521:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42503:74;;;42586:4;42593:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42503:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42486:131;;42428:201;42655:14;42641:11;;:28;;;;;;;;;;;;;;;;;;42699:16;42681:15;;:34;;;;;;;;;;;;;;;;;;42771:4;42727:19;:41;42755:11;;;;;;;;;;;42727:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;42823:4;42786:12;:34;42807:11;;;;;;;;;;;42786:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;42167:668;42063:772:::0;;;:::o;36255:83::-;36292:13;36325:5;36318:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36255:83;:::o;37654:161::-;37729:4;37746:39;37755:12;:10;:12::i;:::-;37769:7;37778:6;37746:8;:39::i;:::-;37803:4;37796:11;;37654:161;;;;:::o;32523:28::-;;;;:::o;32436:36::-;;;;:::o;33176:41::-;;;;;;;;;;;;;:::o;36532:100::-;36585:7;36612:12;;36605:19;;36532:100;:::o;32346:27::-;;;;:::o;33324:33::-;;;;:::o;40502:135::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40623:6:::1;40593:19;:27;40613:6;40593:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40502:135:::0;;:::o;43022:456::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43171:6:::1;:13;43146:14;:21;:38;43138:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43253:9;43249:222;43272:14;:21;43268:1;:25;43249:222;;;43314:14;43331;43346:1;43331:17;;;;;;;;:::i;:::-;;;;;;;;43314:34;;43363:21;43387:6;43394:1;43387:9;;;;;;;;:::i;:::-;;;;;;;;43363:33;;43437:6;43416:43;;43425:10;43416:43;;;43445:13;43416:43;;;;;;:::i;:::-;;;;;;;;43299:172;;43295:3;;;;;:::i;:::-;;;;43249:222;;;;43022:456:::0;;:::o;43830:313::-;43928:4;43945:36;43955:6;43963:9;43974:6;43945:9;:36::i;:::-;;43992:121;44001:6;44009:12;:10;:12::i;:::-;44023:89;44061:6;44023:89;;;;;;;;;;;;;;;;;:11;:19;44035:6;44023:19;;;;;;;;;;;;;;;:33;44043:12;:10;:12::i;:::-;44023:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;43992:8;:121::i;:::-;44131:4;44124:11;;43830:313;;;;;:::o;40342:113::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40439:8:::1;40420:16;;:27;;;;;;;;;;;;;;;;;;40342:113:::0;:::o;32150:81::-;;;:::o;38168:128::-;38221:7;38248:40;38265:22;38275:11;38265:9;:22::i;:::-;38248:12;;:16;;:40;;;;:::i;:::-;38241:47;;38168:128;:::o;32680:47::-;;;;:::o;38308:87::-;38348:7;38375:12;38368:19;;38308:87;:::o;41483:369::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41595:1:::1;41573:24;;:10;:24;;::::0;41565:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41668:4;41636:17;:29;41654:10;41636:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41721:5;41683:17;:35;41701:16;;;;;;;;;;;41683:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;41778:16;;;;;;;;;;;41742:53;;41766:10;41742:53;;;;;;;;;;;;41833:10;41806:16;;:38;;;;;;;;;;;;;;;;;;41483:369:::0;:::o;36441:83::-;36482:5;36507:9;;;;;;;;;;;36500:16;;36441:83;:::o;36949:218::-;37037:4;37054:83;37063:12;:10;:12::i;:::-;37077:7;37086:50;37125:10;37086:11;:25;37098:12;:10;:12::i;:::-;37086:25;;;;;;;;;;;;;;;:34;37112:7;37086:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;37054:8;:83::i;:::-;37155:4;37148:11;;36949:218;;;;:::o;40853:124::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40961:8:::1;40935:23;:34;;;;40853:124:::0;:::o;33124:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;32558:35::-;;;;:::o;32927:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;39159:334::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39275:14:::1;39256:16;:33;;;;39318:13;39300:15;:31;;;;39376:15;;39357:16;;:34;;;;:::i;:::-;39342:12;:49;;;;39426:14;;39410:12;;:30;;39402:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39159:334:::0;;:::o;36640:119::-;36706:7;36733:9;:18;36743:7;36733:18;;;;;;;;;;;;;;;;36726:25;;36640:119;;;:::o;4250:148::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4357:1:::1;4320:40;;4341:6;::::0;::::1;;;;;;;;4320:40;;;;;;;;;;;;4388:1;4371:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4250:148::o:0;32303:36::-;;;;:::o;42889:76::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42953:4:::1;42939:11;;:18;;;;;;;;;;;;;;;;;;42889:76::o:0;31755:56::-;;;;:::o;31824:54::-;;;;:::o;32261:35::-;;;;:::o;38515:129::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38628:8:::1;38604:12;:21;38617:7;38604:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38515:129:::0;;:::o;39501:346::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39622:14:::1;39602:17;:34;;;;39666:13;39647:16;:32;;;;39726:16;;39706:17;;:36;;;;:::i;:::-;39690:13;:52;;;;39778:15;;39761:13;;:32;;39753:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39501:346:::0;;:::o;3608:79::-;3646:7;3673:6;;;;;;;;;;;3666:13;;3608:79;:::o;36346:87::-;36385:13;36418:7;36411:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36346:87;:::o;37493:120::-;37555:7;37582:23;;37575:30;;37493:120;:::o;32734:39::-;;;;:::o;37173:269::-;37266:4;37283:129;37292:12;:10;:12::i;:::-;37306:7;37315:96;37354:15;37315:96;;;;;;;;;;;;;;;;;:11;:25;37327:12;:10;:12::i;:::-;37315:25;;;;;;;;;;;;;;;:34;37341:7;37315:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;37283:8;:129::i;:::-;37430:4;37423:11;;37173:269;;;;:::o;43655:167::-;43733:4;43750:42;43760:12;:10;:12::i;:::-;43774:9;43785:6;43750:9;:42::i;:::-;;43810:4;43803:11;;43655:167;;;;:::o;32629:44::-;;;;:::o;33224:26::-;;;;;;;;;;;;;:::o;32984:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31950:92::-;;;;;;;;;;;;;:::o;36800:143::-;36881:7;36908:11;:18;36920:5;36908:18;;;;;;;;;;;;;;;:27;36927:7;36908:27;;;;;;;;;;;;;;;;36901:34;;36800:143;;;;:::o;32380:34::-;;;;:::o;41041:365::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41152:1:::1;41130:24;;:10;:24;;::::0;41122:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41225:4;41193:17;:29;41211:10;41193:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41277:5;41240:17;:34;41258:15;;;;;;;;;;;41240:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;41333:15;;;;;;;;;;;41298:51;;41321:10;41298:51;;;;;;;;;;;;41387:10;41360:15;;:38;;;;;;;;;;;;;;;;;;41041:365:::0;:::o;38847:111::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38939:11:::1;38924:12;:26;;;;38847:111:::0;:::o;39893:413::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40041:17:::1;40013:25;:45;;;;40098:18;40069:26;:47;;;;40183:26;;40155:25;;:54;;;;:::i;:::-;40128:24;:81;;;;40256:3;40228:24;;:31;40220:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39893:413:::0;;:::o;38992:135::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39111:8:::1;39082:17;:26;39100:7;39082:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;38992:135:::0;;:::o;40677:102::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40763:8:::1;40749:10;:22;;;;40677:102:::0;:::o;4553:244::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4662:1:::1;4642:22;;:8;:22;;::::0;4634:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4752:8;4723:38;;4744:6;::::0;::::1;;;;;;;;4723:38;;;;;;;;;;;;4781:8;4772:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4553:244:::0;:::o;38683:127::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:6:::1;38770:15;:23;38786:6;38770:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38683:127:::0;;:::o;31886:35::-;;;;;;;;;;;;;:::o;33364:34::-;;;;:::o;49203:527::-;3830:12;:10;:12::i;:::-;3820:22;;:6;;;;;;;;;;:22;;;3812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49338:21:::1;49376:1;49362:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49338:40;;49399:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49389:4;49394:1;49389:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;49450:4;49432;49437:1;49432:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;49494:15;;;;;;;;;;;:66;;;49568:14;49598:1;49647:4;49674:6;49696:15;49494:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;49269:461;49203:527:::0;:::o;32049:94::-;;;;;;;;;;;;;:::o;33435:30::-;;;;;;;;;;;;;:::o;165:98::-;218:7;245:10;238:17;;165:98;:::o;37821:335::-;37931:1;37914:19;;:5;:19;;;37906:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38012:1;37993:21;;:7;:21;;;37985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38094:6;38064:11;:18;38076:5;38064:18;;;;;;;;;;;;;;;:27;38083:7;38064:27;;;;;;;;;;;;;;;:36;;;;38132:7;38116:32;;38125:5;38116:32;;;38141:6;38116:32;;;;;;:::i;:::-;;;;;;;;37821:335;;;:::o;44154:1870::-;44241:4;44284:1;44266:20;;:6;:20;;;44258:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44368:1;44347:23;;:9;:23;;;44339:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44459:11;;;;;;;;;;;44454:138;;44505:7;:5;:7::i;:::-;44495:17;;:6;:17;;;44487:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44454:138;44607:16;;;;;;;;;;;44604:1413;;;44657:41;44672:6;44680:9;44691:6;44657:14;:41::i;:::-;44650:48;;;;44604:1413;44820:7;:5;:7::i;:::-;44810:17;;:6;:17;;;;:41;;;;;44844:7;:5;:7::i;:::-;44831:20;;:9;:20;;;;44810:41;44806:111;;;44872:28;44886:6;44893;44872:13;:28::i;:::-;44806:111;44981:28;45012:24;45030:4;45012:9;:24::i;:::-;44981:55;;45051:28;45106:23;;45082:20;:47;;45051:78;;45148:23;:44;;;;;45176:16;;;;;;;;;;;45175:17;45148:44;:69;;;;;45197:12;:20;45210:6;45197:20;;;;;;;;;;;;;;;;;;;;;;;;;45196:21;45148:69;45144:164;;;45252:36;45267:20;45252:14;:36::i;:::-;45144:164;45382:53;45404:6;45382:53;;;;;;;;;;;;;;;;;:9;:17;45392:6;45382:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;45362:9;:17;45372:6;45362:17;;;;;;;;;;;;;;;:73;;;;45450:19;45473:17;:25;45491:6;45473:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;45502:17;:28;45520:9;45502:28;;;;;;;;;;;;;;;;;;;;;;;;;45473:57;45472:148;;45586:34;45594:6;45602:9;45613:6;45586:7;:34::i;:::-;45472:148;;;45577:6;45472:148;45450:170;;45683:16;;;;;;;;;;;:51;;;;;45704:19;:30;45724:9;45704:30;;;;;;;;;;;;;;;;;;;;;;;;;45703:31;45683:51;45680:133;;;45802:10;;45761:37;45786:11;45761:20;45771:9;45761;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;45753:60;;;;;;45680:133;45882:37;45907:11;45882:9;:20;45892:9;45882:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;45859:9;:20;45869:9;45859:20;;;;;;;;;;;;;;;:60;;;;45956:9;45939:40;;45948:6;45939:40;;;45967:11;45939:40;;;;;;:::i;:::-;;;;;;;;46001:4;45994:11;;;;;44154:1870;;;;;;:::o;9354:192::-;9440:7;9473:1;9468;:6;;9476:12;9460:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9500:9;9516:1;9512;:5;;;;:::i;:::-;9500:17;;9537:1;9530:8;;;9354:192;;;;;:::o;8915:136::-;8973:7;9000:43;9004:1;9007;9000:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8993:50;;8915:136;;;;:::o;8451:181::-;8509:7;8529:9;8545:1;8541;:5;;;;:::i;:::-;8529:17;;8570:1;8565;:6;;8557:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8623:1;8616:8;;;8451:181;;;;:::o;46058:330::-;46151:4;46188:53;46210:6;46188:53;;;;;;;;;;;;;;;;;:9;:17;46198:6;46188:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;46168:9;:17;46178:6;46168:17;;;;;;;;;;;;;;;:73;;;;46275:32;46300:6;46275:9;:20;46285:9;46275:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;46252:9;:20;46262:9;46252:20;;;;;;;;;;;;;;;:55;;;;46340:9;46323:35;;46332:6;46323:35;;;46351:6;46323:35;;;;;;:::i;:::-;;;;;;;;46376:4;46369:11;;46058:330;;;;;:::o;49738:166::-;49835:12;;49825:6;:22;;:49;;;;49851:15;:23;49867:6;49851:23;;;;;;;;;;;;;;;;;;;;;;;;;49825:49;49817:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49738:166;;:::o;47049:1095::-;33983:4;33964:16;;:23;;;;;;;;;;;;;;;;;;47179:19:::1;47201:78;47277:1;47201:71;47247:24;;47201:41;47216:25;;47201:10;:14;;:41;;;;:::i;:::-;:45;;:71;;;;:::i;:::-;:75;;:78;;;;:::i;:::-;47179:100;;47290:21;47314:27;47329:11;47314:10;:14;;:27;;;;:::i;:::-;47290:51;;47381:31;47398:13;47381:16;:31::i;:::-;47453:22;47478:21;47453:46;;47554:16;47573:62;47602:32;47632:1;47602:25;;:29;;:32;;;;:::i;:::-;47573:24;;:28;;:62;;;;:::i;:::-;47554:81;;47646:23;47672:66;47736:1;47672:59;47722:8;47672:45;47691:25;;47672:14;:18;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;47646:92;;47765:24;47792:35;47811:15;47792:14;:18;;:35;;;;:::i;:::-;47765:62;;47862:1;47843:16;:20;47840:94;;;47878:56;47899:16;;;;;;;;;;;47917;47878:20;:56::i;:::-;47840:94;47968:1;47950:15;:19;:38;;;;;47987:1;47973:11;:15;47950:38;47947:190;;;48004:42;48017:11;48030:15;48004:12;:42::i;:::-;48066:59;48081:13;48096:15;48113:11;48066:59;;;;;;;;:::i;:::-;;;;;;;;47947:190;47113:1031;;;;;;34029:5:::0;34010:16;;:24;;;;;;;;;;;;;;;;;;47049:1095;:::o;46424:580::-;46510:7;46530:17;46550:1;46530:21;;46565:12;:20;46578:6;46565:20;;;;;;;;;;;;;;;;;;;;;;;;;46562:213;;;46614:33;46643:3;46614:24;46625:12;;46614:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46602:45;;46562:213;;;46677:12;:23;46690:9;46677:23;;;;;;;;;;;;;;;;;;;;;;;;;46674:101;;;46729:34;46759:3;46729:25;46740:13;;46729:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46717:46;;46674:101;46562:213;46800:1;46788:9;:13;46785:173;;;46845:39;46874:9;46845;:24;46863:4;46845:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;46818:9;:24;46836:4;46818:24;;;;;;;;;;;;;;;:66;;;;46929:4;46904:42;;46913:6;46904:42;;;46936:9;46904:42;;;;;;:::i;:::-;;;;;;;;46785:173;46975:21;46986:9;46975:6;:10;;:21;;;;:::i;:::-;46968:28;;;46424:580;;;;;:::o;9805:471::-;9863:7;10113:1;10108;:6;10104:47;;10138:1;10131:8;;;;10104:47;10163:9;10179:1;10175;:5;;;;:::i;:::-;10163:17;;10208:1;10203;10199;:5;;;;:::i;:::-;:10;10191:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10267:1;10260:8;;;9805:471;;;;;:::o;10752:132::-;10810:7;10837:39;10841:1;10844;10837:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10830:46;;10752:132;;;;:::o;48179:524::-;48245:21;48283:1;48269:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48245:40;;48314:4;48296;48301:1;48296:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48340:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48330:4;48335:1;48330:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48373:62;48390:4;48405:15;;;;;;;;;;;48423:11;48373:8;:62::i;:::-;48446:15;;;;;;;;;;;:66;;;48527:11;48553:1;48570:4;48597;48618:15;48446:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48660:35;48677:11;48690:4;48660:35;;;;;;;:::i;:::-;;;;;;;;48234:469;48179:524;:::o;41899:126::-;41991:9;:18;;:26;42010:6;41991:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41899:126;;:::o;48734:362::-;48815:62;48832:4;48847:15;;;;;;;;;;;48865:11;48815:8;:62::i;:::-;48888:15;;;;;;;;;;;:31;;;48927:9;48960:4;48980:11;49006:1;49023;49040:7;:5;:7::i;:::-;49062:15;48888:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48734:362;;:::o;11380:278::-;11466:7;11498:1;11494;:5;11501:12;11486:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11525:9;11541:1;11537;:5;;;;:::i;:::-;11525:17;;11649:1;11642:8;;;11380:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:99::-;2015:6;2049:5;2043:12;2033:22;;1963:99;;;:::o;2068:169::-;2152:11;2186:6;2181:3;2174:19;2226:4;2221:3;2217:14;2202:29;;2068:169;;;;:::o;2243:246::-;2324:1;2334:113;2348:6;2345:1;2342:13;2334:113;;;2433:1;2428:3;2424:11;2418:18;2414:1;2409:3;2405:11;2398:39;2370:2;2367:1;2363:10;2358:15;;2334:113;;;2481:1;2472:6;2467:3;2463:16;2456:27;2305:184;2243:246;;;:::o;2495:102::-;2536:6;2587:2;2583:7;2578:2;2571:5;2567:14;2563:28;2553:38;;2495:102;;;:::o;2603:377::-;2691:3;2719:39;2752:5;2719:39;:::i;:::-;2774:71;2838:6;2833:3;2774:71;:::i;:::-;2767:78;;2854:65;2912:6;2907:3;2900:4;2893:5;2889:16;2854:65;:::i;:::-;2944:29;2966:6;2944:29;:::i;:::-;2939:3;2935:39;2928:46;;2695:285;2603:377;;;;:::o;2986:313::-;3099:4;3137:2;3126:9;3122:18;3114:26;;3186:9;3180:4;3176:20;3172:1;3161:9;3157:17;3150:47;3214:78;3287:4;3278:6;3214:78;:::i;:::-;3206:86;;2986:313;;;;:::o;3305:122::-;3378:24;3396:5;3378:24;:::i;:::-;3371:5;3368:35;3358:63;;3417:1;3414;3407:12;3358:63;3305:122;:::o;3433:139::-;3479:5;3517:6;3504:20;3495:29;;3533:33;3560:5;3533:33;:::i;:::-;3433:139;;;;:::o;3578:474::-;3646:6;3654;3703:2;3691:9;3682:7;3678:23;3674:32;3671:119;;;3709:79;;:::i;:::-;3671:119;3829:1;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3800:117;3956:2;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3927:118;3578:474;;;;;:::o;4058:90::-;4092:7;4135:5;4128:13;4121:21;4110:32;;4058:90;;;:::o;4154:109::-;4235:21;4250:5;4235:21;:::i;:::-;4230:3;4223:34;4154:109;;:::o;4269:210::-;4356:4;4394:2;4383:9;4379:18;4371:26;;4407:65;4469:1;4458:9;4454:17;4445:6;4407:65;:::i;:::-;4269:210;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:153::-;4908:9;4941:37;4972:5;4941:37;:::i;:::-;4928:50;;4831:153;;;:::o;4990:185::-;5104:64;5162:5;5104:64;:::i;:::-;5099:3;5092:77;4990:185;;:::o;5181:276::-;5301:4;5339:2;5328:9;5324:18;5316:26;;5352:98;5447:1;5436:9;5432:17;5423:6;5352:98;:::i;:::-;5181:276;;;;:::o;5463:116::-;5533:21;5548:5;5533:21;:::i;:::-;5526:5;5523:32;5513:60;;5569:1;5566;5559:12;5513:60;5463:116;:::o;5585:133::-;5628:5;5666:6;5653:20;5644:29;;5682:30;5706:5;5682:30;:::i;:::-;5585:133;;;;:::o;5724:468::-;5789:6;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:50;6167:7;6158:6;6147:9;6143:22;6125:50;:::i;:::-;6115:60;;6070:115;5724:468;;;;;:::o;6198:117::-;6307:1;6304;6297:12;6321:180;6369:77;6366:1;6359:88;6466:4;6463:1;6456:15;6490:4;6487:1;6480:15;6507:281;6590:27;6612:4;6590:27;:::i;:::-;6582:6;6578:40;6720:6;6708:10;6705:22;6684:18;6672:10;6669:34;6666:62;6663:88;;;6731:18;;:::i;:::-;6663:88;6771:10;6767:2;6760:22;6550:238;6507:281;;:::o;6794:129::-;6828:6;6855:20;;:::i;:::-;6845:30;;6884:33;6912:4;6904:6;6884:33;:::i;:::-;6794:129;;;:::o;6929:311::-;7006:4;7096:18;7088:6;7085:30;7082:56;;;7118:18;;:::i;:::-;7082:56;7168:4;7160:6;7156:17;7148:25;;7228:4;7222;7218:15;7210:23;;6929:311;;;:::o;7246:117::-;7355:1;7352;7345:12;7386:710;7482:5;7507:81;7523:64;7580:6;7523:64;:::i;:::-;7507:81;:::i;:::-;7498:90;;7608:5;7637:6;7630:5;7623:21;7671:4;7664:5;7660:16;7653:23;;7724:4;7716:6;7712:17;7704:6;7700:30;7753:3;7745:6;7742:15;7739:122;;;7772:79;;:::i;:::-;7739:122;7887:6;7870:220;7904:6;7899:3;7896:15;7870:220;;;7979:3;8008:37;8041:3;8029:10;8008:37;:::i;:::-;8003:3;7996:50;8075:4;8070:3;8066:14;8059:21;;7946:144;7930:4;7925:3;7921:14;7914:21;;7870:220;;;7874:21;7488:608;;7386:710;;;;;:::o;8119:370::-;8190:5;8239:3;8232:4;8224:6;8220:17;8216:27;8206:122;;8247:79;;:::i;:::-;8206:122;8364:6;8351:20;8389:94;8479:3;8471:6;8464:4;8456:6;8452:17;8389:94;:::i;:::-;8380:103;;8196:293;8119:370;;;;:::o;8495:311::-;8572:4;8662:18;8654:6;8651:30;8648:56;;;8684:18;;:::i;:::-;8648:56;8734:4;8726:6;8722:17;8714:25;;8794:4;8788;8784:15;8776:23;;8495:311;;;:::o;8829:710::-;8925:5;8950:81;8966:64;9023:6;8966:64;:::i;:::-;8950:81;:::i;:::-;8941:90;;9051:5;9080:6;9073:5;9066:21;9114:4;9107:5;9103:16;9096:23;;9167:4;9159:6;9155:17;9147:6;9143:30;9196:3;9188:6;9185:15;9182:122;;;9215:79;;:::i;:::-;9182:122;9330:6;9313:220;9347:6;9342:3;9339:15;9313:220;;;9422:3;9451:37;9484:3;9472:10;9451:37;:::i;:::-;9446:3;9439:50;9518:4;9513:3;9509:14;9502:21;;9389:144;9373:4;9368:3;9364:14;9357:21;;9313:220;;;9317:21;8931:608;;8829:710;;;;;:::o;9562:370::-;9633:5;9682:3;9675:4;9667:6;9663:17;9659:27;9649:122;;9690:79;;:::i;:::-;9649:122;9807:6;9794:20;9832:94;9922:3;9914:6;9907:4;9899:6;9895:17;9832:94;:::i;:::-;9823:103;;9639:293;9562:370;;;;:::o;9938:894::-;10056:6;10064;10113:2;10101:9;10092:7;10088:23;10084:32;10081:119;;;10119:79;;:::i;:::-;10081:119;10267:1;10256:9;10252:17;10239:31;10297:18;10289:6;10286:30;10283:117;;;10319:79;;:::i;:::-;10283:117;10424:78;10494:7;10485:6;10474:9;10470:22;10424:78;:::i;:::-;10414:88;;10210:302;10579:2;10568:9;10564:18;10551:32;10610:18;10602:6;10599:30;10596:117;;;10632:79;;:::i;:::-;10596:117;10737:78;10807:7;10798:6;10787:9;10783:22;10737:78;:::i;:::-;10727:88;;10522:303;9938:894;;;;;:::o;10838:619::-;10915:6;10923;10931;10980:2;10968:9;10959:7;10955:23;10951:32;10948:119;;;10986:79;;:::i;:::-;10948:119;11106:1;11131:53;11176:7;11167:6;11156:9;11152:22;11131:53;:::i;:::-;11121:63;;11077:117;11233:2;11259:53;11304:7;11295:6;11284:9;11280:22;11259:53;:::i;:::-;11249:63;;11204:118;11361:2;11387:53;11432:7;11423:6;11412:9;11408:22;11387:53;:::i;:::-;11377:63;;11332:118;10838:619;;;;;:::o;11463:323::-;11519:6;11568:2;11556:9;11547:7;11543:23;11539:32;11536:119;;;11574:79;;:::i;:::-;11536:119;11694:1;11719:50;11761:7;11752:6;11741:9;11737:22;11719:50;:::i;:::-;11709:60;;11665:114;11463:323;;;;:::o;11792:86::-;11827:7;11867:4;11860:5;11856:16;11845:27;;11792:86;;;:::o;11884:112::-;11967:22;11983:5;11967:22;:::i;:::-;11962:3;11955:35;11884:112;;:::o;12002:214::-;12091:4;12129:2;12118:9;12114:18;12106:26;;12142:67;12206:1;12195:9;12191:17;12182:6;12142:67;:::i;:::-;12002:214;;;;:::o;12222:329::-;12281:6;12330:2;12318:9;12309:7;12305:23;12301:32;12298:119;;;12336:79;;:::i;:::-;12298:119;12456:1;12481:53;12526:7;12517:6;12506:9;12502:22;12481:53;:::i;:::-;12471:63;;12427:117;12222:329;;;;:::o;12557:474::-;12625:6;12633;12682:2;12670:9;12661:7;12657:23;12653:32;12650:119;;;12688:79;;:::i;:::-;12650:119;12808:1;12833:53;12878:7;12869:6;12858:9;12854:22;12833:53;:::i;:::-;12823:63;;12779:117;12935:2;12961:53;13006:7;12997:6;12986:9;12982:22;12961:53;:::i;:::-;12951:63;;12906:118;12557:474;;;;;:::o;13037:104::-;13082:7;13111:24;13129:5;13111:24;:::i;:::-;13100:35;;13037:104;;;:::o;13147:142::-;13250:32;13276:5;13250:32;:::i;:::-;13245:3;13238:45;13147:142;;:::o;13295:254::-;13404:4;13442:2;13431:9;13427:18;13419:26;;13455:87;13539:1;13528:9;13524:17;13515:6;13455:87;:::i;:::-;13295:254;;;;:::o;13555:474::-;13623:6;13631;13680:2;13668:9;13659:7;13655:23;13651:32;13648:119;;;13686:79;;:::i;:::-;13648:119;13806:1;13831:53;13876:7;13867:6;13856:9;13852:22;13831:53;:::i;:::-;13821:63;;13777:117;13933:2;13959:53;14004:7;13995:6;13984:9;13980:22;13959:53;:::i;:::-;13949:63;;13904:118;13555:474;;;;;:::o;14035:182::-;14175:34;14171:1;14163:6;14159:14;14152:58;14035:182;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:143::-;15077:5;15108:6;15102:13;15093:22;;15124:33;15151:5;15124:33;:::i;:::-;15020:143;;;;:::o;15169:351::-;15239:6;15288:2;15276:9;15267:7;15263:23;15259:32;15256:119;;;15294:79;;:::i;:::-;15256:119;15414:1;15439:64;15495:7;15486:6;15475:9;15471:22;15439:64;:::i;:::-;15429:74;;15385:128;15169:351;;;;:::o;15526:332::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15698:71;15766:1;15755:9;15751:17;15742:6;15698:71;:::i;:::-;15779:72;15847:2;15836:9;15832:18;15823:6;15779:72;:::i;:::-;15526:332;;;;;:::o;15864:180::-;15912:77;15909:1;15902:88;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16050:320;16094:6;16131:1;16125:4;16121:12;16111:22;;16178:1;16172:4;16168:12;16199:18;16189:81;;16255:4;16247:6;16243:17;16233:27;;16189:81;16317:2;16309:6;16306:14;16286:18;16283:38;16280:84;;16336:18;;:::i;:::-;16280:84;16101:269;16050:320;;;:::o;16376:236::-;16516:34;16512:1;16504:6;16500:14;16493:58;16585:19;16580:2;16572:6;16568:15;16561:44;16376:236;:::o;16618:366::-;16760:3;16781:67;16845:2;16840:3;16781:67;:::i;:::-;16774:74;;16857:93;16946:3;16857:93;:::i;:::-;16975:2;16970:3;16966:12;16959:19;;16618:366;;;:::o;16990:419::-;17156:4;17194:2;17183:9;17179:18;17171:26;;17243:9;17237:4;17233:20;17229:1;17218:9;17214:17;17207:47;17271:131;17397:4;17271:131;:::i;:::-;17263:139;;16990:419;;;:::o;17415:180::-;17463:77;17460:1;17453:88;17560:4;17557:1;17550:15;17584:4;17581:1;17574:15;17601:180;17649:77;17646:1;17639:88;17746:4;17743:1;17736:15;17770:4;17767:1;17760:15;17787:233;17826:3;17849:24;17867:5;17849:24;:::i;:::-;17840:33;;17895:66;17888:5;17885:77;17882:103;;17965:18;;:::i;:::-;17882:103;18012:1;18005:5;18001:13;17994:20;;17787:233;;;:::o;18026:173::-;18166:25;18162:1;18154:6;18150:14;18143:49;18026:173;:::o;18205:366::-;18347:3;18368:67;18432:2;18427:3;18368:67;:::i;:::-;18361:74;;18444:93;18533:3;18444:93;:::i;:::-;18562:2;18557:3;18553:12;18546:19;;18205:366;;;:::o;18577:419::-;18743:4;18781:2;18770:9;18766:18;18758:26;;18830:9;18824:4;18820:20;18816:1;18805:9;18801:17;18794:47;18858:131;18984:4;18858:131;:::i;:::-;18850:139;;18577:419;;;:::o;19002:191::-;19042:3;19061:20;19079:1;19061:20;:::i;:::-;19056:25;;19095:20;19113:1;19095:20;:::i;:::-;19090:25;;19138:1;19135;19131:9;19124:16;;19159:3;19156:1;19153:10;19150:36;;;19166:18;;:::i;:::-;19150:36;19002:191;;;;:::o;19199:227::-;19339:34;19335:1;19327:6;19323:14;19316:58;19408:10;19403:2;19395:6;19391:15;19384:35;19199:227;:::o;19432:366::-;19574:3;19595:67;19659:2;19654:3;19595:67;:::i;:::-;19588:74;;19671:93;19760:3;19671:93;:::i;:::-;19789:2;19784:3;19780:12;19773:19;;19432:366;;;:::o;19804:419::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20057:9;20051:4;20047:20;20043:1;20032:9;20028:17;20021:47;20085:131;20211:4;20085:131;:::i;:::-;20077:139;;19804:419;;;:::o;20229:228::-;20369:34;20365:1;20357:6;20353:14;20346:58;20438:11;20433:2;20425:6;20421:15;20414:36;20229:228;:::o;20463:366::-;20605:3;20626:67;20690:2;20685:3;20626:67;:::i;:::-;20619:74;;20702:93;20791:3;20702:93;:::i;:::-;20820:2;20815:3;20811:12;20804:19;;20463:366;;;:::o;20835:419::-;21001:4;21039:2;21028:9;21024:18;21016:26;;21088:9;21082:4;21078:20;21074:1;21063:9;21059:17;21052:47;21116:131;21242:4;21116:131;:::i;:::-;21108:139;;20835:419;;;:::o;21260:221::-;21400:34;21396:1;21388:6;21384:14;21377:58;21469:4;21464:2;21456:6;21452:15;21445:29;21260:221;:::o;21487:366::-;21629:3;21650:67;21714:2;21709:3;21650:67;:::i;:::-;21643:74;;21726:93;21815:3;21726:93;:::i;:::-;21844:2;21839:3;21835:12;21828:19;;21487:366;;;:::o;21859:419::-;22025:4;22063:2;22052:9;22048:18;22040:26;;22112:9;22106:4;22102:20;22098:1;22087:9;22083:17;22076:47;22140:131;22266:4;22140:131;:::i;:::-;22132:139;;21859:419;;;:::o;22284:225::-;22424:34;22420:1;22412:6;22408:14;22401:58;22493:8;22488:2;22480:6;22476:15;22469:33;22284:225;:::o;22515:366::-;22657:3;22678:67;22742:2;22737:3;22678:67;:::i;:::-;22671:74;;22754:93;22843:3;22754:93;:::i;:::-;22872:2;22867:3;22863:12;22856:19;;22515:366;;;:::o;22887:419::-;23053:4;23091:2;23080:9;23076:18;23068:26;;23140:9;23134:4;23130:20;23126:1;23115:9;23111:17;23104:47;23168:131;23294:4;23168:131;:::i;:::-;23160:139;;22887:419;;;:::o;23312:85::-;23357:7;23386:5;23375:16;;23312:85;;;:::o;23403:158::-;23461:9;23494:61;23512:42;23521:32;23547:5;23521:32;:::i;:::-;23512:42;:::i;:::-;23494:61;:::i;:::-;23481:74;;23403:158;;;:::o;23567:147::-;23662:45;23701:5;23662:45;:::i;:::-;23657:3;23650:58;23567:147;;:::o;23720:114::-;23787:6;23821:5;23815:12;23805:22;;23720:114;;;:::o;23840:184::-;23939:11;23973:6;23968:3;23961:19;24013:4;24008:3;24004:14;23989:29;;23840:184;;;;:::o;24030:132::-;24097:4;24120:3;24112:11;;24150:4;24145:3;24141:14;24133:22;;24030:132;;;:::o;24168:108::-;24245:24;24263:5;24245:24;:::i;:::-;24240:3;24233:37;24168:108;;:::o;24282:179::-;24351:10;24372:46;24414:3;24406:6;24372:46;:::i;:::-;24450:4;24445:3;24441:14;24427:28;;24282:179;;;;:::o;24467:113::-;24537:4;24569;24564:3;24560:14;24552:22;;24467:113;;;:::o;24616:732::-;24735:3;24764:54;24812:5;24764:54;:::i;:::-;24834:86;24913:6;24908:3;24834:86;:::i;:::-;24827:93;;24944:56;24994:5;24944:56;:::i;:::-;25023:7;25054:1;25039:284;25064:6;25061:1;25058:13;25039:284;;;25140:6;25134:13;25167:63;25226:3;25211:13;25167:63;:::i;:::-;25160:70;;25253:60;25306:6;25253:60;:::i;:::-;25243:70;;25099:224;25086:1;25083;25079:9;25074:14;;25039:284;;;25043:14;25339:3;25332:10;;24740:608;;;24616:732;;;;:::o;25354:720::-;25589:4;25627:3;25616:9;25612:19;25604:27;;25641:79;25717:1;25706:9;25702:17;25693:6;25641:79;:::i;:::-;25767:9;25761:4;25757:20;25752:2;25741:9;25737:18;25730:48;25795:108;25898:4;25889:6;25795:108;:::i;:::-;25787:116;;25913:72;25981:2;25970:9;25966:18;25957:6;25913:72;:::i;:::-;25995;26063:2;26052:9;26048:18;26039:6;25995:72;:::i;:::-;25354:720;;;;;;;:::o;26080:223::-;26220:34;26216:1;26208:6;26204:14;26197:58;26289:6;26284:2;26276:6;26272:15;26265:31;26080:223;:::o;26309:366::-;26451:3;26472:67;26536:2;26531:3;26472:67;:::i;:::-;26465:74;;26548:93;26637:3;26548:93;:::i;:::-;26666:2;26661:3;26657:12;26650:19;;26309:366;;;:::o;26681:419::-;26847:4;26885:2;26874:9;26870:18;26862:26;;26934:9;26928:4;26924:20;26920:1;26909:9;26905:17;26898:47;26962:131;27088:4;26962:131;:::i;:::-;26954:139;;26681:419;;;:::o;27106:221::-;27246:34;27242:1;27234:6;27230:14;27223:58;27315:4;27310:2;27302:6;27298:15;27291:29;27106:221;:::o;27333:366::-;27475:3;27496:67;27560:2;27555:3;27496:67;:::i;:::-;27489:74;;27572:93;27661:3;27572:93;:::i;:::-;27690:2;27685:3;27681:12;27674:19;;27333:366;;;:::o;27705:419::-;27871:4;27909:2;27898:9;27894:18;27886:26;;27958:9;27952:4;27948:20;27944:1;27933:9;27929:17;27922:47;27986:131;28112:4;27986:131;:::i;:::-;27978:139;;27705:419;;;:::o;28130:224::-;28270:34;28266:1;28258:6;28254:14;28247:58;28339:7;28334:2;28326:6;28322:15;28315:32;28130:224;:::o;28360:366::-;28502:3;28523:67;28587:2;28582:3;28523:67;:::i;:::-;28516:74;;28599:93;28688:3;28599:93;:::i;:::-;28717:2;28712:3;28708:12;28701:19;;28360:366;;;:::o;28732:419::-;28898:4;28936:2;28925:9;28921:18;28913:26;;28985:9;28979:4;28975:20;28971:1;28960:9;28956:17;28949:47;29013:131;29139:4;29013:131;:::i;:::-;29005:139;;28732:419;;;:::o;29157:222::-;29297:34;29293:1;29285:6;29281:14;29274:58;29366:5;29361:2;29353:6;29349:15;29342:30;29157:222;:::o;29385:366::-;29527:3;29548:67;29612:2;29607:3;29548:67;:::i;:::-;29541:74;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29385:366;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:250::-;30322:34;30318:1;30310:6;30306:14;30299:58;30391:33;30386:2;30378:6;30374:15;30367:58;30182:250;:::o;30438:366::-;30580:3;30601:67;30665:2;30660:3;30601:67;:::i;:::-;30594:74;;30677:93;30766:3;30677:93;:::i;:::-;30795:2;30790:3;30786:12;30779:19;;30438:366;;;:::o;30810:419::-;30976:4;31014:2;31003:9;30999:18;30991:26;;31063:9;31057:4;31053:20;31049:1;31038:9;31034:17;31027:47;31091:131;31217:4;31091:131;:::i;:::-;31083:139;;30810:419;;;:::o;31235:194::-;31275:4;31295:20;31313:1;31295:20;:::i;:::-;31290:25;;31329:20;31347:1;31329:20;:::i;:::-;31324:25;;31373:1;31370;31366:9;31358:17;;31397:1;31391:4;31388:11;31385:37;;;31402:18;;:::i;:::-;31385:37;31235:194;;;;:::o;31435:177::-;31575:29;31571:1;31563:6;31559:14;31552:53;31435:177;:::o;31618:366::-;31760:3;31781:67;31845:2;31840:3;31781:67;:::i;:::-;31774:74;;31857:93;31946:3;31857:93;:::i;:::-;31975:2;31970:3;31966:12;31959:19;;31618:366;;;:::o;31990:419::-;32156:4;32194:2;32183:9;32179:18;32171:26;;32243:9;32237:4;32233:20;32229:1;32218:9;32214:17;32207:47;32271:131;32397:4;32271:131;:::i;:::-;32263:139;;31990:419;;;:::o;32415:167::-;32555:19;32551:1;32543:6;32539:14;32532:43;32415:167;:::o;32588:366::-;32730:3;32751:67;32815:2;32810:3;32751:67;:::i;:::-;32744:74;;32827:93;32916:3;32827:93;:::i;:::-;32945:2;32940:3;32936:12;32929:19;;32588:366;;;:::o;32960:419::-;33126:4;33164:2;33153:9;33149:18;33141:26;;33213:9;33207:4;33203:20;33199:1;33188:9;33184:17;33177:47;33241:131;33367:4;33241:131;:::i;:::-;33233:139;;32960:419;;;:::o;33385:442::-;33534:4;33572:2;33561:9;33557:18;33549:26;;33585:71;33653:1;33642:9;33638:17;33629:6;33585:71;:::i;:::-;33666:72;33734:2;33723:9;33719:18;33710:6;33666:72;:::i;:::-;33748;33816:2;33805:9;33801:18;33792:6;33748:72;:::i;:::-;33385:442;;;;;;:::o;33833:410::-;33873:7;33896:20;33914:1;33896:20;:::i;:::-;33891:25;;33930:20;33948:1;33930:20;:::i;:::-;33925:25;;33985:1;33982;33978:9;34007:30;34025:11;34007:30;:::i;:::-;33996:41;;34186:1;34177:7;34173:15;34170:1;34167:22;34147:1;34140:9;34120:83;34097:139;;34216:18;;:::i;:::-;34097:139;33881:362;33833:410;;;;:::o;34249:180::-;34297:77;34294:1;34287:88;34394:4;34391:1;34384:15;34418:4;34415:1;34408:15;34435:185;34475:1;34492:20;34510:1;34492:20;:::i;:::-;34487:25;;34526:20;34544:1;34526:20;:::i;:::-;34521:25;;34565:1;34555:35;;34570:18;;:::i;:::-;34555:35;34612:1;34609;34605:9;34600:14;;34435:185;;;;:::o;34626:220::-;34766:34;34762:1;34754:6;34750:14;34743:58;34835:3;34830:2;34822:6;34818:15;34811:28;34626:220;:::o;34852:366::-;34994:3;35015:67;35079:2;35074:3;35015:67;:::i;:::-;35008:74;;35091:93;35180:3;35091:93;:::i;:::-;35209:2;35204:3;35200:12;35193:19;;34852:366;;;:::o;35224:419::-;35390:4;35428:2;35417:9;35413:18;35405:26;;35477:9;35471:4;35467:20;35463:1;35452:9;35448:17;35441:47;35505:131;35631:4;35505:131;:::i;:::-;35497:139;;35224:419;;;:::o;35649:831::-;35912:4;35950:3;35939:9;35935:19;35927:27;;35964:71;36032:1;36021:9;36017:17;36008:6;35964:71;:::i;:::-;36045:80;36121:2;36110:9;36106:18;36097:6;36045:80;:::i;:::-;36172:9;36166:4;36162:20;36157:2;36146:9;36142:18;36135:48;36200:108;36303:4;36294:6;36200:108;:::i;:::-;36192:116;;36318:72;36386:2;36375:9;36371:18;36362:6;36318:72;:::i;:::-;36400:73;36468:3;36457:9;36453:19;36444:6;36400:73;:::i;:::-;35649:831;;;;;;;;:::o;36486:483::-;36657:4;36695:2;36684:9;36680:18;36672:26;;36708:71;36776:1;36765:9;36761:17;36752:6;36708:71;:::i;:::-;36826:9;36820:4;36816:20;36811:2;36800:9;36796:18;36789:48;36854:108;36957:4;36948:6;36854:108;:::i;:::-;36846:116;;36486:483;;;;;:::o;36975:807::-;37224:4;37262:3;37251:9;37247:19;37239:27;;37276:71;37344:1;37333:9;37329:17;37320:6;37276:71;:::i;:::-;37357:72;37425:2;37414:9;37410:18;37401:6;37357:72;:::i;:::-;37439:80;37515:2;37504:9;37500:18;37491:6;37439:80;:::i;:::-;37529;37605:2;37594:9;37590:18;37581:6;37529:80;:::i;:::-;37619:73;37687:3;37676:9;37672:19;37663:6;37619:73;:::i;:::-;37702;37770:3;37759:9;37755:19;37746:6;37702:73;:::i;:::-;36975:807;;;;;;;;;:::o;37788:143::-;37845:5;37876:6;37870:13;37861:22;;37892:33;37919:5;37892:33;:::i;:::-;37788:143;;;;:::o;37937:663::-;38025:6;38033;38041;38090:2;38078:9;38069:7;38065:23;38061:32;38058:119;;;38096:79;;:::i;:::-;38058:119;38216:1;38241:64;38297:7;38288:6;38277:9;38273:22;38241:64;:::i;:::-;38231:74;;38187:128;38354:2;38380:64;38436:7;38427:6;38416:9;38412:22;38380:64;:::i;:::-;38370:74;;38325:129;38493:2;38519:64;38575:7;38566:6;38555:9;38551:22;38519:64;:::i;:::-;38509:74;;38464:129;37937:663;;;;;:::o

Swarm Source

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