ETH Price: $3,877.79 (-0.85%)

Token

ERC-20: Sadaharu Token (SADAHARU)
 

Overview

Max Total Supply

100,000,000,000 SADAHARU

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
440crypto.eth
Balance
437,500,000 SADAHARU

Value
$0.00
0x732739De18DF630b354EC365a927a4f4F2BF28E5
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:
SADAHARUTOKEN

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-03
*/

/*


*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity >=0.6.2;

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

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

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


pragma solidity >=0.6.2;

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

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




pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


pragma solidity >=0.5.0;

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

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

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

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

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




pragma solidity ^0.8.0;

/**
 * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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);
}


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + 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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)


pragma solidity ^0.8.0;

/*
  
*/

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

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping (address => bool) private _isBlacklisted;
    bool private _swapping;

    address private devWallet;
    address private marketingWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public totalBuyFees;
    uint256 public totalEarlySellFees;
    uint256 public totalSellFees;

    uint256 private _marketingBuyFee;
    uint256 private _liquidityBuyFee;
    uint256 private _devBuyFee;

    uint256 private _marketingSellFee;
    uint256 private _liquiditySellFee;
    uint256 private _devSellFee;
    
    uint256 private _marketingEarlySellFee;
    uint256 private _liquidityEarlySellFee;
    uint256 private _devEarlySellFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForDev;

    uint256 public launchedat;
    uint256 public earlyselltax;
    

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    constructor() ERC20("Sadaharu Token", "SADAHARU") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        
        uint256 totalSupply = 1e11 * 1e18;
        
        maxTransactionAmount = totalSupply * 5 / 1000; // 0.5%
        maxWallet = totalSupply * 1 / 150; // 1.5%
        swapTokensAtAmount = totalSupply * 15 / 10000;

        _marketingBuyFee = 25; // 2.5%
        _liquidityBuyFee = 50; // 5%
        _devBuyFee = 25; // 2.5%

        _marketingSellFee = 25; // 2.5%
        _liquiditySellFee = 50; // 5%
        _devSellFee = 25; // 2.5%

        _marketingEarlySellFee = 50; // 5%
        _liquidityEarlySellFee = 100; // 10%
        _devEarlySellFee = 50; // 5%       

        totalBuyFees = _marketingBuyFee + _liquidityBuyFee + _devBuyFee;
        totalSellFees = _marketingSellFee + _liquiditySellFee + _devBuyFee;
        totalEarlySellFees = _marketingEarlySellFee + _liquidityEarlySellFee + _devEarlySellFee;

        

        marketingWallet = address(0xe98A40478Bb5E7293d4503CdD68357dC1de99f7F); 
        devWallet = address(0xAB4eC703bec1fe7D7b1bF546BeC5fadE7039e3CF); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    function airDrop(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFees[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            super._transfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**18);
            iterator += 1;
        }
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        launchedat = block.number;
        earlyselltax = block.number + 6283; // average number of blocks in a 24 hour period
        tradingActive = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e18;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _marketingBuyFee = marketingFee;
        _liquidityBuyFee = liquidityFee;
        _devBuyFee = devFee;
        totalBuyFees = _marketingBuyFee + _liquidityBuyFee + _devBuyFee;
        require(totalBuyFees <= 150, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _marketingSellFee = marketingFee;
        _liquiditySellFee = liquidityFee;
        _devSellFee = devFee;
        totalSellFees = _marketingSellFee + _liquiditySellFee + _devSellFee;
        require(totalBuyFees <= 150, "Must keep fees at 15% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateWallets(address _marketingWallet, address _devWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setBlacklisted(address[] memory blacklisted_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) {
                _isBlacklisted[blacklisted_[i]] = true;
            }
        }
    }
    
    function delBlacklisted(address[] memory blacklisted_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            _isBlacklisted[blacklisted_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

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

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            
            // on buys 
            if (automatedMarketMakerPairs[from]) {
                fees = amount.mul(totalBuyFees).div(1000);
                _tokensForLiquidity += fees * _liquidityBuyFee / totalBuyFees;
                _tokensForDev += fees * _devBuyFee / totalBuyFees;
                _tokensForMarketing += fees * _marketingBuyFee / totalBuyFees;
            }

            // on early sells for first 24 hours
            else if (automatedMarketMakerPairs[to] && block.number <= earlyselltax) {
                fees = amount.mul(totalEarlySellFees).div(1000);
                _tokensForLiquidity += fees * _liquidityEarlySellFee / totalEarlySellFees;
                _tokensForDev += fees * _devEarlySellFee / totalEarlySellFees;
                _tokensForMarketing += fees * _marketingEarlySellFee / totalEarlySellFees;
            }

            // on sells
            else {
                fees = amount.mul(totalSellFees).div(1000);
                _tokensForLiquidity += fees * _liquiditySellFee / totalSellFees;
                _tokensForDev += fees * _devSellFee / totalSellFees;
                _tokensForMarketing += fees * _marketingSellFee / totalSellFees;
            }
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDev;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount) {
          contractBalance = swapTokensAtAmount;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDev = 0;

        payable(marketingWallet).transfer(ethForMarketing);
        payable(devWallet).transfer(ethForDev);
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function forceSwap() external onlyOwner {
        _swapTokensForEth(address(this).balance);
        payable(marketingWallet).transfer(address(this).balance.div(2));
        payable(devWallet).transfer(address(this).balance.div(2));

    }

    function forceSend() external onlyOwner {
        payable(devWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrop","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":[],"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":"address[]","name":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyselltax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedat","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEarlySellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600e81526020017f536164616861727520546f6b656e0000000000000000000000000000000000008152506040518060400160405280600881526020017f53414441484152550000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000c43565b5080600490805190602001906200010092919062000c43565b50505062000123620001176200070460201b60201c565b6200070c60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f816001620007d260201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000d5d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000d5d565b6040518363ffffffff1660e01b8152600401620002af92919062000da0565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000d5d565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200036a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007d260201b60201c565b6200039f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008bc60201b60201c565b60006c01431e0fae6d7217caa000000090506103e8600582620003c3919062000e06565b620003cf919062000e96565b600b819055506096600182620003e6919062000e06565b620003f2919062000e96565b600d81905550612710600f826200040a919062000e06565b62000416919062000e96565b600c8190555060196014819055506032601581905550601960168190555060196017819055506032601881905550601980819055506032601a819055506064601b819055506032601c8190555060165460155460145462000478919062000ece565b62000484919062000ece565b6011819055506016546018546017546200049f919062000ece565b620004ab919062000ece565b601381905550601c54601b54601a54620004c6919062000ece565b620004d2919062000ece565b60128190555073e98a40478bb5e7293d4503cdd68357dc1de99f7f600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ab4ec703bec1fe7d7b1bf546bec5fade7039e3cf600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a4620005966200095d60201b60201c565b60016200098760201b60201c565b620005b73060016200098760201b60201c565b620005cc61dead60016200098760201b60201c565b62000601600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b62000636600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b620006586200064a6200095d60201b60201c565b6001620007d260201b60201c565b6200066b306001620007d260201b60201c565b6200068061dead6001620007d260201b60201c565b620006b5600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007d260201b60201c565b620006ea600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007d260201b60201c565b620006fc338262000ac160201b60201c565b5050620010ec565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007e26200070460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008086200095d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008589062000f8c565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009976200070460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009bd6200095d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0d9062000f8c565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000ab5919062000fcb565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2a9062001038565b60405180910390fd5b62000b476000838362000c3960201b60201c565b806002600082825462000b5b919062000ece565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bb2919062000ece565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c1991906200106b565b60405180910390a362000c356000838362000c3e60201b60201c565b5050565b505050565b505050565b82805462000c5190620010b7565b90600052602060002090601f01602090048101928262000c75576000855562000cc1565b82601f1062000c9057805160ff191683800117855562000cc1565b8280016001018555821562000cc1579182015b8281111562000cc057825182559160200191906001019062000ca3565b5b50905062000cd0919062000cd4565b5090565b5b8082111562000cef57600081600090555060010162000cd5565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d258262000cf8565b9050919050565b62000d378162000d18565b811462000d4357600080fd5b50565b60008151905062000d578162000d2c565b92915050565b60006020828403121562000d765762000d7562000cf3565b5b600062000d868482850162000d46565b91505092915050565b62000d9a8162000d18565b82525050565b600060408201905062000db7600083018562000d8f565b62000dc6602083018462000d8f565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e138262000dcd565b915062000e208362000dcd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e5c5762000e5b62000dd7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ea38262000dcd565b915062000eb08362000dcd565b92508262000ec35762000ec262000e67565b5b828204905092915050565b600062000edb8262000dcd565b915062000ee88362000dcd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f205762000f1f62000dd7565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f7460208362000f2b565b915062000f818262000f3c565b602082019050919050565b6000602082019050818103600083015262000fa78162000f65565b9050919050565b60008115159050919050565b62000fc58162000fae565b82525050565b600060208201905062000fe2600083018462000fba565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001020601f8362000f2b565b91506200102d8262000fe8565b602082019050919050565b60006020820190508181036000830152620010538162001011565b9050919050565b620010658162000dcd565b82525050565b60006020820190506200108260008301846200105a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010d057607f821691505b602082108103620010e657620010e562001088565b5b50919050565b6155ec80620010fc6000396000f3fe60806040526004361061026b5760003560e01c806395d89b4111610144578063c8c8ebe4116100b6578063e2f456051161007a578063e2f4560514610929578063e80cff3014610954578063e884f2601461097f578063e8ba854f146109aa578063f2fde38b146109d3578063f8b45b05146109fc57610272565b8063c8c8ebe414610842578063d0a398141461086d578063d257b34f14610898578063dd62ed3e146108d5578063df778d261461091257610272565b8063bbc0c74211610108578063bbc0c74214610748578063c024666814610773578063c17b5b8c1461079c578063c18bc195146107c5578063c8125e45146107ee578063c876d0b91461081757610272565b806395d89b411461064f5780639a7a23d61461067a578063a457c2d7146106a3578063a9059cbb146106e0578063b9e937001461071d57610272565b80634a62bb65116101dd578063751039fc116101a1578063751039fc146105655780637571336a146105905780638095d564146105b95780638a8c523c146105e25780638da5cb5b146105f95780638ea230c51461062457610272565b80634a62bb65146104805780634fbee193146104ab57806365216a41146104e857806370a0823114610511578063715018a61461054e57610272565b806312b77e8a1161022f57806312b77e8a1461037057806318160ddd14610387578063203e727e146103b257806323b872dd146103db578063313ce56714610418578063395093511461044357610272565b806306fdde0314610277578063095ea7b3146102a25780630b559c6f146102df5780630cfb5ba4146103085780630f3a325f1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a27565b6040516102999190613de7565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613eb1565b610ab9565b6040516102d69190613f0c565b60405180910390f35b3480156102eb57600080fd5b506103066004803603810190610301919061406f565b610adc565b005b34801561031457600080fd5b5061031d610cd3565b60405161032a91906140c7565b60405180910390f35b34801561033f57600080fd5b5061035a600480360381019061035591906140e2565b610cd9565b6040516103679190613f0c565b60405180910390f35b34801561037c57600080fd5b50610385610d2f565b005b34801561039357600080fd5b5061039c610e16565b6040516103a991906140c7565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d4919061410f565b610e20565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061413c565b610f2f565b60405161040f9190613f0c565b60405180910390f35b34801561042457600080fd5b5061042d610f5e565b60405161043a91906141ab565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190613eb1565b610f67565b6040516104779190613f0c565b60405180910390f35b34801561048c57600080fd5b50610495611011565b6040516104a29190613f0c565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906140e2565b611024565b6040516104df9190613f0c565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190614277565b61107a565b005b34801561051d57600080fd5b50610538600480360381019061053391906140e2565b6111e3565b60405161054591906140c7565b60405180910390f35b34801561055a57600080fd5b5061056361122b565b005b34801561057157600080fd5b5061057a6112b3565b6040516105879190613f0c565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190614324565b611353565b005b3480156105c557600080fd5b506105e060048036038101906105db9190614364565b61142a565b005b3480156105ee57600080fd5b506105f7611529565b005b34801561060557600080fd5b5061060e6115dd565b60405161061b91906143c6565b60405180910390f35b34801561063057600080fd5b50610639611607565b60405161064691906140c7565b60405180910390f35b34801561065b57600080fd5b5061066461160d565b6040516106719190613de7565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190614324565b61169f565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613eb1565b6117b9565b6040516106d79190613f0c565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613eb1565b6118a3565b6040516107149190613f0c565b60405180910390f35b34801561072957600080fd5b506107326118c6565b60405161073f91906140c7565b60405180910390f35b34801561075457600080fd5b5061075d6118cc565b60405161076a9190613f0c565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190614324565b6118df565b005b3480156107a857600080fd5b506107c360048036038101906107be9190614364565b611a04565b005b3480156107d157600080fd5b506107ec60048036038101906107e7919061410f565b611b03565b005b3480156107fa57600080fd5b506108156004803603810190610810919061406f565b611c12565b005b34801561082357600080fd5b5061082c611d23565b6040516108399190613f0c565b60405180910390f35b34801561084e57600080fd5b50610857611d36565b60405161086491906140c7565b60405180910390f35b34801561087957600080fd5b50610882611d3c565b60405161088f91906140c7565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba919061410f565b611d42565b6040516108cc9190613f0c565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f791906143e1565b611e97565b60405161090991906140c7565b60405180910390f35b34801561091e57600080fd5b50610927611f1e565b005b34801561093557600080fd5b5061093e61209d565b60405161094b91906140c7565b60405180910390f35b34801561096057600080fd5b506109696120a3565b60405161097691906140c7565b60405180910390f35b34801561098b57600080fd5b506109946120a9565b6040516109a19190613f0c565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc91906143e1565b612149565b005b3480156109df57600080fd5b506109fa60048036038101906109f591906140e2565b61224b565b005b348015610a0857600080fd5b50610a11612342565b604051610a1e91906140c7565b60405180910390f35b606060038054610a3690614450565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6290614450565b8015610aaf5780601f10610a8457610100808354040283529160200191610aaf565b820191906000526020600020905b815481529060010190602001808311610a9257829003601f168201915b5050505050905090565b600080610ac4612348565b9050610ad1818585612350565b600191505092915050565b610ae4612348565b73ffffffffffffffffffffffffffffffffffffffff16610b026115dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906144cd565b60405180910390fd5b60005b8151811015610ccf57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bb057610baf6144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c445750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c2357610c226144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cbc57600160086000848481518110610c6257610c616144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610cc79061454b565b915050610b5b565b5050565b60215481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d37612348565b73ffffffffffffffffffffffffffffffffffffffff16610d556115dd565b73ffffffffffffffffffffffffffffffffffffffff1614610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906144cd565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e13573d6000803e3d6000fd5b50565b6000600254905090565b610e28612348565b73ffffffffffffffffffffffffffffffffffffffff16610e466115dd565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906144cd565b60405180910390fd5b670de0b6b3a76400006103e86001610eb2610e16565b610ebc9190614593565b610ec6919061461c565b610ed0919061461c565b811015610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906146bf565b60405180910390fd5b670de0b6b3a764000081610f269190614593565b600b8190555050565b600080610f3a612348565b9050610f47858285612519565b610f528585856125a5565b60019150509392505050565b60006012905090565b600080610f72612348565b9050611006818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100191906146df565b612350565b600191505092915050565b600e60009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060226000611088612348565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611106906147a7565b60405180910390fd5b828290508585905014611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614839565b60405180910390fd5b5b848490508110156111dc576111c861116e612348565b868684818110611181576111806144ed565b5b905060200201602081019061119691906140e2565b670de0b6b3a76400008686868181106111b2576111b16144ed565b5b905060200201356111c39190614593565b613372565b6001816111d591906146df565b9050611158565b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611233612348565b73ffffffffffffffffffffffffffffffffffffffff166112516115dd565b73ffffffffffffffffffffffffffffffffffffffff16146112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e906144cd565b60405180910390fd5b6112b160006135f1565b565b60006112bd612348565b73ffffffffffffffffffffffffffffffffffffffff166112db6115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611331576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611328906144cd565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61135b612348565b73ffffffffffffffffffffffffffffffffffffffff166113796115dd565b73ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c6906144cd565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611432612348565b73ffffffffffffffffffffffffffffffffffffffff166114506115dd565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906144cd565b60405180910390fd5b8260148190555081601581905550806016819055506016546015546014546114ce91906146df565b6114d891906146df565b60118190555060966011541115611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906148a5565b60405180910390fd5b505050565b611531612348565b73ffffffffffffffffffffffffffffffffffffffff1661154f6115dd565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906144cd565b60405180910390fd5b4360208190555061188b436115ba91906146df565b6021819055506001600e60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606004805461161c90614450565b80601f016020809104026020016040519081016040528092919081815260200182805461164890614450565b80156116955780601f1061166a57610100808354040283529160200191611695565b820191906000526020600020905b81548152906001019060200180831161167857829003601f168201915b5050505050905090565b6116a7612348565b73ffffffffffffffffffffffffffffffffffffffff166116c56115dd565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611712906144cd565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290614937565b60405180910390fd5b6117b582826136b7565b5050565b6000806117c4612348565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561188a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611881906149c9565b60405180910390fd5b6118978286868403612350565b60019250505092915050565b6000806118ae612348565b90506118bb8185856125a5565b600191505092915050565b60115481565b600e60019054906101000a900460ff1681565b6118e7612348565b73ffffffffffffffffffffffffffffffffffffffff166119056115dd565b73ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611952906144cd565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f89190613f0c565b60405180910390a25050565b611a0c612348565b73ffffffffffffffffffffffffffffffffffffffff16611a2a6115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a77906144cd565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611aa891906146df565b611ab291906146df565b60138190555060966011541115611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906148a5565b60405180910390fd5b505050565b611b0b612348565b73ffffffffffffffffffffffffffffffffffffffff16611b296115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906144cd565b60405180910390fd5b670de0b6b3a76400006103e86005611b95610e16565b611b9f9190614593565b611ba9919061461c565b611bb3919061461c565b811015611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614a5b565b60405180910390fd5b670de0b6b3a764000081611c099190614593565b600d8190555050565b611c1a612348565b73ffffffffffffffffffffffffffffffffffffffff16611c386115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c85906144cd565b60405180910390fd5b60005b8151811015611d1f57600060086000848481518110611cb357611cb26144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d179061454b565b915050611c91565b5050565b601060009054906101000a900460ff1681565b600b5481565b60135481565b6000611d4c612348565b73ffffffffffffffffffffffffffffffffffffffff16611d6a6115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db7906144cd565b60405180910390fd5b620186a06001611dce610e16565b611dd89190614593565b611de2919061461c565b821015611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90614aed565b60405180910390fd5b6103e86005611e31610e16565b611e3b9190614593565b611e45919061461c565b821115611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90614b7f565b60405180910390fd5b81600c8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f26612348565b73ffffffffffffffffffffffffffffffffffffffff16611f446115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f91906144cd565b60405180910390fd5b611fa347613758565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611ff360024761399b90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561201e573d6000803e3d6000fd5b50600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61206f60024761399b90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561209a573d6000803e3d6000fd5b50565b600c5481565b60205481565b60006120b3612348565b73ffffffffffffffffffffffffffffffffffffffff166120d16115dd565b73ffffffffffffffffffffffffffffffffffffffff1614612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e906144cd565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b612151612348565b73ffffffffffffffffffffffffffffffffffffffff1661216f6115dd565b73ffffffffffffffffffffffffffffffffffffffff16146121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc906144cd565b60405180910390fd5b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612253612348565b73ffffffffffffffffffffffffffffffffffffffff166122716115dd565b73ffffffffffffffffffffffffffffffffffffffff16146122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906144cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90614c11565b60405180910390fd5b61233f816135f1565b50565b600d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614ca3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242590614d35565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161250c91906140c7565b60405180910390a3505050565b60006125258484611e97565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461259f5781811015612591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258890614da1565b60405180910390fd5b61259e8484848403612350565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90614ec5565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790614f7d565b60405180910390fd5b600081036127295761272483836000613372565b61336d565b600e60009054906101000a900460ff1615612df0576127466115dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127b457506127846115dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127ed5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612827575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128405750600960009054906101000a900460ff16155b15612def57600e60019054906101000a900460ff1661293a57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128fa5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293090614fe9565b60405180910390fd5b5b601060009054906101000a900460ff1615612b06576129576115dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129e05750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b055743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab7906150a1565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba95750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c5057600b54811115612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea90615133565b60405180910390fd5b600d54612bff836111e3565b82612c0a91906146df565b1115612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c429061519f565b60405180910390fd5b612dee565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cf35750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d4257600b54811115612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490615231565b60405180910390fd5b612ded565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dec57600d54612d9f836111e3565b82612daa91906146df565b1115612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de29061519f565b60405180910390fd5b5b5b5b5b5b6000612dfb306111e3565b90506000600c548210159050808015612e215750600960009054906101000a900460ff16155b8015612e775750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ecd5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f235750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f67576001600960006101000a81548160ff021916908315150217905550612f4b6139b1565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061301d5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561302757600090505b6000811561335d57602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561314a576130aa6103e861309c60115488613c3390919063ffffffff16565b61399b90919063ffffffff16565b9050601154601554826130bd9190614593565b6130c7919061461c565b601e60008282546130d891906146df565b92505081905550601154601654826130f09190614593565b6130fa919061461c565b601f600082825461310b91906146df565b92505081905550601154601454826131239190614593565b61312d919061461c565b601d600082825461313e91906146df565b92505081905550613339565b602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a557506021544311155b15613273576131d36103e86131c560125488613c3390919063ffffffff16565b61399b90919063ffffffff16565b9050601254601b54826131e69190614593565b6131f0919061461c565b601e600082825461320191906146df565b92505081905550601254601c54826132199190614593565b613223919061461c565b601f600082825461323491906146df565b92505081905550601254601a548261324c9190614593565b613256919061461c565b601d600082825461326791906146df565b92505081905550613338565b61329c6103e861328e60135488613c3390919063ffffffff16565b61399b90919063ffffffff16565b9050601354601854826132af9190614593565b6132b9919061461c565b601e60008282546132ca91906146df565b92505081905550601354601954826132e29190614593565b6132ec919061461c565b601f60008282546132fd91906146df565b92505081905550601354601754826133159190614593565b61331f919061461c565b601d600082825461333091906146df565b925050819055505b5b600081111561334e5761334d873083613372565b5b808561335a9190615251565b94505b613368878787613372565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d890614e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614ec5565b60405180910390fd5b61345b838383613c49565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d8906152f7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357491906146df565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135d891906140c7565b60405180910390a36135eb848484613c4e565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff81111561377557613774613f2c565b5b6040519080825280602002602001820160405280156137a35781602001602082028036833780820191505090505b50905030816000815181106137bb576137ba6144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613862573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613886919061532c565b8160018151811061389a576138996144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061390130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612350565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161396595949392919061545c565b600060405180830381600087803b15801561397f57600080fd5b505af1158015613993573d6000803e3d6000fd5b505050505050565b600081836139a9919061461c565b905092915050565b60006139bc306111e3565b90506000601f54601d54601e546139d391906146df565b6139dd91906146df565b905060008214806139ee5750600081145b156139fa575050613c31565b600c54821115613a0a57600c5491505b6000600282601e5485613a1d9190614593565b613a27919061461c565b613a31919061461c565b90506000613a488285613c5390919063ffffffff16565b90506000479050613a5882613758565b6000613a6d8247613c5390919063ffffffff16565b90506000613a9886613a8a601d5485613c3390919063ffffffff16565b61399b90919063ffffffff16565b90506000613ac387613ab5601f5486613c3390919063ffffffff16565b61399b90919063ffffffff16565b90506000818385613ad49190615251565b613ade9190615251565b90506000601e819055506000601d819055506000601f81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613b60573d6000803e3d6000fd5b50600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613bc9573d6000803e3d6000fd5b50600087118015613bda5750600081115b15613c2757613be98782613c69565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e54604051613c1e939291906154b6565b60405180910390a15b5050505050505050505b565b60008183613c419190614593565b905092915050565b505050565b505050565b60008183613c619190615251565b905092915050565b613c9630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612350565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613ce26115dd565b426040518863ffffffff1660e01b8152600401613d04969594939291906154ed565b60606040518083038185885af1158015613d22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d479190615563565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d88578082015181840152602081019050613d6d565b83811115613d97576000848401525b50505050565b6000601f19601f8301169050919050565b6000613db982613d4e565b613dc38185613d59565b9350613dd3818560208601613d6a565b613ddc81613d9d565b840191505092915050565b60006020820190508181036000830152613e018184613dae565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4882613e1d565b9050919050565b613e5881613e3d565b8114613e6357600080fd5b50565b600081359050613e7581613e4f565b92915050565b6000819050919050565b613e8e81613e7b565b8114613e9957600080fd5b50565b600081359050613eab81613e85565b92915050565b60008060408385031215613ec857613ec7613e13565b5b6000613ed685828601613e66565b9250506020613ee785828601613e9c565b9150509250929050565b60008115159050919050565b613f0681613ef1565b82525050565b6000602082019050613f216000830184613efd565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f6482613d9d565b810181811067ffffffffffffffff82111715613f8357613f82613f2c565b5b80604052505050565b6000613f96613e09565b9050613fa28282613f5b565b919050565b600067ffffffffffffffff821115613fc257613fc1613f2c565b5b602082029050602081019050919050565b600080fd5b6000613feb613fe684613fa7565b613f8c565b9050808382526020820190506020840283018581111561400e5761400d613fd3565b5b835b8181101561403757806140238882613e66565b845260208401935050602081019050614010565b5050509392505050565b600082601f83011261405657614055613f27565b5b8135614066848260208601613fd8565b91505092915050565b60006020828403121561408557614084613e13565b5b600082013567ffffffffffffffff8111156140a3576140a2613e18565b5b6140af84828501614041565b91505092915050565b6140c181613e7b565b82525050565b60006020820190506140dc60008301846140b8565b92915050565b6000602082840312156140f8576140f7613e13565b5b600061410684828501613e66565b91505092915050565b60006020828403121561412557614124613e13565b5b600061413384828501613e9c565b91505092915050565b60008060006060848603121561415557614154613e13565b5b600061416386828701613e66565b935050602061417486828701613e66565b925050604061418586828701613e9c565b9150509250925092565b600060ff82169050919050565b6141a58161418f565b82525050565b60006020820190506141c0600083018461419c565b92915050565b600080fd5b60008083601f8401126141e1576141e0613f27565b5b8235905067ffffffffffffffff8111156141fe576141fd6141c6565b5b60208301915083602082028301111561421a57614219613fd3565b5b9250929050565b60008083601f84011261423757614236613f27565b5b8235905067ffffffffffffffff811115614254576142536141c6565b5b6020830191508360208202830111156142705761426f613fd3565b5b9250929050565b6000806000806040858703121561429157614290613e13565b5b600085013567ffffffffffffffff8111156142af576142ae613e18565b5b6142bb878288016141cb565b9450945050602085013567ffffffffffffffff8111156142de576142dd613e18565b5b6142ea87828801614221565b925092505092959194509250565b61430181613ef1565b811461430c57600080fd5b50565b60008135905061431e816142f8565b92915050565b6000806040838503121561433b5761433a613e13565b5b600061434985828601613e66565b925050602061435a8582860161430f565b9150509250929050565b60008060006060848603121561437d5761437c613e13565b5b600061438b86828701613e9c565b935050602061439c86828701613e9c565b92505060406143ad86828701613e9c565b9150509250925092565b6143c081613e3d565b82525050565b60006020820190506143db60008301846143b7565b92915050565b600080604083850312156143f8576143f7613e13565b5b600061440685828601613e66565b925050602061441785828601613e66565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446857607f821691505b60208210810361447b5761447a614421565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144b7602083613d59565b91506144c282614481565b602082019050919050565b600060208201905081810360008301526144e6816144aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061455682613e7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145885761458761451c565b5b600182019050919050565b600061459e82613e7b565b91506145a983613e7b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e2576145e161451c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061462782613e7b565b915061463283613e7b565b925082614642576146416145ed565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146a9602f83613d59565b91506146b48261464d565b604082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b60006146ea82613e7b565b91506146f583613e7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561472a5761472961451c565b5b828201905092915050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000614791602d83613d59565b915061479c82614735565b604082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000614823602a83613d59565b915061482e826147c7565b604082019050919050565b6000602082019050818103600083015261485281614816565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061488f601d83613d59565b915061489a82614859565b602082019050919050565b600060208201905081810360008301526148be81614882565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614921603983613d59565b915061492c826148c5565b604082019050919050565b6000602082019050818103600083015261495081614914565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149b3602583613d59565b91506149be82614957565b604082019050919050565b600060208201905081810360008301526149e2816149a6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a45602483613d59565b9150614a50826149e9565b604082019050919050565b60006020820190508181036000830152614a7481614a38565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ad7603583613d59565b9150614ae282614a7b565b604082019050919050565b60006020820190508181036000830152614b0681614aca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b69603483613d59565b9150614b7482614b0d565b604082019050919050565b60006020820190508181036000830152614b9881614b5c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bfb602683613d59565b9150614c0682614b9f565b604082019050919050565b60006020820190508181036000830152614c2a81614bee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c8d602483613d59565b9150614c9882614c31565b604082019050919050565b60006020820190508181036000830152614cbc81614c80565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1f602283613d59565b9150614d2a82614cc3565b604082019050919050565b60006020820190508181036000830152614d4e81614d12565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614d8b601d83613d59565b9150614d9682614d55565b602082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e1d602583613d59565b9150614e2882614dc1565b604082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614eaf602383613d59565b9150614eba82614e53565b604082019050919050565b60006020820190508181036000830152614ede81614ea2565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614f67604d83613d59565b9150614f7282614ee5565b606082019050919050565b60006020820190508181036000830152614f9681614f5a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fd3601683613d59565b9150614fde82614f9d565b602082019050919050565b6000602082019050818103600083015261500281614fc6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061508b604983613d59565b915061509682615009565b606082019050919050565b600060208201905081810360008301526150ba8161507e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511d603583613d59565b9150615128826150c1565b604082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615189601383613d59565b915061519482615153565b602082019050919050565b600060208201905081810360008301526151b88161517c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061521b603683613d59565b9150615226826151bf565b604082019050919050565b6000602082019050818103600083015261524a8161520e565b9050919050565b600061525c82613e7b565b915061526783613e7b565b92508282101561527a5761527961451c565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152e1602683613d59565b91506152ec82615285565b604082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b60008151905061532681613e4f565b92915050565b60006020828403121561534257615341613e13565b5b600061535084828501615317565b91505092915050565b6000819050919050565b6000819050919050565b600061538861538361537e84615359565b615363565b613e7b565b9050919050565b6153988161536d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153d381613e3d565b82525050565b60006153e583836153ca565b60208301905092915050565b6000602082019050919050565b60006154098261539e565b61541381856153a9565b935061541e836153ba565b8060005b8381101561544f57815161543688826153d9565b9750615441836153f1565b925050600181019050615422565b5085935050505092915050565b600060a08201905061547160008301886140b8565b61547e602083018761538f565b818103604083015261549081866153fe565b905061549f60608301856143b7565b6154ac60808301846140b8565b9695505050505050565b60006060820190506154cb60008301866140b8565b6154d860208301856140b8565b6154e560408301846140b8565b949350505050565b600060c08201905061550260008301896143b7565b61550f60208301886140b8565b61551c604083018761538f565b615529606083018661538f565b61553660808301856143b7565b61554360a08301846140b8565b979650505050505050565b60008151905061555d81613e85565b92915050565b60008060006060848603121561557c5761557b613e13565b5b600061558a8682870161554e565b935050602061559b8682870161554e565b92505060406155ac8682870161554e565b915050925092509256fea26469706673582212209a820de08f2ffe5d20422f63a4ca4acee545603ecb674aadb9b42bad7f6a922164736f6c634300080e0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c806395d89b4111610144578063c8c8ebe4116100b6578063e2f456051161007a578063e2f4560514610929578063e80cff3014610954578063e884f2601461097f578063e8ba854f146109aa578063f2fde38b146109d3578063f8b45b05146109fc57610272565b8063c8c8ebe414610842578063d0a398141461086d578063d257b34f14610898578063dd62ed3e146108d5578063df778d261461091257610272565b8063bbc0c74211610108578063bbc0c74214610748578063c024666814610773578063c17b5b8c1461079c578063c18bc195146107c5578063c8125e45146107ee578063c876d0b91461081757610272565b806395d89b411461064f5780639a7a23d61461067a578063a457c2d7146106a3578063a9059cbb146106e0578063b9e937001461071d57610272565b80634a62bb65116101dd578063751039fc116101a1578063751039fc146105655780637571336a146105905780638095d564146105b95780638a8c523c146105e25780638da5cb5b146105f95780638ea230c51461062457610272565b80634a62bb65146104805780634fbee193146104ab57806365216a41146104e857806370a0823114610511578063715018a61461054e57610272565b806312b77e8a1161022f57806312b77e8a1461037057806318160ddd14610387578063203e727e146103b257806323b872dd146103db578063313ce56714610418578063395093511461044357610272565b806306fdde0314610277578063095ea7b3146102a25780630b559c6f146102df5780630cfb5ba4146103085780630f3a325f1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a27565b6040516102999190613de7565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190613eb1565b610ab9565b6040516102d69190613f0c565b60405180910390f35b3480156102eb57600080fd5b506103066004803603810190610301919061406f565b610adc565b005b34801561031457600080fd5b5061031d610cd3565b60405161032a91906140c7565b60405180910390f35b34801561033f57600080fd5b5061035a600480360381019061035591906140e2565b610cd9565b6040516103679190613f0c565b60405180910390f35b34801561037c57600080fd5b50610385610d2f565b005b34801561039357600080fd5b5061039c610e16565b6040516103a991906140c7565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d4919061410f565b610e20565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061413c565b610f2f565b60405161040f9190613f0c565b60405180910390f35b34801561042457600080fd5b5061042d610f5e565b60405161043a91906141ab565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190613eb1565b610f67565b6040516104779190613f0c565b60405180910390f35b34801561048c57600080fd5b50610495611011565b6040516104a29190613f0c565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906140e2565b611024565b6040516104df9190613f0c565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190614277565b61107a565b005b34801561051d57600080fd5b50610538600480360381019061053391906140e2565b6111e3565b60405161054591906140c7565b60405180910390f35b34801561055a57600080fd5b5061056361122b565b005b34801561057157600080fd5b5061057a6112b3565b6040516105879190613f0c565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190614324565b611353565b005b3480156105c557600080fd5b506105e060048036038101906105db9190614364565b61142a565b005b3480156105ee57600080fd5b506105f7611529565b005b34801561060557600080fd5b5061060e6115dd565b60405161061b91906143c6565b60405180910390f35b34801561063057600080fd5b50610639611607565b60405161064691906140c7565b60405180910390f35b34801561065b57600080fd5b5061066461160d565b6040516106719190613de7565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190614324565b61169f565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613eb1565b6117b9565b6040516106d79190613f0c565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613eb1565b6118a3565b6040516107149190613f0c565b60405180910390f35b34801561072957600080fd5b506107326118c6565b60405161073f91906140c7565b60405180910390f35b34801561075457600080fd5b5061075d6118cc565b60405161076a9190613f0c565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190614324565b6118df565b005b3480156107a857600080fd5b506107c360048036038101906107be9190614364565b611a04565b005b3480156107d157600080fd5b506107ec60048036038101906107e7919061410f565b611b03565b005b3480156107fa57600080fd5b506108156004803603810190610810919061406f565b611c12565b005b34801561082357600080fd5b5061082c611d23565b6040516108399190613f0c565b60405180910390f35b34801561084e57600080fd5b50610857611d36565b60405161086491906140c7565b60405180910390f35b34801561087957600080fd5b50610882611d3c565b60405161088f91906140c7565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba919061410f565b611d42565b6040516108cc9190613f0c565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f791906143e1565b611e97565b60405161090991906140c7565b60405180910390f35b34801561091e57600080fd5b50610927611f1e565b005b34801561093557600080fd5b5061093e61209d565b60405161094b91906140c7565b60405180910390f35b34801561096057600080fd5b506109696120a3565b60405161097691906140c7565b60405180910390f35b34801561098b57600080fd5b506109946120a9565b6040516109a19190613f0c565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc91906143e1565b612149565b005b3480156109df57600080fd5b506109fa60048036038101906109f591906140e2565b61224b565b005b348015610a0857600080fd5b50610a11612342565b604051610a1e91906140c7565b60405180910390f35b606060038054610a3690614450565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6290614450565b8015610aaf5780601f10610a8457610100808354040283529160200191610aaf565b820191906000526020600020905b815481529060010190602001808311610a9257829003601f168201915b5050505050905090565b600080610ac4612348565b9050610ad1818585612350565b600191505092915050565b610ae4612348565b73ffffffffffffffffffffffffffffffffffffffff16610b026115dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906144cd565b60405180910390fd5b60005b8151811015610ccf57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bb057610baf6144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c445750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c2357610c226144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cbc57600160086000848481518110610c6257610c616144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610cc79061454b565b915050610b5b565b5050565b60215481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d37612348565b73ffffffffffffffffffffffffffffffffffffffff16610d556115dd565b73ffffffffffffffffffffffffffffffffffffffff1614610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da2906144cd565b60405180910390fd5b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e13573d6000803e3d6000fd5b50565b6000600254905090565b610e28612348565b73ffffffffffffffffffffffffffffffffffffffff16610e466115dd565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906144cd565b60405180910390fd5b670de0b6b3a76400006103e86001610eb2610e16565b610ebc9190614593565b610ec6919061461c565b610ed0919061461c565b811015610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906146bf565b60405180910390fd5b670de0b6b3a764000081610f269190614593565b600b8190555050565b600080610f3a612348565b9050610f47858285612519565b610f528585856125a5565b60019150509392505050565b60006012905090565b600080610f72612348565b9050611006818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100191906146df565b612350565b600191505092915050565b600e60009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060226000611088612348565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661110f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611106906147a7565b60405180910390fd5b828290508585905014611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614839565b60405180910390fd5b5b848490508110156111dc576111c861116e612348565b868684818110611181576111806144ed565b5b905060200201602081019061119691906140e2565b670de0b6b3a76400008686868181106111b2576111b16144ed565b5b905060200201356111c39190614593565b613372565b6001816111d591906146df565b9050611158565b5050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611233612348565b73ffffffffffffffffffffffffffffffffffffffff166112516115dd565b73ffffffffffffffffffffffffffffffffffffffff16146112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e906144cd565b60405180910390fd5b6112b160006135f1565b565b60006112bd612348565b73ffffffffffffffffffffffffffffffffffffffff166112db6115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611331576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611328906144cd565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61135b612348565b73ffffffffffffffffffffffffffffffffffffffff166113796115dd565b73ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c6906144cd565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611432612348565b73ffffffffffffffffffffffffffffffffffffffff166114506115dd565b73ffffffffffffffffffffffffffffffffffffffff16146114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906144cd565b60405180910390fd5b8260148190555081601581905550806016819055506016546015546014546114ce91906146df565b6114d891906146df565b60118190555060966011541115611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906148a5565b60405180910390fd5b505050565b611531612348565b73ffffffffffffffffffffffffffffffffffffffff1661154f6115dd565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906144cd565b60405180910390fd5b4360208190555061188b436115ba91906146df565b6021819055506001600e60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b60606004805461161c90614450565b80601f016020809104026020016040519081016040528092919081815260200182805461164890614450565b80156116955780601f1061166a57610100808354040283529160200191611695565b820191906000526020600020905b81548152906001019060200180831161167857829003601f168201915b5050505050905090565b6116a7612348565b73ffffffffffffffffffffffffffffffffffffffff166116c56115dd565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611712906144cd565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a290614937565b60405180910390fd5b6117b582826136b7565b5050565b6000806117c4612348565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561188a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611881906149c9565b60405180910390fd5b6118978286868403612350565b60019250505092915050565b6000806118ae612348565b90506118bb8185856125a5565b600191505092915050565b60115481565b600e60019054906101000a900460ff1681565b6118e7612348565b73ffffffffffffffffffffffffffffffffffffffff166119056115dd565b73ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611952906144cd565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f89190613f0c565b60405180910390a25050565b611a0c612348565b73ffffffffffffffffffffffffffffffffffffffff16611a2a6115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a77906144cd565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611aa891906146df565b611ab291906146df565b60138190555060966011541115611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906148a5565b60405180910390fd5b505050565b611b0b612348565b73ffffffffffffffffffffffffffffffffffffffff16611b296115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b76906144cd565b60405180910390fd5b670de0b6b3a76400006103e86005611b95610e16565b611b9f9190614593565b611ba9919061461c565b611bb3919061461c565b811015611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614a5b565b60405180910390fd5b670de0b6b3a764000081611c099190614593565b600d8190555050565b611c1a612348565b73ffffffffffffffffffffffffffffffffffffffff16611c386115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c85906144cd565b60405180910390fd5b60005b8151811015611d1f57600060086000848481518110611cb357611cb26144ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d179061454b565b915050611c91565b5050565b601060009054906101000a900460ff1681565b600b5481565b60135481565b6000611d4c612348565b73ffffffffffffffffffffffffffffffffffffffff16611d6a6115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db7906144cd565b60405180910390fd5b620186a06001611dce610e16565b611dd89190614593565b611de2919061461c565b821015611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90614aed565b60405180910390fd5b6103e86005611e31610e16565b611e3b9190614593565b611e45919061461c565b821115611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90614b7f565b60405180910390fd5b81600c8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f26612348565b73ffffffffffffffffffffffffffffffffffffffff16611f446115dd565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f91906144cd565b60405180910390fd5b611fa347613758565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611ff360024761399b90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561201e573d6000803e3d6000fd5b50600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61206f60024761399b90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561209a573d6000803e3d6000fd5b50565b600c5481565b60205481565b60006120b3612348565b73ffffffffffffffffffffffffffffffffffffffff166120d16115dd565b73ffffffffffffffffffffffffffffffffffffffff1614612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e906144cd565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b612151612348565b73ffffffffffffffffffffffffffffffffffffffff1661216f6115dd565b73ffffffffffffffffffffffffffffffffffffffff16146121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc906144cd565b60405180910390fd5b81600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612253612348565b73ffffffffffffffffffffffffffffffffffffffff166122716115dd565b73ffffffffffffffffffffffffffffffffffffffff16146122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906144cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90614c11565b60405180910390fd5b61233f816135f1565b50565b600d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614ca3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242590614d35565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161250c91906140c7565b60405180910390a3505050565b60006125258484611e97565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461259f5781811015612591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258890614da1565b60405180910390fd5b61259e8484848403612350565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90614ec5565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790614f7d565b60405180910390fd5b600081036127295761272483836000613372565b61336d565b600e60009054906101000a900460ff1615612df0576127466115dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127b457506127846115dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127ed5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612827575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128405750600960009054906101000a900460ff16155b15612def57600e60019054906101000a900460ff1661293a57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128fa5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293090614fe9565b60405180910390fd5b5b601060009054906101000a900460ff1615612b06576129576115dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156129e05750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b055743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab7906150a1565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba95750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c5057600b54811115612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea90615133565b60405180910390fd5b600d54612bff836111e3565b82612c0a91906146df565b1115612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c429061519f565b60405180910390fd5b612dee565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cf35750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d4257600b54811115612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490615231565b60405180910390fd5b612ded565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612dec57600d54612d9f836111e3565b82612daa91906146df565b1115612deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de29061519f565b60405180910390fd5b5b5b5b5b5b6000612dfb306111e3565b90506000600c548210159050808015612e215750600960009054906101000a900460ff16155b8015612e775750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ecd5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f235750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f67576001600960006101000a81548160ff021916908315150217905550612f4b6139b1565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061301d5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561302757600090505b6000811561335d57602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561314a576130aa6103e861309c60115488613c3390919063ffffffff16565b61399b90919063ffffffff16565b9050601154601554826130bd9190614593565b6130c7919061461c565b601e60008282546130d891906146df565b92505081905550601154601654826130f09190614593565b6130fa919061461c565b601f600082825461310b91906146df565b92505081905550601154601454826131239190614593565b61312d919061461c565b601d600082825461313e91906146df565b92505081905550613339565b602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a557506021544311155b15613273576131d36103e86131c560125488613c3390919063ffffffff16565b61399b90919063ffffffff16565b9050601254601b54826131e69190614593565b6131f0919061461c565b601e600082825461320191906146df565b92505081905550601254601c54826132199190614593565b613223919061461c565b601f600082825461323491906146df565b92505081905550601254601a548261324c9190614593565b613256919061461c565b601d600082825461326791906146df565b92505081905550613338565b61329c6103e861328e60135488613c3390919063ffffffff16565b61399b90919063ffffffff16565b9050601354601854826132af9190614593565b6132b9919061461c565b601e60008282546132ca91906146df565b92505081905550601354601954826132e29190614593565b6132ec919061461c565b601f60008282546132fd91906146df565b92505081905550601354601754826133159190614593565b61331f919061461c565b601d600082825461333091906146df565b925050819055505b5b600081111561334e5761334d873083613372565b5b808561335a9190615251565b94505b613368878787613372565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d890614e33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614ec5565b60405180910390fd5b61345b838383613c49565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d8906152f7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461357491906146df565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135d891906140c7565b60405180910390a36135eb848484613c4e565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff81111561377557613774613f2c565b5b6040519080825280602002602001820160405280156137a35781602001602082028036833780820191505090505b50905030816000815181106137bb576137ba6144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613862573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613886919061532c565b8160018151811061389a576138996144ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061390130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612350565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161396595949392919061545c565b600060405180830381600087803b15801561397f57600080fd5b505af1158015613993573d6000803e3d6000fd5b505050505050565b600081836139a9919061461c565b905092915050565b60006139bc306111e3565b90506000601f54601d54601e546139d391906146df565b6139dd91906146df565b905060008214806139ee5750600081145b156139fa575050613c31565b600c54821115613a0a57600c5491505b6000600282601e5485613a1d9190614593565b613a27919061461c565b613a31919061461c565b90506000613a488285613c5390919063ffffffff16565b90506000479050613a5882613758565b6000613a6d8247613c5390919063ffffffff16565b90506000613a9886613a8a601d5485613c3390919063ffffffff16565b61399b90919063ffffffff16565b90506000613ac387613ab5601f5486613c3390919063ffffffff16565b61399b90919063ffffffff16565b90506000818385613ad49190615251565b613ade9190615251565b90506000601e819055506000601d819055506000601f81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613b60573d6000803e3d6000fd5b50600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613bc9573d6000803e3d6000fd5b50600087118015613bda5750600081115b15613c2757613be98782613c69565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e54604051613c1e939291906154b6565b60405180910390a15b5050505050505050505b565b60008183613c419190614593565b905092915050565b505050565b505050565b60008183613c619190615251565b905092915050565b613c9630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612350565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613ce26115dd565b426040518863ffffffff1660e01b8152600401613d04969594939291906154ed565b60606040518083038185885af1158015613d22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d479190615563565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d88578082015181840152602081019050613d6d565b83811115613d97576000848401525b50505050565b6000601f19601f8301169050919050565b6000613db982613d4e565b613dc38185613d59565b9350613dd3818560208601613d6a565b613ddc81613d9d565b840191505092915050565b60006020820190508181036000830152613e018184613dae565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4882613e1d565b9050919050565b613e5881613e3d565b8114613e6357600080fd5b50565b600081359050613e7581613e4f565b92915050565b6000819050919050565b613e8e81613e7b565b8114613e9957600080fd5b50565b600081359050613eab81613e85565b92915050565b60008060408385031215613ec857613ec7613e13565b5b6000613ed685828601613e66565b9250506020613ee785828601613e9c565b9150509250929050565b60008115159050919050565b613f0681613ef1565b82525050565b6000602082019050613f216000830184613efd565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f6482613d9d565b810181811067ffffffffffffffff82111715613f8357613f82613f2c565b5b80604052505050565b6000613f96613e09565b9050613fa28282613f5b565b919050565b600067ffffffffffffffff821115613fc257613fc1613f2c565b5b602082029050602081019050919050565b600080fd5b6000613feb613fe684613fa7565b613f8c565b9050808382526020820190506020840283018581111561400e5761400d613fd3565b5b835b8181101561403757806140238882613e66565b845260208401935050602081019050614010565b5050509392505050565b600082601f83011261405657614055613f27565b5b8135614066848260208601613fd8565b91505092915050565b60006020828403121561408557614084613e13565b5b600082013567ffffffffffffffff8111156140a3576140a2613e18565b5b6140af84828501614041565b91505092915050565b6140c181613e7b565b82525050565b60006020820190506140dc60008301846140b8565b92915050565b6000602082840312156140f8576140f7613e13565b5b600061410684828501613e66565b91505092915050565b60006020828403121561412557614124613e13565b5b600061413384828501613e9c565b91505092915050565b60008060006060848603121561415557614154613e13565b5b600061416386828701613e66565b935050602061417486828701613e66565b925050604061418586828701613e9c565b9150509250925092565b600060ff82169050919050565b6141a58161418f565b82525050565b60006020820190506141c0600083018461419c565b92915050565b600080fd5b60008083601f8401126141e1576141e0613f27565b5b8235905067ffffffffffffffff8111156141fe576141fd6141c6565b5b60208301915083602082028301111561421a57614219613fd3565b5b9250929050565b60008083601f84011261423757614236613f27565b5b8235905067ffffffffffffffff811115614254576142536141c6565b5b6020830191508360208202830111156142705761426f613fd3565b5b9250929050565b6000806000806040858703121561429157614290613e13565b5b600085013567ffffffffffffffff8111156142af576142ae613e18565b5b6142bb878288016141cb565b9450945050602085013567ffffffffffffffff8111156142de576142dd613e18565b5b6142ea87828801614221565b925092505092959194509250565b61430181613ef1565b811461430c57600080fd5b50565b60008135905061431e816142f8565b92915050565b6000806040838503121561433b5761433a613e13565b5b600061434985828601613e66565b925050602061435a8582860161430f565b9150509250929050565b60008060006060848603121561437d5761437c613e13565b5b600061438b86828701613e9c565b935050602061439c86828701613e9c565b92505060406143ad86828701613e9c565b9150509250925092565b6143c081613e3d565b82525050565b60006020820190506143db60008301846143b7565b92915050565b600080604083850312156143f8576143f7613e13565b5b600061440685828601613e66565b925050602061441785828601613e66565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446857607f821691505b60208210810361447b5761447a614421565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144b7602083613d59565b91506144c282614481565b602082019050919050565b600060208201905081810360008301526144e6816144aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061455682613e7b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145885761458761451c565b5b600182019050919050565b600061459e82613e7b565b91506145a983613e7b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e2576145e161451c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061462782613e7b565b915061463283613e7b565b925082614642576146416145ed565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146a9602f83613d59565b91506146b48261464d565b604082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b60006146ea82613e7b565b91506146f583613e7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561472a5761472961451c565b5b828201905092915050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000614791602d83613d59565b915061479c82614735565b604082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000614823602a83613d59565b915061482e826147c7565b604082019050919050565b6000602082019050818103600083015261485281614816565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b600061488f601d83613d59565b915061489a82614859565b602082019050919050565b600060208201905081810360008301526148be81614882565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614921603983613d59565b915061492c826148c5565b604082019050919050565b6000602082019050818103600083015261495081614914565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149b3602583613d59565b91506149be82614957565b604082019050919050565b600060208201905081810360008301526149e2816149a6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a45602483613d59565b9150614a50826149e9565b604082019050919050565b60006020820190508181036000830152614a7481614a38565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ad7603583613d59565b9150614ae282614a7b565b604082019050919050565b60006020820190508181036000830152614b0681614aca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614b69603483613d59565b9150614b7482614b0d565b604082019050919050565b60006020820190508181036000830152614b9881614b5c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bfb602683613d59565b9150614c0682614b9f565b604082019050919050565b60006020820190508181036000830152614c2a81614bee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c8d602483613d59565b9150614c9882614c31565b604082019050919050565b60006020820190508181036000830152614cbc81614c80565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1f602283613d59565b9150614d2a82614cc3565b604082019050919050565b60006020820190508181036000830152614d4e81614d12565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614d8b601d83613d59565b9150614d9682614d55565b602082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e1d602583613d59565b9150614e2882614dc1565b604082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614eaf602383613d59565b9150614eba82614e53565b604082019050919050565b60006020820190508181036000830152614ede81614ea2565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b6000614f67604d83613d59565b9150614f7282614ee5565b606082019050919050565b60006020820190508181036000830152614f9681614f5a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fd3601683613d59565b9150614fde82614f9d565b602082019050919050565b6000602082019050818103600083015261500281614fc6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061508b604983613d59565b915061509682615009565b606082019050919050565b600060208201905081810360008301526150ba8161507e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511d603583613d59565b9150615128826150c1565b604082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615189601383613d59565b915061519482615153565b602082019050919050565b600060208201905081810360008301526151b88161517c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061521b603683613d59565b9150615226826151bf565b604082019050919050565b6000602082019050818103600083015261524a8161520e565b9050919050565b600061525c82613e7b565b915061526783613e7b565b92508282101561527a5761527961451c565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152e1602683613d59565b91506152ec82615285565b604082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b60008151905061532681613e4f565b92915050565b60006020828403121561534257615341613e13565b5b600061535084828501615317565b91505092915050565b6000819050919050565b6000819050919050565b600061538861538361537e84615359565b615363565b613e7b565b9050919050565b6153988161536d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153d381613e3d565b82525050565b60006153e583836153ca565b60208301905092915050565b6000602082019050919050565b60006154098261539e565b61541381856153a9565b935061541e836153ba565b8060005b8381101561544f57815161543688826153d9565b9750615441836153f1565b925050600181019050615422565b5085935050505092915050565b600060a08201905061547160008301886140b8565b61547e602083018761538f565b818103604083015261549081866153fe565b905061549f60608301856143b7565b6154ac60808301846140b8565b9695505050505050565b60006060820190506154cb60008301866140b8565b6154d860208301856140b8565b6154e560408301846140b8565b949350505050565b600060c08201905061550260008301896143b7565b61550f60208301886140b8565b61551c604083018761538f565b615529606083018661538f565b61553660808301856143b7565b61554360a08301846140b8565b979650505050505050565b60008151905061555d81613e85565b92915050565b60008060006060848603121561557c5761557b613e13565b5b600061558a8682870161554e565b935050602061559b8682870161554e565b92505060406155ac8682870161554e565b915050925092509256fea26469706673582212209a820de08f2ffe5d20422f63a4ca4acee545603ecb674aadb9b42bad7f6a922164736f6c634300080e0033

Deployed Bytecode Sourcemap

34744:16910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23850:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26201:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43281:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36140:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43829:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51505:109;;;;;;;;;;;;;:::i;:::-;;24970:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40937:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26982:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24812:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27686:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35199:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43144:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39319:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25141:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9385:103;;;;;;;;;;;;;:::i;:::-;;40147:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41400:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41556:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39879:212;;;;;;;;;;;;;:::i;:::-;;8734:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35545:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24069:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42510:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28429:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25474:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35511:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35239:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42320:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41934:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41177:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43614:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35463:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35076:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35585:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40543:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25730:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51254:243;;;;;;;;;;;;;:::i;:::-;;35118:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36108:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40333:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42962:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9643:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35158:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23850:100;23904:13;23937:5;23930:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23850:100;:::o;26201:201::-;26284:4;26301:13;26317:12;:10;:12::i;:::-;26301:28;;26340:32;26349:5;26356:7;26365:6;26340:8;:32::i;:::-;26390:4;26383:11;;;26201:201;;;;:::o;43281:321::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:6:::1;43364:231;43385:12;:19;43381:1;:23;43364:231;;;43449:13;;;;;;;;;;;43430:32;;:12;43443:1;43430:15;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:79;;;;;43493:15;;;;;;;;;;;43466:43;;:12;43479:1;43466:15;;;;;;;;:::i;:::-;;;;;;;;:43;;;;43430:79;43426:158;;;43564:4;43530:14;:31;43545:12;43558:1;43545:15;;;;;;;;:::i;:::-;;;;;;;;43530:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;43426:158;43406:3;;;;;:::i;:::-;;;;43364:231;;;;43281:321:::0;:::o;36140:27::-;;;;:::o;43829:105::-;43882:4;43906:14;:20;43921:4;43906:20;;;;;;;;;;;;;;;;;;;;;;;;;43899:27;;43829:105;;;:::o;51505:109::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51564:9:::1;;;;;;;;;;;51556:27;;:50;51584:21;51556:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51505:109::o:0;24970:108::-;25031:7;25058:12;;25051:19;;24970:108;:::o;40937:232::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41058:4:::1;41050;41046:1;41030:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;41029:33;;;;:::i;:::-;41019:6;:43;;41011:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;41157:4;41148:6;:13;;;;:::i;:::-;41125:20;:36;;;;40937:232:::0;:::o;26982:295::-;27113:4;27130:15;27148:12;:10;:12::i;:::-;27130:30;;27171:38;27187:4;27193:7;27202:6;27171:15;:38::i;:::-;27220:27;27230:4;27236:2;27240:6;27220:9;:27::i;:::-;27265:4;27258:11;;;26982:295;;;;;:::o;24812:93::-;24870:5;24895:2;24888:9;;24812:93;:::o;27686:240::-;27774:4;27791:13;27807:12;:10;:12::i;:::-;27791:28;;27830:66;27839:5;27846:7;27885:10;27855:11;:18;27867:5;27855:18;;;;;;;;;;;;;;;:27;27874:7;27855:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;27830:8;:66::i;:::-;27914:4;27907:11;;;27686:240;;;;:::o;35199:33::-;;;;;;;;;;;;;:::o;43144:125::-;43209:4;43233:19;:28;43253:7;43233:28;;;;;;;;;;;;;;;;;;;;;;;;;43226:35;;43144:125;;;:::o;39319:506::-;39415:16;39454:19;:33;39474:12;:10;:12::i;:::-;39454:33;;;;;;;;;;;;;;;;;;;;;;;;;39446:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39577:7;;:14;;39556:10;;:17;;:35;39548:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39649:169;39666:10;;:17;;39655:8;:28;39649:169;;;39699:79;39715:12;:10;:12::i;:::-;39729:10;;39740:8;39729:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39771:6;39751:7;;39759:8;39751:17;;;;;;;:::i;:::-;;;;;;;;:26;;;;:::i;:::-;39699:15;:79::i;:::-;39805:1;39793:13;;;;;:::i;:::-;;;39649:169;;;39404:421;39319:506;;;;:::o;25141:127::-;25215:7;25242:9;:18;25252:7;25242:18;;;;;;;;;;;;;;;;25235:25;;25141:127;;;:::o;9385:103::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9450:30:::1;9477:1;9450:18;:30::i;:::-;9385:103::o:0;40147:121::-;40199:4;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40233:5:::1;40216:14;;:22;;;;;;;;;;;;;;;;;;40256:4;40249:11;;40147:121:::0;:::o;41400:144::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41532:4:::1;41490:31;:39;41522:6;41490:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41400:144:::0;;:::o;41556:370::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41688:12:::1;41669:16;:31;;;;41730:12;41711:16;:31;;;;41766:6;41753:10;:19;;;;41836:10;;41817:16;;41798;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41783:12;:63;;;;41881:3;41865:12;;:19;;41857:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41556:370:::0;;;:::o;39879:212::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39947:12:::1;39934:10;:25;;;;40000:4;39985:12;:19;;;;:::i;:::-;39970:12;:34;;;;40079:4;40063:13;;:20;;;;;;;;;;;;;;;;;;39879:212::o:0;8734:87::-;8780:7;8807:6;;;;;;;;;;;8800:13;;8734:87;:::o;35545:33::-;;;;:::o;24069:104::-;24125:13;24158:7;24151:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24069:104;:::o;42510:244::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42617:13:::1;;;;;;;;;;;42609:21;;:4;:21;;::::0;42601:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42705:41;42734:4;42740:5;42705:28;:41::i;:::-;42510:244:::0;;:::o;28429:438::-;28522:4;28539:13;28555:12;:10;:12::i;:::-;28539:28;;28578:24;28605:11;:18;28617:5;28605:18;;;;;;;;;;;;;;;:27;28624:7;28605:27;;;;;;;;;;;;;;;;28578:54;;28671:15;28651:16;:35;;28643:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28764:60;28773:5;28780:7;28808:15;28789:16;:34;28764:8;:60::i;:::-;28855:4;28848:11;;;;28429:438;;;;:::o;25474:193::-;25553:4;25570:13;25586:12;:10;:12::i;:::-;25570:28;;25609;25619:5;25626:2;25630:6;25609:9;:28::i;:::-;25655:4;25648:11;;;25474:193;;;;:::o;35511:27::-;;;;:::o;35239:33::-;;;;;;;;;;;;;:::o;42320:182::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42436:8:::1;42405:19;:28;42425:7;42405:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42476:7;42460:34;;;42485:8;42460:34;;;;;;:::i;:::-;;;;;;;;42320:182:::0;;:::o;41934:378::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42068:12:::1;42048:17;:32;;;;42111:12;42091:17;:32;;;;42148:6;42134:11;:20;;;;42221:11;;42201:17;;42181;;:37;;;;:::i;:::-;:51;;;;:::i;:::-;42165:13;:67;;;;42267:3;42251:12;;:19;;42243:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41934:378:::0;;;:::o;41177:211::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41299:4:::1;41293;41289:1;41273:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;41272:31;;;;:::i;:::-;41262:6;:41;;41254:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;41376:4;41367:6;:13;;;;:::i;:::-;41355:9;:25;;;;41177:211:::0;:::o;43614:203::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43702:6:::1;43697:113;43718:12;:19;43714:1;:23;43697:113;;;43793:5;43759:14;:31;43774:12;43787:1;43774:15;;;;;;;;:::i;:::-;;;;;;;;43759:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43739:3;;;;;:::i;:::-;;;;43697:113;;;;43614:203:::0;:::o;35463:39::-;;;;;;;;;;;;;:::o;35076:35::-;;;;:::o;35585:28::-;;;;:::o;40543:382::-;40624:4;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40681:6:::1;40677:1;40661:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;40648:9;:39;;40640:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;40796:4;40792:1;40776:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;40763:9;:37;;40755:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;40888:9;40867:18;:30;;;;40914:4;40907:11;;40543:382:::0;;;:::o;25730:151::-;25819:7;25846:11;:18;25858:5;25846:18;;;;;;;;;;;;;;;:27;25865:7;25846:27;;;;;;;;;;;;;;;;25839:34;;25730:151;;;;:::o;51254:243::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51305:40:::1;51323:21;51305:17;:40::i;:::-;51364:15;;;;;;;;;;;51356:33;;:63;51390:28;51416:1;51390:21;:25;;:28;;;;:::i;:::-;51356:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51438:9;;;;;;;;;;;51430:27;;:57;51458:28;51484:1;51458:21;:25;;:28;;;;:::i;:::-;51430:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51254:243::o:0;35118:33::-;;;;:::o;36108:25::-;;;;:::o;40333:135::-;40393:4;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40433:5:::1;40410:20;;:28;;;;;;;;;;;;;;;;;;40456:4;40449:11;;40333:135:::0;:::o;42962:174::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43079:16:::1;43061:15;;:34;;;;;;;;;;;;;;;;;;43118:10;43106:9;;:22;;;;;;;;;;;;;;;;;;42962:174:::0;;:::o;9643:201::-;8965:12;:10;:12::i;:::-;8954:23;;:7;:5;:7::i;:::-;:23;;;8946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9752:1:::1;9732:22;;:8;:22;;::::0;9724:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9808:28;9827:8;9808:18;:28::i;:::-;9643:201:::0;:::o;35158:24::-;;;;:::o;614:98::-;667:7;694:10;687:17;;614:98;:::o;32065:380::-;32218:1;32201:19;;:5;:19;;;32193:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32299:1;32280:21;;:7;:21;;;32272:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32383:6;32353:11;:18;32365:5;32353:18;;;;;;;;;;;;;;;:27;32372:7;32353:27;;;;;;;;;;;;;;;:36;;;;32421:7;32405:32;;32414:5;32405:32;;;32430:6;32405:32;;;;;;:::i;:::-;;;;;;;;32065:380;;;:::o;32732:453::-;32867:24;32894:25;32904:5;32911:7;32894:9;:25::i;:::-;32867:52;;32954:17;32934:16;:37;32930:248;;33016:6;32996:16;:26;;32988:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33100:51;33109:5;33116:7;33144:6;33125:16;:25;33100:8;:51::i;:::-;32930:248;32856:329;32732:453;;;:::o;43942:4632::-;44090:1;44074:18;;:4;:18;;;44066:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44167:1;44153:16;;:2;:16;;;44145:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44229:14;:20;44244:4;44229:20;;;;;;;;;;;;;;;;;;;;;;;;;44228:21;44220:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;44367:1;44357:6;:11;44353:93;;44385:28;44401:4;44407:2;44411:1;44385:15;:28::i;:::-;44428:7;;44353:93;44470:14;;;;;;;;;;;44466:1838;;;44531:7;:5;:7::i;:::-;44523:15;;:4;:15;;;;:49;;;;;44565:7;:5;:7::i;:::-;44559:13;;:2;:13;;;;44523:49;:86;;;;;44607:1;44593:16;;:2;:16;;;;44523:86;:128;;;;;44644:6;44630:21;;:2;:21;;;;44523:128;:159;;;;;44673:9;;;;;;;;;;;44672:10;44523:159;44501:1792;;;44722:13;;;;;;;;;;;44717:150;;44768:19;:25;44788:4;44768:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44797:19;:23;44817:2;44797:23;;;;;;;;;;;;;;;;;;;;;;;;;44768:52;44760:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44717:150;45025:20;;;;;;;;;;;45021:423;;;45079:7;:5;:7::i;:::-;45073:13;;:2;:13;;;;:47;;;;;45104:15;;;;;;;;;;;45090:30;;:2;:30;;;;45073:47;:79;;;;;45138:13;;;;;;;;;;;45124:28;;:2;:28;;;;45073:79;45069:356;;;45230:12;45188:28;:39;45217:9;45188:39;;;;;;;;;;;;;;;;:54;45180:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45389:12;45347:28;:39;45376:9;45347:39;;;;;;;;;;;;;;;:54;;;;45069:356;45021:423;45514:25;:31;45540:4;45514:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;45550:31;:35;45582:2;45550:35;;;;;;;;;;;;;;;;;;;;;;;;;45549:36;45514:71;45510:768;;;45628:20;;45618:6;:30;;45610:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;45763:9;;45746:13;45756:2;45746:9;:13::i;:::-;45737:6;:22;;;;:::i;:::-;:35;;45729:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45510:768;;;45891:25;:29;45917:2;45891:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;45925:31;:37;45957:4;45925:37;;;;;;;;;;;;;;;;;;;;;;;;;45924:38;45891:71;45887:391;;;46005:20;;45995:6;:30;;45987:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45887:391;;;46132:31;:35;46164:2;46132:35;;;;;;;;;;;;;;;;;;;;;;;;;46127:151;;46225:9;;46208:13;46218:2;46208:9;:13::i;:::-;46199:6;:22;;;;:::i;:::-;:35;;46191:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46127:151;45887:391;45510:768;44501:1792;44466:1838;46318:28;46349:24;46367:4;46349:9;:24::i;:::-;46318:55;;46384:12;46423:18;;46399:20;:42;;46384:57;;46470:7;:34;;;;;46495:9;;;;;;;;;;;46494:10;46470:34;:83;;;;;46522:25;:31;46548:4;46522:31;;;;;;;;;;;;;;;;;;;;;;;;;46521:32;46470:83;:126;;;;;46571:19;:25;46591:4;46571:25;;;;;;;;;;;;;;;;;;;;;;;;;46570:26;46470:126;:167;;;;;46614:19;:23;46634:2;46614:23;;;;;;;;;;;;;;;;;;;;;;;;;46613:24;46470:167;46452:297;;;46676:4;46664:9;;:16;;;;;;;;;;;;;;;;;;46695:10;:8;:10::i;:::-;46732:5;46720:9;;:17;;;;;;;;;;;;;;;;;;46452:297;46761:12;46777:9;;;;;;;;;;;46776:10;46761:25;;46888:19;:25;46908:4;46888:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46917:19;:23;46937:2;46917:23;;;;;;;;;;;;;;;;;;;;;;;;;46888:52;46884:100;;;46967:5;46957:15;;46884:100;47004:12;47109:7;47105:1416;;;47176:25;:31;47202:4;47176:31;;;;;;;;;;;;;;;;;;;;;;;;;47172:1182;;;47235:34;47264:4;47235:24;47246:12;;47235:6;:10;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;47228:41;;47337:12;;47318:16;;47311:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;47288:19;;:61;;;;;;;:::i;:::-;;;;;;;;47405:12;;47392:10;;47385:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;47368:13;;:49;;;;;;;:::i;:::-;;;;;;;;47485:12;;47466:16;;47459:4;:23;;;;:::i;:::-;:38;;;;:::i;:::-;47436:19;;:61;;;;;;;:::i;:::-;;;;;;;;47172:1182;;;47588:25;:29;47614:2;47588:29;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;47637:12;;47621;:28;;47588:61;47584:770;;;47677:40;47712:4;47677:30;47688:18;;47677:6;:10;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;47670:47;;47791:18;;47766:22;;47759:4;:29;;;;:::i;:::-;:50;;;;:::i;:::-;47736:19;;:73;;;;;;;:::i;:::-;;;;;;;;47871:18;;47852:16;;47845:4;:23;;;;:::i;:::-;:44;;;;:::i;:::-;47828:13;;:61;;;;;;;:::i;:::-;;;;;;;;47963:18;;47938:22;;47931:4;:29;;;;:::i;:::-;:50;;;;:::i;:::-;47908:19;;:73;;;;;;;:::i;:::-;;;;;;;;47584:770;;;48069:35;48099:4;48069:25;48080:13;;48069:6;:10;;:25;;;;:::i;:::-;:29;;:35;;;;:::i;:::-;48062:42;;48173:13;;48153:17;;48146:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;48123:19;;:63;;;;;;;:::i;:::-;;;;;;;;48243:13;;48229:11;;48222:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;48205:13;;:51;;;;;;;:::i;:::-;;;;;;;;48325:13;;48305:17;;48298:4;:24;;;;:::i;:::-;:40;;;;:::i;:::-;48275:19;;:63;;;;;;;:::i;:::-;;;;;;;;47584:770;47172:1182;48393:1;48386:4;:8;48382:91;;;48415:42;48431:4;48445;48452;48415:15;:42::i;:::-;48382:91;48505:4;48495:14;;;;;:::i;:::-;;;47105:1416;48533:33;48549:4;48555:2;48559:6;48533:15;:33::i;:::-;44055:4519;;;;43942:4632;;;;:::o;29346:671::-;29493:1;29477:18;;:4;:18;;;29469:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29570:1;29556:16;;:2;:16;;;29548:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29625:38;29646:4;29652:2;29656:6;29625:20;:38::i;:::-;29676:19;29698:9;:15;29708:4;29698:15;;;;;;;;;;;;;;;;29676:37;;29747:6;29732:11;:21;;29724:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;29864:6;29850:11;:20;29832:9;:15;29842:4;29832:15;;;;;;;;;;;;;;;:38;;;;29909:6;29892:9;:13;29902:2;29892:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;29948:2;29933:26;;29942:4;29933:26;;;29952:6;29933:26;;;;;;:::i;:::-;;;;;;;;29972:37;29992:4;29998:2;30002:6;29972:19;:37::i;:::-;29458:559;29346:671;;;:::o;10004:191::-;10078:16;10097:6;;;;;;;;;;;10078:25;;10123:8;10114:6;;:17;;;;;;;;;;;;;;;;;;10178:8;10147:40;;10168:8;10147:40;;;;;;;;;;;;10067:128;10004:191;:::o;42762:188::-;42879:5;42845:25;:31;42871:4;42845:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42936:5;42902:40;;42930:4;42902:40;;;;;;;;;;;;42762:188;;:::o;48582:590::-;48709:21;48747:1;48733:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48709:40;;48778:4;48760;48765:1;48760:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48804:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48794:4;48799:1;48794:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48839:62;48856:4;48871:15;;;;;;;;;;;48889:11;48839:8;:62::i;:::-;48940:15;;;;;;;;;;;:66;;;49021:11;49047:1;49091:4;49118;49138:15;48940:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48638:534;48582:590;:::o;4703:98::-;4761:7;4792:1;4788;:5;;;;:::i;:::-;4781:12;;4703:98;;;;:::o;49706:1540::-;49745:23;49771:24;49789:4;49771:9;:24::i;:::-;49745:50;;49806:25;49878:13;;49856:19;;49834;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;49806:85;;49935:1;49916:15;:20;:46;;;;49961:1;49940:17;:22;49916:46;49912:59;;;49964:7;;;;49912:59;50003:18;;49985:15;:36;49981:103;;;50054:18;;50036:36;;49981:103;50153:23;50239:1;50219:17;50197:19;;50179:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;50153:87;;50251:26;50280:36;50300:15;50280;:19;;:36;;;;:::i;:::-;50251:65;;50337:25;50365:21;50337:49;;50399:37;50417:18;50399:17;:37::i;:::-;50458:18;50479:44;50505:17;50479:21;:25;;:44;;;;:::i;:::-;50458:65;;50534:23;50560:58;50600:17;50560:35;50575:19;;50560:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;50534:84;;50629:17;50649:52;50683:17;50649:29;50664:13;;50649:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;50629:72;;50712:23;50769:9;50751:15;50738:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;50712:66;;50821:1;50799:19;:23;;;;50855:1;50833:19;:23;;;;50883:1;50867:13;:17;;;;50905:15;;;;;;;;;;;50897:33;;:50;50931:15;50897:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50966:9;;;;;;;;;;;50958:27;;:38;50986:9;50958:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51047:1;51029:15;:19;:42;;;;;51070:1;51052:15;:19;51029:42;51025:214;;;51088:47;51102:15;51119;51088:13;:47::i;:::-;51155:72;51170:18;51190:15;51207:19;;51155:72;;;;;;;;:::i;:::-;;;;;;;;51025:214;49734:1512;;;;;;;;;49706:1540;:::o;4304:98::-;4362:7;4393:1;4389;:5;;;;:::i;:::-;4382:12;;4304:98;;;;:::o;33785:125::-;;;;:::o;34514:124::-;;;;:::o;3947:98::-;4005:7;4036:1;4032;:5;;;;:::i;:::-;4025:12;;3947:98;;;;:::o;49184:514::-;49333:62;49350:4;49365:15;;;;;;;;;;;49383:11;49333:8;:62::i;:::-;49438:15;;;;;;;;;;;:31;;;49477:9;49510:4;49530:11;49556:1;49599;49642:7;:5;:7::i;:::-;49664:15;49438:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49184:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:117::-;3603:1;3600;3593:12;3617:180;3665:77;3662:1;3655:88;3762:4;3759:1;3752:15;3786:4;3783:1;3776:15;3803:281;3886:27;3908:4;3886:27;:::i;:::-;3878:6;3874:40;4016:6;4004:10;4001:22;3980:18;3968:10;3965:34;3962:62;3959:88;;;4027:18;;:::i;:::-;3959:88;4067:10;4063:2;4056:22;3846:238;3803:281;;:::o;4090:129::-;4124:6;4151:20;;:::i;:::-;4141:30;;4180:33;4208:4;4200:6;4180:33;:::i;:::-;4090:129;;;:::o;4225:311::-;4302:4;4392:18;4384:6;4381:30;4378:56;;;4414:18;;:::i;:::-;4378:56;4464:4;4456:6;4452:17;4444:25;;4524:4;4518;4514:15;4506:23;;4225:311;;;:::o;4542:117::-;4651:1;4648;4641:12;4682:710;4778:5;4803:81;4819:64;4876:6;4819:64;:::i;:::-;4803:81;:::i;:::-;4794:90;;4904:5;4933:6;4926:5;4919:21;4967:4;4960:5;4956:16;4949:23;;5020:4;5012:6;5008:17;5000:6;4996:30;5049:3;5041:6;5038:15;5035:122;;;5068:79;;:::i;:::-;5035:122;5183:6;5166:220;5200:6;5195:3;5192:15;5166:220;;;5275:3;5304:37;5337:3;5325:10;5304:37;:::i;:::-;5299:3;5292:50;5371:4;5366:3;5362:14;5355:21;;5242:144;5226:4;5221:3;5217:14;5210:21;;5166:220;;;5170:21;4784:608;;4682:710;;;;;:::o;5415:370::-;5486:5;5535:3;5528:4;5520:6;5516:17;5512:27;5502:122;;5543:79;;:::i;:::-;5502:122;5660:6;5647:20;5685:94;5775:3;5767:6;5760:4;5752:6;5748:17;5685:94;:::i;:::-;5676:103;;5492:293;5415:370;;;;:::o;5791:539::-;5875:6;5924:2;5912:9;5903:7;5899:23;5895:32;5892:119;;;5930:79;;:::i;:::-;5892:119;6078:1;6067:9;6063:17;6050:31;6108:18;6100:6;6097:30;6094:117;;;6130:79;;:::i;:::-;6094:117;6235:78;6305:7;6296:6;6285:9;6281:22;6235:78;:::i;:::-;6225:88;;6021:302;5791:539;;;;:::o;6336:118::-;6423:24;6441:5;6423:24;:::i;:::-;6418:3;6411:37;6336:118;;:::o;6460:222::-;6553:4;6591:2;6580:9;6576:18;6568:26;;6604:71;6672:1;6661:9;6657:17;6648:6;6604:71;:::i;:::-;6460:222;;;;:::o;6688:329::-;6747:6;6796:2;6784:9;6775:7;6771:23;6767:32;6764:119;;;6802:79;;:::i;:::-;6764:119;6922:1;6947:53;6992:7;6983:6;6972:9;6968:22;6947:53;:::i;:::-;6937:63;;6893:117;6688:329;;;;:::o;7023:::-;7082:6;7131:2;7119:9;7110:7;7106:23;7102:32;7099:119;;;7137:79;;:::i;:::-;7099:119;7257:1;7282:53;7327:7;7318:6;7307:9;7303:22;7282:53;:::i;:::-;7272:63;;7228:117;7023:329;;;;:::o;7358:619::-;7435:6;7443;7451;7500:2;7488:9;7479:7;7475:23;7471:32;7468:119;;;7506:79;;:::i;:::-;7468:119;7626:1;7651:53;7696:7;7687:6;7676:9;7672:22;7651:53;:::i;:::-;7641:63;;7597:117;7753:2;7779:53;7824:7;7815:6;7804:9;7800:22;7779:53;:::i;:::-;7769:63;;7724:118;7881:2;7907:53;7952:7;7943:6;7932:9;7928:22;7907:53;:::i;:::-;7897:63;;7852:118;7358:619;;;;;:::o;7983:86::-;8018:7;8058:4;8051:5;8047:16;8036:27;;7983:86;;;:::o;8075:112::-;8158:22;8174:5;8158:22;:::i;:::-;8153:3;8146:35;8075:112;;:::o;8193:214::-;8282:4;8320:2;8309:9;8305:18;8297:26;;8333:67;8397:1;8386:9;8382:17;8373:6;8333:67;:::i;:::-;8193:214;;;;:::o;8413:117::-;8522:1;8519;8512:12;8553:568;8626:8;8636:6;8686:3;8679:4;8671:6;8667:17;8663:27;8653:122;;8694:79;;:::i;:::-;8653:122;8807:6;8794:20;8784:30;;8837:18;8829:6;8826:30;8823:117;;;8859:79;;:::i;:::-;8823:117;8973:4;8965:6;8961:17;8949:29;;9027:3;9019:4;9011:6;9007:17;8997:8;8993:32;8990:41;8987:128;;;9034:79;;:::i;:::-;8987:128;8553:568;;;;;:::o;9144:::-;9217:8;9227:6;9277:3;9270:4;9262:6;9258:17;9254:27;9244:122;;9285:79;;:::i;:::-;9244:122;9398:6;9385:20;9375:30;;9428:18;9420:6;9417:30;9414:117;;;9450:79;;:::i;:::-;9414:117;9564:4;9556:6;9552:17;9540:29;;9618:3;9610:4;9602:6;9598:17;9588:8;9584:32;9581:41;9578:128;;;9625:79;;:::i;:::-;9578:128;9144:568;;;;;:::o;9718:934::-;9840:6;9848;9856;9864;9913:2;9901:9;9892:7;9888:23;9884:32;9881:119;;;9919:79;;:::i;:::-;9881:119;10067:1;10056:9;10052:17;10039:31;10097:18;10089:6;10086:30;10083:117;;;10119:79;;:::i;:::-;10083:117;10232:80;10304:7;10295:6;10284:9;10280:22;10232:80;:::i;:::-;10214:98;;;;10010:312;10389:2;10378:9;10374:18;10361:32;10420:18;10412:6;10409:30;10406:117;;;10442:79;;:::i;:::-;10406:117;10555:80;10627:7;10618:6;10607:9;10603:22;10555:80;:::i;:::-;10537:98;;;;10332:313;9718:934;;;;;;;:::o;10658:116::-;10728:21;10743:5;10728:21;:::i;:::-;10721:5;10718:32;10708:60;;10764:1;10761;10754:12;10708:60;10658:116;:::o;10780:133::-;10823:5;10861:6;10848:20;10839:29;;10877:30;10901:5;10877:30;:::i;:::-;10780:133;;;;:::o;10919:468::-;10984:6;10992;11041:2;11029:9;11020:7;11016:23;11012:32;11009:119;;;11047:79;;:::i;:::-;11009:119;11167:1;11192:53;11237:7;11228:6;11217:9;11213:22;11192:53;:::i;:::-;11182:63;;11138:117;11294:2;11320:50;11362:7;11353:6;11342:9;11338:22;11320:50;:::i;:::-;11310:60;;11265:115;10919:468;;;;;:::o;11393:619::-;11470:6;11478;11486;11535:2;11523:9;11514:7;11510:23;11506:32;11503:119;;;11541:79;;:::i;:::-;11503:119;11661:1;11686:53;11731:7;11722:6;11711:9;11707:22;11686:53;:::i;:::-;11676:63;;11632:117;11788:2;11814:53;11859:7;11850:6;11839:9;11835:22;11814:53;:::i;:::-;11804:63;;11759:118;11916:2;11942:53;11987:7;11978:6;11967:9;11963:22;11942:53;:::i;:::-;11932:63;;11887:118;11393:619;;;;;:::o;12018:118::-;12105:24;12123:5;12105:24;:::i;:::-;12100:3;12093:37;12018:118;;:::o;12142:222::-;12235:4;12273:2;12262:9;12258:18;12250:26;;12286:71;12354:1;12343:9;12339:17;12330:6;12286:71;:::i;:::-;12142:222;;;;:::o;12370:474::-;12438:6;12446;12495:2;12483:9;12474:7;12470:23;12466:32;12463:119;;;12501:79;;:::i;:::-;12463:119;12621:1;12646:53;12691:7;12682:6;12671:9;12667:22;12646:53;:::i;:::-;12636:63;;12592:117;12748:2;12774:53;12819:7;12810:6;12799:9;12795:22;12774:53;:::i;:::-;12764:63;;12719:118;12370:474;;;;;:::o;12850:180::-;12898:77;12895:1;12888:88;12995:4;12992:1;12985:15;13019:4;13016:1;13009:15;13036:320;13080:6;13117:1;13111:4;13107:12;13097:22;;13164:1;13158:4;13154:12;13185:18;13175:81;;13241:4;13233:6;13229:17;13219:27;;13175:81;13303:2;13295:6;13292:14;13272:18;13269:38;13266:84;;13322:18;;:::i;:::-;13266:84;13087:269;13036:320;;;:::o;13362:182::-;13502:34;13498:1;13490:6;13486:14;13479:58;13362:182;:::o;13550:366::-;13692:3;13713:67;13777:2;13772:3;13713:67;:::i;:::-;13706:74;;13789:93;13878:3;13789:93;:::i;:::-;13907:2;13902:3;13898:12;13891:19;;13550:366;;;:::o;13922:419::-;14088:4;14126:2;14115:9;14111:18;14103:26;;14175:9;14169:4;14165:20;14161:1;14150:9;14146:17;14139:47;14203:131;14329:4;14203:131;:::i;:::-;14195:139;;13922:419;;;:::o;14347:180::-;14395:77;14392:1;14385:88;14492:4;14489:1;14482:15;14516:4;14513:1;14506:15;14533:180;14581:77;14578:1;14571:88;14678:4;14675:1;14668:15;14702:4;14699:1;14692:15;14719:233;14758:3;14781:24;14799:5;14781:24;:::i;:::-;14772:33;;14827:66;14820:5;14817:77;14814:103;;14897:18;;:::i;:::-;14814:103;14944:1;14937:5;14933:13;14926:20;;14719:233;;;:::o;14958:348::-;14998:7;15021:20;15039:1;15021:20;:::i;:::-;15016:25;;15055:20;15073:1;15055:20;:::i;:::-;15050:25;;15243:1;15175:66;15171:74;15168:1;15165:81;15160:1;15153:9;15146:17;15142:105;15139:131;;;15250:18;;:::i;:::-;15139:131;15298:1;15295;15291:9;15280:20;;14958:348;;;;:::o;15312:180::-;15360:77;15357:1;15350:88;15457:4;15454:1;15447:15;15481:4;15478:1;15471:15;15498:185;15538:1;15555:20;15573:1;15555:20;:::i;:::-;15550:25;;15589:20;15607:1;15589:20;:::i;:::-;15584:25;;15628:1;15618:35;;15633:18;;:::i;:::-;15618:35;15675:1;15672;15668:9;15663:14;;15498:185;;;;:::o;15689:234::-;15829:34;15825:1;15817:6;15813:14;15806:58;15898:17;15893:2;15885:6;15881:15;15874:42;15689:234;:::o;15929:366::-;16071:3;16092:67;16156:2;16151:3;16092:67;:::i;:::-;16085:74;;16168:93;16257:3;16168:93;:::i;:::-;16286:2;16281:3;16277:12;16270:19;;15929:366;;;:::o;16301:419::-;16467:4;16505:2;16494:9;16490:18;16482:26;;16554:9;16548:4;16544:20;16540:1;16529:9;16525:17;16518:47;16582:131;16708:4;16582:131;:::i;:::-;16574:139;;16301:419;;;:::o;16726:305::-;16766:3;16785:20;16803:1;16785:20;:::i;:::-;16780:25;;16819:20;16837:1;16819:20;:::i;:::-;16814:25;;16973:1;16905:66;16901:74;16898:1;16895:81;16892:107;;;16979:18;;:::i;:::-;16892:107;17023:1;17020;17016:9;17009:16;;16726:305;;;;:::o;17037:232::-;17177:34;17173:1;17165:6;17161:14;17154:58;17246:15;17241:2;17233:6;17229:15;17222:40;17037:232;:::o;17275:366::-;17417:3;17438:67;17502:2;17497:3;17438:67;:::i;:::-;17431:74;;17514:93;17603:3;17514:93;:::i;:::-;17632:2;17627:3;17623:12;17616:19;;17275:366;;;:::o;17647:419::-;17813:4;17851:2;17840:9;17836:18;17828:26;;17900:9;17894:4;17890:20;17886:1;17875:9;17871:17;17864:47;17928:131;18054:4;17928:131;:::i;:::-;17920:139;;17647:419;;;:::o;18072:229::-;18212:34;18208:1;18200:6;18196:14;18189:58;18281:12;18276:2;18268:6;18264:15;18257:37;18072:229;:::o;18307:366::-;18449:3;18470:67;18534:2;18529:3;18470:67;:::i;:::-;18463:74;;18546:93;18635:3;18546:93;:::i;:::-;18664:2;18659:3;18655:12;18648:19;;18307:366;;;:::o;18679:419::-;18845:4;18883:2;18872:9;18868:18;18860:26;;18932:9;18926:4;18922:20;18918:1;18907:9;18903:17;18896:47;18960:131;19086:4;18960:131;:::i;:::-;18952:139;;18679:419;;;:::o;19104:179::-;19244:31;19240:1;19232:6;19228:14;19221:55;19104:179;:::o;19289:366::-;19431:3;19452:67;19516:2;19511:3;19452:67;:::i;:::-;19445:74;;19528:93;19617:3;19528:93;:::i;:::-;19646:2;19641:3;19637:12;19630:19;;19289:366;;;:::o;19661:419::-;19827:4;19865:2;19854:9;19850:18;19842:26;;19914:9;19908:4;19904:20;19900:1;19889:9;19885:17;19878:47;19942:131;20068:4;19942:131;:::i;:::-;19934:139;;19661:419;;;:::o;20086:244::-;20226:34;20222:1;20214:6;20210:14;20203:58;20295:27;20290:2;20282:6;20278:15;20271:52;20086:244;:::o;20336:366::-;20478:3;20499:67;20563:2;20558:3;20499:67;:::i;:::-;20492:74;;20575:93;20664:3;20575:93;:::i;:::-;20693:2;20688:3;20684:12;20677:19;;20336:366;;;:::o;20708:419::-;20874:4;20912:2;20901:9;20897:18;20889:26;;20961:9;20955:4;20951:20;20947:1;20936:9;20932:17;20925:47;20989:131;21115:4;20989:131;:::i;:::-;20981:139;;20708:419;;;:::o;21133:224::-;21273:34;21269:1;21261:6;21257:14;21250:58;21342:7;21337:2;21329:6;21325:15;21318:32;21133:224;:::o;21363:366::-;21505:3;21526:67;21590:2;21585:3;21526:67;:::i;:::-;21519:74;;21602:93;21691:3;21602:93;:::i;:::-;21720:2;21715:3;21711:12;21704:19;;21363:366;;;:::o;21735:419::-;21901:4;21939:2;21928:9;21924:18;21916:26;;21988:9;21982:4;21978:20;21974:1;21963:9;21959:17;21952:47;22016:131;22142:4;22016:131;:::i;:::-;22008:139;;21735:419;;;:::o;22160:223::-;22300:34;22296:1;22288:6;22284:14;22277:58;22369:6;22364:2;22356:6;22352:15;22345:31;22160:223;:::o;22389:366::-;22531:3;22552:67;22616:2;22611:3;22552:67;:::i;:::-;22545:74;;22628:93;22717:3;22628:93;:::i;:::-;22746:2;22741:3;22737:12;22730:19;;22389:366;;;:::o;22761:419::-;22927:4;22965:2;22954:9;22950:18;22942:26;;23014:9;23008:4;23004:20;23000:1;22989:9;22985:17;22978:47;23042:131;23168:4;23042:131;:::i;:::-;23034:139;;22761:419;;;:::o;23186:240::-;23326:34;23322:1;23314:6;23310:14;23303:58;23395:23;23390:2;23382:6;23378:15;23371:48;23186:240;:::o;23432:366::-;23574:3;23595:67;23659:2;23654:3;23595:67;:::i;:::-;23588:74;;23671:93;23760:3;23671:93;:::i;:::-;23789:2;23784:3;23780:12;23773:19;;23432:366;;;:::o;23804:419::-;23970:4;24008:2;23997:9;23993:18;23985:26;;24057:9;24051:4;24047:20;24043:1;24032:9;24028:17;24021:47;24085:131;24211:4;24085:131;:::i;:::-;24077:139;;23804:419;;;:::o;24229:239::-;24369:34;24365:1;24357:6;24353:14;24346:58;24438:22;24433:2;24425:6;24421:15;24414:47;24229:239;:::o;24474:366::-;24616:3;24637:67;24701:2;24696:3;24637:67;:::i;:::-;24630:74;;24713:93;24802:3;24713:93;:::i;:::-;24831:2;24826:3;24822:12;24815:19;;24474:366;;;:::o;24846:419::-;25012:4;25050:2;25039:9;25035:18;25027:26;;25099:9;25093:4;25089:20;25085:1;25074:9;25070:17;25063:47;25127:131;25253:4;25127:131;:::i;:::-;25119:139;;24846:419;;;:::o;25271:225::-;25411:34;25407:1;25399:6;25395:14;25388:58;25480:8;25475:2;25467:6;25463:15;25456:33;25271:225;:::o;25502:366::-;25644:3;25665:67;25729:2;25724:3;25665:67;:::i;:::-;25658:74;;25741:93;25830:3;25741:93;:::i;:::-;25859:2;25854:3;25850:12;25843:19;;25502:366;;;:::o;25874:419::-;26040:4;26078:2;26067:9;26063:18;26055:26;;26127:9;26121:4;26117:20;26113:1;26102:9;26098:17;26091:47;26155:131;26281:4;26155:131;:::i;:::-;26147:139;;25874:419;;;:::o;26299:223::-;26439:34;26435:1;26427:6;26423:14;26416:58;26508:6;26503:2;26495:6;26491:15;26484:31;26299:223;:::o;26528:366::-;26670:3;26691:67;26755:2;26750:3;26691:67;:::i;:::-;26684:74;;26767:93;26856:3;26767:93;:::i;:::-;26885:2;26880:3;26876:12;26869:19;;26528:366;;;:::o;26900:419::-;27066:4;27104:2;27093:9;27089:18;27081:26;;27153:9;27147:4;27143:20;27139:1;27128:9;27124:17;27117:47;27181:131;27307:4;27181:131;:::i;:::-;27173:139;;26900:419;;;:::o;27325:221::-;27465:34;27461:1;27453:6;27449:14;27442:58;27534:4;27529:2;27521:6;27517:15;27510:29;27325:221;:::o;27552:366::-;27694:3;27715:67;27779:2;27774:3;27715:67;:::i;:::-;27708:74;;27791:93;27880:3;27791:93;:::i;:::-;27909:2;27904:3;27900:12;27893:19;;27552:366;;;:::o;27924:419::-;28090:4;28128:2;28117:9;28113:18;28105:26;;28177:9;28171:4;28167:20;28163:1;28152:9;28148:17;28141:47;28205:131;28331:4;28205:131;:::i;:::-;28197:139;;27924:419;;;:::o;28349:179::-;28489:31;28485:1;28477:6;28473:14;28466:55;28349:179;:::o;28534:366::-;28676:3;28697:67;28761:2;28756:3;28697:67;:::i;:::-;28690:74;;28773:93;28862:3;28773:93;:::i;:::-;28891:2;28886:3;28882:12;28875:19;;28534:366;;;:::o;28906:419::-;29072:4;29110:2;29099:9;29095:18;29087:26;;29159:9;29153:4;29149:20;29145:1;29134:9;29130:17;29123:47;29187:131;29313:4;29187:131;:::i;:::-;29179:139;;28906:419;;;:::o;29331:224::-;29471:34;29467:1;29459:6;29455:14;29448:58;29540:7;29535:2;29527:6;29523:15;29516:32;29331:224;:::o;29561:366::-;29703:3;29724:67;29788:2;29783:3;29724:67;:::i;:::-;29717:74;;29800:93;29889:3;29800:93;:::i;:::-;29918:2;29913:3;29909:12;29902:19;;29561:366;;;:::o;29933:419::-;30099:4;30137:2;30126:9;30122:18;30114:26;;30186:9;30180:4;30176:20;30172:1;30161:9;30157:17;30150:47;30214:131;30340:4;30214:131;:::i;:::-;30206:139;;29933:419;;;:::o;30358:222::-;30498:34;30494:1;30486:6;30482:14;30475:58;30567:5;30562:2;30554:6;30550:15;30543:30;30358:222;:::o;30586:366::-;30728:3;30749:67;30813:2;30808:3;30749:67;:::i;:::-;30742:74;;30825:93;30914:3;30825:93;:::i;:::-;30943:2;30938:3;30934:12;30927:19;;30586:366;;;:::o;30958:419::-;31124:4;31162:2;31151:9;31147:18;31139:26;;31211:9;31205:4;31201:20;31197:1;31186:9;31182:17;31175:47;31239:131;31365:4;31239:131;:::i;:::-;31231:139;;30958:419;;;:::o;31383:301::-;31523:34;31519:1;31511:6;31507:14;31500:58;31592:34;31587:2;31579:6;31575:15;31568:59;31661:15;31656:2;31648:6;31644:15;31637:40;31383:301;:::o;31690:366::-;31832:3;31853:67;31917:2;31912:3;31853:67;:::i;:::-;31846:74;;31929:93;32018:3;31929:93;:::i;:::-;32047:2;32042:3;32038:12;32031:19;;31690:366;;;:::o;32062:419::-;32228:4;32266:2;32255:9;32251:18;32243:26;;32315:9;32309:4;32305:20;32301:1;32290:9;32286:17;32279:47;32343:131;32469:4;32343:131;:::i;:::-;32335:139;;32062:419;;;:::o;32487:172::-;32627:24;32623:1;32615:6;32611:14;32604:48;32487:172;:::o;32665:366::-;32807:3;32828:67;32892:2;32887:3;32828:67;:::i;:::-;32821:74;;32904:93;32993:3;32904:93;:::i;:::-;33022:2;33017:3;33013:12;33006:19;;32665:366;;;:::o;33037:419::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:297::-;33602:34;33598:1;33590:6;33586:14;33579:58;33671:34;33666:2;33658:6;33654:15;33647:59;33740:11;33735:2;33727:6;33723:15;33716:36;33462:297;:::o;33765:366::-;33907:3;33928:67;33992:2;33987:3;33928:67;:::i;:::-;33921:74;;34004:93;34093:3;34004:93;:::i;:::-;34122:2;34117:3;34113:12;34106:19;;33765:366;;;:::o;34137:419::-;34303:4;34341:2;34330:9;34326:18;34318:26;;34390:9;34384:4;34380:20;34376:1;34365:9;34361:17;34354:47;34418:131;34544:4;34418:131;:::i;:::-;34410:139;;34137:419;;;:::o;34562:240::-;34702:34;34698:1;34690:6;34686:14;34679:58;34771:23;34766:2;34758:6;34754:15;34747:48;34562:240;:::o;34808:366::-;34950:3;34971:67;35035:2;35030:3;34971:67;:::i;:::-;34964:74;;35047:93;35136:3;35047:93;:::i;:::-;35165:2;35160:3;35156:12;35149:19;;34808:366;;;:::o;35180:419::-;35346:4;35384:2;35373:9;35369:18;35361:26;;35433:9;35427:4;35423:20;35419:1;35408:9;35404:17;35397:47;35461:131;35587:4;35461:131;:::i;:::-;35453:139;;35180:419;;;:::o;35605:169::-;35745:21;35741:1;35733:6;35729:14;35722:45;35605:169;:::o;35780:366::-;35922:3;35943:67;36007:2;36002:3;35943:67;:::i;:::-;35936:74;;36019:93;36108:3;36019:93;:::i;:::-;36137:2;36132:3;36128:12;36121:19;;35780:366;;;:::o;36152:419::-;36318:4;36356:2;36345:9;36341:18;36333:26;;36405:9;36399:4;36395:20;36391:1;36380:9;36376:17;36369:47;36433:131;36559:4;36433:131;:::i;:::-;36425:139;;36152:419;;;:::o;36577:241::-;36717:34;36713:1;36705:6;36701:14;36694:58;36786:24;36781:2;36773:6;36769:15;36762:49;36577:241;:::o;36824:366::-;36966:3;36987:67;37051:2;37046:3;36987:67;:::i;:::-;36980:74;;37063:93;37152:3;37063:93;:::i;:::-;37181:2;37176:3;37172:12;37165:19;;36824:366;;;:::o;37196:419::-;37362:4;37400:2;37389:9;37385:18;37377:26;;37449:9;37443:4;37439:20;37435:1;37424:9;37420:17;37413:47;37477:131;37603:4;37477:131;:::i;:::-;37469:139;;37196:419;;;:::o;37621:191::-;37661:4;37681:20;37699:1;37681:20;:::i;:::-;37676:25;;37715:20;37733:1;37715:20;:::i;:::-;37710:25;;37754:1;37751;37748:8;37745:34;;;37759:18;;:::i;:::-;37745:34;37804:1;37801;37797:9;37789:17;;37621:191;;;;:::o;37818:225::-;37958:34;37954:1;37946:6;37942:14;37935:58;38027:8;38022:2;38014:6;38010:15;38003:33;37818:225;:::o;38049:366::-;38191:3;38212:67;38276:2;38271:3;38212:67;:::i;:::-;38205:74;;38288:93;38377:3;38288:93;:::i;:::-;38406:2;38401:3;38397:12;38390:19;;38049:366;;;:::o;38421:419::-;38587:4;38625:2;38614:9;38610:18;38602:26;;38674:9;38668:4;38664:20;38660:1;38649:9;38645:17;38638:47;38702:131;38828:4;38702:131;:::i;:::-;38694:139;;38421:419;;;:::o;38846:143::-;38903:5;38934:6;38928:13;38919:22;;38950:33;38977:5;38950:33;:::i;:::-;38846:143;;;;:::o;38995:351::-;39065:6;39114:2;39102:9;39093:7;39089:23;39085:32;39082:119;;;39120:79;;:::i;:::-;39082:119;39240:1;39265:64;39321:7;39312:6;39301:9;39297:22;39265:64;:::i;:::-;39255:74;;39211:128;38995:351;;;;:::o;39352:85::-;39397:7;39426:5;39415:16;;39352:85;;;:::o;39443:60::-;39471:3;39492:5;39485:12;;39443:60;;;:::o;39509:158::-;39567:9;39600:61;39618:42;39627:32;39653:5;39627:32;:::i;:::-;39618:42;:::i;:::-;39600:61;:::i;:::-;39587:74;;39509:158;;;:::o;39673:147::-;39768:45;39807:5;39768:45;:::i;:::-;39763:3;39756:58;39673:147;;:::o;39826:114::-;39893:6;39927:5;39921:12;39911:22;;39826:114;;;:::o;39946:184::-;40045:11;40079:6;40074:3;40067:19;40119:4;40114:3;40110:14;40095:29;;39946:184;;;;:::o;40136:132::-;40203:4;40226:3;40218:11;;40256:4;40251:3;40247:14;40239:22;;40136:132;;;:::o;40274:108::-;40351:24;40369:5;40351:24;:::i;:::-;40346:3;40339:37;40274:108;;:::o;40388:179::-;40457:10;40478:46;40520:3;40512:6;40478:46;:::i;:::-;40556:4;40551:3;40547:14;40533:28;;40388:179;;;;:::o;40573:113::-;40643:4;40675;40670:3;40666:14;40658:22;;40573:113;;;:::o;40722:732::-;40841:3;40870:54;40918:5;40870:54;:::i;:::-;40940:86;41019:6;41014:3;40940:86;:::i;:::-;40933:93;;41050:56;41100:5;41050:56;:::i;:::-;41129:7;41160:1;41145:284;41170:6;41167:1;41164:13;41145:284;;;41246:6;41240:13;41273:63;41332:3;41317:13;41273:63;:::i;:::-;41266:70;;41359:60;41412:6;41359:60;:::i;:::-;41349:70;;41205:224;41192:1;41189;41185:9;41180:14;;41145:284;;;41149:14;41445:3;41438:10;;40846:608;;;40722:732;;;;:::o;41460:831::-;41723:4;41761:3;41750:9;41746:19;41738:27;;41775:71;41843:1;41832:9;41828:17;41819:6;41775:71;:::i;:::-;41856:80;41932:2;41921:9;41917:18;41908:6;41856:80;:::i;:::-;41983:9;41977:4;41973:20;41968:2;41957:9;41953:18;41946:48;42011:108;42114:4;42105:6;42011:108;:::i;:::-;42003:116;;42129:72;42197:2;42186:9;42182:18;42173:6;42129:72;:::i;:::-;42211:73;42279:3;42268:9;42264:19;42255:6;42211:73;:::i;:::-;41460:831;;;;;;;;:::o;42297:442::-;42446:4;42484:2;42473:9;42469:18;42461:26;;42497:71;42565:1;42554:9;42550:17;42541:6;42497:71;:::i;:::-;42578:72;42646:2;42635:9;42631:18;42622:6;42578:72;:::i;:::-;42660;42728:2;42717:9;42713:18;42704:6;42660:72;:::i;:::-;42297:442;;;;;;:::o;42745:807::-;42994:4;43032:3;43021:9;43017:19;43009:27;;43046:71;43114:1;43103:9;43099:17;43090:6;43046:71;:::i;:::-;43127:72;43195:2;43184:9;43180:18;43171:6;43127:72;:::i;:::-;43209:80;43285:2;43274:9;43270:18;43261:6;43209:80;:::i;:::-;43299;43375:2;43364:9;43360:18;43351:6;43299:80;:::i;:::-;43389:73;43457:3;43446:9;43442:19;43433:6;43389:73;:::i;:::-;43472;43540:3;43529:9;43525:19;43516:6;43472:73;:::i;:::-;42745:807;;;;;;;;;:::o;43558:143::-;43615:5;43646:6;43640:13;43631:22;;43662:33;43689:5;43662:33;:::i;:::-;43558:143;;;;:::o;43707:663::-;43795:6;43803;43811;43860:2;43848:9;43839:7;43835:23;43831:32;43828:119;;;43866:79;;:::i;:::-;43828:119;43986:1;44011:64;44067:7;44058:6;44047:9;44043:22;44011:64;:::i;:::-;44001:74;;43957:128;44124:2;44150:64;44206:7;44197:6;44186:9;44182:22;44150:64;:::i;:::-;44140:74;;44095:129;44263:2;44289:64;44345:7;44336:6;44325:9;44321:22;44289:64;:::i;:::-;44279:74;;44234:129;43707:663;;;;;:::o

Swarm Source

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