ETH Price: $3,407.17 (-1.09%)
Gas: 5 Gwei

Token

The ElonYe protocol (ElonYe)
 

Overview

Max Total Supply

999,999,951.612800715269270212 ElonYe

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
acutepuppy.eth
Balance
0.000000000200224154 ElonYe

Value
$0.00
0xc52cdb4821427b719b176765447578293e4cf9cb
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:
ElonYe

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

abstract contract Ownable is Context {
    address public _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    function unlock() public virtual {
        require(
            _previousOwner == msg.sender,
            "You don't have permission to unlock"
        );
        require(block.timestamp > _lockTime, "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

/**
 * @dev 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 guidelines: functions revert instead
 * of 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}.
 */

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract ERC20 is Context, IERC20 {
    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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 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, allowance(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 = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * 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 {}
}

contract ElonYe is IERC20, ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping(address => uint256) private _balances;

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

    uint256 public _firstTax = 10; // original 0
    uint256 public _secondTax = 6; // original 0
    uint256 private lpamount = 0;

    uint256 public _totalPeriods = 1188; // 99 years = 1188 months
    uint256 public _timePerPeriod = 30 days; //1 month = 2592000 s

    uint256 private _totalSupply = 1000000000 * 10**18;
    uint256 public _lockedAmount = _totalSupply.sub(1000 * 10**18);
    uint256 public _claimedAmount = 0;
    bool public tradingEnabled = true;
    bool public inSwapAndLiquify = false;

    mapping(address => bool) public lpAddrs;

    IUniswapV2Router02 public uniswapV2Router;
    IUniswapV2Factory public uniswapFactory;
    address public uniswapV2Pair;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
    address private operationaddress =0xca1Fb46281ca228167cb245FC54657D53AA04798;
    address private ownerAddress = 0x010e01498D6C609C945109Ec9e732dF403FFdF95;
    address private address1 = 0xE0D1eF2996Db2ae0b1EFCedb73e0B36D8AB69b2c;
    address private address2 = 0x0Ef473F5A3Aa344bCcaF3CaC9270015Cef4d67F8;
    address private address3 = 0x6f152A5210f035B18FDB0774ebe28A7913A3DaAa;

    address public constant deadAddress = address(0xdead);

    uint256 public deployedtime;

    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool private swapping;
    bool public feeEnable = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() ERC20("The ElonYe protocol", "ElonYe") {
        deployedtime = block.timestamp;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Router = _uniswapV2Router;
        IUniswapV2Factory _uniswapV2Factory = IUniswapV2Factory(factory);
        uniswapFactory = _uniswapV2Factory;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        automatedMarketMakerPairs[uniswapV2Pair] = true;
        _approve(address(this), router, _totalSupply);
        _mint(ownerAddress, 910 * 10**18);
        _mint(address1, 30 * 10**18);
        _mint(address2, 30 * 10**18);
        _mint(address3, 30 * 10**18);
        _mint(address(this), _totalSupply.sub(1000 * 10**18));

        excludeFromFees(owner(), true);
        excludeFromFees(ownerAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
    }

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, "PancakeRouter: EXPIRED");
        _;
    }
    receive() external payable {}
    
    function claimToken() public onlyOwner {
        require(_claimedAmount < _lockedAmount, "Can't claim!");
        uint256 timePassed = block.timestamp - deployedtime;
        require(timePassed >= _totalPeriods.mul(_timePerPeriod), "Can't claim!");
        _claimedAmount = _lockedAmount;
        super._transfer(address(this), owner(), _lockedAmount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        require(deployedtime + 10 minutes < block.timestamp, "NO_BUY_Sell");

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }
        uint256 totalfeeamount = 0;

        if (
            sender != owner() &&
            recipient != owner() &&
            recipient != address(0) &&
            recipient != address(0xdead) &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[sender] || _isExcludedFromFees[recipient],
                    "Trading is not active."
                );
            }
            //when buy
            if(deployedtime + 1 hours > block.timestamp){
                   if (automatedMarketMakerPairs[sender] &&
                        !_isExcludedMaxTransactionAmount[recipient]
                    ) {
                        require(
                            amount <= _totalSupply.sub(_lockedAmount).add(_claimedAmount).mul(3).div(100),
                            "Buy transfer amount exceeds the maxTransactionAmount."
                        );
                        require(
                            amount + balanceOf(recipient) <= 30 * 10 ** 18,
                            "Max wallet exceeded"
                        );
                    }
                    //when sell
                    else if (automatedMarketMakerPairs[recipient]&&
                        !_isExcludedMaxTransactionAmount[sender]
                    ) {
                        require(
                            amount <= _totalSupply.sub(_lockedAmount).add(_claimedAmount).mul(3).div(100),
                            "Sell transfer amount exceeds the maxTransactionAmount."
                        );
                    } else if (!_isExcludedMaxTransactionAmount[recipient]) {
                        require(
                            amount + balanceOf(recipient) <=  30 * 10 ** 18,
                            "Max wallet exceeded"
                        );
                    }
            }
           
        }
        if( 
            swapEnabled &&
            !swapping &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient] &&
            !automatedMarketMakerPairs[sender]
        ) {
            uint256 contractBalance = balanceOf(address(this)).sub(_lockedAmount).add(_claimedAmount);
            if(contractBalance>0){
                swapping = true;
                swapAndLiquify(contractBalance);
                swapping = false;
            }
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee && feeEnable && (automatedMarketMakerPairs[sender] || automatedMarketMakerPairs[recipient])){
             if (deployedtime + 1 hours > block.timestamp) {
                totalfeeamount = amount.mul(10).div(100);
                feeEnable = false;
                super._transfer(sender, address(this), totalfeeamount);
                super._transfer(address(this), operationaddress, totalfeeamount.mul(7).div(10));
                super._burn(address(this), totalfeeamount.div(10));
                feeEnable = true;
             }else{
                totalfeeamount = amount.mul(6).div(100);
                feeEnable = false;
                super._transfer(sender, address(this), totalfeeamount);
                super._burn(address(this), totalfeeamount.div(6));
                super._transfer(address(this),operationaddress, totalfeeamount.mul(4).div(6));
                feeEnable = true;
             }
        	amount -= totalfeeamount;
        }

        super._transfer(sender, recipient, amount);
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        _owner = newOwner;
    }

    function claimlptoken(uint256 amount) public onlyOwner {
        require(deployedtime + 30 minutes < block.timestamp, "NO_Claim");
        IERC20(uniswapFactory.getPair(address(this), uniswapV2Router.WETH()))
            .transfer(_owner, amount);
    }
    function getBalance() public view returns(uint) {
        return address(this).balance;
    }

    function withdrawMoney() public onlyOwner {
        address payable to = payable(msg.sender);
        to.transfer(getBalance());
    }

    function setmaximumwallet(address walletaddress) public onlyOwner {
        operationaddress = walletaddress;
    }

    function swapAndLiquify(uint256 amount) private {
        uint256 half = amount.div(2);
        uint256 otherHalf = amount.sub(half);

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); 

        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
    }

    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();
        // path[1] = 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83;
        _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
            operationaddress,
            block.timestamp
        );
    }

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

    function pauseTrading() external onlyOwner {
        // Can only be done when limits are in place
        tradingActive = false;
    }

    function startTrading() external onlyOwner {
        // Can only be done when limits are in place
        tradingActive = true;
        swapEnabled = true;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_firstTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_secondTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_timePerPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalPeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimlptoken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployedtime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpAddrs","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":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletaddress","type":"address"}],"name":"setmaximumwallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":[{"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":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80556006600b556000600c556104a4600d5562278d00600e556b033b2e3c9fd0803ce8000000600f5562000054683635c9adc5dea00000600f54620009c560201b620021e01790919060201c565b60105560006011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ca1fb46281ca228167cb245fc54657d53aa04798601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073010e01498d6c609c945109ec9e732df403ffdf95601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e0d1ef2996db2ae0b1efcedb73e0b36d8ab69b2c601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730ef473f5a3aa344bccaf3cac9270015cef4d67f8601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736f152a5210f035b18fdb0774ebe28a7913a3daaa601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601f60006101000a81548160ff0219169083151502179055506000601f60016101000a81548160ff0219169083151502179055506001601f60036101000a81548160ff0219169083151502179055503480156200034357600080fd5b506040518060400160405280601381526020017f54686520456c6f6e59652070726f746f636f6c000000000000000000000000008152506040518060400160405280600681526020017f456c6f6e596500000000000000000000000000000000000000000000000000008152508160039080519060200190620003c892919062000f4a565b508060049080519060200190620003e192919062000f4a565b5050506000620003f662000a1760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35042601e819055506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620005b357600080fd5b505afa158015620005c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ee919062001011565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200067357600080fd5b505afa15801562000688573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ae919062001011565b6040518363ffffffff1660e01b8152600401620006cd92919062001205565b602060405180830381600087803b158015620006e857600080fd5b505af1158015620006fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000723919062001011565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160216000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200081430601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f5462000a1f60201b60201c565b62000851601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16683154c9729d0578000062000bf260201b60201c565b6200088e601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166801a055690d9db8000062000bf260201b60201c565b620008cb601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166801a055690d9db8000062000bf260201b60201c565b62000908601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166801a055690d9db8000062000bf260201b60201c565b6200093e3062000932683635c9adc5dea00000600f54620009c560201b620021e01790919060201c565b62000bf260201b60201c565b620009606200095262000d6060201b60201c565b600162000d8a60201b60201c565b62000995601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000d8a60201b60201c565b620009a830600162000d8a60201b60201c565b620009bd61dead600162000d8a60201b60201c565b50506200150b565b600062000a0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000ed760201b60201c565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8990620012b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afc9062001273565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000be59190620012fb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5c90620012d9565b60405180910390fd5b62000c796000838362000f4060201b60201c565b806002600082825462000c8d919062001334565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d409190620012fb565b60405180910390a362000d5c6000838362000f4560201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000d9a62000a1760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000e2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e239062001295565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000ecb919062001232565b60405180910390a25050565b600083831115829062000f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1991906200124f565b60405180910390fd5b506000838562000f33919062001391565b9050809150509392505050565b505050565b505050565b82805462000f58906200144c565b90600052602060002090601f01602090048101928262000f7c576000855562000fc8565b82601f1062000f9757805160ff191683800117855562000fc8565b8280016001018555821562000fc8579182015b8281111562000fc757825182559160200191906001019062000faa565b5b50905062000fd7919062000fdb565b5090565b5b8082111562000ff657600081600090555060010162000fdc565b5090565b6000815190506200100b81620014f1565b92915050565b6000602082840312156200102457600080fd5b6000620010348482850162000ffa565b91505092915050565b6200104881620013cc565b82525050565b6200105981620013e0565b82525050565b60006200106c8262001318565b62001078818562001323565b93506200108a81856020860162001416565b6200109581620014e0565b840191505092915050565b6000620010af60228362001323565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200111760208362001323565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006200115960248362001323565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000620011c1601f8362001323565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620011ff816200140c565b82525050565b60006040820190506200121c60008301856200103d565b6200122b60208301846200103d565b9392505050565b60006020820190506200124960008301846200104e565b92915050565b600060208201905081810360008301526200126b81846200105f565b905092915050565b600060208201905081810360008301526200128e81620010a0565b9050919050565b60006020820190508181036000830152620012b08162001108565b9050919050565b60006020820190508181036000830152620012d2816200114a565b9050919050565b60006020820190508181036000830152620012f481620011b2565b9050919050565b6000602082019050620013126000830184620011f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600062001341826200140c565b91506200134e836200140c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001386576200138562001482565b5b828201905092915050565b60006200139e826200140c565b9150620013ab836200140c565b925082821015620013c157620013c062001482565b5b828203905092915050565b6000620013d982620013ec565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200143657808201518184015260208101905062001419565b8381111562001446576000848401525b50505050565b600060028204905060018216806200146557607f821691505b602082108114156200147c576200147b620014b1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b620014fc81620013cc565b81146200150857600080fd5b50565b614f2f806200151b6000396000f3fe6080604052600436106103035760003560e01c80637f0785d011610190578063b62496f5116100dc578063d535b93c11610095578063f2fde38b1161006f578063f2fde38b14610b4f578063f887ea4014610b78578063f8b45b0514610ba3578063fff589ff14610bce5761030a565b8063d535b93c14610abe578063dd46706414610ae9578063dd62ed3e14610b125761030a565b8063b62496f5146109ae578063bbc0c742146109eb578063c024666814610a16578063c45a015514610a3f578063c8c8ebe414610a6a578063cc29576914610a955761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610904578063ab655b9e14610941578063ac4460021461096c578063b2bdfa7b146109835761030a565b80639a7a23d614610887578063a457c2d7146108b0578063a69df4b5146108ed5761030a565b80637f0785d0146107875780638bdb2afa146107b25780638da5cb5b146107dd578063905cb32414610808578063924de9b71461083357806395d89b411461085c5761030a565b8063313ce5671161024f5780634ada218b11610208578063602bc62b116101e2578063602bc62b146106dd5780636ddd17131461070857806370a0823114610733578063715018a6146107705761030a565b80634ada218b1461065e578063557ed1ba146106895780635dcf5d0f146106b45761030a565b8063313ce5671461054c578063382d122d1461057757806339509351146105b45780633f85d558146105f15780634451d89f1461061c57806349bd5a5e146106335761030a565b806318160ddd116102bc57806327c8f8351161029657806327c8f835146104b4578063293230b8146104df5780632ca8bd85146104f65780632d3b194f146105215761030a565b806318160ddd14610421578063220f66961461044c57806323b872dd146104775761030a565b806306fdde031461030f578063095ea7b31461033a5780631031e36e1461037757806310d5de531461038e57806312065fe0146103cb5780631694505e146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610bf9565b6040516103319190614826565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613d6c565b610c8b565b60405161036e91906147d5565b60405180910390f35b34801561038357600080fd5b5061038c610cae565b005b34801561039a57600080fd5b506103b560048036038101906103b09190613c53565b610d62565b6040516103c291906147d5565b60405180910390f35b3480156103d757600080fd5b506103e0610d82565b6040516103ed9190614b08565b60405180910390f35b34801561040257600080fd5b5061040b610d8a565b604051610418919061480b565b60405180910390f35b34801561042d57600080fd5b50610436610db0565b6040516104439190614b08565b60405180910390f35b34801561045857600080fd5b50610461610dba565b60405161046e91906147d5565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613ce1565b610dcd565b6040516104ab91906147d5565b60405180910390f35b3480156104c057600080fd5b506104c9610dfc565b6040516104d69190614707565b60405180910390f35b3480156104eb57600080fd5b506104f4610e02565b005b34801561050257600080fd5b5061050b610ed1565b6040516105189190614b08565b60405180910390f35b34801561052d57600080fd5b50610536610ed7565b6040516105439190614b08565b60405180910390f35b34801561055857600080fd5b50610561610edd565b60405161056e9190614b7d565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613c53565b610ee6565b6040516105ab91906147d5565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613d6c565b610f06565b6040516105e891906147d5565b60405180910390f35b3480156105fd57600080fd5b50610606610f3d565b6040516106139190614b08565b60405180910390f35b34801561062857600080fd5b50610631610f43565b005b34801561063f57600080fd5b506106486110ab565b6040516106559190614707565b60405180910390f35b34801561066a57600080fd5b506106736110d1565b60405161068091906147d5565b60405180910390f35b34801561069557600080fd5b5061069e6110e4565b6040516106ab9190614b08565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613dfa565b6110ec565b005b3480156106e957600080fd5b506106f26113d2565b6040516106ff9190614b08565b60405180910390f35b34801561071457600080fd5b5061071d6113dc565b60405161072a91906147d5565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613c53565b6113ef565b6040516107679190614b08565b60405180910390f35b34801561077c57600080fd5b50610785611437565b005b34801561079357600080fd5b5061079c61158f565b6040516107a991906147d5565b60405180910390f35b3480156107be57600080fd5b506107c76115a2565b6040516107d491906147f0565b60405180910390f35b3480156107e957600080fd5b506107f26115c8565b6040516107ff9190614707565b60405180910390f35b34801561081457600080fd5b5061081d6115f2565b60405161082a9190614b08565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190613da8565b6115f8565b005b34801561086857600080fd5b506108716116ac565b60405161087e9190614826565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613d30565b61173e565b005b3480156108bc57600080fd5b506108d760048036038101906108d29190613d6c565b611874565b6040516108e491906147d5565b60405180910390f35b3480156108f957600080fd5b506109026118eb565b005b34801561091057600080fd5b5061092b60048036038101906109269190613d6c565b611ac2565b60405161093891906147d5565b60405180910390f35b34801561094d57600080fd5b50610956611ae5565b6040516109639190614b08565b60405180910390f35b34801561097857600080fd5b50610981611aeb565b005b34801561098f57600080fd5b50610998611bd8565b6040516109a59190614707565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613c53565b611bfe565b6040516109e291906147d5565b60405180910390f35b3480156109f757600080fd5b50610a00611c1e565b604051610a0d91906147d5565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a389190613d30565b611c31565b005b348015610a4b57600080fd5b50610a54611d71565b604051610a619190614707565b60405180910390f35b348015610a7657600080fd5b50610a7f611d97565b604051610a8c9190614b08565b60405180910390f35b348015610aa157600080fd5b50610abc6004803603810190610ab79190613c53565b611d9d565b005b348015610aca57600080fd5b50610ad3611e78565b604051610ae09190614b08565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190613dfa565b611e7e565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613ca5565b61204c565b604051610b469190614b08565b60405180910390f35b348015610b5b57600080fd5b50610b766004803603810190610b719190613c53565b6120d3565b005b348015610b8457600080fd5b50610b8d6121ae565b604051610b9a9190614707565b60405180910390f35b348015610baf57600080fd5b50610bb86121d4565b604051610bc59190614b08565b60405180910390f35b348015610bda57600080fd5b50610be36121da565b604051610bf09190614b08565b60405180910390f35b606060038054610c0890614de4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3490614de4565b8015610c815780601f10610c5657610100808354040283529160200191610c81565b820191906000526020600020905b815481529060010190602001808311610c6457829003601f168201915b5050505050905090565b600080610c9661222a565b9050610ca3818585612232565b600191505092915050565b610cb661222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90614a08565b60405180910390fd5b6000601f60006101000a81548160ff021916908315150217905550565b60226020528060005260406000206000915054906101000a900460ff1681565b600047905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b601260019054906101000a900460ff1681565b600080610dd861222a565b9050610de58582856123fd565b610df0858585612489565b60019150509392505050565b61dead81565b610e0a61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614a08565b60405180910390fd5b6001601f60006101000a81548160ff0219169083151502179055506001601f60016101000a81548160ff021916908315150217905550565b600a5481565b601e5481565b60006012905090565b60136020528060005260406000206000915054906101000a900460ff1681565b600080610f1161222a565b9050610f32818585610f23858961204c565b610f2d9190614bed565b612232565b600191505092915050565b600b5481565b610f4b61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190614a08565b60405180910390fd5b60105460115410611020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611017906148a8565b60405180910390fd5b6000601e54426110309190614cce565b9050611049600e54600d546130c290919063ffffffff16565b81101561108b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611082906148a8565b60405180910390fd5b6010546011819055506110a8306110a06115c8565b60105461313d565b50565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b600042905090565b6110f461222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90614a08565b60405180910390fd5b42610708601e546111949190614bed565b106111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb906149c8565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b39190613c7c565b6040518363ffffffff1660e01b81526004016112d0929190614722565b60206040518083038186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190613c7c565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161137c92919061474b565b602060405180830381600087803b15801561139657600080fd5b505af11580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190613dd1565b5050565b6000600754905090565b601f60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61143f61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614a08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601f60039054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61160061222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690614a08565b60405180910390fd5b80601f60016101000a81548160ff02191690831515021790555050565b6060600480546116bb90614de4565b80601f01602080910402602001604051908101604052809291908181526020018280546116e790614de4565b80156117345780601f1061170957610100808354040283529160200191611734565b820191906000526020600020905b81548152906001019060200180831161171757829003601f168201915b5050505050905090565b61174661222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614a08565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614928565b60405180910390fd5b61187082826133b5565b5050565b60008061187f61222a565b9050600061188d828661204c565b9050838110156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614ae8565b60405180910390fd5b6118df8286868403612232565b60019250505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614ac8565b60405180910390fd5b60075442116119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614aa8565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611acd61222a565b9050611ada818585612489565b600191505092915050565b60115481565b611af361222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614a08565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc611ba9610d82565b9081150290604051600060405180830381858888f19350505050158015611bd4573d6000803e3d6000fd5b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60216020528060005260406000206000915054906101000a900460ff1681565b601f60009054906101000a900460ff1681565b611c3961222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614a08565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d6591906147d5565b60405180910390a25050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60235481565b611da561222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614a08565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b611e8661222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90614a08565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611fc69190614bed565b600781905550600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120db61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190614a08565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60245481565b600e5481565b600061222283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613456565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612309906148e8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f09190614b08565b60405180910390a3505050565b6000612409848461204c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124835781811015612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90614948565b60405180910390fd5b6124828484848403612232565b5b50505050565b42610258601e5461249a9190614bed565b106124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d190614888565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561254a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254190614a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614848565b60405180910390fd5b60008114156125d4576125cf8383600061313d565b6130bd565b60006125de6115c8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561264c575061261c6115c8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126855750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126bf575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126d85750601f60029054906101000a900460ff16155b15612b7d57601f60009054906101000a900460ff166127d257602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127925750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c8906148c8565b60405180910390fd5b5b42610e10601e546127e39190614bed565b1115612b7c57602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561288c5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612988576128e260646128d460036128c66011546128b8601054600f546121e090919063ffffffff16565b6134ba90919063ffffffff16565b6130c290919063ffffffff16565b61351890919063ffffffff16565b821115612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b906149a8565b60405180910390fd5b6801a055690d9db80000612937846113ef565b836129429190614bed565b1115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a90614a88565b60405180910390fd5b612b7b565b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a2b5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ac857612a816064612a736003612a65601154612a57601054600f546121e090919063ffffffff16565b6134ba90919063ffffffff16565b6130c290919063ffffffff16565b61351890919063ffffffff16565b821115612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614988565b60405180910390fd5b612b7a565b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b79576801a055690d9db80000612b2c846113ef565b83612b379190614bed565b1115612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f90614a88565b60405180910390fd5b5b5b5b5b5b601f60019054906101000a900460ff168015612ba65750601f60029054906101000a900460ff16155b8015612bfc5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c525750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ca85750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d48576000612ce0601154612cd2601054612cc4306113ef565b6121e090919063ffffffff16565b6134ba90919063ffffffff16565b90506000811115612d2b576001601f60026101000a81548160ff021916908315150217905550612d0f81613562565b6000601f60026101000a81548160ff0219169083151502179055505b6000601f60026101000a81548160ff021916908315150217905550505b6000601f60029054906101000a900460ff16159050602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfe5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0857600090505b808015612e215750601f60039054906101000a900460ff165b8015612eca5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec95750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156130af5742610e10601e54612ee09190614bed565b1115612fc557612f0d6064612eff600a866130c290919063ffffffff16565b61351890919063ffffffff16565b91506000601f60036101000a81548160ff021916908315150217905550612f3585308461313d565b612f8830601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612f83600a612f756007886130c290919063ffffffff16565b61351890919063ffffffff16565b61313d565b612fa530612fa0600a8561351890919063ffffffff16565b6135c7565b6001601f60036101000a81548160ff0219169083151502179055506130a0565b612fec6064612fde6006866130c290919063ffffffff16565b61351890919063ffffffff16565b91506000601f60036101000a81548160ff02191690831515021790555061301485308461313d565b6130313061302c60068561351890919063ffffffff16565b6135c7565b61308430601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661307f60066130716004886130c290919063ffffffff16565b61351890919063ffffffff16565b61313d565b6001601f60036101000a81548160ff0219169083151502179055505b81836130ac9190614cce565b92505b6130ba85858561313d565b50505b505050565b6000808314156130d55760009050613137565b600082846130e39190614c74565b90508284826130f29190614c43565b14613132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613129906149e8565b60405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a490614a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321490614848565b60405180910390fd5b613228838383613795565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a590614968565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161339c9190614b08565b60405180910390a36133af84848461379a565b50505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600083831115829061349e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134959190614826565b60405180910390fd5b50600083856134ad9190614cce565b9050809150509392505050565b60008082846134c99190614bed565b90508381101561350e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350590614908565b60405180910390fd5b8091505092915050565b600061355a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061379f565b905092915050565b600061357860028361351890919063ffffffff16565b9050600061358f82846121e090919063ffffffff16565b9050600047905061359f83613802565b60006135b482476121e090919063ffffffff16565b90506135c08382613ac6565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362e90614a28565b60405180910390fd5b61364382600083613795565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c090614868565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161377c9190614b08565b60405180910390a36137908360008461379a565b505050565b505050565b505050565b600080831182906137e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137dd9190614826565b60405180910390fd5b50600083856137f59190614c43565b9050809150509392505050565b6000600267ffffffffffffffff811115613845577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138735781602001602082028036833780820191505090505b50905030816000815181106138b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561395357600080fd5b505afa158015613967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398b9190613c7c565b816001815181106139c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a2c30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612232565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a90959493929190614b23565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b505050505050565b613af330601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612232565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b7c96959493929190614774565b6060604051808303818588803b158015613b9557600080fd5b505af1158015613ba9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bce9190613e23565b5050505050565b600081359050613be481614eb4565b92915050565b600081519050613bf981614eb4565b92915050565b600081359050613c0e81614ecb565b92915050565b600081519050613c2381614ecb565b92915050565b600081359050613c3881614ee2565b92915050565b600081519050613c4d81614ee2565b92915050565b600060208284031215613c6557600080fd5b6000613c7384828501613bd5565b91505092915050565b600060208284031215613c8e57600080fd5b6000613c9c84828501613bea565b91505092915050565b60008060408385031215613cb857600080fd5b6000613cc685828601613bd5565b9250506020613cd785828601613bd5565b9150509250929050565b600080600060608486031215613cf657600080fd5b6000613d0486828701613bd5565b9350506020613d1586828701613bd5565b9250506040613d2686828701613c29565b9150509250925092565b60008060408385031215613d4357600080fd5b6000613d5185828601613bd5565b9250506020613d6285828601613bff565b9150509250929050565b60008060408385031215613d7f57600080fd5b6000613d8d85828601613bd5565b9250506020613d9e85828601613c29565b9150509250929050565b600060208284031215613dba57600080fd5b6000613dc884828501613bff565b91505092915050565b600060208284031215613de357600080fd5b6000613df184828501613c14565b91505092915050565b600060208284031215613e0c57600080fd5b6000613e1a84828501613c29565b91505092915050565b600080600060608486031215613e3857600080fd5b6000613e4686828701613c3e565b9350506020613e5786828701613c3e565b9250506040613e6886828701613c3e565b9150509250925092565b6000613e7e8383613e8a565b60208301905092915050565b613e9381614d02565b82525050565b613ea281614d02565b82525050565b6000613eb382614ba8565b613ebd8185614bcb565b9350613ec883614b98565b8060005b83811015613ef9578151613ee08882613e72565b9750613eeb83614bbe565b925050600181019050613ecc565b5085935050505092915050565b613f0f81614d14565b82525050565b613f1e81614d57565b82525050565b613f2d81614d7b565b82525050565b613f3c81614d9f565b82525050565b6000613f4d82614bb3565b613f578185614bdc565b9350613f67818560208601614db1565b613f7081614ea3565b840191505092915050565b6000613f88602383614bdc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fee602283614bdc565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614054600b83614bdc565b91507f4e4f5f4255595f53656c6c0000000000000000000000000000000000000000006000830152602082019050919050565b6000614094600c83614bdc565b91507f43616e277420636c61696d2100000000000000000000000000000000000000006000830152602082019050919050565b60006140d4601683614bdc565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b6000614114602283614bdc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061417a601b83614bdc565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006141ba603983614bdc565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b6000614220601d83614bdc565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000614260602683614bdc565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c6603683614bdc565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b600061432c603583614bdc565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b6000614392600883614bdc565b91507f4e4f5f436c61696d0000000000000000000000000000000000000000000000006000830152602082019050919050565b60006143d2602183614bdc565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614438602083614bdc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614478602183614bdc565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144de602583614bdc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614544602483614bdc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145aa601383614bdc565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006145ea601f83614bdc565b91507f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006000830152602082019050919050565b600061462a602383614bdc565b91507f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008301527f6f636b00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614690602583614bdc565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6146f281614d40565b82525050565b61470181614d4a565b82525050565b600060208201905061471c6000830184613e99565b92915050565b60006040820190506147376000830185613e99565b6147446020830184613e99565b9392505050565b60006040820190506147606000830185613e99565b61476d60208301846146e9565b9392505050565b600060c0820190506147896000830189613e99565b61479660208301886146e9565b6147a36040830187613f33565b6147b06060830186613f33565b6147bd6080830185613e99565b6147ca60a08301846146e9565b979650505050505050565b60006020820190506147ea6000830184613f06565b92915050565b60006020820190506148056000830184613f15565b92915050565b60006020820190506148206000830184613f24565b92915050565b600060208201905081810360008301526148408184613f42565b905092915050565b6000602082019050818103600083015261486181613f7b565b9050919050565b6000602082019050818103600083015261488181613fe1565b9050919050565b600060208201905081810360008301526148a181614047565b9050919050565b600060208201905081810360008301526148c181614087565b9050919050565b600060208201905081810360008301526148e1816140c7565b9050919050565b6000602082019050818103600083015261490181614107565b9050919050565b600060208201905081810360008301526149218161416d565b9050919050565b60006020820190508181036000830152614941816141ad565b9050919050565b6000602082019050818103600083015261496181614213565b9050919050565b6000602082019050818103600083015261498181614253565b9050919050565b600060208201905081810360008301526149a1816142b9565b9050919050565b600060208201905081810360008301526149c18161431f565b9050919050565b600060208201905081810360008301526149e181614385565b9050919050565b60006020820190508181036000830152614a01816143c5565b9050919050565b60006020820190508181036000830152614a218161442b565b9050919050565b60006020820190508181036000830152614a418161446b565b9050919050565b60006020820190508181036000830152614a61816144d1565b9050919050565b60006020820190508181036000830152614a8181614537565b9050919050565b60006020820190508181036000830152614aa18161459d565b9050919050565b60006020820190508181036000830152614ac1816145dd565b9050919050565b60006020820190508181036000830152614ae18161461d565b9050919050565b60006020820190508181036000830152614b0181614683565b9050919050565b6000602082019050614b1d60008301846146e9565b92915050565b600060a082019050614b3860008301886146e9565b614b456020830187613f33565b8181036040830152614b578186613ea8565b9050614b666060830185613e99565b614b7360808301846146e9565b9695505050505050565b6000602082019050614b9260008301846146f8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bf882614d40565b9150614c0383614d40565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3857614c37614e16565b5b828201905092915050565b6000614c4e82614d40565b9150614c5983614d40565b925082614c6957614c68614e45565b5b828204905092915050565b6000614c7f82614d40565b9150614c8a83614d40565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cc357614cc2614e16565b5b828202905092915050565b6000614cd982614d40565b9150614ce483614d40565b925082821015614cf757614cf6614e16565b5b828203905092915050565b6000614d0d82614d20565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d6282614d69565b9050919050565b6000614d7482614d20565b9050919050565b6000614d8682614d8d565b9050919050565b6000614d9882614d20565b9050919050565b6000614daa82614d40565b9050919050565b60005b83811015614dcf578082015181840152602081019050614db4565b83811115614dde576000848401525b50505050565b60006002820490506001821680614dfc57607f821691505b60208210811415614e1057614e0f614e74565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b614ebd81614d02565b8114614ec857600080fd5b50565b614ed481614d14565b8114614edf57600080fd5b50565b614eeb81614d40565b8114614ef657600080fd5b5056fea26469706673582212200d1fa75bb785b0a9f3562d5c46852ca8175ec6909e45eed51f946a3abcd95c0664736f6c63430008000033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637f0785d011610190578063b62496f5116100dc578063d535b93c11610095578063f2fde38b1161006f578063f2fde38b14610b4f578063f887ea4014610b78578063f8b45b0514610ba3578063fff589ff14610bce5761030a565b8063d535b93c14610abe578063dd46706414610ae9578063dd62ed3e14610b125761030a565b8063b62496f5146109ae578063bbc0c742146109eb578063c024666814610a16578063c45a015514610a3f578063c8c8ebe414610a6a578063cc29576914610a955761030a565b80639a7a23d611610149578063a9059cbb11610123578063a9059cbb14610904578063ab655b9e14610941578063ac4460021461096c578063b2bdfa7b146109835761030a565b80639a7a23d614610887578063a457c2d7146108b0578063a69df4b5146108ed5761030a565b80637f0785d0146107875780638bdb2afa146107b25780638da5cb5b146107dd578063905cb32414610808578063924de9b71461083357806395d89b411461085c5761030a565b8063313ce5671161024f5780634ada218b11610208578063602bc62b116101e2578063602bc62b146106dd5780636ddd17131461070857806370a0823114610733578063715018a6146107705761030a565b80634ada218b1461065e578063557ed1ba146106895780635dcf5d0f146106b45761030a565b8063313ce5671461054c578063382d122d1461057757806339509351146105b45780633f85d558146105f15780634451d89f1461061c57806349bd5a5e146106335761030a565b806318160ddd116102bc57806327c8f8351161029657806327c8f835146104b4578063293230b8146104df5780632ca8bd85146104f65780632d3b194f146105215761030a565b806318160ddd14610421578063220f66961461044c57806323b872dd146104775761030a565b806306fdde031461030f578063095ea7b31461033a5780631031e36e1461037757806310d5de531461038e57806312065fe0146103cb5780631694505e146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610bf9565b6040516103319190614826565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613d6c565b610c8b565b60405161036e91906147d5565b60405180910390f35b34801561038357600080fd5b5061038c610cae565b005b34801561039a57600080fd5b506103b560048036038101906103b09190613c53565b610d62565b6040516103c291906147d5565b60405180910390f35b3480156103d757600080fd5b506103e0610d82565b6040516103ed9190614b08565b60405180910390f35b34801561040257600080fd5b5061040b610d8a565b604051610418919061480b565b60405180910390f35b34801561042d57600080fd5b50610436610db0565b6040516104439190614b08565b60405180910390f35b34801561045857600080fd5b50610461610dba565b60405161046e91906147d5565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613ce1565b610dcd565b6040516104ab91906147d5565b60405180910390f35b3480156104c057600080fd5b506104c9610dfc565b6040516104d69190614707565b60405180910390f35b3480156104eb57600080fd5b506104f4610e02565b005b34801561050257600080fd5b5061050b610ed1565b6040516105189190614b08565b60405180910390f35b34801561052d57600080fd5b50610536610ed7565b6040516105439190614b08565b60405180910390f35b34801561055857600080fd5b50610561610edd565b60405161056e9190614b7d565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190613c53565b610ee6565b6040516105ab91906147d5565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613d6c565b610f06565b6040516105e891906147d5565b60405180910390f35b3480156105fd57600080fd5b50610606610f3d565b6040516106139190614b08565b60405180910390f35b34801561062857600080fd5b50610631610f43565b005b34801561063f57600080fd5b506106486110ab565b6040516106559190614707565b60405180910390f35b34801561066a57600080fd5b506106736110d1565b60405161068091906147d5565b60405180910390f35b34801561069557600080fd5b5061069e6110e4565b6040516106ab9190614b08565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613dfa565b6110ec565b005b3480156106e957600080fd5b506106f26113d2565b6040516106ff9190614b08565b60405180910390f35b34801561071457600080fd5b5061071d6113dc565b60405161072a91906147d5565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190613c53565b6113ef565b6040516107679190614b08565b60405180910390f35b34801561077c57600080fd5b50610785611437565b005b34801561079357600080fd5b5061079c61158f565b6040516107a991906147d5565b60405180910390f35b3480156107be57600080fd5b506107c76115a2565b6040516107d491906147f0565b60405180910390f35b3480156107e957600080fd5b506107f26115c8565b6040516107ff9190614707565b60405180910390f35b34801561081457600080fd5b5061081d6115f2565b60405161082a9190614b08565b60405180910390f35b34801561083f57600080fd5b5061085a60048036038101906108559190613da8565b6115f8565b005b34801561086857600080fd5b506108716116ac565b60405161087e9190614826565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613d30565b61173e565b005b3480156108bc57600080fd5b506108d760048036038101906108d29190613d6c565b611874565b6040516108e491906147d5565b60405180910390f35b3480156108f957600080fd5b506109026118eb565b005b34801561091057600080fd5b5061092b60048036038101906109269190613d6c565b611ac2565b60405161093891906147d5565b60405180910390f35b34801561094d57600080fd5b50610956611ae5565b6040516109639190614b08565b60405180910390f35b34801561097857600080fd5b50610981611aeb565b005b34801561098f57600080fd5b50610998611bd8565b6040516109a59190614707565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190613c53565b611bfe565b6040516109e291906147d5565b60405180910390f35b3480156109f757600080fd5b50610a00611c1e565b604051610a0d91906147d5565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a389190613d30565b611c31565b005b348015610a4b57600080fd5b50610a54611d71565b604051610a619190614707565b60405180910390f35b348015610a7657600080fd5b50610a7f611d97565b604051610a8c9190614b08565b60405180910390f35b348015610aa157600080fd5b50610abc6004803603810190610ab79190613c53565b611d9d565b005b348015610aca57600080fd5b50610ad3611e78565b604051610ae09190614b08565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190613dfa565b611e7e565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613ca5565b61204c565b604051610b469190614b08565b60405180910390f35b348015610b5b57600080fd5b50610b766004803603810190610b719190613c53565b6120d3565b005b348015610b8457600080fd5b50610b8d6121ae565b604051610b9a9190614707565b60405180910390f35b348015610baf57600080fd5b50610bb86121d4565b604051610bc59190614b08565b60405180910390f35b348015610bda57600080fd5b50610be36121da565b604051610bf09190614b08565b60405180910390f35b606060038054610c0890614de4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3490614de4565b8015610c815780601f10610c5657610100808354040283529160200191610c81565b820191906000526020600020905b815481529060010190602001808311610c6457829003601f168201915b5050505050905090565b600080610c9661222a565b9050610ca3818585612232565b600191505092915050565b610cb661222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90614a08565b60405180910390fd5b6000601f60006101000a81548160ff021916908315150217905550565b60226020528060005260406000206000915054906101000a900460ff1681565b600047905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b601260019054906101000a900460ff1681565b600080610dd861222a565b9050610de58582856123fd565b610df0858585612489565b60019150509392505050565b61dead81565b610e0a61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614a08565b60405180910390fd5b6001601f60006101000a81548160ff0219169083151502179055506001601f60016101000a81548160ff021916908315150217905550565b600a5481565b601e5481565b60006012905090565b60136020528060005260406000206000915054906101000a900460ff1681565b600080610f1161222a565b9050610f32818585610f23858961204c565b610f2d9190614bed565b612232565b600191505092915050565b600b5481565b610f4b61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190614a08565b60405180910390fd5b60105460115410611020576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611017906148a8565b60405180910390fd5b6000601e54426110309190614cce565b9050611049600e54600d546130c290919063ffffffff16565b81101561108b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611082906148a8565b60405180910390fd5b6010546011819055506110a8306110a06115c8565b60105461313d565b50565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b600042905090565b6110f461222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90614a08565b60405180910390fd5b42610708601e546111949190614bed565b106111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb906149c8565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b39190613c7c565b6040518363ffffffff1660e01b81526004016112d0929190614722565b60206040518083038186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190613c7c565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161137c92919061474b565b602060405180830381600087803b15801561139657600080fd5b505af11580156113aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ce9190613dd1565b5050565b6000600754905090565b601f60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61143f61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614a08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601f60039054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61160061222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690614a08565b60405180910390fd5b80601f60016101000a81548160ff02191690831515021790555050565b6060600480546116bb90614de4565b80601f01602080910402602001604051908101604052809291908181526020018280546116e790614de4565b80156117345780601f1061170957610100808354040283529160200191611734565b820191906000526020600020905b81548152906001019060200180831161171757829003601f168201915b5050505050905090565b61174661222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614a08565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614928565b60405180910390fd5b61187082826133b5565b5050565b60008061187f61222a565b9050600061188d828661204c565b9050838110156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614ae8565b60405180910390fd5b6118df8286868403612232565b60019250505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614ac8565b60405180910390fd5b60075442116119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614aa8565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611acd61222a565b9050611ada818585612489565b600191505092915050565b60115481565b611af361222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614a08565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc611ba9610d82565b9081150290604051600060405180830381858888f19350505050158015611bd4573d6000803e3d6000fd5b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60216020528060005260406000206000915054906101000a900460ff1681565b601f60009054906101000a900460ff1681565b611c3961222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614a08565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d6591906147d5565b60405180910390a25050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60235481565b611da561222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614a08565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b611e8661222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90614a08565b60405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611fc69190614bed565b600781905550600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120db61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190614a08565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60245481565b600e5481565b600061222283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613456565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612309906148e8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f09190614b08565b60405180910390a3505050565b6000612409848461204c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124835781811015612475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246c90614948565b60405180910390fd5b6124828484848403612232565b5b50505050565b42610258601e5461249a9190614bed565b106124da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d190614888565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561254a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254190614a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614848565b60405180910390fd5b60008114156125d4576125cf8383600061313d565b6130bd565b60006125de6115c8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561264c575061261c6115c8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126855750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126bf575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126d85750601f60029054906101000a900460ff16155b15612b7d57601f60009054906101000a900460ff166127d257602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127925750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c8906148c8565b60405180910390fd5b5b42610e10601e546127e39190614bed565b1115612b7c57602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561288c5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612988576128e260646128d460036128c66011546128b8601054600f546121e090919063ffffffff16565b6134ba90919063ffffffff16565b6130c290919063ffffffff16565b61351890919063ffffffff16565b821115612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b906149a8565b60405180910390fd5b6801a055690d9db80000612937846113ef565b836129429190614bed565b1115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a90614a88565b60405180910390fd5b612b7b565b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a2b5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ac857612a816064612a736003612a65601154612a57601054600f546121e090919063ffffffff16565b6134ba90919063ffffffff16565b6130c290919063ffffffff16565b61351890919063ffffffff16565b821115612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba90614988565b60405180910390fd5b612b7a565b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b79576801a055690d9db80000612b2c846113ef565b83612b379190614bed565b1115612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f90614a88565b60405180910390fd5b5b5b5b5b5b601f60019054906101000a900460ff168015612ba65750601f60029054906101000a900460ff16155b8015612bfc5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c525750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ca85750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d48576000612ce0601154612cd2601054612cc4306113ef565b6121e090919063ffffffff16565b6134ba90919063ffffffff16565b90506000811115612d2b576001601f60026101000a81548160ff021916908315150217905550612d0f81613562565b6000601f60026101000a81548160ff0219169083151502179055505b6000601f60026101000a81548160ff021916908315150217905550505b6000601f60029054906101000a900460ff16159050602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfe5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0857600090505b808015612e215750601f60039054906101000a900460ff165b8015612eca5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec95750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156130af5742610e10601e54612ee09190614bed565b1115612fc557612f0d6064612eff600a866130c290919063ffffffff16565b61351890919063ffffffff16565b91506000601f60036101000a81548160ff021916908315150217905550612f3585308461313d565b612f8830601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612f83600a612f756007886130c290919063ffffffff16565b61351890919063ffffffff16565b61313d565b612fa530612fa0600a8561351890919063ffffffff16565b6135c7565b6001601f60036101000a81548160ff0219169083151502179055506130a0565b612fec6064612fde6006866130c290919063ffffffff16565b61351890919063ffffffff16565b91506000601f60036101000a81548160ff02191690831515021790555061301485308461313d565b6130313061302c60068561351890919063ffffffff16565b6135c7565b61308430601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661307f60066130716004886130c290919063ffffffff16565b61351890919063ffffffff16565b61313d565b6001601f60036101000a81548160ff0219169083151502179055505b81836130ac9190614cce565b92505b6130ba85858561313d565b50505b505050565b6000808314156130d55760009050613137565b600082846130e39190614c74565b90508284826130f29190614c43565b14613132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613129906149e8565b60405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a490614a48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321490614848565b60405180910390fd5b613228838383613795565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a590614968565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161339c9190614b08565b60405180910390a36133af84848461379a565b50505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600083831115829061349e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134959190614826565b60405180910390fd5b50600083856134ad9190614cce565b9050809150509392505050565b60008082846134c99190614bed565b90508381101561350e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350590614908565b60405180910390fd5b8091505092915050565b600061355a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061379f565b905092915050565b600061357860028361351890919063ffffffff16565b9050600061358f82846121e090919063ffffffff16565b9050600047905061359f83613802565b60006135b482476121e090919063ffffffff16565b90506135c08382613ac6565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362e90614a28565b60405180910390fd5b61364382600083613795565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156136c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c090614868565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161377c9190614b08565b60405180910390a36137908360008461379a565b505050565b505050565b505050565b600080831182906137e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137dd9190614826565b60405180910390fd5b50600083856137f59190614c43565b9050809150509392505050565b6000600267ffffffffffffffff811115613845577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156138735781602001602082028036833780820191505090505b50905030816000815181106138b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561395357600080fd5b505afa158015613967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398b9190613c7c565b816001815181106139c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a2c30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612232565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a90959493929190614b23565b600060405180830381600087803b158015613aaa57600080fd5b505af1158015613abe573d6000803e3d6000fd5b505050505050565b613af330601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612232565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b7c96959493929190614774565b6060604051808303818588803b158015613b9557600080fd5b505af1158015613ba9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bce9190613e23565b5050505050565b600081359050613be481614eb4565b92915050565b600081519050613bf981614eb4565b92915050565b600081359050613c0e81614ecb565b92915050565b600081519050613c2381614ecb565b92915050565b600081359050613c3881614ee2565b92915050565b600081519050613c4d81614ee2565b92915050565b600060208284031215613c6557600080fd5b6000613c7384828501613bd5565b91505092915050565b600060208284031215613c8e57600080fd5b6000613c9c84828501613bea565b91505092915050565b60008060408385031215613cb857600080fd5b6000613cc685828601613bd5565b9250506020613cd785828601613bd5565b9150509250929050565b600080600060608486031215613cf657600080fd5b6000613d0486828701613bd5565b9350506020613d1586828701613bd5565b9250506040613d2686828701613c29565b9150509250925092565b60008060408385031215613d4357600080fd5b6000613d5185828601613bd5565b9250506020613d6285828601613bff565b9150509250929050565b60008060408385031215613d7f57600080fd5b6000613d8d85828601613bd5565b9250506020613d9e85828601613c29565b9150509250929050565b600060208284031215613dba57600080fd5b6000613dc884828501613bff565b91505092915050565b600060208284031215613de357600080fd5b6000613df184828501613c14565b91505092915050565b600060208284031215613e0c57600080fd5b6000613e1a84828501613c29565b91505092915050565b600080600060608486031215613e3857600080fd5b6000613e4686828701613c3e565b9350506020613e5786828701613c3e565b9250506040613e6886828701613c3e565b9150509250925092565b6000613e7e8383613e8a565b60208301905092915050565b613e9381614d02565b82525050565b613ea281614d02565b82525050565b6000613eb382614ba8565b613ebd8185614bcb565b9350613ec883614b98565b8060005b83811015613ef9578151613ee08882613e72565b9750613eeb83614bbe565b925050600181019050613ecc565b5085935050505092915050565b613f0f81614d14565b82525050565b613f1e81614d57565b82525050565b613f2d81614d7b565b82525050565b613f3c81614d9f565b82525050565b6000613f4d82614bb3565b613f578185614bdc565b9350613f67818560208601614db1565b613f7081614ea3565b840191505092915050565b6000613f88602383614bdc565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fee602283614bdc565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614054600b83614bdc565b91507f4e4f5f4255595f53656c6c0000000000000000000000000000000000000000006000830152602082019050919050565b6000614094600c83614bdc565b91507f43616e277420636c61696d2100000000000000000000000000000000000000006000830152602082019050919050565b60006140d4601683614bdc565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b6000614114602283614bdc565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061417a601b83614bdc565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006141ba603983614bdc565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b6000614220601d83614bdc565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000614260602683614bdc565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c6603683614bdc565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b600061432c603583614bdc565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b6000614392600883614bdc565b91507f4e4f5f436c61696d0000000000000000000000000000000000000000000000006000830152602082019050919050565b60006143d2602183614bdc565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614438602083614bdc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614478602183614bdc565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144de602583614bdc565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614544602483614bdc565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145aa601383614bdc565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006145ea601f83614bdc565b91507f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006000830152602082019050919050565b600061462a602383614bdc565b91507f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008301527f6f636b00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614690602583614bdc565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6146f281614d40565b82525050565b61470181614d4a565b82525050565b600060208201905061471c6000830184613e99565b92915050565b60006040820190506147376000830185613e99565b6147446020830184613e99565b9392505050565b60006040820190506147606000830185613e99565b61476d60208301846146e9565b9392505050565b600060c0820190506147896000830189613e99565b61479660208301886146e9565b6147a36040830187613f33565b6147b06060830186613f33565b6147bd6080830185613e99565b6147ca60a08301846146e9565b979650505050505050565b60006020820190506147ea6000830184613f06565b92915050565b60006020820190506148056000830184613f15565b92915050565b60006020820190506148206000830184613f24565b92915050565b600060208201905081810360008301526148408184613f42565b905092915050565b6000602082019050818103600083015261486181613f7b565b9050919050565b6000602082019050818103600083015261488181613fe1565b9050919050565b600060208201905081810360008301526148a181614047565b9050919050565b600060208201905081810360008301526148c181614087565b9050919050565b600060208201905081810360008301526148e1816140c7565b9050919050565b6000602082019050818103600083015261490181614107565b9050919050565b600060208201905081810360008301526149218161416d565b9050919050565b60006020820190508181036000830152614941816141ad565b9050919050565b6000602082019050818103600083015261496181614213565b9050919050565b6000602082019050818103600083015261498181614253565b9050919050565b600060208201905081810360008301526149a1816142b9565b9050919050565b600060208201905081810360008301526149c18161431f565b9050919050565b600060208201905081810360008301526149e181614385565b9050919050565b60006020820190508181036000830152614a01816143c5565b9050919050565b60006020820190508181036000830152614a218161442b565b9050919050565b60006020820190508181036000830152614a418161446b565b9050919050565b60006020820190508181036000830152614a61816144d1565b9050919050565b60006020820190508181036000830152614a8181614537565b9050919050565b60006020820190508181036000830152614aa18161459d565b9050919050565b60006020820190508181036000830152614ac1816145dd565b9050919050565b60006020820190508181036000830152614ae18161461d565b9050919050565b60006020820190508181036000830152614b0181614683565b9050919050565b6000602082019050614b1d60008301846146e9565b92915050565b600060a082019050614b3860008301886146e9565b614b456020830187613f33565b8181036040830152614b578186613ea8565b9050614b666060830185613e99565b614b7360808301846146e9565b9695505050505050565b6000602082019050614b9260008301846146f8565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bf882614d40565b9150614c0383614d40565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3857614c37614e16565b5b828201905092915050565b6000614c4e82614d40565b9150614c5983614d40565b925082614c6957614c68614e45565b5b828204905092915050565b6000614c7f82614d40565b9150614c8a83614d40565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cc357614cc2614e16565b5b828202905092915050565b6000614cd982614d40565b9150614ce483614d40565b925082821015614cf757614cf6614e16565b5b828203905092915050565b6000614d0d82614d20565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d6282614d69565b9050919050565b6000614d7482614d20565b9050919050565b6000614d8682614d8d565b9050919050565b6000614d9882614d20565b9050919050565b6000614daa82614d40565b9050919050565b60005b83811015614dcf578082015181840152602081019050614db4565b83811115614dde576000848401525b50505050565b60006002820490506001821680614dfc57607f821691505b60208210811415614e1057614e0f614e74565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b614ebd81614d02565b8114614ec857600080fd5b50565b614ed481614d14565b8114614edf57600080fd5b50565b614eeb81614d40565b8114614ef657600080fd5b5056fea26469706673582212200d1fa75bb785b0a9f3562d5c46852ca8175ec6909e45eed51f946a3abcd95c0664736f6c63430008000033

Deployed Bytecode Sourcemap

32961:11839:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21431:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23896:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43928:137;;;;;;;;;;;;;:::i;:::-;;34813:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41737:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33779:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22524:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33686:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24718:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34448:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44073:165;;;;;;;;;;;;;:::i;:::-;;33205:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34510:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22375:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33731:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25422:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33255:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36621:364;;;;;;;;;;;;;:::i;:::-;;33873:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33646:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1636:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41474:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1538:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34586:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22695:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1093:148;;;;;;;;;;;;;:::i;:::-;;34652:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33827:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;879:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33537:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44246:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21641:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44355:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26195:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1968:341;;;;;;;;;;;;;:::i;:::-;;23078:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33606:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41840:137;;;;;;;;;;;;;:::i;:::-;;502:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34748:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34546:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43738:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33981:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34883:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41985:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33342:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1734:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23375:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41359:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33908:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34925:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33410:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21431:91;21476:13;21509:5;21502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21431:91;:::o;23896:242::-;24015:4;24037:13;24053:12;:10;:12::i;:::-;24037:28;;24076:32;24085:5;24092:7;24101:6;24076:8;:32::i;:::-;24126:4;24119:11;;;23896:242;;;;:::o;43928:137::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44052:5:::1;44036:13;;:21;;;;;;;;;;;;;;;;;;43928:137::o:0;34813:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;41737:95::-;41779:4;41803:21;41796:28;;41737:95;:::o;33779:41::-;;;;;;;;;;;;;:::o;22524:108::-;22585:7;22612:12;;22605:19;;22524:108;:::o;33686:36::-;;;;;;;;;;;;;:::o;24718:295::-;24849:4;24866:15;24884:12;:10;:12::i;:::-;24866:30;;24907:38;24923:4;24929:7;24938:6;24907:15;:38::i;:::-;24956:27;24966:4;24972:2;24976:6;24956:9;:27::i;:::-;25001:4;24994:11;;;24718:295;;;;;:::o;34448:53::-;34494:6;34448:53;:::o;44073:165::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44197:4:::1;44181:13;;:20;;;;;;;;;;;;;;;;;;44226:4;44212:11;;:18;;;;;;;;;;;;;;;;;;44073:165::o:0;33205:29::-;;;;:::o;34510:27::-;;;;:::o;22375:84::-;22424:5;22449:2;22442:9;;22375:84;:::o;33731:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;25422:270::-;25537:4;25559:13;25575:12;:10;:12::i;:::-;25559:28;;25598:64;25607:5;25614:7;25651:10;25623:25;25633:5;25640:7;25623:9;:25::i;:::-;:38;;;;:::i;:::-;25598:8;:64::i;:::-;25680:4;25673:11;;;25422:270;;;;:::o;33255:29::-;;;;:::o;36621:364::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36696:13:::1;;36679:14;;:30;36671:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36737:18;36776:12;;36758:15;:30;;;;:::i;:::-;36737:51;;36821:33;36839:14;;36821:13;;:17;;:33;;;;:::i;:::-;36807:10;:47;;36799:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;36899:13;;36882:14;:30;;;;36923:54;36947:4;36954:7;:5;:7::i;:::-;36963:13;;36923:15;:54::i;:::-;1076:1;36621:364::o:0;33873:28::-;;;;;;;;;;;;;:::o;33646:33::-;;;;;;;;;;;;;:::o;1636:90::-;1676:7;1703:15;1696:22;;1636:90;:::o;41474:257::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41576:15:::1;41563:10;41548:12;;:25;;;;:::i;:::-;:43;41540:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41622:14;;;;;;;;;;;:22;;;41653:4;41660:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41622:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41615:92;;;41708:6;;;;;;;;;;;41716;41615:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41474:257:::0;:::o;1538:90::-;1584:7;1611:9;;1604:16;;1538:90;:::o;34586:31::-;;;;;;;;;;;;;:::o;22695:177::-;22814:7;22846:9;:18;22856:7;22846:18;;;;;;;;;;;;;;;;22839:25;;22695:177;;;:::o;1093:148::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1200:1:::1;1163:40;;1184:6;;;;;;;;;;;1163:40;;;;;;;;;;;;1231:1;1214:6;;:19;;;;;;;;;;;;;;;;;;1093:148::o:0;34652:28::-;;;;;;;;;;;;;:::o;33827:39::-;;;;;;;;;;;;;:::o;879:79::-;917:7;944:6;;;;;;;;;;;937:13;;879:79;:::o;33537:62::-;;;;:::o;44246:100::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44331:7:::1;44317:11;;:21;;;;;;;;;;;;;;;;;;44246:100:::0;:::o;21641:95::-;21688:13;21721:7;21714:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21641:95;:::o;44355:244::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44462:13:::1;;;;;;;;;;;44454:21;;:4;:21;;;;44446:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;44550:41;44579:4;44585:5;44550:28;:41::i;:::-;44355:244:::0;;:::o;26195:505::-;26315:4;26337:13;26353:12;:10;:12::i;:::-;26337:28;;26376:24;26403:25;26413:5;26420:7;26403:9;:25::i;:::-;26376:52;;26481:15;26461:16;:35;;26439:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26597:60;26606:5;26613:7;26641:15;26622:16;:34;26597:8;:60::i;:::-;26688:4;26681:11;;;;26195:505;;;;:::o;1968:341::-;2052:10;2034:28;;:14;;;;;;;;;;;:28;;;2012:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;2162:9;;2144:15;:27;2136:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;2252:14;;;;;;;;;;;2223:44;;2244:6;;;;;;;;;;;2223:44;;;;;;;;;;;;2287:14;;;;;;;;;;;2278:6;;:23;;;;;;;;;;;;;;;;;;1968:341::o;23078:234::-;23193:4;23215:13;23231:12;:10;:12::i;:::-;23215:28;;23254;23264:5;23271:2;23275:6;23254:9;:28::i;:::-;23300:4;23293:11;;;23078:234;;;;:::o;33606:33::-;;;;:::o;41840:137::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41893:18:::1;41922:10;41893:40;;41944:2;:11;;:25;41956:12;:10;:12::i;:::-;41944:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;1076:1;41840:137::o:0;502:21::-;;;;;;;;;;;;;:::o;34748:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34546:33::-;;;;;;;;;;;;;:::o;43738:182::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43854:8:::1;43823:19;:28;43843:7;43823:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43894:7;43878:34;;;43903:8;43878:34;;;;;;:::i;:::-;;;;;;;;43738:182:::0;;:::o;33981:67::-;;;;;;;;;;;;;:::o;34883:35::-;;;;:::o;41985:117::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42081:13:::1;42062:16;;:32;;;;;;;;;;;;;;;;;;41985:117:::0;:::o;33342:35::-;;;;:::o;1734:226::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1815:6:::1;;;;;;;;;;;1798:14;;:23;;;;;;;;;;;;;;;;;;1849:1;1832:6;;:19;;;;;;;;;;;;;;;;;;1892:4;1874:15;:22;;;;:::i;:::-;1862:9;:34;;;;1949:1;1912:40;;1933:6;;;;;;;;;;;1912:40;;;;;;;;;;;;1734:226:::0;:::o;23375:201::-;23509:7;23541:11;:18;23553:5;23541:18;;;;;;;;;;;;;;;:27;23560:7;23541:27;;;;;;;;;;;;;;;;23534:34;;23375:201;;;;:::o;41359:107::-;1016:12;:10;:12::i;:::-;1006:22;;:6;;;;;;;;;;;:22;;;998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41450:8:::1;41441:6;;:17;;;;;;;;;;;;;;;;;;41359:107:::0;:::o;33908:66::-;;;;;;;;;;;;;:::o;34925:24::-;;;;:::o;33410:39::-;;;;:::o;2529:136::-;2587:7;2614:43;2618:1;2621;2614:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2607:50;;2529:136;;;;:::o;95:115::-;148:15;191:10;176:26;;95:115;:::o;30328:380::-;30481:1;30464:19;;:5;:19;;;;30456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30562:1;30543:21;;:7;:21;;;;30535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30646:6;30616:11;:18;30628:5;30616:18;;;;;;;;;;;;;;;:27;30635:7;30616:27;;;;;;;;;;;;;;;:36;;;;30684:7;30668:32;;30677:5;30668:32;;;30693:6;30668:32;;;;;;:::i;:::-;;;;;;;;30328:380;;;:::o;30999:502::-;31134:24;31161:25;31171:5;31178:7;31161:9;:25::i;:::-;31134:52;;31221:17;31201:16;:37;31197:297;;31301:6;31281:16;:26;;31255:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31416:51;31425:5;31432:7;31460:6;31441:16;:25;31416:8;:51::i;:::-;31197:297;30999:502;;;;:::o;36993:4358::-;37170:15;37157:10;37142:12;;:25;;;;:::i;:::-;:43;37134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37240:1;37222:20;;:6;:20;;;;37214:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37324:1;37303:23;;:9;:23;;;;37295:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37391:1;37381:6;:11;37377:102;;;37409:37;37425:6;37433:9;37444:1;37409:15;:37::i;:::-;37461:7;;37377:102;37489:22;37556:7;:5;:7::i;:::-;37546:17;;:6;:17;;;;:54;;;;;37593:7;:5;:7::i;:::-;37580:20;;:9;:20;;;;37546:54;:94;;;;;37638:1;37617:23;;:9;:23;;;;37546:94;:139;;;;;37678:6;37657:28;;:9;:28;;;;37546:139;:165;;;;;37703:8;;;;;;;;;;;37702:9;37546:165;37528:1909;;;37743:13;;;;;;;;;;;37738:212;;37807:19;:27;37827:6;37807:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;37838:19;:30;37858:9;37838:30;;;;;;;;;;;;;;;;;;;;;;;;;37807:61;37777:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;37738:212;38016:15;38006:7;37991:12;;:22;;;;:::i;:::-;:40;37988:1425;;;38058:25;:33;38084:6;38058:33;;;;;;;;;;;;;;;;;;;;;;;;;:105;;;;;38121:31;:42;38153:9;38121:42;;;;;;;;;;;;;;;;;;;;;;;;;38120:43;38058:105;38054:1344;;;38262:67;38325:3;38262:58;38318:1;38262:51;38298:14;;38262:31;38279:13;;38262:12;;:16;;:31;;;;:::i;:::-;:35;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;:62;;:67;;;;:::i;:::-;38252:6;:77;;38214:228;;;;;;;;;;;;:::i;:::-;;;;;;;;;38540:13;38516:20;38526:9;38516;:20::i;:::-;38507:6;:29;;;;:::i;:::-;:46;;38469:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;38054:1344;;;38720:25;:36;38746:9;38720:36;;;;;;;;;;;;;;;;;;;;;;;;;:104;;;;;38785:31;:39;38817:6;38785:39;;;;;;;;;;;;;;;;;;;;;;;;;38784:40;38720:104;38716:682;;;38923:67;38986:3;38923:58;38979:1;38923:51;38959:14;;38923:31;38940:13;;38923:12;;:16;;:31;;;;:::i;:::-;:35;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;:62;;:67;;;;:::i;:::-;38913:6;:77;;38875:229;;;;;;;;;;;;:::i;:::-;;;;;;;;;38716:682;;;39139:31;:42;39171:9;39139:42;;;;;;;;;;;;;;;;;;;;;;;;;39134:264;;39282:13;39257:20;39267:9;39257;:20::i;:::-;39248:6;:29;;;;:::i;:::-;:47;;39210:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;39134:264;38716:682;38054:1344;37988:1425;37528:1909;39465:11;;;;;;;;;;;:37;;;;;39494:8;;;;;;;;;;;39493:9;39465:37;:82;;;;;39520:19;:27;39540:6;39520:27;;;;;;;;;;;;;;;;;;;;;;;;;39519:28;39465:82;:130;;;;;39565:19;:30;39585:9;39565:30;;;;;;;;;;;;;;;;;;;;;;;;;39564:31;39465:130;:181;;;;;39613:25;:33;39639:6;39613:33;;;;;;;;;;;;;;;;;;;;;;;;;39612:34;39465:181;39447:528;;;39673:23;39699:63;39747:14;;39699:43;39728:13;;39699:24;39717:4;39699:9;:24::i;:::-;:28;;:43;;;;:::i;:::-;:47;;:63;;;;:::i;:::-;39673:89;;39796:1;39780:15;:17;39777:156;;;39828:4;39817:8;;:15;;;;;;;;;;;;;;;;;;39851:31;39866:15;39851:14;:31::i;:::-;39912:5;39901:8;;:16;;;;;;;;;;;;;;;;;;39777:156;39958:5;39947:8;;:16;;;;;;;;;;;;;;;;;;39447:528;;39987:12;40003:8;;;;;;;;;;;40002:9;39987:24;;40112:19;:27;40132:6;40112:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;40143:19;:30;40163:9;40143:30;;;;;;;;;;;;;;;;;;;;;;;;;40112:61;40109:108;;;40200:5;40190:15;;40109:108;40306:7;:20;;;;;40317:9;;;;;;;;;;;40306:20;:99;;;;;40331:25;:33;40357:6;40331:33;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;40368:25;:36;40394:9;40368:36;;;;;;;;;;;;;;;;;;;;;;;;;40331:73;40306:99;40303:986;;;40451:15;40441:7;40426:12;;:22;;;;:::i;:::-;:40;40422:820;;;40504:23;40523:3;40504:14;40515:2;40504:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;40487:40;;40558:5;40546:9;;:17;;;;;;;;;;;;;;;;;;40582:54;40598:6;40614:4;40621:14;40582:15;:54::i;:::-;40655:79;40679:4;40686:16;;;;;;;;;;;40704:29;40730:2;40704:21;40723:1;40704:14;:18;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;40655:15;:79::i;:::-;40753:50;40773:4;40780:22;40799:2;40780:14;:18;;:22;;;;:::i;:::-;40753:11;:50::i;:::-;40834:4;40822:9;;:16;;;;;;;;;;;;;;;;;;40422:820;;;40895:22;40913:3;40895:13;40906:1;40895:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;40878:39;;40948:5;40936:9;;:17;;;;;;;;;;;;;;;;;;40972:54;40988:6;41004:4;41011:14;40972:15;:54::i;:::-;41045:49;41065:4;41072:21;41091:1;41072:14;:18;;:21;;;;:::i;:::-;41045:11;:49::i;:::-;41113:77;41137:4;41143:16;;;;;;;;;;;41161:28;41187:1;41161:21;41180:1;41161:14;:18;;:21;;;;:::i;:::-;:25;;:28;;;;:::i;:::-;41113:15;:77::i;:::-;41221:4;41209:9;;:16;;;;;;;;;;;;;;;;;;40422:820;41263:14;41253:24;;;;;:::i;:::-;;;40303:986;41301:42;41317:6;41325:9;41336:6;41301:15;:42::i;:::-;36993:4358;;;;;;:::o;2907:250::-;2965:7;2994:1;2989;:6;2985:47;;;3019:1;3012:8;;;;2985:47;3044:9;3060:1;3056;:5;;;;:::i;:::-;3044:17;;3089:1;3084;3080;:5;;;;:::i;:::-;:10;3072:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3148:1;3141:8;;;2907:250;;;;;:::o;27170:877::-;27317:1;27301:18;;:4;:18;;;;27293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27394:1;27380:16;;:2;:16;;;;27372:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27449:38;27470:4;27476:2;27480:6;27449:20;:38::i;:::-;27500:19;27522:9;:15;27532:4;27522:15;;;;;;;;;;;;;;;;27500:37;;27585:6;27570:11;:21;;27548:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;27725:6;27711:11;:20;27693:9;:15;27703:4;27693:15;;;;;;;;;;;;;;;:38;;;;27928:6;27911:9;:13;27921:2;27911:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27978:2;27963:26;;27972:4;27963:26;;;27982:6;27963:26;;;;;;:::i;:::-;;;;;;;;28002:37;28022:4;28028:2;28032:6;28002:19;:37::i;:::-;27170:877;;;;:::o;44607:188::-;44724:5;44690:25;:31;44716:4;44690:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44781:5;44747:40;;44775:4;44747:40;;;;;;;;;;;;44607:188;;:::o;2673:226::-;2793:7;2826:1;2821;:6;;2829:12;2813:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2853:9;2869:1;2865;:5;;;;:::i;:::-;2853:17;;2890:1;2883:8;;;2673:226;;;;;:::o;2340:181::-;2398:7;2418:9;2434:1;2430;:5;;;;:::i;:::-;2418:17;;2459:1;2454;:6;;2446:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2512:1;2505:8;;;2340:181;;;;:::o;3165:132::-;3223:7;3250:39;3254:1;3257;3250:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3243:46;;3165:132;;;;:::o;42110:429::-;42169:12;42184:13;42195:1;42184:6;:10;;:13;;;;:::i;:::-;42169:28;;42208:17;42228:16;42239:4;42228:6;:10;;:16;;;;:::i;:::-;42208:36;;42257:22;42282:21;42257:46;;42348:22;42365:4;42348:16;:22::i;:::-;42384:18;42405:41;42431:14;42405:21;:25;;:41;;;;:::i;:::-;42384:62;;42496:35;42509:9;42520:10;42496:12;:35::i;:::-;42110:429;;;;;:::o;29215:675::-;29318:1;29299:21;;:7;:21;;;;29291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29371:49;29392:7;29409:1;29413:6;29371:20;:49::i;:::-;29433:22;29458:9;:18;29468:7;29458:18;;;;;;;;;;;;;;;;29433:43;;29513:6;29495:14;:24;;29487:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:6;29615:14;:23;29594:9;:18;29604:7;29594:18;;;;;;;;;;;;;;;:44;;;;29749:6;29733:12;;:22;;;;;;;;;;;29810:1;29784:37;;29793:7;29784:37;;;29814:6;29784:37;;;;;;:::i;:::-;;;;;;;;29834:48;29854:7;29871:1;29875:6;29834:19;:48::i;:::-;29215:675;;;:::o;32101:125::-;;;;:::o;32830:124::-;;;;:::o;3305:312::-;3425:7;3457:1;3453;:5;3460:12;3445:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3484:9;3500:1;3496;:5;;;;:::i;:::-;3484:17;;3608:1;3601:8;;;3305:312;;;;;:::o;42547:653::-;42673:21;42711:1;42697:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42673:40;;42742:4;42724;42729:1;42724:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;42768:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42758:4;42763:1;42758:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;42867:62;42884:4;42899:15;;;;;;;;;;;42917:11;42867:8;:62::i;:::-;42968:15;;;;;;;;;;;:66;;;43049:11;43075:1;43119:4;43146;43166:15;42968:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42547:653;;:::o;43208:522::-;43356:62;43373:4;43388:15;;;;;;;;;;;43406:11;43356:8;:62::i;:::-;43461:15;;;;;;;;;;;:31;;;43500:9;43533:4;43553:11;43579:1;43622;43665:16;;;;;;;;;;;43696:15;43461:261;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43208:522;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:143::-;;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;791:80;;;;:::o;877:262::-;;985:2;973:9;964:7;960:23;956:32;953:2;;;1001:1;998;991:12;953:2;1044:1;1069:53;1114:7;1105:6;1094:9;1090:22;1069:53;:::i;:::-;1059:63;;1015:117;943:196;;;;:::o;1145:284::-;;1264:2;1252:9;1243:7;1239:23;1235:32;1232:2;;;1280:1;1277;1270:12;1232:2;1323:1;1348:64;1404:7;1395:6;1384:9;1380:22;1348:64;:::i;:::-;1338:74;;1294:128;1222:207;;;;:::o;1435:407::-;;;1560:2;1548:9;1539:7;1535:23;1531:32;1528:2;;;1576:1;1573;1566:12;1528:2;1619:1;1644:53;1689:7;1680:6;1669:9;1665:22;1644:53;:::i;:::-;1634:63;;1590:117;1746:2;1772:53;1817:7;1808:6;1797:9;1793:22;1772:53;:::i;:::-;1762:63;;1717:118;1518:324;;;;;:::o;1848:552::-;;;;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2049:1;2074:53;2119:7;2110:6;2099:9;2095:22;2074:53;:::i;:::-;2064:63;;2020:117;2176:2;2202:53;2247:7;2238:6;2227:9;2223:22;2202:53;:::i;:::-;2192:63;;2147:118;2304:2;2330:53;2375:7;2366:6;2355:9;2351:22;2330:53;:::i;:::-;2320:63;;2275:118;1948:452;;;;;:::o;2406:401::-;;;2528:2;2516:9;2507:7;2503:23;2499:32;2496:2;;;2544:1;2541;2534:12;2496:2;2587:1;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2558:117;2714:2;2740:50;2782:7;2773:6;2762:9;2758:22;2740:50;:::i;:::-;2730:60;;2685:115;2486:321;;;;;:::o;2813:407::-;;;2938:2;2926:9;2917:7;2913:23;2909:32;2906:2;;;2954:1;2951;2944:12;2906:2;2997:1;3022:53;3067:7;3058:6;3047:9;3043:22;3022:53;:::i;:::-;3012:63;;2968:117;3124:2;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3095:118;2896:324;;;;;:::o;3226:256::-;;3331:2;3319:9;3310:7;3306:23;3302:32;3299:2;;;3347:1;3344;3337:12;3299:2;3390:1;3415:50;3457:7;3448:6;3437:9;3433:22;3415:50;:::i;:::-;3405:60;;3361:114;3289:193;;;;:::o;3488:278::-;;3604:2;3592:9;3583:7;3579:23;3575:32;3572:2;;;3620:1;3617;3610:12;3572:2;3663:1;3688:61;3741:7;3732:6;3721:9;3717:22;3688:61;:::i;:::-;3678:71;;3634:125;3562:204;;;;:::o;3772:262::-;;3880:2;3868:9;3859:7;3855:23;3851:32;3848:2;;;3896:1;3893;3886:12;3848:2;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;3838:196;;;;:::o;4040:596::-;;;;4193:2;4181:9;4172:7;4168:23;4164:32;4161:2;;;4209:1;4206;4199:12;4161:2;4252:1;4277:64;4333:7;4324:6;4313:9;4309:22;4277:64;:::i;:::-;4267:74;;4223:128;4390:2;4416:64;4472:7;4463:6;4452:9;4448:22;4416:64;:::i;:::-;4406:74;;4361:129;4529:2;4555:64;4611:7;4602:6;4591:9;4587:22;4555:64;:::i;:::-;4545:74;;4500:129;4151:485;;;;;:::o;4642:179::-;;4732:46;4774:3;4766:6;4732:46;:::i;:::-;4810:4;4805:3;4801:14;4787:28;;4722:99;;;;:::o;4827:108::-;4904:24;4922:5;4904:24;:::i;:::-;4899:3;4892:37;4882:53;;:::o;4941:118::-;5028:24;5046:5;5028:24;:::i;:::-;5023:3;5016:37;5006:53;;:::o;5095:732::-;;5243:54;5291:5;5243:54;:::i;:::-;5313:86;5392:6;5387:3;5313:86;:::i;:::-;5306:93;;5423:56;5473:5;5423:56;:::i;:::-;5502:7;5533:1;5518:284;5543:6;5540:1;5537:13;5518:284;;;5619:6;5613:13;5646:63;5705:3;5690:13;5646:63;:::i;:::-;5639:70;;5732:60;5785:6;5732:60;:::i;:::-;5722:70;;5578:224;5565:1;5562;5558:9;5553:14;;5518:284;;;5522:14;5818:3;5811:10;;5219:608;;;;;;;:::o;5833:109::-;5914:21;5929:5;5914:21;:::i;:::-;5909:3;5902:34;5892:50;;:::o;5948:181::-;6060:62;6116:5;6060:62;:::i;:::-;6055:3;6048:75;6038:91;;:::o;6135:185::-;6249:64;6307:5;6249:64;:::i;:::-;6244:3;6237:77;6227:93;;:::o;6326:147::-;6421:45;6460:5;6421:45;:::i;:::-;6416:3;6409:58;6399:74;;:::o;6479:364::-;;6595:39;6628:5;6595:39;:::i;:::-;6650:71;6714:6;6709:3;6650:71;:::i;:::-;6643:78;;6730:52;6775:6;6770:3;6763:4;6756:5;6752:16;6730:52;:::i;:::-;6807:29;6829:6;6807:29;:::i;:::-;6802:3;6798:39;6791:46;;6571:272;;;;;:::o;6849:367::-;;7012:67;7076:2;7071:3;7012:67;:::i;:::-;7005:74;;7109:34;7105:1;7100:3;7096:11;7089:55;7175:5;7170:2;7165:3;7161:12;7154:27;7207:2;7202:3;7198:12;7191:19;;6995:221;;;:::o;7222:366::-;;7385:67;7449:2;7444:3;7385:67;:::i;:::-;7378:74;;7482:34;7478:1;7473:3;7469:11;7462:55;7548:4;7543:2;7538:3;7534:12;7527:26;7579:2;7574:3;7570:12;7563:19;;7368:220;;;:::o;7594:309::-;;7757:67;7821:2;7816:3;7757:67;:::i;:::-;7750:74;;7854:13;7850:1;7845:3;7841:11;7834:34;7894:2;7889:3;7885:12;7878:19;;7740:163;;;:::o;7909:310::-;;8072:67;8136:2;8131:3;8072:67;:::i;:::-;8065:74;;8169:14;8165:1;8160:3;8156:11;8149:35;8210:2;8205:3;8201:12;8194:19;;8055:164;;;:::o;8225:320::-;;8388:67;8452:2;8447:3;8388:67;:::i;:::-;8381:74;;8485:24;8481:1;8476:3;8472:11;8465:45;8536:2;8531:3;8527:12;8520:19;;8371:174;;;:::o;8551:366::-;;8714:67;8778:2;8773:3;8714:67;:::i;:::-;8707:74;;8811:34;8807:1;8802:3;8798:11;8791:55;8877:4;8872:2;8867:3;8863:12;8856:26;8908:2;8903:3;8899:12;8892:19;;8697:220;;;:::o;8923:325::-;;9086:67;9150:2;9145:3;9086:67;:::i;:::-;9079:74;;9183:29;9179:1;9174:3;9170:11;9163:50;9239:2;9234:3;9230:12;9223:19;;9069:179;;;:::o;9254:389::-;;9417:67;9481:2;9476:3;9417:67;:::i;:::-;9410:74;;9514:34;9510:1;9505:3;9501:11;9494:55;9580:27;9575:2;9570:3;9566:12;9559:49;9634:2;9629:3;9625:12;9618:19;;9400:243;;;:::o;9649:327::-;;9812:67;9876:2;9871:3;9812:67;:::i;:::-;9805:74;;9909:31;9905:1;9900:3;9896:11;9889:52;9967:2;9962:3;9958:12;9951:19;;9795:181;;;:::o;9982:370::-;;10145:67;10209:2;10204:3;10145:67;:::i;:::-;10138:74;;10242:34;10238:1;10233:3;10229:11;10222:55;10308:8;10303:2;10298:3;10294:12;10287:30;10343:2;10338:3;10334:12;10327:19;;10128:224;;;:::o;10358:386::-;;10521:67;10585:2;10580:3;10521:67;:::i;:::-;10514:74;;10618:34;10614:1;10609:3;10605:11;10598:55;10684:24;10679:2;10674:3;10670:12;10663:46;10735:2;10730:3;10726:12;10719:19;;10504:240;;;:::o;10750:385::-;;10913:67;10977:2;10972:3;10913:67;:::i;:::-;10906:74;;11010:34;11006:1;11001:3;10997:11;10990:55;11076:23;11071:2;11066:3;11062:12;11055:45;11126:2;11121:3;11117:12;11110:19;;10896:239;;;:::o;11141:305::-;;11304:66;11368:1;11363:3;11304:66;:::i;:::-;11297:73;;11400:10;11396:1;11391:3;11387:11;11380:31;11437:2;11432:3;11428:12;11421:19;;11287:159;;;:::o;11452:365::-;;11615:67;11679:2;11674:3;11615:67;:::i;:::-;11608:74;;11712:34;11708:1;11703:3;11699:11;11692:55;11778:3;11773:2;11768:3;11764:12;11757:25;11808:2;11803:3;11799:12;11792:19;;11598:219;;;:::o;11823:330::-;;11986:67;12050:2;12045:3;11986:67;:::i;:::-;11979:74;;12083:34;12079:1;12074:3;12070:11;12063:55;12144:2;12139:3;12135:12;12128:19;;11969:184;;;:::o;12159:365::-;;12322:67;12386:2;12381:3;12322:67;:::i;:::-;12315:74;;12419:34;12415:1;12410:3;12406:11;12399:55;12485:3;12480:2;12475:3;12471:12;12464:25;12515:2;12510:3;12506:12;12499:19;;12305:219;;;:::o;12530:369::-;;12693:67;12757:2;12752:3;12693:67;:::i;:::-;12686:74;;12790:34;12786:1;12781:3;12777:11;12770:55;12856:7;12851:2;12846:3;12842:12;12835:29;12890:2;12885:3;12881:12;12874:19;;12676:223;;;:::o;12905:368::-;;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13165:34;13161:1;13156:3;13152:11;13145:55;13231:6;13226:2;13221:3;13217:12;13210:28;13264:2;13259:3;13255:12;13248:19;;13051:222;;;:::o;13279:317::-;;13442:67;13506:2;13501:3;13442:67;:::i;:::-;13435:74;;13539:21;13535:1;13530:3;13526:11;13519:42;13587:2;13582:3;13578:12;13571:19;;13425:171;;;:::o;13602:329::-;;13765:67;13829:2;13824:3;13765:67;:::i;:::-;13758:74;;13862:33;13858:1;13853:3;13849:11;13842:54;13922:2;13917:3;13913:12;13906:19;;13748:183;;;:::o;13937:367::-;;14100:67;14164:2;14159:3;14100:67;:::i;:::-;14093:74;;14197:34;14193:1;14188:3;14184:11;14177:55;14263:5;14258:2;14253:3;14249:12;14242:27;14295:2;14290:3;14286:12;14279:19;;14083:221;;;:::o;14310:369::-;;14473:67;14537:2;14532:3;14473:67;:::i;:::-;14466:74;;14570:34;14566:1;14561:3;14557:11;14550:55;14636:7;14631:2;14626:3;14622:12;14615:29;14670:2;14665:3;14661:12;14654:19;;14456:223;;;:::o;14685:118::-;14772:24;14790:5;14772:24;:::i;:::-;14767:3;14760:37;14750:53;;:::o;14809:112::-;14892:22;14908:5;14892:22;:::i;:::-;14887:3;14880:35;14870:51;;:::o;14927:222::-;;15058:2;15047:9;15043:18;15035:26;;15071:71;15139:1;15128:9;15124:17;15115:6;15071:71;:::i;:::-;15025:124;;;;:::o;15155:332::-;;15314:2;15303:9;15299:18;15291:26;;15327:71;15395:1;15384:9;15380:17;15371:6;15327:71;:::i;:::-;15408:72;15476:2;15465:9;15461:18;15452:6;15408:72;:::i;:::-;15281:206;;;;;:::o;15493:332::-;;15652:2;15641:9;15637:18;15629:26;;15665:71;15733:1;15722:9;15718:17;15709:6;15665:71;:::i;:::-;15746:72;15814:2;15803:9;15799:18;15790:6;15746:72;:::i;:::-;15619:206;;;;;:::o;15831:807::-;;16118:3;16107:9;16103:19;16095:27;;16132:71;16200:1;16189:9;16185:17;16176:6;16132:71;:::i;:::-;16213:72;16281:2;16270:9;16266:18;16257:6;16213:72;:::i;:::-;16295:80;16371:2;16360:9;16356:18;16347:6;16295:80;:::i;:::-;16385;16461:2;16450:9;16446:18;16437:6;16385:80;:::i;:::-;16475:73;16543:3;16532:9;16528:19;16519:6;16475:73;:::i;:::-;16558;16626:3;16615:9;16611:19;16602:6;16558:73;:::i;:::-;16085:553;;;;;;;;;:::o;16644:210::-;;16769:2;16758:9;16754:18;16746:26;;16782:65;16844:1;16833:9;16829:17;16820:6;16782:65;:::i;:::-;16736:118;;;;:::o;16860:272::-;;17016:2;17005:9;17001:18;16993:26;;17029:96;17122:1;17111:9;17107:17;17098:6;17029:96;:::i;:::-;16983:149;;;;:::o;17138:276::-;;17296:2;17285:9;17281:18;17273:26;;17309:98;17404:1;17393:9;17389:17;17380:6;17309:98;:::i;:::-;17263:151;;;;:::o;17420:313::-;;17571:2;17560:9;17556:18;17548:26;;17620:9;17614:4;17610:20;17606:1;17595:9;17591:17;17584:47;17648:78;17721:4;17712:6;17648:78;:::i;:::-;17640:86;;17538:195;;;;:::o;17739:419::-;;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17910:248;;;:::o;18164:419::-;;18368:2;18357:9;18353:18;18345:26;;18417:9;18411:4;18407:20;18403:1;18392:9;18388:17;18381:47;18445:131;18571:4;18445:131;:::i;:::-;18437:139;;18335:248;;;:::o;18589:419::-;;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:131;18996:4;18870:131;:::i;:::-;18862:139;;18760:248;;;:::o;19014:419::-;;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19185:248;;;:::o;19439:419::-;;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19610:248;;;:::o;19864:419::-;;20068:2;20057:9;20053:18;20045:26;;20117:9;20111:4;20107:20;20103:1;20092:9;20088:17;20081:47;20145:131;20271:4;20145:131;:::i;:::-;20137:139;;20035:248;;;:::o;20289:419::-;;20493:2;20482:9;20478:18;20470:26;;20542:9;20536:4;20532:20;20528:1;20517:9;20513:17;20506:47;20570:131;20696:4;20570:131;:::i;:::-;20562:139;;20460:248;;;:::o;20714:419::-;;20918:2;20907:9;20903:18;20895:26;;20967:9;20961:4;20957:20;20953:1;20942:9;20938:17;20931:47;20995:131;21121:4;20995:131;:::i;:::-;20987:139;;20885:248;;;:::o;21139:419::-;;21343:2;21332:9;21328:18;21320:26;;21392:9;21386:4;21382:20;21378:1;21367:9;21363:17;21356:47;21420:131;21546:4;21420:131;:::i;:::-;21412:139;;21310:248;;;:::o;21564:419::-;;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:131;21971:4;21845:131;:::i;:::-;21837:139;;21735:248;;;:::o;21989:419::-;;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;22160:248;;;:::o;22414:419::-;;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22585:248;;;:::o;22839:419::-;;23043:2;23032:9;23028:18;23020:26;;23092:9;23086:4;23082:20;23078:1;23067:9;23063:17;23056:47;23120:131;23246:4;23120:131;:::i;:::-;23112:139;;23010:248;;;:::o;23264:419::-;;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23435:248;;;:::o;23689:419::-;;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23860:248;;;:::o;24114:419::-;;24318:2;24307:9;24303:18;24295:26;;24367:9;24361:4;24357:20;24353:1;24342:9;24338:17;24331:47;24395:131;24521:4;24395:131;:::i;:::-;24387:139;;24285:248;;;:::o;24539:419::-;;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24710:248;;;:::o;24964:419::-;;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;25135:248;;;:::o;25389:419::-;;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25560:248;;;:::o;25814:419::-;;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25985:248;;;:::o;26239:419::-;;26443:2;26432:9;26428:18;26420:26;;26492:9;26486:4;26482:20;26478:1;26467:9;26463:17;26456:47;26520:131;26646:4;26520:131;:::i;:::-;26512:139;;26410:248;;;:::o;26664:419::-;;26868:2;26857:9;26853:18;26845:26;;26917:9;26911:4;26907:20;26903:1;26892:9;26888:17;26881:47;26945:131;27071:4;26945:131;:::i;:::-;26937:139;;26835:248;;;:::o;27089:222::-;;27220:2;27209:9;27205:18;27197:26;;27233:71;27301:1;27290:9;27286:17;27277:6;27233:71;:::i;:::-;27187:124;;;;:::o;27317:831::-;;27618:3;27607:9;27603:19;27595:27;;27632:71;27700:1;27689:9;27685:17;27676:6;27632:71;:::i;:::-;27713:80;27789:2;27778:9;27774:18;27765:6;27713:80;:::i;:::-;27840:9;27834:4;27830:20;27825:2;27814:9;27810:18;27803:48;27868:108;27971:4;27962:6;27868:108;:::i;:::-;27860:116;;27986:72;28054:2;28043:9;28039:18;28030:6;27986:72;:::i;:::-;28068:73;28136:3;28125:9;28121:19;28112:6;28068:73;:::i;:::-;27585:563;;;;;;;;:::o;28154:214::-;;28281:2;28270:9;28266:18;28258:26;;28294:67;28358:1;28347:9;28343:17;28334:6;28294:67;:::i;:::-;28248:120;;;;:::o;28374:132::-;;28464:3;28456:11;;28494:4;28489:3;28485:14;28477:22;;28446:60;;;:::o;28512:114::-;;28613:5;28607:12;28597:22;;28586:40;;;:::o;28632:99::-;;28718:5;28712:12;28702:22;;28691:40;;;:::o;28737:113::-;;28839:4;28834:3;28830:14;28822:22;;28812:38;;;:::o;28856:184::-;;28989:6;28984:3;28977:19;29029:4;29024:3;29020:14;29005:29;;28967:73;;;;:::o;29046:169::-;;29164:6;29159:3;29152:19;29204:4;29199:3;29195:14;29180:29;;29142:73;;;;:::o;29221:305::-;;29280:20;29298:1;29280:20;:::i;:::-;29275:25;;29314:20;29332:1;29314:20;:::i;:::-;29309:25;;29468:1;29400:66;29396:74;29393:1;29390:81;29387:2;;;29474:18;;:::i;:::-;29387:2;29518:1;29515;29511:9;29504:16;;29265:261;;;;:::o;29532:185::-;;29589:20;29607:1;29589:20;:::i;:::-;29584:25;;29623:20;29641:1;29623:20;:::i;:::-;29618:25;;29662:1;29652:2;;29667:18;;:::i;:::-;29652:2;29709:1;29706;29702:9;29697:14;;29574:143;;;;:::o;29723:348::-;;29786:20;29804:1;29786:20;:::i;:::-;29781:25;;29820:20;29838:1;29820:20;:::i;:::-;29815:25;;30008:1;29940:66;29936:74;29933:1;29930:81;29925:1;29918:9;29911:17;29907:105;29904:2;;;30015:18;;:::i;:::-;29904:2;30063:1;30060;30056:9;30045:20;;29771:300;;;;:::o;30077:191::-;;30137:20;30155:1;30137:20;:::i;:::-;30132:25;;30171:20;30189:1;30171:20;:::i;:::-;30166:25;;30210:1;30207;30204:8;30201:2;;;30215:18;;:::i;:::-;30201:2;30260:1;30257;30253:9;30245:17;;30122:146;;;;:::o;30274:96::-;;30340:24;30358:5;30340:24;:::i;:::-;30329:35;;30319:51;;;:::o;30376:90::-;;30453:5;30446:13;30439:21;30428:32;;30418:48;;;:::o;30472:126::-;;30549:42;30542:5;30538:54;30527:65;;30517:81;;;:::o;30604:77::-;;30670:5;30659:16;;30649:32;;;:::o;30687:86::-;;30762:4;30755:5;30751:16;30740:27;;30730:43;;;:::o;30779:176::-;;30887:62;30943:5;30887:62;:::i;:::-;30874:75;;30864:91;;;:::o;30961:138::-;;31069:24;31087:5;31069:24;:::i;:::-;31056:37;;31046:53;;;:::o;31105:180::-;;31215:64;31273:5;31215:64;:::i;:::-;31202:77;;31192:93;;;:::o;31291:140::-;;31401:24;31419:5;31401:24;:::i;:::-;31388:37;;31378:53;;;:::o;31437:121::-;;31528:24;31546:5;31528:24;:::i;:::-;31515:37;;31505:53;;;:::o;31564:307::-;31632:1;31642:113;31656:6;31653:1;31650:13;31642:113;;;31741:1;31736:3;31732:11;31726:18;31722:1;31717:3;31713:11;31706:39;31678:2;31675:1;31671:10;31666:15;;31642:113;;;31773:6;31770:1;31767:13;31764:2;;;31853:1;31844:6;31839:3;31835:16;31828:27;31764:2;31613:258;;;;:::o;31877:320::-;;31958:1;31952:4;31948:12;31938:22;;32005:1;31999:4;31995:12;32026:18;32016:2;;32082:4;32074:6;32070:17;32060:27;;32016:2;32144;32136:6;32133:14;32113:18;32110:38;32107:2;;;32163:18;;:::i;:::-;32107:2;31928:269;;;;:::o;32203:180::-;32251:77;32248:1;32241:88;32348:4;32345:1;32338:15;32372:4;32369:1;32362:15;32389:180;32437:77;32434:1;32427:88;32534:4;32531:1;32524:15;32558:4;32555:1;32548:15;32575:180;32623:77;32620:1;32613:88;32720:4;32717:1;32710:15;32744:4;32741:1;32734:15;32761:102;;32853:2;32849:7;32844:2;32837:5;32833:14;32829:28;32819:38;;32809:54;;;:::o;32869:122::-;32942:24;32960:5;32942:24;:::i;:::-;32935:5;32932:35;32922:2;;32981:1;32978;32971:12;32922:2;32912:79;:::o;32997:116::-;33067:21;33082:5;33067:21;:::i;:::-;33060:5;33057:32;33047:2;;33103:1;33100;33093:12;33047:2;33037:76;:::o;33119:122::-;33192:24;33210:5;33192:24;:::i;:::-;33185:5;33182:35;33172:2;;33231:1;33228;33221:12;33172:2;33162:79;:::o

Swarm Source

ipfs://0d1fa75bb785b0a9f3562d5c46852ca8175ec6909e45eed51f946a3abcd95c06
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.