ETH Price: $2,717.60 (+6.57%)
Gas: 4 Gwei

Token

The Awesome Apples (APPLES)
 

Overview

Max Total Supply

0 APPLES

Holders

121

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
adhdegen.eth
Balance
6 APPLES
0xea85CCD2a311e579167Ae0406D9f3302A358db06
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:
SimpleCollectible

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) internal virtual {}
}

// File: contracts/Apples.sol

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.11;






enum SaleState {
    NOSALE, PRESALE, SALE
}

contract SimpleCollectible is ERC721, Ownable, ReentrancyGuard {
    uint256 public tokenCounter;
    uint256 public revealed;

    mapping(address => bool) isApprovedFruitListAddress;
    mapping(address => mapping(uint256 => bool)) isApprovedFruitListTokenClaimed;

    address public WG;
    address public MORGAN;
    uint256 public _presalePrice = .05 ether;
    uint256 public _salePrice = .1 ether;

    uint256 public _maxPerWallet = 30; // Set to one higher than actual, to save gas on <= checks.

    uint256 public _presaleSupply = 5000;
    uint256 public _totalSupply = 7500; 

    string private _baseTokenURI;
    SaleState public _saleState; // 0 - No sale. 1 - Presale. 2 - Main Sale.

    // Faciliating the needed functionality for the presale
    mapping(address => bool) public addressToPreSaleEntry;
    mapping(address => uint256) public minted;

    modifier onlyTeam() {
        address sender = msg.sender;
        require(sender == owner() || sender == MORGAN || sender == WG);
        _;
    }

    modifier fuckYou() {
        require(
            tx.origin == msg.sender, "No contract interxns"
        );
        _;
    }

    constructor () ERC721 ("The Awesome Apples","APPLES")  {
        _saleState = SaleState.PRESALE;
        setWG(0x41538872240Ef02D6eD9aC45cf4Ff864349D51ED);
        setMorgan(0x96192E3e1f48459Eee825a73E612C6e32822c407);
        approveFruitListAddress(0x0B22fE0a2995C5389AC093400e52471DCa8BB48a);        
        approveFruitListAddress(0x2eFa07CaC3395599db83035D196F2A0e7263F766);
        setBaseURI("http://apples-md-123.s3-website-us-west-1.amazonaws.com/");
        teamMint(MORGAN, 4);
        revealed = 4;
    }

    //                $$\            $$\                         $$\            $$\                         $$\            $$\     
    //                \__|           $$ |                        \__|           $$ |                        \__|           $$ |    
    //  $$$$$$\$$$$\  $$\ $$$$$$$\ $$$$$$\         $$$$$$\$$$$\  $$\ $$$$$$$\ $$$$$$\         $$$$$$\$$$$\  $$\ $$$$$$$\ $$$$$$\   
    //  $$  _$$  _$$\ $$ |$$  __$$\\_$$  _|        $$  _$$  _$$\ $$ |$$  __$$\\_$$  _|        $$  _$$  _$$\ $$ |$$  __$$\\_$$  _|  
    //  $$ / $$ / $$ |$$ |$$ |  $$ | $$ |          $$ / $$ / $$ |$$ |$$ |  $$ | $$ |          $$ / $$ / $$ |$$ |$$ |  $$ | $$ |    
    //  $$ | $$ | $$ |$$ |$$ |  $$ | $$ |$$\       $$ | $$ | $$ |$$ |$$ |  $$ | $$ |$$\       $$ | $$ | $$ |$$ |$$ |  $$ | $$ |$$\ 
    //  $$ | $$ | $$ |$$ |$$ |  $$ | \$$$$  |      $$ | $$ | $$ |$$ |$$ |  $$ | \$$$$  |      $$ | $$ | $$ |$$ |$$ |  $$ | \$$$$  |
    //  \__| \__| \__|\__|\__|  \__|  \____/       \__| \__| \__|\__|\__|  \__|  \____/       \__| \__| \__|\__|\__|  \__|  \____/ 
    //                                                                                                                             
    //                                                                                                                             

    function mintFruitListCollectibles(address _ownedToken, uint256[] memory tokenIds) public payable nonReentrant fuckYou {
        uint256 count = tokenIds.length;
        require(count > 0, "list empty");
        require(isApprovedFruitListAddress[_ownedToken], "Token is not approved");

        require(_saleState == SaleState.PRESALE, "presale ended or not open");
        require(minted[msg.sender] + count < _maxPerWallet, "wallet limit reached");
        require((count + tokenCounter) <= _presaleSupply, "Ran out of NFTs for presale! Sry!");
        require(msg.value >= (_presalePrice * count), "Ether value sent is too low");
        for (uint256 i = 0; i < count; i++) {
            uint256 tokenId = tokenIds[i];
            require(
                IERC721(_ownedToken).ownerOf(tokenId) == msg.sender
            );
            require(!isApprovedFruitListTokenClaimed[_ownedToken][tokenId], "token already claimed");
            isApprovedFruitListTokenClaimed[_ownedToken][tokenId] = true;
        }     
        minted[msg.sender] += count;
        createCollectibles(msg.sender, count);

    }

    function mintPresaleCollectibles(uint256 _count) public payable nonReentrant fuckYou {
        require(_saleState == SaleState.PRESALE, "presale ended or not open");
        require(minted[msg.sender] + _count < _maxPerWallet, "wallet limit reached");
        require(isWalletInPresale(msg.sender), "Wallet isnt in presale! The owner needs to addWalletToPresale.");
        require((_count + tokenCounter) <= _presaleSupply, "Ran out of NFTs for presale! Sry!");
        require(msg.value >= (_presalePrice * _count), "Ether value sent is too low");

        minted[msg.sender] += _count;
        createCollectibles(msg.sender, _count);
    }

    
    function mintCollectibles(uint256 _count) public payable nonReentrant fuckYou {
        require(_saleState == SaleState.SALE, "sale not open");
        require(minted[msg.sender] + _count < _maxPerWallet, "wallet limit reached");

        require((_count + tokenCounter) <= _totalSupply, "Ran out of NFTs for sale! Sry!");
        require(msg.value >= (_salePrice * _count), "Ether value sent is not correct");

        minted[msg.sender] += _count;
        createCollectibles(msg.sender, _count);
    }

	function teamMintList(address[] memory _user, uint256 _count) public onlyTeam {
        require(((_count * _user.length) + tokenCounter) <= _totalSupply, "Ran out of NFTs for sale! Sry!");
        for(uint256 i = 0; i < _user.length; i++) {
            teamMint(_user[i], _count);
        }
	}
	function teamMint(address _user, uint256 _count) public onlyTeam {
        require((_count + tokenCounter) <= _totalSupply, "Ran out of NFTs for sale! Sry!");
        
        createCollectibles(_user, _count);
	}

    function createCollectibles(address _user, uint256 _count) private {
        for(uint i = 0; i < _count; i++) {
            createCollectible(_user);
        }
    }

    function createCollectible(address _user) private {
            _safeMint(_user, tokenCounter);
            tokenCounter = tokenCounter + 1;
    }


    //  $$$$$$$\  $$$$$$$$\  $$$$$$\  $$$$$$$\        $$\      $$\ $$$$$$$$\ $$$$$$$$\ $$\   $$\  $$$$$$\  $$$$$$$\   $$$$$$\  
    //  $$  __$$\ $$  _____|$$  __$$\ $$  __$$\       $$$\    $$$ |$$  _____|\__$$  __|$$ |  $$ |$$  __$$\ $$  __$$\ $$  __$$\ 
    //  $$ |  $$ |$$ |      $$ /  $$ |$$ |  $$ |      $$$$\  $$$$ |$$ |         $$ |   $$ |  $$ |$$ /  $$ |$$ |  $$ |$$ /  \__|
    //  $$$$$$$  |$$$$$\    $$$$$$$$ |$$ |  $$ |      $$\$$\$$ $$ |$$$$$\       $$ |   $$$$$$$$ |$$ |  $$ |$$ |  $$ |\$$$$$$\  
    //  $$  __$$< $$  __|   $$  __$$ |$$ |  $$ |      $$ \$$$  $$ |$$  __|      $$ |   $$  __$$ |$$ |  $$ |$$ |  $$ | \____$$\ 
    //  $$ |  $$ |$$ |      $$ |  $$ |$$ |  $$ |      $$ |\$  /$$ |$$ |         $$ |   $$ |  $$ |$$ |  $$ |$$ |  $$ |$$\   $$ |
    //  $$ |  $$ |$$$$$$$$\ $$ |  $$ |$$$$$$$  |      $$ | \_/ $$ |$$$$$$$$\    $$ |   $$ |  $$ | $$$$$$  |$$$$$$$  |\$$$$$$  |
    //  \__|  \__|\________|\__|  \__|\_______/       \__|     \__|\________|   \__|   \__|  \__| \______/ \_______/  \______/ 
    //                                                                                                                         

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        if (tokenId > revealed) {
             return string(abi.encodePacked(getBaseURI(), "unrevealed.json"));
        }
        return  string(abi.encodePacked(getBaseURI(), Strings.toString(tokenId), ".json"));
    }

    function getBaseURI() public view returns (string memory){
        return _baseTokenURI;
    }
    
    function isWalletInPresale(address _address) public view returns (bool) {
        return addressToPreSaleEntry[_address];
    }

    //   $$$$$$\  $$\      $$\ $$\   $$\ $$$$$$$$\ $$$$$$$\        $$\      $$\ $$$$$$$$\ $$$$$$$$\ $$\   $$\  $$$$$$\  $$$$$$$\   $$$$$$\  
    //  $$  __$$\ $$ | $\  $$ |$$$\  $$ |$$  _____|$$  __$$\       $$$\    $$$ |$$  _____|\__$$  __|$$ |  $$ |$$  __$$\ $$  __$$\ $$  __$$\ 
    //  $$ /  $$ |$$ |$$$\ $$ |$$$$\ $$ |$$ |      $$ |  $$ |      $$$$\  $$$$ |$$ |         $$ |   $$ |  $$ |$$ /  $$ |$$ |  $$ |$$ /  \__|
    //  $$ |  $$ |$$ $$ $$\$$ |$$ $$\$$ |$$$$$\    $$$$$$$  |      $$\$$\$$ $$ |$$$$$\       $$ |   $$$$$$$$ |$$ |  $$ |$$ |  $$ |\$$$$$$\  
    //  $$ |  $$ |$$$$  _$$$$ |$$ \$$$$ |$$  __|   $$  __$$<       $$ \$$$  $$ |$$  __|      $$ |   $$  __$$ |$$ |  $$ |$$ |  $$ | \____$$\ 
    //  $$ |  $$ |$$$  / \$$$ |$$ |\$$$ |$$ |      $$ |  $$ |      $$ |\$  /$$ |$$ |         $$ |   $$ |  $$ |$$ |  $$ |$$ |  $$ |$$\   $$ |
    //   $$$$$$  |$$  /   \$$ |$$ | \$$ |$$$$$$$$\ $$ |  $$ |      $$ | \_/ $$ |$$$$$$$$\    $$ |   $$ |  $$ | $$$$$$  |$$$$$$$  |\$$$$$$  |
    //   \______/ \__/     \__|\__|  \__|\________|\__|  \__|      \__|     \__|\________|   \__|   \__|  \__| \______/ \_______/  \______/ 
    //                                                                                                                                      

    function addWalletsToPresale(address[] memory _addresses) public onlyTeam {
        for(uint256 i = 0; i < _addresses.length; i++) {
            addressToPreSaleEntry[_addresses[i]] = true;
        }
    }
    function addWalletToPresale(address _address) public onlyTeam {
        require(!addressToPreSaleEntry[_address], "address already in presale");
        addressToPreSaleEntry[_address] = true;
    }

    function approveFruitListAddress(address _address) public onlyOwner {
        isApprovedFruitListAddress[_address] = true;
    }

    function setSaleState(SaleState saleState) public onlyOwner {
        _saleState = saleState;
    }
    function setSalePrice(uint256 _price) public onlyOwner {
        _salePrice = _price;
    }
    function setPresalePrice(uint256 _presalePrice1) public onlyOwner {
        _presalePrice = _presalePrice1;
    }
    function setMaxPerWallet(uint256 maxPerWallet) public onlyOwner {
        _maxPerWallet = maxPerWallet;
    }

    function reveal(uint256 _tokenId) public onlyOwner {
        revealed = _tokenId;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner {
        _baseTokenURI = _baseURI;
    }

    function setWG(address _wg) public onlyOwner {
        WG = _wg;
    }
    function setMorgan(address morgan) public onlyOwner {
        MORGAN = morgan;
    }

    function withdrawAll(address charity, string memory message) public onlyOwner nonReentrant {
        require(WG != address(0), "Backend dev not set");
        require(MORGAN != address(0), "Morgan not set");
        require(charity != address(0), "Charity not set");
        uint256 balance = address(this).balance;
        uint256 charitableContribution = balance * 40 / 100;
        require(payable(charity).send(charitableContribution));
        emit DonationSent(charity,charitableContribution, message);
        require(payable(WG).send(balance * 125 / 1000));
        require(payable(MORGAN).send(balance * 125 / 1000));
        require(payable(msg.sender).send(address(this).balance));

    }
    event DonationSent(address _charity, uint256 _amount, string _message);
}

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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_charity","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"_message","type":"string"}],"name":"DonationSent","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MORGAN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleState","outputs":[{"internalType":"enum SaleState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addWalletToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addWalletsToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToPreSaleEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"approveFruitListAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isWalletInPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintCollectibles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_ownedToken","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mintFruitListCollectibles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintPresaleCollectibles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"morgan","type":"address"}],"name":"setMorgan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presalePrice1","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SaleState","name":"saleState","type":"uint8"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wg","type":"address"}],"name":"setWG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"teamMintList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"charity","type":"address"},{"internalType":"string","name":"message","type":"string"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266b1a2bc2ec50000600e5567016345785d8a0000600f55601e601055611388601155611d4c6012553480156200003957600080fd5b506040518060400160405280601281526020017f54686520417765736f6d65204170706c657300000000000000000000000000008152506040518060400160405280600681526020017f4150504c455300000000000000000000000000000000000000000000000000008152508160009080519060200190620000be92919062000cdf565b508060019080519060200190620000d792919062000cdf565b505050620000fa620000ee6200023160201b60201c565b6200023960201b60201c565b60016007819055506001601460006101000a81548160ff021916908360028111156200012b576200012a62000d8f565b5b0217905550620001557341538872240ef02d6ed9ac45cf4ff864349d51ed620002ff60201b60201c565b6200017a7396192e3e1f48459eee825a73e612c6e32822c407620003d260201b60201c565b6200019f730b22fe0a2995c5389ac093400e52471dca8bb48a620004a560201b60201c565b620001c4732efa07cac3395599db83035d196f2a0e7263f766620004a560201b60201c565b620001ee604051806060016040528060388152602001620071c3603891396200058f60201b60201c565b62000223600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660046200063a60201b60201c565b60046009819055506200135a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200030f6200023160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000335620007a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200038e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003859062000e1f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620003e26200023160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000408620007a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004589062000e1f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620004b56200023160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004db620007a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000534576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052b9062000e1f565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6200059f6200023160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005c5620007a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200061e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006159062000e1f565b60405180910390fd5b80601390805190602001906200063692919062000cdf565b5050565b60003390506200064f620007a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480620006d65750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806200072f5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6200073957600080fd5b601254600854836200074c919062000e7a565b111562000790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007879062000f27565b60405180910390fd5b620007a28383620007d160201b60201c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60005b818110156200080457620007ee836200080960201b60201c565b8080620007fb9062000f49565b915050620007d4565b505050565b6200081d816008546200083760201b60201c565b60016008546200082e919062000e7a565b60088190555050565b620008598282604051806020016040528060008152506200085d60201b60201c565b5050565b6200086f8383620008cb60201b60201c565b62000884600084848462000ab160201b60201c565b620008c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008bd906200100d565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000935906200107f565b60405180910390fd5b6200094f8162000c5b60201b60201c565b1562000992576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098990620010f1565b60405180910390fd5b620009a66000838362000cc760201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009f8919062000e7a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000adf8473ffffffffffffffffffffffffffffffffffffffff1662000ccc60201b6200310a1760201c565b1562000c4e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b116200023160201b60201c565b8786866040518563ffffffff1660e01b815260040162000b3594939291906200120d565b6020604051808303816000875af192505050801562000b7457506040513d601f19601f8201168201806040525081019062000b719190620012c3565b60015b62000bfd573d806000811462000ba7576040519150601f19603f3d011682016040523d82523d6000602084013e62000bac565b606091505b5060008151141562000bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bec906200100d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000c53565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b82805462000ced9062001324565b90600052602060002090601f01602090048101928262000d11576000855562000d5d565b82601f1062000d2c57805160ff191683800117855562000d5d565b8280016001018555821562000d5d579182015b8281111562000d5c57825182559160200191906001019062000d3f565b5b50905062000d6c919062000d70565b5090565b5b8082111562000d8b57600081600090555060010162000d71565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0760208362000dbe565b915062000e148262000dcf565b602082019050919050565b6000602082019050818103600083015262000e3a8162000df8565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e878262000e41565b915062000e948362000e41565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ecc5762000ecb62000e4b565b5b828201905092915050565b7f52616e206f7574206f66204e46547320666f722073616c652120537279210000600082015250565b600062000f0f601e8362000dbe565b915062000f1c8262000ed7565b602082019050919050565b6000602082019050818103600083015262000f428162000f00565b9050919050565b600062000f568262000e41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000f8c5762000f8b62000e4b565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000ff560328362000dbe565b9150620010028262000f97565b604082019050919050565b60006020820190508181036000830152620010288162000fe6565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200106760208362000dbe565b915062001074826200102f565b602082019050919050565b600060208201905081810360008301526200109a8162001058565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620010d9601c8362000dbe565b9150620010e682620010a1565b602082019050919050565b600060208201905081810360008301526200110c81620010ca565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011408262001113565b9050919050565b620011528162001133565b82525050565b620011638162000e41565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620011a557808201518184015260208101905062001188565b83811115620011b5576000848401525b50505050565b6000601f19601f8301169050919050565b6000620011d98262001169565b620011e5818562001174565b9350620011f781856020860162001185565b6200120281620011bb565b840191505092915050565b600060808201905062001224600083018762001147565b62001233602083018662001147565b62001242604083018562001158565b8181036060830152620012568184620011cc565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200129d8162001266565b8114620012a957600080fd5b50565b600081519050620012bd8162001292565b92915050565b600060208284031215620012dc57620012db62001261565b5b6000620012ec84828501620012ac565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200133d57607f821691505b60208210811415620013545762001353620012f5565b5b50919050565b615e59806200136a6000396000f3fe6080604052600436106102885760003560e01c80636352211e1161015a578063a22cb465116100c1578063d082e3811161007a578063d082e3811461099b578063e268e4d3146109c6578063e985e9c5146109ef578063ec40217514610a2c578063f2fde38b14610a57578063f449c3cb14610a8057610288565b8063a22cb46514610891578063add5a4fa146108ba578063b88d4fde146108e3578063c2ca0ac51461090c578063c6152d6114610935578063c87b56dd1461095e57610288565b8063889299da11610113578063889299da146107af5780638aa42302146107d85780638da5cb5b146107f457806394ffdba71461081f57806395d89b411461083b5780639be5ad781461086657610288565b80636352211e1461069f57806370a08231146106dc578063714c539814610719578063715018a6146107445780637fa8e5e41461075b5780638359fddc1461078657610288565b806323b872dd116101fe57806342842e0e116101b757806342842e0e146105a35780634be10631146105cc57806351830227146105f757806355f804b3146106225780635a67de071461064b5780635f0d246a1461067457610288565b806323b872dd14610483578063255ffaf4146104ac5780632e3fd2ac146104e95780632f289997146105265780633549345e1461054f5780633eaaf86b1461057857610288565b806316ee72171161025057806316ee721714610384578063178a8569146103ad5780631919fed7146103c95780631e6bd572146103f25780631e7269c51461041d5780631ff714a31461045a57610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b3146103325780630c60c7ff1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613f11565b610aab565b6040516102c19190613f59565b60405180910390f35b3480156102d657600080fd5b506102df610b8d565b6040516102ec919061400d565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190614065565b610c1f565b60405161032991906140d3565b60405180910390f35b34801561033e57600080fd5b506103596004803603810190610354919061411a565b610ca4565b005b34801561036757600080fd5b50610382600480360381019061037d919061415a565b610dbc565b005b34801561039057600080fd5b506103ab60048036038101906103a6919061415a565b610e7c565b005b6103c760048036038101906103c29190614065565b611059565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190614065565b611325565b005b3480156103fe57600080fd5b506104076113ab565b60405161041491906140d3565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f919061415a565b6113d1565b6040516104519190614196565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906142f9565b6113e9565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190614355565b611584565b005b3480156104b857600080fd5b506104d360048036038101906104ce919061415a565b6115e4565b6040516104e09190613f59565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061415a565b611604565b60405161051d9190613f59565b60405180910390f35b34801561053257600080fd5b5061054d600480360381019061054891906143a8565b61165a565b005b34801561055b57600080fd5b5061057660048036038101906105719190614065565b6117e4565b005b34801561058457600080fd5b5061058d61186a565b60405161059a9190614196565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190614355565b611870565b005b3480156105d857600080fd5b506105e1611890565b6040516105ee91906140d3565b60405180910390f35b34801561060357600080fd5b5061060c6118b6565b6040516106199190614196565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906144a6565b6118bc565b005b34801561065757600080fd5b50610672600480360381019061066d9190614514565b611952565b005b34801561068057600080fd5b506106896119fb565b6040516106969190614196565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190614065565b611a01565b6040516106d391906140d3565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe919061415a565b611ab3565b6040516107109190614196565b60405180910390f35b34801561072557600080fd5b5061072e611b6b565b60405161073b919061400d565b60405180910390f35b34801561075057600080fd5b50610759611bfd565b005b34801561076757600080fd5b50610770611c85565b60405161077d9190614196565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190614541565b611c8b565b005b3480156107bb57600080fd5b506107d660048036038101906107d1919061415a565b6120c2565b005b6107f260048036038101906107ed9190614065565b612199565b005b34801561080057600080fd5b506108096124ae565b60405161081691906140d3565b60405180910390f35b61083960048036038101906108349190614660565b6124d8565b005b34801561084757600080fd5b50610850612a73565b60405161085d919061400d565b60405180910390f35b34801561087257600080fd5b5061087b612b05565b6040516108889190614733565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b3919061477a565b612b18565b005b3480156108c657600080fd5b506108e160048036038101906108dc919061411a565b612b2e565b005b3480156108ef57600080fd5b5061090a6004803603810190610905919061485b565b612c83565b005b34801561091857600080fd5b50610933600480360381019061092e9190614065565b612ce5565b005b34801561094157600080fd5b5061095c6004803603810190610957919061415a565b612d6b565b005b34801561096a57600080fd5b5061098560048036038101906109809190614065565b612e2b565b604051610992919061400d565b60405180910390f35b3480156109a757600080fd5b506109b0612ee6565b6040516109bd9190614196565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614065565b612eec565b005b3480156109fb57600080fd5b50610a166004803603810190610a1191906148de565b612f72565b604051610a239190613f59565b60405180910390f35b348015610a3857600080fd5b50610a41613006565b604051610a4e9190614196565b60405180910390f35b348015610a6357600080fd5b50610a7e6004803603810190610a79919061415a565b61300c565b005b348015610a8c57600080fd5b50610a95613104565b604051610aa29190614196565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b865750610b858261311d565b5b9050919050565b606060008054610b9c9061494d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc89061494d565b8015610c155780601f10610bea57610100808354040283529160200191610c15565b820191906000526020600020905b815481529060010190602001808311610bf857829003601f168201915b5050505050905090565b6000610c2a82613187565b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c60906149f1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610caf82611a01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790614a83565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d3f6131f3565b73ffffffffffffffffffffffffffffffffffffffff161480610d6e5750610d6d81610d686131f3565b612f72565b5b610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490614b15565b60405180910390fd5b610db783836131fb565b505050565b610dc46131f3565b73ffffffffffffffffffffffffffffffffffffffff16610de26124ae565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90614b81565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000339050610e896124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f0f5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610f675750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610f7057600080fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614bed565b60405180910390fd5b6001601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6002600754141561109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690614c59565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c90614cc5565b60405180910390fd5b600280811115611128576111276146bc565b5b601460009054906101000a900460ff16600281111561114a576111496146bc565b5b1461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614d31565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d89190614d80565b10611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90614e22565b60405180910390fd5b601254600854826112299190614d80565b111561126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190614e8e565b60405180910390fd5b80600f546112789190614eae565b3410156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190614f54565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113099190614d80565b9250508190555061131a33826132b4565b600160078190555050565b61132d6131f3565b73ffffffffffffffffffffffffffffffffffffffff1661134b6124ae565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890614b81565b60405180910390fd5b80600f8190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60166020528060005260406000206000915090505481565b60003390506113f66124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061147c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806114d45750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6114dd57600080fd5b6012546008548451846114f09190614eae565b6114fa9190614d80565b111561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290614e8e565b60405180910390fd5b60005b835181101561157e5761156b84828151811061155d5761155c614f74565b5b602002602001015184612b2e565b808061157690614fa3565b91505061153e565b50505050565b61159561158f6131f3565b826132e0565b6115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061505e565b60405180910390fd5b6115df8383836133be565b505050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60003390506116676124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806116ed5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806117455750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61174e57600080fd5b60005b82518110156117df5760016015600085848151811061177357611772614f74565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117d790614fa3565b915050611751565b505050565b6117ec6131f3565b73ffffffffffffffffffffffffffffffffffffffff1661180a6124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790614b81565b60405180910390fd5b80600e8190555050565b60125481565b61188b83838360405180602001604052806000815250612c83565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6118c46131f3565b73ffffffffffffffffffffffffffffffffffffffff166118e26124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614b81565b60405180910390fd5b806013908051906020019061194e929190613e02565b5050565b61195a6131f3565b73ffffffffffffffffffffffffffffffffffffffff166119786124ae565b73ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590614b81565b60405180910390fd5b80601460006101000a81548160ff021916908360028111156119f3576119f26146bc565b5b021790555050565b600e5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa1906150f0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90615182565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060138054611b7a9061494d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba69061494d565b8015611bf35780601f10611bc857610100808354040283529160200191611bf3565b820191906000526020600020905b815481529060010190602001808311611bd657829003601f168201915b5050505050905090565b611c056131f3565b73ffffffffffffffffffffffffffffffffffffffff16611c236124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090614b81565b60405180910390fd5b611c83600061361a565b565b60105481565b611c936131f3565b73ffffffffffffffffffffffffffffffffffffffff16611cb16124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90614b81565b60405180910390fd5b60026007541415611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490614c59565b60405180910390fd5b6002600781905550600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde906151ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e709061525a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee0906152c6565b60405180910390fd5b600047905060006064602883611eff9190614eae565b611f099190615315565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611f4957600080fd5b7f24bbfa2f054e6ba541693dae0a733e014bae84b9ce5b627a260db10359ed7dc6848285604051611f7c93929190615346565b60405180910390a1600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e8607d85611fd09190614eae565b611fda9190615315565b9081150290604051600060405180830381858888f19350505050611ffd57600080fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e8607d856120499190614eae565b6120539190615315565b9081150290604051600060405180830381858888f1935050505061207657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506120b457600080fd5b505060016007819055505050565b6120ca6131f3565b73ffffffffffffffffffffffffffffffffffffffff166120e86124ae565b73ffffffffffffffffffffffffffffffffffffffff161461213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b81565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260075414156121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d690614c59565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90614cc5565b60405180910390fd5b60016002811115612269576122686146bc565b5b601460009054906101000a900460ff16600281111561228b5761228a6146bc565b5b146122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c2906153d0565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123199190614d80565b10612359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235090614e22565b60405180910390fd5b61236233611604565b6123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890615462565b60405180910390fd5b601154600854826123b29190614d80565b11156123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea906154f4565b60405180910390fd5b80600e546124019190614eae565b341015612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90615560565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124929190614d80565b925050819055506124a333826132b4565b600160078190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6002600754141561251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614c59565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614cc5565b60405180910390fd5b600081519050600081116125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d4906155cc565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266090615638565b60405180910390fd5b6001600281111561267d5761267c6146bc565b5b601460009054906101000a900460ff16600281111561269f5761269e6146bc565b5b146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d6906153d0565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272d9190614d80565b1061276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614e22565b60405180910390fd5b6011546008548261277e9190614d80565b11156127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b6906154f4565b60405180910390fd5b80600e546127cd9190614eae565b34101561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690615560565b60405180910390fd5b60005b81811015612a0557600083828151811061282f5761282e614f74565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016128899190614196565b602060405180830381865afa1580156128a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ca919061566d565b73ffffffffffffffffffffffffffffffffffffffff16146128ea57600080fd5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f906156e6565b60405180910390fd5b6001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806129fd90614fa3565b915050612812565b5080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a559190614d80565b92505081905550612a6633826132b4565b5060016007819055505050565b606060018054612a829061494d565b80601f0160208091040260200160405190810160405280929190818152602001828054612aae9061494d565b8015612afb5780601f10612ad057610100808354040283529160200191612afb565b820191906000526020600020905b815481529060010190602001808311612ade57829003601f168201915b5050505050905090565b601460009054906101000a900460ff1681565b612b2a612b236131f3565b83836136e0565b5050565b6000339050612b3b6124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612bc15750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80612c195750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612c2257600080fd5b60125460085483612c339190614d80565b1115612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90614e8e565b60405180910390fd5b612c7e83836132b4565b505050565b612c94612c8e6131f3565b836132e0565b612cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cca9061505e565b60405180910390fd5b612cdf8484848461384d565b50505050565b612ced6131f3565b73ffffffffffffffffffffffffffffffffffffffff16612d0b6124ae565b73ffffffffffffffffffffffffffffffffffffffff1614612d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5890614b81565b60405180910390fd5b8060098190555050565b612d736131f3565b73ffffffffffffffffffffffffffffffffffffffff16612d916124ae565b73ffffffffffffffffffffffffffffffffffffffff1614612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde90614b81565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060612e3682613187565b612e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c90615778565b60405180910390fd5b600954821115612ead57612e87611b6b565b604051602001612e979190615820565b6040516020818303038152906040529050612ee1565b612eb5611b6b565b612ebe836138a9565b604051602001612ecf92919061588e565b60405160208183030381529060405290505b919050565b60085481565b612ef46131f3565b73ffffffffffffffffffffffffffffffffffffffff16612f126124ae565b73ffffffffffffffffffffffffffffffffffffffff1614612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90614b81565b60405180910390fd5b8060108190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f5481565b6130146131f3565b73ffffffffffffffffffffffffffffffffffffffff166130326124ae565b73ffffffffffffffffffffffffffffffffffffffff1614613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307f90614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ef9061592f565b60405180910390fd5b6131018161361a565b50565b60115481565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661326e83611a01565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b818110156132db576132c883613a0a565b80806132d390614fa3565b9150506132b7565b505050565b60006132eb82613187565b61332a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613321906159c1565b60405180910390fd5b600061333583611a01565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133a457508373ffffffffffffffffffffffffffffffffffffffff1661338c84610c1f565b73ffffffffffffffffffffffffffffffffffffffff16145b806133b557506133b48185612f72565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133de82611a01565b73ffffffffffffffffffffffffffffffffffffffff1614613434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342b90615a53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349b90615ae5565b60405180910390fd5b6134af838383613a2e565b6134ba6000826131fb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350a9190615b05565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135619190614d80565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561374f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374690615b85565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138409190613f59565b60405180910390a3505050565b6138588484846133be565b61386484848484613a33565b6138a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389a90615c17565b60405180910390fd5b50505050565b606060008214156138f1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613a05565b600082905060005b6000821461392357808061390c90614fa3565b915050600a8261391c9190615315565b91506138f9565b60008167ffffffffffffffff81111561393f5761393e6141b6565b5b6040519080825280601f01601f1916602001820160405280156139715781602001600182028036833780820191505090505b5090505b600085146139fe5760018261398a9190615b05565b9150600a856139999190615c37565b60306139a59190614d80565b60f81b8183815181106139bb576139ba614f74565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139f79190615315565b9450613975565b8093505050505b919050565b613a1681600854613bbb565b6001600854613a259190614d80565b60088190555050565b505050565b6000613a548473ffffffffffffffffffffffffffffffffffffffff1661310a565b15613bae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a7d6131f3565b8786866040518563ffffffff1660e01b8152600401613a9f9493929190615cbd565b6020604051808303816000875af1925050508015613adb57506040513d601f19601f82011682018060405250810190613ad89190615d1e565b60015b613b5e573d8060008114613b0b576040519150601f19603f3d011682016040523d82523d6000602084013e613b10565b606091505b50600081511415613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90615c17565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bb3565b600190505b949350505050565b613bd5828260405180602001604052806000815250613bd9565b5050565b613be38383613c34565b613bf06000848484613a33565b613c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2690615c17565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9b90615d97565b60405180910390fd5b613cad81613187565b15613ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ce490615e03565b60405180910390fd5b613cf960008383613a2e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d499190614d80565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613e0e9061494d565b90600052602060002090601f016020900481019282613e305760008555613e77565b82601f10613e4957805160ff1916838001178555613e77565b82800160010185558215613e77579182015b82811115613e76578251825591602001919060010190613e5b565b5b509050613e849190613e88565b5090565b5b80821115613ea1576000816000905550600101613e89565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613eee81613eb9565b8114613ef957600080fd5b50565b600081359050613f0b81613ee5565b92915050565b600060208284031215613f2757613f26613eaf565b5b6000613f3584828501613efc565b91505092915050565b60008115159050919050565b613f5381613f3e565b82525050565b6000602082019050613f6e6000830184613f4a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fae578082015181840152602081019050613f93565b83811115613fbd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fdf82613f74565b613fe98185613f7f565b9350613ff9818560208601613f90565b61400281613fc3565b840191505092915050565b600060208201905081810360008301526140278184613fd4565b905092915050565b6000819050919050565b6140428161402f565b811461404d57600080fd5b50565b60008135905061405f81614039565b92915050565b60006020828403121561407b5761407a613eaf565b5b600061408984828501614050565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140bd82614092565b9050919050565b6140cd816140b2565b82525050565b60006020820190506140e860008301846140c4565b92915050565b6140f7816140b2565b811461410257600080fd5b50565b600081359050614114816140ee565b92915050565b6000806040838503121561413157614130613eaf565b5b600061413f85828601614105565b925050602061415085828601614050565b9150509250929050565b6000602082840312156141705761416f613eaf565b5b600061417e84828501614105565b91505092915050565b6141908161402f565b82525050565b60006020820190506141ab6000830184614187565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141ee82613fc3565b810181811067ffffffffffffffff8211171561420d5761420c6141b6565b5b80604052505050565b6000614220613ea5565b905061422c82826141e5565b919050565b600067ffffffffffffffff82111561424c5761424b6141b6565b5b602082029050602081019050919050565b600080fd5b600061427561427084614231565b614216565b905080838252602082019050602084028301858111156142985761429761425d565b5b835b818110156142c157806142ad8882614105565b84526020840193505060208101905061429a565b5050509392505050565b600082601f8301126142e0576142df6141b1565b5b81356142f0848260208601614262565b91505092915050565b600080604083850312156143105761430f613eaf565b5b600083013567ffffffffffffffff81111561432e5761432d613eb4565b5b61433a858286016142cb565b925050602061434b85828601614050565b9150509250929050565b60008060006060848603121561436e5761436d613eaf565b5b600061437c86828701614105565b935050602061438d86828701614105565b925050604061439e86828701614050565b9150509250925092565b6000602082840312156143be576143bd613eaf565b5b600082013567ffffffffffffffff8111156143dc576143db613eb4565b5b6143e8848285016142cb565b91505092915050565b600080fd5b600067ffffffffffffffff821115614411576144106141b6565b5b61441a82613fc3565b9050602081019050919050565b82818337600083830152505050565b6000614449614444846143f6565b614216565b905082815260208101848484011115614465576144646143f1565b5b614470848285614427565b509392505050565b600082601f83011261448d5761448c6141b1565b5b813561449d848260208601614436565b91505092915050565b6000602082840312156144bc576144bb613eaf565b5b600082013567ffffffffffffffff8111156144da576144d9613eb4565b5b6144e684828501614478565b91505092915050565b600381106144fc57600080fd5b50565b60008135905061450e816144ef565b92915050565b60006020828403121561452a57614529613eaf565b5b6000614538848285016144ff565b91505092915050565b6000806040838503121561455857614557613eaf565b5b600061456685828601614105565b925050602083013567ffffffffffffffff81111561458757614586613eb4565b5b61459385828601614478565b9150509250929050565b600067ffffffffffffffff8211156145b8576145b76141b6565b5b602082029050602081019050919050565b60006145dc6145d78461459d565b614216565b905080838252602082019050602084028301858111156145ff576145fe61425d565b5b835b8181101561462857806146148882614050565b845260208401935050602081019050614601565b5050509392505050565b600082601f830112614647576146466141b1565b5b81356146578482602086016145c9565b91505092915050565b6000806040838503121561467757614676613eaf565b5b600061468585828601614105565b925050602083013567ffffffffffffffff8111156146a6576146a5613eb4565b5b6146b285828601614632565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106146fc576146fb6146bc565b5b50565b600081905061470d826146eb565b919050565b600061471d826146ff565b9050919050565b61472d81614712565b82525050565b60006020820190506147486000830184614724565b92915050565b61475781613f3e565b811461476257600080fd5b50565b6000813590506147748161474e565b92915050565b6000806040838503121561479157614790613eaf565b5b600061479f85828601614105565b92505060206147b085828601614765565b9150509250929050565b600067ffffffffffffffff8211156147d5576147d46141b6565b5b6147de82613fc3565b9050602081019050919050565b60006147fe6147f9846147ba565b614216565b90508281526020810184848401111561481a576148196143f1565b5b614825848285614427565b509392505050565b600082601f830112614842576148416141b1565b5b81356148528482602086016147eb565b91505092915050565b6000806000806080858703121561487557614874613eaf565b5b600061488387828801614105565b945050602061489487828801614105565b93505060406148a587828801614050565b925050606085013567ffffffffffffffff8111156148c6576148c5613eb4565b5b6148d28782880161482d565b91505092959194509250565b600080604083850312156148f5576148f4613eaf565b5b600061490385828601614105565b925050602061491485828601614105565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061496557607f821691505b602082108114156149795761497861491e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149db602c83613f7f565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6d602183613f7f565b9150614a7882614a11565b604082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614aff603883613f7f565b9150614b0a82614aa3565b604082019050919050565b60006020820190508181036000830152614b2e81614af2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b6b602083613f7f565b9150614b7682614b35565b602082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f6164647265737320616c726561647920696e2070726573616c65000000000000600082015250565b6000614bd7601a83613f7f565b9150614be282614ba1565b602082019050919050565b60006020820190508181036000830152614c0681614bca565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614c43601f83613f7f565b9150614c4e82614c0d565b602082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f4e6f20636f6e747261637420696e746572786e73000000000000000000000000600082015250565b6000614caf601483613f7f565b9150614cba82614c79565b602082019050919050565b60006020820190508181036000830152614cde81614ca2565b9050919050565b7f73616c65206e6f74206f70656e00000000000000000000000000000000000000600082015250565b6000614d1b600d83613f7f565b9150614d2682614ce5565b602082019050919050565b60006020820190508181036000830152614d4a81614d0e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d8b8261402f565b9150614d968361402f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dcb57614dca614d51565b5b828201905092915050565b7f77616c6c6574206c696d69742072656163686564000000000000000000000000600082015250565b6000614e0c601483613f7f565b9150614e1782614dd6565b602082019050919050565b60006020820190508181036000830152614e3b81614dff565b9050919050565b7f52616e206f7574206f66204e46547320666f722073616c652120537279210000600082015250565b6000614e78601e83613f7f565b9150614e8382614e42565b602082019050919050565b60006020820190508181036000830152614ea781614e6b565b9050919050565b6000614eb98261402f565b9150614ec48361402f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614efd57614efc614d51565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b6000614f3e601f83613f7f565b9150614f4982614f08565b602082019050919050565b60006020820190508181036000830152614f6d81614f31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614fae8261402f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fe157614fe0614d51565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000615048603183613f7f565b915061505382614fec565b604082019050919050565b600060208201905081810360008301526150778161503b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006150da602983613f7f565b91506150e58261507e565b604082019050919050565b60006020820190508181036000830152615109816150cd565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061516c602a83613f7f565b915061517782615110565b604082019050919050565b6000602082019050818103600083015261519b8161515f565b9050919050565b7f4261636b656e6420646576206e6f742073657400000000000000000000000000600082015250565b60006151d8601383613f7f565b91506151e3826151a2565b602082019050919050565b60006020820190508181036000830152615207816151cb565b9050919050565b7f4d6f7267616e206e6f7420736574000000000000000000000000000000000000600082015250565b6000615244600e83613f7f565b915061524f8261520e565b602082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f43686172697479206e6f74207365740000000000000000000000000000000000600082015250565b60006152b0600f83613f7f565b91506152bb8261527a565b602082019050919050565b600060208201905081810360008301526152df816152a3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153208261402f565b915061532b8361402f565b92508261533b5761533a6152e6565b5b828204905092915050565b600060608201905061535b60008301866140c4565b6153686020830185614187565b818103604083015261537a8184613fd4565b9050949350505050565b7f70726573616c6520656e646564206f72206e6f74206f70656e00000000000000600082015250565b60006153ba601983613f7f565b91506153c582615384565b602082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b7f57616c6c65742069736e7420696e2070726573616c652120546865206f776e6560008201527f72206e6565647320746f2061646457616c6c6574546f50726573616c652e0000602082015250565b600061544c603e83613f7f565b9150615457826153f0565b604082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f52616e206f7574206f66204e46547320666f722070726573616c65212053727960008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b60006154de602183613f7f565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b7f45746865722076616c75652073656e7420697320746f6f206c6f770000000000600082015250565b600061554a601b83613f7f565b915061555582615514565b602082019050919050565b600060208201905081810360008301526155798161553d565b9050919050565b7f6c69737420656d70747900000000000000000000000000000000000000000000600082015250565b60006155b6600a83613f7f565b91506155c182615580565b602082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f546f6b656e206973206e6f7420617070726f7665640000000000000000000000600082015250565b6000615622601583613f7f565b915061562d826155ec565b602082019050919050565b6000602082019050818103600083015261565181615615565b9050919050565b600081519050615667816140ee565b92915050565b60006020828403121561568357615682613eaf565b5b600061569184828501615658565b91505092915050565b7f746f6b656e20616c726561647920636c61696d65640000000000000000000000600082015250565b60006156d0601583613f7f565b91506156db8261569a565b602082019050919050565b600060208201905081810360008301526156ff816156c3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615762602f83613f7f565b915061576d82615706565b604082019050919050565b6000602082019050818103600083015261579181615755565b9050919050565b600081905092915050565b60006157ae82613f74565b6157b88185615798565b93506157c8818560208601613f90565b80840191505092915050565b7f756e72657665616c65642e6a736f6e0000000000000000000000000000000000600082015250565b600061580a600f83615798565b9150615815826157d4565b600f82019050919050565b600061582c82846157a3565b9150615837826157fd565b915081905092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000615878600583615798565b915061588382615842565b600582019050919050565b600061589a82856157a3565b91506158a682846157a3565b91506158b18261586b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615919602683613f7f565b9150615924826158bd565b604082019050919050565b600060208201905081810360008301526159488161590c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006159ab602c83613f7f565b91506159b68261594f565b604082019050919050565b600060208201905081810360008301526159da8161599e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615a3d602983613f7f565b9150615a48826159e1565b604082019050919050565b60006020820190508181036000830152615a6c81615a30565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615acf602483613f7f565b9150615ada82615a73565b604082019050919050565b60006020820190508181036000830152615afe81615ac2565b9050919050565b6000615b108261402f565b9150615b1b8361402f565b925082821015615b2e57615b2d614d51565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615b6f601983613f7f565b9150615b7a82615b39565b602082019050919050565b60006020820190508181036000830152615b9e81615b62565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615c01603283613f7f565b9150615c0c82615ba5565b604082019050919050565b60006020820190508181036000830152615c3081615bf4565b9050919050565b6000615c428261402f565b9150615c4d8361402f565b925082615c5d57615c5c6152e6565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615c8f82615c68565b615c998185615c73565b9350615ca9818560208601613f90565b615cb281613fc3565b840191505092915050565b6000608082019050615cd260008301876140c4565b615cdf60208301866140c4565b615cec6040830185614187565b8181036060830152615cfe8184615c84565b905095945050505050565b600081519050615d1881613ee5565b92915050565b600060208284031215615d3457615d33613eaf565b5b6000615d4284828501615d09565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615d81602083613f7f565b9150615d8c82615d4b565b602082019050919050565b60006020820190508181036000830152615db081615d74565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615ded601c83613f7f565b9150615df882615db7565b602082019050919050565b60006020820190508181036000830152615e1c81615de0565b905091905056fea26469706673582212208e708746b7c8c214bc5a20c20a6b55fd3d3a508be002aa3ed3fd822a82d16b4164736f6c634300080b0033687474703a2f2f6170706c65732d6d642d3132332e73332d776562736974652d75732d776573742d312e616d617a6f6e6177732e636f6d2f

Deployed Bytecode

0x6080604052600436106102885760003560e01c80636352211e1161015a578063a22cb465116100c1578063d082e3811161007a578063d082e3811461099b578063e268e4d3146109c6578063e985e9c5146109ef578063ec40217514610a2c578063f2fde38b14610a57578063f449c3cb14610a8057610288565b8063a22cb46514610891578063add5a4fa146108ba578063b88d4fde146108e3578063c2ca0ac51461090c578063c6152d6114610935578063c87b56dd1461095e57610288565b8063889299da11610113578063889299da146107af5780638aa42302146107d85780638da5cb5b146107f457806394ffdba71461081f57806395d89b411461083b5780639be5ad781461086657610288565b80636352211e1461069f57806370a08231146106dc578063714c539814610719578063715018a6146107445780637fa8e5e41461075b5780638359fddc1461078657610288565b806323b872dd116101fe57806342842e0e116101b757806342842e0e146105a35780634be10631146105cc57806351830227146105f757806355f804b3146106225780635a67de071461064b5780635f0d246a1461067457610288565b806323b872dd14610483578063255ffaf4146104ac5780632e3fd2ac146104e95780632f289997146105265780633549345e1461054f5780633eaaf86b1461057857610288565b806316ee72171161025057806316ee721714610384578063178a8569146103ad5780631919fed7146103c95780631e6bd572146103f25780631e7269c51461041d5780631ff714a31461045a57610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b3146103325780630c60c7ff1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613f11565b610aab565b6040516102c19190613f59565b60405180910390f35b3480156102d657600080fd5b506102df610b8d565b6040516102ec919061400d565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190614065565b610c1f565b60405161032991906140d3565b60405180910390f35b34801561033e57600080fd5b506103596004803603810190610354919061411a565b610ca4565b005b34801561036757600080fd5b50610382600480360381019061037d919061415a565b610dbc565b005b34801561039057600080fd5b506103ab60048036038101906103a6919061415a565b610e7c565b005b6103c760048036038101906103c29190614065565b611059565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190614065565b611325565b005b3480156103fe57600080fd5b506104076113ab565b60405161041491906140d3565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f919061415a565b6113d1565b6040516104519190614196565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c91906142f9565b6113e9565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190614355565b611584565b005b3480156104b857600080fd5b506104d360048036038101906104ce919061415a565b6115e4565b6040516104e09190613f59565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061415a565b611604565b60405161051d9190613f59565b60405180910390f35b34801561053257600080fd5b5061054d600480360381019061054891906143a8565b61165a565b005b34801561055b57600080fd5b5061057660048036038101906105719190614065565b6117e4565b005b34801561058457600080fd5b5061058d61186a565b60405161059a9190614196565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190614355565b611870565b005b3480156105d857600080fd5b506105e1611890565b6040516105ee91906140d3565b60405180910390f35b34801561060357600080fd5b5061060c6118b6565b6040516106199190614196565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906144a6565b6118bc565b005b34801561065757600080fd5b50610672600480360381019061066d9190614514565b611952565b005b34801561068057600080fd5b506106896119fb565b6040516106969190614196565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190614065565b611a01565b6040516106d391906140d3565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe919061415a565b611ab3565b6040516107109190614196565b60405180910390f35b34801561072557600080fd5b5061072e611b6b565b60405161073b919061400d565b60405180910390f35b34801561075057600080fd5b50610759611bfd565b005b34801561076757600080fd5b50610770611c85565b60405161077d9190614196565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190614541565b611c8b565b005b3480156107bb57600080fd5b506107d660048036038101906107d1919061415a565b6120c2565b005b6107f260048036038101906107ed9190614065565b612199565b005b34801561080057600080fd5b506108096124ae565b60405161081691906140d3565b60405180910390f35b61083960048036038101906108349190614660565b6124d8565b005b34801561084757600080fd5b50610850612a73565b60405161085d919061400d565b60405180910390f35b34801561087257600080fd5b5061087b612b05565b6040516108889190614733565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b3919061477a565b612b18565b005b3480156108c657600080fd5b506108e160048036038101906108dc919061411a565b612b2e565b005b3480156108ef57600080fd5b5061090a6004803603810190610905919061485b565b612c83565b005b34801561091857600080fd5b50610933600480360381019061092e9190614065565b612ce5565b005b34801561094157600080fd5b5061095c6004803603810190610957919061415a565b612d6b565b005b34801561096a57600080fd5b5061098560048036038101906109809190614065565b612e2b565b604051610992919061400d565b60405180910390f35b3480156109a757600080fd5b506109b0612ee6565b6040516109bd9190614196565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614065565b612eec565b005b3480156109fb57600080fd5b50610a166004803603810190610a1191906148de565b612f72565b604051610a239190613f59565b60405180910390f35b348015610a3857600080fd5b50610a41613006565b604051610a4e9190614196565b60405180910390f35b348015610a6357600080fd5b50610a7e6004803603810190610a79919061415a565b61300c565b005b348015610a8c57600080fd5b50610a95613104565b604051610aa29190614196565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b7657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b865750610b858261311d565b5b9050919050565b606060008054610b9c9061494d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc89061494d565b8015610c155780601f10610bea57610100808354040283529160200191610c15565b820191906000526020600020905b815481529060010190602001808311610bf857829003601f168201915b5050505050905090565b6000610c2a82613187565b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c60906149f1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610caf82611a01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790614a83565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d3f6131f3565b73ffffffffffffffffffffffffffffffffffffffff161480610d6e5750610d6d81610d686131f3565b612f72565b5b610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490614b15565b60405180910390fd5b610db783836131fb565b505050565b610dc46131f3565b73ffffffffffffffffffffffffffffffffffffffff16610de26124ae565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90614b81565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000339050610e896124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610f0f5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80610f675750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610f7057600080fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614bed565b60405180910390fd5b6001601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6002600754141561109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690614c59565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c90614cc5565b60405180910390fd5b600280811115611128576111276146bc565b5b601460009054906101000a900460ff16600281111561114a576111496146bc565b5b1461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614d31565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d89190614d80565b10611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90614e22565b60405180910390fd5b601254600854826112299190614d80565b111561126a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126190614e8e565b60405180910390fd5b80600f546112789190614eae565b3410156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190614f54565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113099190614d80565b9250508190555061131a33826132b4565b600160078190555050565b61132d6131f3565b73ffffffffffffffffffffffffffffffffffffffff1661134b6124ae565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890614b81565b60405180910390fd5b80600f8190555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60166020528060005260406000206000915090505481565b60003390506113f66124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061147c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806114d45750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6114dd57600080fd5b6012546008548451846114f09190614eae565b6114fa9190614d80565b111561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290614e8e565b60405180910390fd5b60005b835181101561157e5761156b84828151811061155d5761155c614f74565b5b602002602001015184612b2e565b808061157690614fa3565b91505061153e565b50505050565b61159561158f6131f3565b826132e0565b6115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061505e565b60405180910390fd5b6115df8383836133be565b505050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60003390506116676124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806116ed5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b806117455750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61174e57600080fd5b60005b82518110156117df5760016015600085848151811061177357611772614f74565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806117d790614fa3565b915050611751565b505050565b6117ec6131f3565b73ffffffffffffffffffffffffffffffffffffffff1661180a6124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790614b81565b60405180910390fd5b80600e8190555050565b60125481565b61188b83838360405180602001604052806000815250612c83565b505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6118c46131f3565b73ffffffffffffffffffffffffffffffffffffffff166118e26124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614b81565b60405180910390fd5b806013908051906020019061194e929190613e02565b5050565b61195a6131f3565b73ffffffffffffffffffffffffffffffffffffffff166119786124ae565b73ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c590614b81565b60405180910390fd5b80601460006101000a81548160ff021916908360028111156119f3576119f26146bc565b5b021790555050565b600e5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa1906150f0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90615182565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060138054611b7a9061494d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba69061494d565b8015611bf35780601f10611bc857610100808354040283529160200191611bf3565b820191906000526020600020905b815481529060010190602001808311611bd657829003601f168201915b5050505050905090565b611c056131f3565b73ffffffffffffffffffffffffffffffffffffffff16611c236124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090614b81565b60405180910390fd5b611c83600061361a565b565b60105481565b611c936131f3565b73ffffffffffffffffffffffffffffffffffffffff16611cb16124ae565b73ffffffffffffffffffffffffffffffffffffffff1614611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90614b81565b60405180910390fd5b60026007541415611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490614c59565b60405180910390fd5b6002600781905550600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde906151ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e709061525a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee0906152c6565b60405180910390fd5b600047905060006064602883611eff9190614eae565b611f099190615315565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050611f4957600080fd5b7f24bbfa2f054e6ba541693dae0a733e014bae84b9ce5b627a260db10359ed7dc6848285604051611f7c93929190615346565b60405180910390a1600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e8607d85611fd09190614eae565b611fda9190615315565b9081150290604051600060405180830381858888f19350505050611ffd57600080fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6103e8607d856120499190614eae565b6120539190615315565b9081150290604051600060405180830381858888f1935050505061207657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506120b457600080fd5b505060016007819055505050565b6120ca6131f3565b73ffffffffffffffffffffffffffffffffffffffff166120e86124ae565b73ffffffffffffffffffffffffffffffffffffffff161461213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b81565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260075414156121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d690614c59565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c90614cc5565b60405180910390fd5b60016002811115612269576122686146bc565b5b601460009054906101000a900460ff16600281111561228b5761228a6146bc565b5b146122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c2906153d0565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123199190614d80565b10612359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235090614e22565b60405180910390fd5b61236233611604565b6123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890615462565b60405180910390fd5b601154600854826123b29190614d80565b11156123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea906154f4565b60405180910390fd5b80600e546124019190614eae565b341015612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90615560565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124929190614d80565b925050819055506124a333826132b4565b600160078190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6002600754141561251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614c59565b60405180910390fd5b60026007819055503373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614cc5565b60405180910390fd5b600081519050600081116125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d4906155cc565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266090615638565b60405180910390fd5b6001600281111561267d5761267c6146bc565b5b601460009054906101000a900460ff16600281111561269f5761269e6146bc565b5b146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d6906153d0565b60405180910390fd5b60105481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272d9190614d80565b1061276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614e22565b60405180910390fd5b6011546008548261277e9190614d80565b11156127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b6906154f4565b60405180910390fd5b80600e546127cd9190614eae565b34101561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690615560565b60405180910390fd5b60005b81811015612a0557600083828151811061282f5761282e614f74565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016128899190614196565b602060405180830381865afa1580156128a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ca919061566d565b73ffffffffffffffffffffffffffffffffffffffff16146128ea57600080fd5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1615612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f906156e6565b60405180910390fd5b6001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806129fd90614fa3565b915050612812565b5080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a559190614d80565b92505081905550612a6633826132b4565b5060016007819055505050565b606060018054612a829061494d565b80601f0160208091040260200160405190810160405280929190818152602001828054612aae9061494d565b8015612afb5780601f10612ad057610100808354040283529160200191612afb565b820191906000526020600020905b815481529060010190602001808311612ade57829003601f168201915b5050505050905090565b601460009054906101000a900460ff1681565b612b2a612b236131f3565b83836136e0565b5050565b6000339050612b3b6124ae565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612bc15750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b80612c195750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612c2257600080fd5b60125460085483612c339190614d80565b1115612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90614e8e565b60405180910390fd5b612c7e83836132b4565b505050565b612c94612c8e6131f3565b836132e0565b612cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cca9061505e565b60405180910390fd5b612cdf8484848461384d565b50505050565b612ced6131f3565b73ffffffffffffffffffffffffffffffffffffffff16612d0b6124ae565b73ffffffffffffffffffffffffffffffffffffffff1614612d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5890614b81565b60405180910390fd5b8060098190555050565b612d736131f3565b73ffffffffffffffffffffffffffffffffffffffff16612d916124ae565b73ffffffffffffffffffffffffffffffffffffffff1614612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde90614b81565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060612e3682613187565b612e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c90615778565b60405180910390fd5b600954821115612ead57612e87611b6b565b604051602001612e979190615820565b6040516020818303038152906040529050612ee1565b612eb5611b6b565b612ebe836138a9565b604051602001612ecf92919061588e565b60405160208183030381529060405290505b919050565b60085481565b612ef46131f3565b73ffffffffffffffffffffffffffffffffffffffff16612f126124ae565b73ffffffffffffffffffffffffffffffffffffffff1614612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90614b81565b60405180910390fd5b8060108190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f5481565b6130146131f3565b73ffffffffffffffffffffffffffffffffffffffff166130326124ae565b73ffffffffffffffffffffffffffffffffffffffff1614613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307f90614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ef9061592f565b60405180910390fd5b6131018161361a565b50565b60115481565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661326e83611a01565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b818110156132db576132c883613a0a565b80806132d390614fa3565b9150506132b7565b505050565b60006132eb82613187565b61332a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613321906159c1565b60405180910390fd5b600061333583611a01565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806133a457508373ffffffffffffffffffffffffffffffffffffffff1661338c84610c1f565b73ffffffffffffffffffffffffffffffffffffffff16145b806133b557506133b48185612f72565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133de82611a01565b73ffffffffffffffffffffffffffffffffffffffff1614613434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342b90615a53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349b90615ae5565b60405180910390fd5b6134af838383613a2e565b6134ba6000826131fb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350a9190615b05565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135619190614d80565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561374f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374690615b85565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138409190613f59565b60405180910390a3505050565b6138588484846133be565b61386484848484613a33565b6138a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389a90615c17565b60405180910390fd5b50505050565b606060008214156138f1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613a05565b600082905060005b6000821461392357808061390c90614fa3565b915050600a8261391c9190615315565b91506138f9565b60008167ffffffffffffffff81111561393f5761393e6141b6565b5b6040519080825280601f01601f1916602001820160405280156139715781602001600182028036833780820191505090505b5090505b600085146139fe5760018261398a9190615b05565b9150600a856139999190615c37565b60306139a59190614d80565b60f81b8183815181106139bb576139ba614f74565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139f79190615315565b9450613975565b8093505050505b919050565b613a1681600854613bbb565b6001600854613a259190614d80565b60088190555050565b505050565b6000613a548473ffffffffffffffffffffffffffffffffffffffff1661310a565b15613bae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a7d6131f3565b8786866040518563ffffffff1660e01b8152600401613a9f9493929190615cbd565b6020604051808303816000875af1925050508015613adb57506040513d601f19601f82011682018060405250810190613ad89190615d1e565b60015b613b5e573d8060008114613b0b576040519150601f19603f3d011682016040523d82523d6000602084013e613b10565b606091505b50600081511415613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90615c17565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bb3565b600190505b949350505050565b613bd5828260405180602001604052806000815250613bd9565b5050565b613be38383613c34565b613bf06000848484613a33565b613c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2690615c17565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9b90615d97565b60405180910390fd5b613cad81613187565b15613ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ce490615e03565b60405180910390fd5b613cf960008383613a2e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d499190614d80565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613e0e9061494d565b90600052602060002090601f016020900481019282613e305760008555613e77565b82601f10613e4957805160ff1916838001178555613e77565b82800160010185558215613e77579182015b82811115613e76578251825591602001919060010190613e5b565b5b509050613e849190613e88565b5090565b5b80821115613ea1576000816000905550600101613e89565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613eee81613eb9565b8114613ef957600080fd5b50565b600081359050613f0b81613ee5565b92915050565b600060208284031215613f2757613f26613eaf565b5b6000613f3584828501613efc565b91505092915050565b60008115159050919050565b613f5381613f3e565b82525050565b6000602082019050613f6e6000830184613f4a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fae578082015181840152602081019050613f93565b83811115613fbd576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fdf82613f74565b613fe98185613f7f565b9350613ff9818560208601613f90565b61400281613fc3565b840191505092915050565b600060208201905081810360008301526140278184613fd4565b905092915050565b6000819050919050565b6140428161402f565b811461404d57600080fd5b50565b60008135905061405f81614039565b92915050565b60006020828403121561407b5761407a613eaf565b5b600061408984828501614050565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140bd82614092565b9050919050565b6140cd816140b2565b82525050565b60006020820190506140e860008301846140c4565b92915050565b6140f7816140b2565b811461410257600080fd5b50565b600081359050614114816140ee565b92915050565b6000806040838503121561413157614130613eaf565b5b600061413f85828601614105565b925050602061415085828601614050565b9150509250929050565b6000602082840312156141705761416f613eaf565b5b600061417e84828501614105565b91505092915050565b6141908161402f565b82525050565b60006020820190506141ab6000830184614187565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141ee82613fc3565b810181811067ffffffffffffffff8211171561420d5761420c6141b6565b5b80604052505050565b6000614220613ea5565b905061422c82826141e5565b919050565b600067ffffffffffffffff82111561424c5761424b6141b6565b5b602082029050602081019050919050565b600080fd5b600061427561427084614231565b614216565b905080838252602082019050602084028301858111156142985761429761425d565b5b835b818110156142c157806142ad8882614105565b84526020840193505060208101905061429a565b5050509392505050565b600082601f8301126142e0576142df6141b1565b5b81356142f0848260208601614262565b91505092915050565b600080604083850312156143105761430f613eaf565b5b600083013567ffffffffffffffff81111561432e5761432d613eb4565b5b61433a858286016142cb565b925050602061434b85828601614050565b9150509250929050565b60008060006060848603121561436e5761436d613eaf565b5b600061437c86828701614105565b935050602061438d86828701614105565b925050604061439e86828701614050565b9150509250925092565b6000602082840312156143be576143bd613eaf565b5b600082013567ffffffffffffffff8111156143dc576143db613eb4565b5b6143e8848285016142cb565b91505092915050565b600080fd5b600067ffffffffffffffff821115614411576144106141b6565b5b61441a82613fc3565b9050602081019050919050565b82818337600083830152505050565b6000614449614444846143f6565b614216565b905082815260208101848484011115614465576144646143f1565b5b614470848285614427565b509392505050565b600082601f83011261448d5761448c6141b1565b5b813561449d848260208601614436565b91505092915050565b6000602082840312156144bc576144bb613eaf565b5b600082013567ffffffffffffffff8111156144da576144d9613eb4565b5b6144e684828501614478565b91505092915050565b600381106144fc57600080fd5b50565b60008135905061450e816144ef565b92915050565b60006020828403121561452a57614529613eaf565b5b6000614538848285016144ff565b91505092915050565b6000806040838503121561455857614557613eaf565b5b600061456685828601614105565b925050602083013567ffffffffffffffff81111561458757614586613eb4565b5b61459385828601614478565b9150509250929050565b600067ffffffffffffffff8211156145b8576145b76141b6565b5b602082029050602081019050919050565b60006145dc6145d78461459d565b614216565b905080838252602082019050602084028301858111156145ff576145fe61425d565b5b835b8181101561462857806146148882614050565b845260208401935050602081019050614601565b5050509392505050565b600082601f830112614647576146466141b1565b5b81356146578482602086016145c9565b91505092915050565b6000806040838503121561467757614676613eaf565b5b600061468585828601614105565b925050602083013567ffffffffffffffff8111156146a6576146a5613eb4565b5b6146b285828601614632565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106146fc576146fb6146bc565b5b50565b600081905061470d826146eb565b919050565b600061471d826146ff565b9050919050565b61472d81614712565b82525050565b60006020820190506147486000830184614724565b92915050565b61475781613f3e565b811461476257600080fd5b50565b6000813590506147748161474e565b92915050565b6000806040838503121561479157614790613eaf565b5b600061479f85828601614105565b92505060206147b085828601614765565b9150509250929050565b600067ffffffffffffffff8211156147d5576147d46141b6565b5b6147de82613fc3565b9050602081019050919050565b60006147fe6147f9846147ba565b614216565b90508281526020810184848401111561481a576148196143f1565b5b614825848285614427565b509392505050565b600082601f830112614842576148416141b1565b5b81356148528482602086016147eb565b91505092915050565b6000806000806080858703121561487557614874613eaf565b5b600061488387828801614105565b945050602061489487828801614105565b93505060406148a587828801614050565b925050606085013567ffffffffffffffff8111156148c6576148c5613eb4565b5b6148d28782880161482d565b91505092959194509250565b600080604083850312156148f5576148f4613eaf565b5b600061490385828601614105565b925050602061491485828601614105565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061496557607f821691505b602082108114156149795761497861491e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149db602c83613f7f565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6d602183613f7f565b9150614a7882614a11565b604082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614aff603883613f7f565b9150614b0a82614aa3565b604082019050919050565b60006020820190508181036000830152614b2e81614af2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b6b602083613f7f565b9150614b7682614b35565b602082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f6164647265737320616c726561647920696e2070726573616c65000000000000600082015250565b6000614bd7601a83613f7f565b9150614be282614ba1565b602082019050919050565b60006020820190508181036000830152614c0681614bca565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614c43601f83613f7f565b9150614c4e82614c0d565b602082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f4e6f20636f6e747261637420696e746572786e73000000000000000000000000600082015250565b6000614caf601483613f7f565b9150614cba82614c79565b602082019050919050565b60006020820190508181036000830152614cde81614ca2565b9050919050565b7f73616c65206e6f74206f70656e00000000000000000000000000000000000000600082015250565b6000614d1b600d83613f7f565b9150614d2682614ce5565b602082019050919050565b60006020820190508181036000830152614d4a81614d0e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d8b8261402f565b9150614d968361402f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dcb57614dca614d51565b5b828201905092915050565b7f77616c6c6574206c696d69742072656163686564000000000000000000000000600082015250565b6000614e0c601483613f7f565b9150614e1782614dd6565b602082019050919050565b60006020820190508181036000830152614e3b81614dff565b9050919050565b7f52616e206f7574206f66204e46547320666f722073616c652120537279210000600082015250565b6000614e78601e83613f7f565b9150614e8382614e42565b602082019050919050565b60006020820190508181036000830152614ea781614e6b565b9050919050565b6000614eb98261402f565b9150614ec48361402f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614efd57614efc614d51565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b6000614f3e601f83613f7f565b9150614f4982614f08565b602082019050919050565b60006020820190508181036000830152614f6d81614f31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614fae8261402f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fe157614fe0614d51565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000615048603183613f7f565b915061505382614fec565b604082019050919050565b600060208201905081810360008301526150778161503b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006150da602983613f7f565b91506150e58261507e565b604082019050919050565b60006020820190508181036000830152615109816150cd565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061516c602a83613f7f565b915061517782615110565b604082019050919050565b6000602082019050818103600083015261519b8161515f565b9050919050565b7f4261636b656e6420646576206e6f742073657400000000000000000000000000600082015250565b60006151d8601383613f7f565b91506151e3826151a2565b602082019050919050565b60006020820190508181036000830152615207816151cb565b9050919050565b7f4d6f7267616e206e6f7420736574000000000000000000000000000000000000600082015250565b6000615244600e83613f7f565b915061524f8261520e565b602082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f43686172697479206e6f74207365740000000000000000000000000000000000600082015250565b60006152b0600f83613f7f565b91506152bb8261527a565b602082019050919050565b600060208201905081810360008301526152df816152a3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153208261402f565b915061532b8361402f565b92508261533b5761533a6152e6565b5b828204905092915050565b600060608201905061535b60008301866140c4565b6153686020830185614187565b818103604083015261537a8184613fd4565b9050949350505050565b7f70726573616c6520656e646564206f72206e6f74206f70656e00000000000000600082015250565b60006153ba601983613f7f565b91506153c582615384565b602082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b7f57616c6c65742069736e7420696e2070726573616c652120546865206f776e6560008201527f72206e6565647320746f2061646457616c6c6574546f50726573616c652e0000602082015250565b600061544c603e83613f7f565b9150615457826153f0565b604082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f52616e206f7574206f66204e46547320666f722070726573616c65212053727960008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b60006154de602183613f7f565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b7f45746865722076616c75652073656e7420697320746f6f206c6f770000000000600082015250565b600061554a601b83613f7f565b915061555582615514565b602082019050919050565b600060208201905081810360008301526155798161553d565b9050919050565b7f6c69737420656d70747900000000000000000000000000000000000000000000600082015250565b60006155b6600a83613f7f565b91506155c182615580565b602082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f546f6b656e206973206e6f7420617070726f7665640000000000000000000000600082015250565b6000615622601583613f7f565b915061562d826155ec565b602082019050919050565b6000602082019050818103600083015261565181615615565b9050919050565b600081519050615667816140ee565b92915050565b60006020828403121561568357615682613eaf565b5b600061569184828501615658565b91505092915050565b7f746f6b656e20616c726561647920636c61696d65640000000000000000000000600082015250565b60006156d0601583613f7f565b91506156db8261569a565b602082019050919050565b600060208201905081810360008301526156ff816156c3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615762602f83613f7f565b915061576d82615706565b604082019050919050565b6000602082019050818103600083015261579181615755565b9050919050565b600081905092915050565b60006157ae82613f74565b6157b88185615798565b93506157c8818560208601613f90565b80840191505092915050565b7f756e72657665616c65642e6a736f6e0000000000000000000000000000000000600082015250565b600061580a600f83615798565b9150615815826157d4565b600f82019050919050565b600061582c82846157a3565b9150615837826157fd565b915081905092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000615878600583615798565b915061588382615842565b600582019050919050565b600061589a82856157a3565b91506158a682846157a3565b91506158b18261586b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615919602683613f7f565b9150615924826158bd565b604082019050919050565b600060208201905081810360008301526159488161590c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006159ab602c83613f7f565b91506159b68261594f565b604082019050919050565b600060208201905081810360008301526159da8161599e565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615a3d602983613f7f565b9150615a48826159e1565b604082019050919050565b60006020820190508181036000830152615a6c81615a30565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615acf602483613f7f565b9150615ada82615a73565b604082019050919050565b60006020820190508181036000830152615afe81615ac2565b9050919050565b6000615b108261402f565b9150615b1b8361402f565b925082821015615b2e57615b2d614d51565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615b6f601983613f7f565b9150615b7a82615b39565b602082019050919050565b60006020820190508181036000830152615b9e81615b62565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615c01603283613f7f565b9150615c0c82615ba5565b604082019050919050565b60006020820190508181036000830152615c3081615bf4565b9050919050565b6000615c428261402f565b9150615c4d8361402f565b925082615c5d57615c5c6152e6565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615c8f82615c68565b615c998185615c73565b9350615ca9818560208601613f90565b615cb281613fc3565b840191505092915050565b6000608082019050615cd260008301876140c4565b615cdf60208301866140c4565b615cec6040830185614187565b8181036060830152615cfe8184615c84565b905095945050505050565b600081519050615d1881613ee5565b92915050565b600060208284031215615d3457615d33613eaf565b5b6000615d4284828501615d09565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615d81602083613f7f565b9150615d8c82615d4b565b602082019050919050565b60006020820190508181036000830152615db081615d74565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615ded601c83613f7f565b9150615df882615db7565b602082019050919050565b60006020820190508181036000830152615e1c81615de0565b905091905056fea26469706673582212208e708746b7c8c214bc5a20c20a6b55fd3d3a508be002aa3ed3fd822a82d16b4164736f6c634300080b0033

Deployed Bytecode Sourcemap

39101:11521:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26501:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27446:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29005:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28528:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49659:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48657:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43963:512;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49111:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39380:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39949:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44480:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29755:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39889:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47025:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48442:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49210:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39669:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30165:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39404:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39205:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49547:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49004:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39432:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27140:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26870:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46917:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7489:103;;;;;;;;;;;;;:::i;:::-;;39524:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49831:711;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48866:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43298:651;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6838:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42162:1128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27615:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39748:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29298:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44781:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30421:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49450:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49737:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46505:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39171:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49331:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29524:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39479:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7747:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39626:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26501:305;26603:4;26655:25;26640:40;;;:11;:40;;;;:105;;;;26712:33;26697:48;;;:11;:48;;;;26640:105;:158;;;;26762:36;26786:11;26762:23;:36::i;:::-;26640:158;26620:178;;26501:305;;;:::o;27446:100::-;27500:13;27533:5;27526:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27446:100;:::o;29005:221::-;29081:7;29109:16;29117:7;29109;:16::i;:::-;29101:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29194:15;:24;29210:7;29194:24;;;;;;;;;;;;;;;;;;;;;29187:31;;29005:221;;;:::o;28528:411::-;28609:13;28625:23;28640:7;28625:14;:23::i;:::-;28609:39;;28673:5;28667:11;;:2;:11;;;;28659:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28767:5;28751:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28776:37;28793:5;28800:12;:10;:12::i;:::-;28776:16;:37::i;:::-;28751:62;28729:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28910:21;28919:2;28923:7;28910:8;:21::i;:::-;28598:341;28528:411;;:::o;49659:72::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49720:3:::1;49715:2;;:8;;;;;;;;;;;;;;;;;;49659:72:::0;:::o;48657:201::-;40030:14;40047:10;40030:27;;40086:7;:5;:7::i;:::-;40076:17;;:6;:17;;;:37;;;;40107:6;;;;;;;;;;;40097:16;;:6;:16;;;40076:37;:53;;;;40127:2;;;;;;;;;;;40117:12;;:6;:12;;;40076:53;40068:62;;;;;;48739:21:::1;:31;48761:8;48739:31;;;;;;;;;;;;;;;;;;;;;;;;;48738:32;48730:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48846:4;48812:21;:31;48834:8;48812:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;40019:131:::0;48657:201;:::o;43963:512::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;40223:10:::1;40210:23;;:9;:23;;;40188:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44074:14:::2;44060:28:::0;::::2;;;;;;;:::i;:::-;;:10;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;44052:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44155:13;;44146:6;44125;:18;44132:10;44125:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:43;44117:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44241:12;;44224;;44215:6;:21;;;;:::i;:::-;44214:39;;44206:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44334:6;44321:10;;:19;;;;:::i;:::-;44307:9;:34;;44299:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44412:6;44390;:18;44397:10;44390:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;44429:38;44448:10;44460:6;44429:18;:38::i;:::-;1768:1:::0;2722:7;:22;;;;43963:512;:::o;49111:93::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49190:6:::1;49177:10;:19;;;;49111:93:::0;:::o;39380:17::-;;;;;;;;;;;;;:::o;39949:41::-;;;;;;;;;;;;;;;;;:::o;44480:298::-;40030:14;40047:10;40030:27;;40086:7;:5;:7::i;:::-;40076:17;;:6;:17;;;:37;;;;40107:6;;;;;;;;;;;40097:16;;:6;:16;;;40076:37;:53;;;;40127:2;;;;;;;;;;;40117:12;;:6;:12;;;40076:53;40068:62;;;;;;44621:12:::1;;44604;;44588:5;:12;44579:6;:21;;;;:::i;:::-;44578:38;;;;:::i;:::-;44577:56;;44569:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44683:9;44679:95;44702:5;:12;44698:1;:16;44679:95;;;44736:26;44745:5;44751:1;44745:8;;;;;;;;:::i;:::-;;;;;;;;44755:6;44736:8;:26::i;:::-;44716:3;;;;;:::i;:::-;;;;44679:95;;;;40019:131:::0;44480:298;;:::o;29755:339::-;29950:41;29969:12;:10;:12::i;:::-;29983:7;29950:18;:41::i;:::-;29942:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30058:28;30068:4;30074:2;30078:7;30058:9;:28::i;:::-;29755:339;;;:::o;39889:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;47025:129::-;47091:4;47115:21;:31;47137:8;47115:31;;;;;;;;;;;;;;;;;;;;;;;;;47108:38;;47025:129;;;:::o;48442:209::-;40030:14;40047:10;40030:27;;40086:7;:5;:7::i;:::-;40076:17;;:6;:17;;;:37;;;;40107:6;;;;;;;;;;;40097:16;;:6;:16;;;40076:37;:53;;;;40127:2;;;;;;;;;;;40117:12;;:6;:12;;;40076:53;40068:62;;;;;;48531:9:::1;48527:117;48550:10;:17;48546:1;:21;48527:117;;;48628:4;48589:21;:36;48611:10;48622:1;48611:13;;;;;;;;:::i;:::-;;;;;;;;48589:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;48569:3;;;;;:::i;:::-;;;;48527:117;;;;40019:131:::0;48442:209;:::o;49210:115::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49303:14:::1;49287:13;:30;;;;49210:115:::0;:::o;39669:34::-;;;;:::o;30165:185::-;30303:39;30320:4;30326:2;30330:7;30303:39;;;;;;;;;;;;:16;:39::i;:::-;30165:185;;;:::o;39404:21::-;;;;;;;;;;;;;:::o;39205:23::-;;;;:::o;49547:104::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49635:8:::1;49619:13;:24;;;;;;;;;;;;:::i;:::-;;49547:104:::0;:::o;49004:101::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49088:9:::1;49075:10;;:22;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;49004:101:::0;:::o;39432:40::-;;;;:::o;27140:239::-;27212:7;27232:13;27248:7;:16;27256:7;27248:16;;;;;;;;;;;;;;;;;;;;;27232:32;;27300:1;27283:19;;:5;:19;;;;27275:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27366:5;27359:12;;;27140:239;;;:::o;26870:208::-;26942:7;26987:1;26970:19;;:5;:19;;;;26962:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27054:9;:16;27064:5;27054:16;;;;;;;;;;;;;;;;27047:23;;26870:208;;;:::o;46917:96::-;46960:13;46992;46985:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46917:96;:::o;7489:103::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:30:::1;7581:1;7554:18;:30::i;:::-;7489:103::o:0;39524:33::-;;;;:::o;49831:711::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;49955:1:::2;49941:16;;:2;;;;;;;;;;;:16;;;;49933:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50018:1;50000:20;;:6;;;;;;;;;;;:20;;;;49992:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50077:1;50058:21;;:7;:21;;;;50050:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50110:15;50128:21;50110:39;;50160:30;50208:3;50203:2;50193:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;50160:51;;50238:7;50230:21;;:45;50252:22;50230:45;;;;;;;;;;;;;;;;;;;;;;;50222:54;;;::::0;::::2;;50292:53;50305:7;50313:22;50337:7;50292:53;;;;;;;;:::i;:::-;;;;;;;;50372:2;;;;;;;;;;;50364:16;;:38;50397:4;50391:3;50381:7;:13;;;;:::i;:::-;:20;;;;:::i;:::-;50364:38;;;;;;;;;;;;;;;;;;;;;;;50356:47;;;::::0;::::2;;50430:6;;;;;;;;;;;50422:20;;:42;50459:4;50453:3;50443:7;:13;;;;:::i;:::-;:20;;;;:::i;:::-;50422:42;;;;;;;;;;;;;;;;;;;;;;;50414:51;;;::::0;::::2;;50492:10;50484:24;;:47;50509:21;50484:47;;;;;;;;;;;;;;;;;;;;;;;50476:56;;;::::0;::::2;;49922:620;;1768:1:::1;2722:7;:22;;;;49831:711:::0;;:::o;48866:130::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48984:4:::1;48945:26;:36;48972:8;48945:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;48866:130:::0;:::o;43298:651::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;40223:10:::1;40210:23;;:9;:23;;;40188:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43416:17:::2;43402:31;;;;;;;;:::i;:::-;;:10;;;;;;;;;;;:31;;;;;;;;:::i;:::-;;;43394:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43512:13;;43503:6;43482;:18;43489:10;43482:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:43;43474:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43569:29;43587:10;43569:17;:29::i;:::-;43561:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;43711:14;;43694:12;;43685:6;:21;;;;:::i;:::-;43684:41;;43676:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43812:6;43796:13;;:22;;;;:::i;:::-;43782:9;:37;;43774:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43886:6;43864;:18;43871:10;43864:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;43903:38;43922:10;43934:6;43903:18;:38::i;:::-;1768:1:::0;2722:7;:22;;;;43298:651;:::o;6838:87::-;6884:7;6911:6;;;;;;;;;;;6904:13;;6838:87;:::o;42162:1128::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;40223:10:::1;40210:23;;:9;:23;;;40188:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;42292:13:::2;42308:8;:15;42292:31;;42350:1;42342:5;:9;42334:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;42385:26;:39;42412:11;42385:39;;;;;;;;;;;;;;;;;;;;;;;;;42377:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42485:17;42471:31;;;;;;;;:::i;:::-;;:10;;;;;;;;;;;:31;;;;;;;;:::i;:::-;;;42463:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42580:13;;42572:5;42551:6;:18;42558:10;42551:18;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;:42;42543:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42663:14;;42646:12;;42638:5;:20;;;;:::i;:::-;42637:40;;42629:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;42764:5;42748:13;;:21;;;;:::i;:::-;42734:9;:36;;42726:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42818:9;42813:377;42837:5;42833:1;:9;42813:377;;;42864:15;42882:8;42891:1;42882:11;;;;;;;;:::i;:::-;;;;;;;;42864:29;;42975:10;42934:51;;42942:11;42934:28;;;42963:7;42934:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;42908:92;;;::::0;::::2;;43024:31;:44;43056:11;43024:44;;;;;;;;;;;;;;;:53;43069:7;43024:53;;;;;;;;;;;;;;;;;;;;;43023:54;43015:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;43174:4;43118:31;:44;43150:11;43118:44;;;;;;;;;;;;;;;:53;43163:7;43118:53;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;42849:341;42844:3;;;;;:::i;:::-;;;;42813:377;;;;43227:5;43205:6;:18;43212:10;43205:18;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;43243:37;43262:10;43274:5;43243:18;:37::i;:::-;42281:1009;1768:1:::0;2722:7;:22;;;;42162:1128;;:::o;27615:104::-;27671:13;27704:7;27697:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27615:104;:::o;39748:27::-;;;;;;;;;;;;;:::o;29298:155::-;29393:52;29412:12;:10;:12::i;:::-;29426:8;29436;29393:18;:52::i;:::-;29298:155;;:::o;44781:217::-;40030:14;40047:10;40030:27;;40086:7;:5;:7::i;:::-;40076:17;;:6;:17;;;:37;;;;40107:6;;;;;;;;;;;40097:16;;:6;:16;;;40076:37;:53;;;;40127:2;;;;;;;;;;;40117:12;;:6;:12;;;40076:53;40068:62;;;;;;44892:12:::1;;44875;;44866:6;:21;;;;:::i;:::-;44865:39;;44857:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44960:33;44979:5;44986:6;44960:18;:33::i;:::-;40019:131:::0;44781:217;;:::o;30421:328::-;30596:41;30615:12;:10;:12::i;:::-;30629:7;30596:18;:41::i;:::-;30588:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30702:39;30716:4;30722:2;30726:7;30735:5;30702:13;:39::i;:::-;30421:328;;;;:::o;49450:89::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49523:8:::1;49512;:19;;;;49450:89:::0;:::o;49737:86::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49809:6:::1;49800;;:15;;;;;;;;;;;;;;;;;;49737:86:::0;:::o;46505:404::-;46578:13;46612:16;46620:7;46612;:16::i;:::-;46604:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46707:8;;46697:7;:18;46693:116;;;46764:12;:10;:12::i;:::-;46747:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;46733:64;;;;46693:116;46851:12;:10;:12::i;:::-;46865:25;46882:7;46865:16;:25::i;:::-;46834:66;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46819:82;;46505:404;;;;:::o;39171:27::-;;;;:::o;49331:111::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49422:12:::1;49406:13;:28;;;;49331:111:::0;:::o;29524:164::-;29621:4;29645:18;:25;29664:5;29645:25;;;;;;;;;;;;;;;:35;29671:8;29645:35;;;;;;;;;;;;;;;;;;;;;;;;;29638:42;;29524:164;;;;:::o;39479:36::-;;;;:::o;7747:201::-;7069:12;:10;:12::i;:::-;7058:23;;:7;:5;:7::i;:::-;:23;;;7050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7856:1:::1;7836:22;;:8;:22;;;;7828:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7912:28;7931:8;7912:18;:28::i;:::-;7747:201:::0;:::o;39626:36::-;;;;:::o;9126:387::-;9186:4;9394:12;9461:7;9449:20;9441:28;;9504:1;9497:4;:8;9490:15;;;9126:387;;;:::o;19270:157::-;19355:4;19394:25;19379:40;;;:11;:40;;;;19372:47;;19270:157;;;:::o;32259:127::-;32324:4;32376:1;32348:30;;:7;:16;32356:7;32348:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32341:37;;32259:127;;;:::o;5562:98::-;5615:7;5642:10;5635:17;;5562:98;:::o;36241:174::-;36343:2;36316:15;:24;36332:7;36316:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36399:7;36395:2;36361:46;;36370:23;36385:7;36370:14;:23::i;:::-;36361:46;;;;;;;;;;;;36241:174;;:::o;45006:169::-;45088:6;45084:84;45104:6;45100:1;:10;45084:84;;;45132:24;45150:5;45132:17;:24::i;:::-;45112:3;;;;;:::i;:::-;;;;45084:84;;;;45006:169;;:::o;32553:348::-;32646:4;32671:16;32679:7;32671;:16::i;:::-;32663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32747:13;32763:23;32778:7;32763:14;:23::i;:::-;32747:39;;32816:5;32805:16;;:7;:16;;;:51;;;;32849:7;32825:31;;:20;32837:7;32825:11;:20::i;:::-;:31;;;32805:51;:87;;;;32860:32;32877:5;32884:7;32860:16;:32::i;:::-;32805:87;32797:96;;;32553:348;;;;:::o;35545:578::-;35704:4;35677:31;;:23;35692:7;35677:14;:23::i;:::-;:31;;;35669:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35787:1;35773:16;;:2;:16;;;;35765:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35843:39;35864:4;35870:2;35874:7;35843:20;:39::i;:::-;35947:29;35964:1;35968:7;35947:8;:29::i;:::-;36008:1;35989:9;:15;35999:4;35989:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36037:1;36020:9;:13;36030:2;36020:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36068:2;36049:7;:16;36057:7;36049:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36107:7;36103:2;36088:27;;36097:4;36088:27;;;;;;;;;;;;35545:578;;;:::o;8108:191::-;8182:16;8201:6;;;;;;;;;;;8182:25;;8227:8;8218:6;;:17;;;;;;;;;;;;;;;;;;8282:8;8251:40;;8272:8;8251:40;;;;;;;;;;;;8171:128;8108:191;:::o;36557:315::-;36712:8;36703:17;;:5;:17;;;;36695:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36799:8;36761:18;:25;36780:5;36761:25;;;;;;;;;;;;;;;:35;36787:8;36761:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36845:8;36823:41;;36838:5;36823:41;;;36855:8;36823:41;;;;;;:::i;:::-;;;;;;;;36557:315;;;:::o;31631:::-;31788:28;31798:4;31804:2;31808:7;31788:9;:28::i;:::-;31835:48;31858:4;31864:2;31868:7;31877:5;31835:22;:48::i;:::-;31827:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31631:315;;;;:::o;3124:723::-;3180:13;3410:1;3401:5;:10;3397:53;;;3428:10;;;;;;;;;;;;;;;;;;;;;3397:53;3460:12;3475:5;3460:20;;3491:14;3516:78;3531:1;3523:4;:9;3516:78;;3549:8;;;;;:::i;:::-;;;;3580:2;3572:10;;;;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3604:39;;3654:154;3670:1;3661:5;:10;3654:154;;3698:1;3688:11;;;;;:::i;:::-;;;3765:2;3757:5;:10;;;;:::i;:::-;3744:2;:24;;;;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3794:2;3785:11;;;;;:::i;:::-;;;3654:154;;;3832:6;3818:21;;;;;3124:723;;;;:::o;45183:149::-;45248:30;45258:5;45265:12;;45248:9;:30::i;:::-;45323:1;45308:12;;:16;;;;:::i;:::-;45293:12;:31;;;;45183:149;:::o;38808:126::-;;;;:::o;37437:799::-;37592:4;37613:15;:2;:13;;;:15::i;:::-;37609:620;;;37665:2;37649:36;;;37686:12;:10;:12::i;:::-;37700:4;37706:7;37715:5;37649:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37645:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37908:1;37891:6;:13;:18;37887:272;;;37934:60;;;;;;;;;;:::i;:::-;;;;;;;;37887:272;38109:6;38103:13;38094:6;38090:2;38086:15;38079:38;37645:529;37782:41;;;37772:51;;;:6;:51;;;;37765:58;;;;;37609:620;38213:4;38206:11;;37437:799;;;;;;;:::o;33243:110::-;33319:26;33329:2;33333:7;33319:26;;;;;;;;;;;;:9;:26::i;:::-;33243:110;;:::o;33580:321::-;33710:18;33716:2;33720:7;33710:5;:18::i;:::-;33761:54;33792:1;33796:2;33800:7;33809:5;33761:22;:54::i;:::-;33739:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33580:321;;;:::o;34237:382::-;34331:1;34317:16;;:2;:16;;;;34309:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34390:16;34398:7;34390;:16::i;:::-;34389:17;34381:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34452:45;34481:1;34485:2;34489:7;34452:20;:45::i;:::-;34527:1;34510:9;:13;34520:2;34510:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34558:2;34539:7;:16;34547:7;34539:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34603:7;34599:2;34578:33;;34595:1;34578:33;;;;;;;;;;;;34237:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:329::-;4997:6;5046:2;5034:9;5025:7;5021:23;5017:32;5014:119;;;5052:79;;:::i;:::-;5014:119;5172:1;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5143:117;4938:329;;;;:::o;5273:118::-;5360:24;5378:5;5360:24;:::i;:::-;5355:3;5348:37;5273:118;;:::o;5397:222::-;5490:4;5528:2;5517:9;5513:18;5505:26;;5541:71;5609:1;5598:9;5594:17;5585:6;5541:71;:::i;:::-;5397:222;;;;:::o;5625:117::-;5734:1;5731;5724:12;5748:180;5796:77;5793:1;5786:88;5893:4;5890:1;5883:15;5917:4;5914:1;5907:15;5934:281;6017:27;6039:4;6017:27;:::i;:::-;6009:6;6005:40;6147:6;6135:10;6132:22;6111:18;6099:10;6096:34;6093:62;6090:88;;;6158:18;;:::i;:::-;6090:88;6198:10;6194:2;6187:22;5977:238;5934:281;;:::o;6221:129::-;6255:6;6282:20;;:::i;:::-;6272:30;;6311:33;6339:4;6331:6;6311:33;:::i;:::-;6221:129;;;:::o;6356:311::-;6433:4;6523:18;6515:6;6512:30;6509:56;;;6545:18;;:::i;:::-;6509:56;6595:4;6587:6;6583:17;6575:25;;6655:4;6649;6645:15;6637:23;;6356:311;;;:::o;6673:117::-;6782:1;6779;6772:12;6813:710;6909:5;6934:81;6950:64;7007:6;6950:64;:::i;:::-;6934:81;:::i;:::-;6925:90;;7035:5;7064:6;7057:5;7050:21;7098:4;7091:5;7087:16;7080:23;;7151:4;7143:6;7139:17;7131:6;7127:30;7180:3;7172:6;7169:15;7166:122;;;7199:79;;:::i;:::-;7166:122;7314:6;7297:220;7331:6;7326:3;7323:15;7297:220;;;7406:3;7435:37;7468:3;7456:10;7435:37;:::i;:::-;7430:3;7423:50;7502:4;7497:3;7493:14;7486:21;;7373:144;7357:4;7352:3;7348:14;7341:21;;7297:220;;;7301:21;6915:608;;6813:710;;;;;:::o;7546:370::-;7617:5;7666:3;7659:4;7651:6;7647:17;7643:27;7633:122;;7674:79;;:::i;:::-;7633:122;7791:6;7778:20;7816:94;7906:3;7898:6;7891:4;7883:6;7879:17;7816:94;:::i;:::-;7807:103;;7623:293;7546:370;;;;:::o;7922:684::-;8015:6;8023;8072:2;8060:9;8051:7;8047:23;8043:32;8040:119;;;8078:79;;:::i;:::-;8040:119;8226:1;8215:9;8211:17;8198:31;8256:18;8248:6;8245:30;8242:117;;;8278:79;;:::i;:::-;8242:117;8383:78;8453:7;8444:6;8433:9;8429:22;8383:78;:::i;:::-;8373:88;;8169:302;8510:2;8536:53;8581:7;8572:6;8561:9;8557:22;8536:53;:::i;:::-;8526:63;;8481:118;7922:684;;;;;:::o;8612:619::-;8689:6;8697;8705;8754:2;8742:9;8733:7;8729:23;8725:32;8722:119;;;8760:79;;:::i;:::-;8722:119;8880:1;8905:53;8950:7;8941:6;8930:9;8926:22;8905:53;:::i;:::-;8895:63;;8851:117;9007:2;9033:53;9078:7;9069:6;9058:9;9054:22;9033:53;:::i;:::-;9023:63;;8978:118;9135:2;9161:53;9206:7;9197:6;9186:9;9182:22;9161:53;:::i;:::-;9151:63;;9106:118;8612:619;;;;;:::o;9237:539::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9524:1;9513:9;9509:17;9496:31;9554:18;9546:6;9543:30;9540:117;;;9576:79;;:::i;:::-;9540:117;9681:78;9751:7;9742:6;9731:9;9727:22;9681:78;:::i;:::-;9671:88;;9467:302;9237:539;;;;:::o;9782:117::-;9891:1;9888;9881:12;9905:308;9967:4;10057:18;10049:6;10046:30;10043:56;;;10079:18;;:::i;:::-;10043:56;10117:29;10139:6;10117:29;:::i;:::-;10109:37;;10201:4;10195;10191:15;10183:23;;9905:308;;;:::o;10219:154::-;10303:6;10298:3;10293;10280:30;10365:1;10356:6;10351:3;10347:16;10340:27;10219:154;;;:::o;10379:412::-;10457:5;10482:66;10498:49;10540:6;10498:49;:::i;:::-;10482:66;:::i;:::-;10473:75;;10571:6;10564:5;10557:21;10609:4;10602:5;10598:16;10647:3;10638:6;10633:3;10629:16;10626:25;10623:112;;;10654:79;;:::i;:::-;10623:112;10744:41;10778:6;10773:3;10768;10744:41;:::i;:::-;10463:328;10379:412;;;;;:::o;10811:340::-;10867:5;10916:3;10909:4;10901:6;10897:17;10893:27;10883:122;;10924:79;;:::i;:::-;10883:122;11041:6;11028:20;11066:79;11141:3;11133:6;11126:4;11118:6;11114:17;11066:79;:::i;:::-;11057:88;;10873:278;10811:340;;;;:::o;11157:509::-;11226:6;11275:2;11263:9;11254:7;11250:23;11246:32;11243:119;;;11281:79;;:::i;:::-;11243:119;11429:1;11418:9;11414:17;11401:31;11459:18;11451:6;11448:30;11445:117;;;11481:79;;:::i;:::-;11445:117;11586:63;11641:7;11632:6;11621:9;11617:22;11586:63;:::i;:::-;11576:73;;11372:287;11157:509;;;;:::o;11672:113::-;11759:1;11752:5;11749:12;11739:40;;11775:1;11772;11765:12;11739:40;11672:113;:::o;11791:167::-;11851:5;11889:6;11876:20;11867:29;;11905:47;11946:5;11905:47;:::i;:::-;11791:167;;;;:::o;11964:357::-;12037:6;12086:2;12074:9;12065:7;12061:23;12057:32;12054:119;;;12092:79;;:::i;:::-;12054:119;12212:1;12237:67;12296:7;12287:6;12276:9;12272:22;12237:67;:::i;:::-;12227:77;;12183:131;11964:357;;;;:::o;12327:654::-;12405:6;12413;12462:2;12450:9;12441:7;12437:23;12433:32;12430:119;;;12468:79;;:::i;:::-;12430:119;12588:1;12613:53;12658:7;12649:6;12638:9;12634:22;12613:53;:::i;:::-;12603:63;;12559:117;12743:2;12732:9;12728:18;12715:32;12774:18;12766:6;12763:30;12760:117;;;12796:79;;:::i;:::-;12760:117;12901:63;12956:7;12947:6;12936:9;12932:22;12901:63;:::i;:::-;12891:73;;12686:288;12327:654;;;;;:::o;12987:311::-;13064:4;13154:18;13146:6;13143:30;13140:56;;;13176:18;;:::i;:::-;13140:56;13226:4;13218:6;13214:17;13206:25;;13286:4;13280;13276:15;13268:23;;12987:311;;;:::o;13321:710::-;13417:5;13442:81;13458:64;13515:6;13458:64;:::i;:::-;13442:81;:::i;:::-;13433:90;;13543:5;13572:6;13565:5;13558:21;13606:4;13599:5;13595:16;13588:23;;13659:4;13651:6;13647:17;13639:6;13635:30;13688:3;13680:6;13677:15;13674:122;;;13707:79;;:::i;:::-;13674:122;13822:6;13805:220;13839:6;13834:3;13831:15;13805:220;;;13914:3;13943:37;13976:3;13964:10;13943:37;:::i;:::-;13938:3;13931:50;14010:4;14005:3;14001:14;13994:21;;13881:144;13865:4;13860:3;13856:14;13849:21;;13805:220;;;13809:21;13423:608;;13321:710;;;;;:::o;14054:370::-;14125:5;14174:3;14167:4;14159:6;14155:17;14151:27;14141:122;;14182:79;;:::i;:::-;14141:122;14299:6;14286:20;14324:94;14414:3;14406:6;14399:4;14391:6;14387:17;14324:94;:::i;:::-;14315:103;;14131:293;14054:370;;;;:::o;14430:684::-;14523:6;14531;14580:2;14568:9;14559:7;14555:23;14551:32;14548:119;;;14586:79;;:::i;:::-;14548:119;14706:1;14731:53;14776:7;14767:6;14756:9;14752:22;14731:53;:::i;:::-;14721:63;;14677:117;14861:2;14850:9;14846:18;14833:32;14892:18;14884:6;14881:30;14878:117;;;14914:79;;:::i;:::-;14878:117;15019:78;15089:7;15080:6;15069:9;15065:22;15019:78;:::i;:::-;15009:88;;14804:303;14430:684;;;;;:::o;15120:180::-;15168:77;15165:1;15158:88;15265:4;15262:1;15255:15;15289:4;15286:1;15279:15;15306:119;15393:1;15386:5;15383:12;15373:46;;15399:18;;:::i;:::-;15373:46;15306:119;:::o;15431:139::-;15482:7;15511:5;15500:16;;15517:47;15558:5;15517:47;:::i;:::-;15431:139;;;:::o;15576:::-;15638:9;15671:38;15703:5;15671:38;:::i;:::-;15658:51;;15576:139;;;:::o;15721:155::-;15820:49;15863:5;15820:49;:::i;:::-;15815:3;15808:62;15721:155;;:::o;15882:246::-;15987:4;16025:2;16014:9;16010:18;16002:26;;16038:83;16118:1;16107:9;16103:17;16094:6;16038:83;:::i;:::-;15882:246;;;;:::o;16134:116::-;16204:21;16219:5;16204:21;:::i;:::-;16197:5;16194:32;16184:60;;16240:1;16237;16230:12;16184:60;16134:116;:::o;16256:133::-;16299:5;16337:6;16324:20;16315:29;;16353:30;16377:5;16353:30;:::i;:::-;16256:133;;;;:::o;16395:468::-;16460:6;16468;16517:2;16505:9;16496:7;16492:23;16488:32;16485:119;;;16523:79;;:::i;:::-;16485:119;16643:1;16668:53;16713:7;16704:6;16693:9;16689:22;16668:53;:::i;:::-;16658:63;;16614:117;16770:2;16796:50;16838:7;16829:6;16818:9;16814:22;16796:50;:::i;:::-;16786:60;;16741:115;16395:468;;;;;:::o;16869:307::-;16930:4;17020:18;17012:6;17009:30;17006:56;;;17042:18;;:::i;:::-;17006:56;17080:29;17102:6;17080:29;:::i;:::-;17072:37;;17164:4;17158;17154:15;17146:23;;16869:307;;;:::o;17182:410::-;17259:5;17284:65;17300:48;17341:6;17300:48;:::i;:::-;17284:65;:::i;:::-;17275:74;;17372:6;17365:5;17358:21;17410:4;17403:5;17399:16;17448:3;17439:6;17434:3;17430:16;17427:25;17424:112;;;17455:79;;:::i;:::-;17424:112;17545:41;17579:6;17574:3;17569;17545:41;:::i;:::-;17265:327;17182:410;;;;;:::o;17611:338::-;17666:5;17715:3;17708:4;17700:6;17696:17;17692:27;17682:122;;17723:79;;:::i;:::-;17682:122;17840:6;17827:20;17865:78;17939:3;17931:6;17924:4;17916:6;17912:17;17865:78;:::i;:::-;17856:87;;17672:277;17611:338;;;;:::o;17955:943::-;18050:6;18058;18066;18074;18123:3;18111:9;18102:7;18098:23;18094:33;18091:120;;;18130:79;;:::i;:::-;18091:120;18250:1;18275:53;18320:7;18311:6;18300:9;18296:22;18275:53;:::i;:::-;18265:63;;18221:117;18377:2;18403:53;18448:7;18439:6;18428:9;18424:22;18403:53;:::i;:::-;18393:63;;18348:118;18505:2;18531:53;18576:7;18567:6;18556:9;18552:22;18531:53;:::i;:::-;18521:63;;18476:118;18661:2;18650:9;18646:18;18633:32;18692:18;18684:6;18681:30;18678:117;;;18714:79;;:::i;:::-;18678:117;18819:62;18873:7;18864:6;18853:9;18849:22;18819:62;:::i;:::-;18809:72;;18604:287;17955:943;;;;;;;:::o;18904:474::-;18972:6;18980;19029:2;19017:9;19008:7;19004:23;19000:32;18997:119;;;19035:79;;:::i;:::-;18997:119;19155:1;19180:53;19225:7;19216:6;19205:9;19201:22;19180:53;:::i;:::-;19170:63;;19126:117;19282:2;19308:53;19353:7;19344:6;19333:9;19329:22;19308:53;:::i;:::-;19298:63;;19253:118;18904:474;;;;;:::o;19384:180::-;19432:77;19429:1;19422:88;19529:4;19526:1;19519:15;19553:4;19550:1;19543:15;19570:320;19614:6;19651:1;19645:4;19641:12;19631:22;;19698:1;19692:4;19688:12;19719:18;19709:81;;19775:4;19767:6;19763:17;19753:27;;19709:81;19837:2;19829:6;19826:14;19806:18;19803:38;19800:84;;;19856:18;;:::i;:::-;19800:84;19621:269;19570:320;;;:::o;19896:231::-;20036:34;20032:1;20024:6;20020:14;20013:58;20105:14;20100:2;20092:6;20088:15;20081:39;19896:231;:::o;20133:366::-;20275:3;20296:67;20360:2;20355:3;20296:67;:::i;:::-;20289:74;;20372:93;20461:3;20372:93;:::i;:::-;20490:2;20485:3;20481:12;20474:19;;20133:366;;;:::o;20505:419::-;20671:4;20709:2;20698:9;20694:18;20686:26;;20758:9;20752:4;20748:20;20744:1;20733:9;20729:17;20722:47;20786:131;20912:4;20786:131;:::i;:::-;20778:139;;20505:419;;;:::o;20930:220::-;21070:34;21066:1;21058:6;21054:14;21047:58;21139:3;21134:2;21126:6;21122:15;21115:28;20930:220;:::o;21156:366::-;21298:3;21319:67;21383:2;21378:3;21319:67;:::i;:::-;21312:74;;21395:93;21484:3;21395:93;:::i;:::-;21513:2;21508:3;21504:12;21497:19;;21156:366;;;:::o;21528:419::-;21694:4;21732:2;21721:9;21717:18;21709:26;;21781:9;21775:4;21771:20;21767:1;21756:9;21752:17;21745:47;21809:131;21935:4;21809:131;:::i;:::-;21801:139;;21528:419;;;:::o;21953:243::-;22093:34;22089:1;22081:6;22077:14;22070:58;22162:26;22157:2;22149:6;22145:15;22138:51;21953:243;:::o;22202:366::-;22344:3;22365:67;22429:2;22424:3;22365:67;:::i;:::-;22358:74;;22441:93;22530:3;22441:93;:::i;:::-;22559:2;22554:3;22550:12;22543:19;;22202:366;;;:::o;22574:419::-;22740:4;22778:2;22767:9;22763:18;22755:26;;22827:9;22821:4;22817:20;22813:1;22802:9;22798:17;22791:47;22855:131;22981:4;22855:131;:::i;:::-;22847:139;;22574:419;;;:::o;22999:182::-;23139:34;23135:1;23127:6;23123:14;23116:58;22999:182;:::o;23187:366::-;23329:3;23350:67;23414:2;23409:3;23350:67;:::i;:::-;23343:74;;23426:93;23515:3;23426:93;:::i;:::-;23544:2;23539:3;23535:12;23528:19;;23187:366;;;:::o;23559:419::-;23725:4;23763:2;23752:9;23748:18;23740:26;;23812:9;23806:4;23802:20;23798:1;23787:9;23783:17;23776:47;23840:131;23966:4;23840:131;:::i;:::-;23832:139;;23559:419;;;:::o;23984:176::-;24124:28;24120:1;24112:6;24108:14;24101:52;23984:176;:::o;24166:366::-;24308:3;24329:67;24393:2;24388:3;24329:67;:::i;:::-;24322:74;;24405:93;24494:3;24405:93;:::i;:::-;24523:2;24518:3;24514:12;24507:19;;24166:366;;;:::o;24538:419::-;24704:4;24742:2;24731:9;24727:18;24719:26;;24791:9;24785:4;24781:20;24777:1;24766:9;24762:17;24755:47;24819:131;24945:4;24819:131;:::i;:::-;24811:139;;24538:419;;;:::o;24963:181::-;25103:33;25099:1;25091:6;25087:14;25080:57;24963:181;:::o;25150:366::-;25292:3;25313:67;25377:2;25372:3;25313:67;:::i;:::-;25306:74;;25389:93;25478:3;25389:93;:::i;:::-;25507:2;25502:3;25498:12;25491:19;;25150:366;;;:::o;25522:419::-;25688:4;25726:2;25715:9;25711:18;25703:26;;25775:9;25769:4;25765:20;25761:1;25750:9;25746:17;25739:47;25803:131;25929:4;25803:131;:::i;:::-;25795:139;;25522:419;;;:::o;25947:170::-;26087:22;26083:1;26075:6;26071:14;26064:46;25947:170;:::o;26123:366::-;26265:3;26286:67;26350:2;26345:3;26286:67;:::i;:::-;26279:74;;26362:93;26451:3;26362:93;:::i;:::-;26480:2;26475:3;26471:12;26464:19;;26123:366;;;:::o;26495:419::-;26661:4;26699:2;26688:9;26684:18;26676:26;;26748:9;26742:4;26738:20;26734:1;26723:9;26719:17;26712:47;26776:131;26902:4;26776:131;:::i;:::-;26768:139;;26495:419;;;:::o;26920:163::-;27060:15;27056:1;27048:6;27044:14;27037:39;26920:163;:::o;27089:366::-;27231:3;27252:67;27316:2;27311:3;27252:67;:::i;:::-;27245:74;;27328:93;27417:3;27328:93;:::i;:::-;27446:2;27441:3;27437:12;27430:19;;27089:366;;;:::o;27461:419::-;27627:4;27665:2;27654:9;27650:18;27642:26;;27714:9;27708:4;27704:20;27700:1;27689:9;27685:17;27678:47;27742:131;27868:4;27742:131;:::i;:::-;27734:139;;27461:419;;;:::o;27886:180::-;27934:77;27931:1;27924:88;28031:4;28028:1;28021:15;28055:4;28052:1;28045:15;28072:305;28112:3;28131:20;28149:1;28131:20;:::i;:::-;28126:25;;28165:20;28183:1;28165:20;:::i;:::-;28160:25;;28319:1;28251:66;28247:74;28244:1;28241:81;28238:107;;;28325:18;;:::i;:::-;28238:107;28369:1;28366;28362:9;28355:16;;28072:305;;;;:::o;28383:170::-;28523:22;28519:1;28511:6;28507:14;28500:46;28383:170;:::o;28559:366::-;28701:3;28722:67;28786:2;28781:3;28722:67;:::i;:::-;28715:74;;28798:93;28887:3;28798:93;:::i;:::-;28916:2;28911:3;28907:12;28900:19;;28559:366;;;:::o;28931:419::-;29097:4;29135:2;29124:9;29120:18;29112:26;;29184:9;29178:4;29174:20;29170:1;29159:9;29155:17;29148:47;29212:131;29338:4;29212:131;:::i;:::-;29204:139;;28931:419;;;:::o;29356:180::-;29496:32;29492:1;29484:6;29480:14;29473:56;29356:180;:::o;29542:366::-;29684:3;29705:67;29769:2;29764:3;29705:67;:::i;:::-;29698:74;;29781:93;29870:3;29781:93;:::i;:::-;29899:2;29894:3;29890:12;29883:19;;29542:366;;;:::o;29914:419::-;30080:4;30118:2;30107:9;30103:18;30095:26;;30167:9;30161:4;30157:20;30153:1;30142:9;30138:17;30131:47;30195:131;30321:4;30195:131;:::i;:::-;30187:139;;29914:419;;;:::o;30339:348::-;30379:7;30402:20;30420:1;30402:20;:::i;:::-;30397:25;;30436:20;30454:1;30436:20;:::i;:::-;30431:25;;30624:1;30556:66;30552:74;30549:1;30546:81;30541:1;30534:9;30527:17;30523:105;30520:131;;;30631:18;;:::i;:::-;30520:131;30679:1;30676;30672:9;30661:20;;30339:348;;;;:::o;30693:181::-;30833:33;30829:1;30821:6;30817:14;30810:57;30693:181;:::o;30880:366::-;31022:3;31043:67;31107:2;31102:3;31043:67;:::i;:::-;31036:74;;31119:93;31208:3;31119:93;:::i;:::-;31237:2;31232:3;31228:12;31221:19;;30880:366;;;:::o;31252:419::-;31418:4;31456:2;31445:9;31441:18;31433:26;;31505:9;31499:4;31495:20;31491:1;31480:9;31476:17;31469:47;31533:131;31659:4;31533:131;:::i;:::-;31525:139;;31252:419;;;:::o;31677:180::-;31725:77;31722:1;31715:88;31822:4;31819:1;31812:15;31846:4;31843:1;31836:15;31863:233;31902:3;31925:24;31943:5;31925:24;:::i;:::-;31916:33;;31971:66;31964:5;31961:77;31958:103;;;32041:18;;:::i;:::-;31958:103;32088:1;32081:5;32077:13;32070:20;;31863:233;;;:::o;32102:236::-;32242:34;32238:1;32230:6;32226:14;32219:58;32311:19;32306:2;32298:6;32294:15;32287:44;32102:236;:::o;32344:366::-;32486:3;32507:67;32571:2;32566:3;32507:67;:::i;:::-;32500:74;;32583:93;32672:3;32583:93;:::i;:::-;32701:2;32696:3;32692:12;32685:19;;32344:366;;;:::o;32716:419::-;32882:4;32920:2;32909:9;32905:18;32897:26;;32969:9;32963:4;32959:20;32955:1;32944:9;32940:17;32933:47;32997:131;33123:4;32997:131;:::i;:::-;32989:139;;32716:419;;;:::o;33141:228::-;33281:34;33277:1;33269:6;33265:14;33258:58;33350:11;33345:2;33337:6;33333:15;33326:36;33141:228;:::o;33375:366::-;33517:3;33538:67;33602:2;33597:3;33538:67;:::i;:::-;33531:74;;33614:93;33703:3;33614:93;:::i;:::-;33732:2;33727:3;33723:12;33716:19;;33375:366;;;:::o;33747:419::-;33913:4;33951:2;33940:9;33936:18;33928:26;;34000:9;33994:4;33990:20;33986:1;33975:9;33971:17;33964:47;34028:131;34154:4;34028:131;:::i;:::-;34020:139;;33747:419;;;:::o;34172:229::-;34312:34;34308:1;34300:6;34296:14;34289:58;34381:12;34376:2;34368:6;34364:15;34357:37;34172:229;:::o;34407:366::-;34549:3;34570:67;34634:2;34629:3;34570:67;:::i;:::-;34563:74;;34646:93;34735:3;34646:93;:::i;:::-;34764:2;34759:3;34755:12;34748:19;;34407:366;;;:::o;34779:419::-;34945:4;34983:2;34972:9;34968:18;34960:26;;35032:9;35026:4;35022:20;35018:1;35007:9;35003:17;34996:47;35060:131;35186:4;35060:131;:::i;:::-;35052:139;;34779:419;;;:::o;35204:169::-;35344:21;35340:1;35332:6;35328:14;35321:45;35204:169;:::o;35379:366::-;35521:3;35542:67;35606:2;35601:3;35542:67;:::i;:::-;35535:74;;35618:93;35707:3;35618:93;:::i;:::-;35736:2;35731:3;35727:12;35720:19;;35379:366;;;:::o;35751:419::-;35917:4;35955:2;35944:9;35940:18;35932:26;;36004:9;35998:4;35994:20;35990:1;35979:9;35975:17;35968:47;36032:131;36158:4;36032:131;:::i;:::-;36024:139;;35751:419;;;:::o;36176:164::-;36316:16;36312:1;36304:6;36300:14;36293:40;36176:164;:::o;36346:366::-;36488:3;36509:67;36573:2;36568:3;36509:67;:::i;:::-;36502:74;;36585:93;36674:3;36585:93;:::i;:::-;36703:2;36698:3;36694:12;36687:19;;36346:366;;;:::o;36718:419::-;36884:4;36922:2;36911:9;36907:18;36899:26;;36971:9;36965:4;36961:20;36957:1;36946:9;36942:17;36935:47;36999:131;37125:4;36999:131;:::i;:::-;36991:139;;36718:419;;;:::o;37143:165::-;37283:17;37279:1;37271:6;37267:14;37260:41;37143:165;:::o;37314:366::-;37456:3;37477:67;37541:2;37536:3;37477:67;:::i;:::-;37470:74;;37553:93;37642:3;37553:93;:::i;:::-;37671:2;37666:3;37662:12;37655:19;;37314:366;;;:::o;37686:419::-;37852:4;37890:2;37879:9;37875:18;37867:26;;37939:9;37933:4;37929:20;37925:1;37914:9;37910:17;37903:47;37967:131;38093:4;37967:131;:::i;:::-;37959:139;;37686:419;;;:::o;38111:180::-;38159:77;38156:1;38149:88;38256:4;38253:1;38246:15;38280:4;38277:1;38270:15;38297:185;38337:1;38354:20;38372:1;38354:20;:::i;:::-;38349:25;;38388:20;38406:1;38388:20;:::i;:::-;38383:25;;38427:1;38417:35;;38432:18;;:::i;:::-;38417:35;38474:1;38471;38467:9;38462:14;;38297:185;;;;:::o;38488:533::-;38657:4;38695:2;38684:9;38680:18;38672:26;;38708:71;38776:1;38765:9;38761:17;38752:6;38708:71;:::i;:::-;38789:72;38857:2;38846:9;38842:18;38833:6;38789:72;:::i;:::-;38908:9;38902:4;38898:20;38893:2;38882:9;38878:18;38871:48;38936:78;39009:4;39000:6;38936:78;:::i;:::-;38928:86;;38488:533;;;;;;:::o;39027:175::-;39167:27;39163:1;39155:6;39151:14;39144:51;39027:175;:::o;39208:366::-;39350:3;39371:67;39435:2;39430:3;39371:67;:::i;:::-;39364:74;;39447:93;39536:3;39447:93;:::i;:::-;39565:2;39560:3;39556:12;39549:19;;39208:366;;;:::o;39580:419::-;39746:4;39784:2;39773:9;39769:18;39761:26;;39833:9;39827:4;39823:20;39819:1;39808:9;39804:17;39797:47;39861:131;39987:4;39861:131;:::i;:::-;39853:139;;39580:419;;;:::o;40005:249::-;40145:34;40141:1;40133:6;40129:14;40122:58;40214:32;40209:2;40201:6;40197:15;40190:57;40005:249;:::o;40260:366::-;40402:3;40423:67;40487:2;40482:3;40423:67;:::i;:::-;40416:74;;40499:93;40588:3;40499:93;:::i;:::-;40617:2;40612:3;40608:12;40601:19;;40260:366;;;:::o;40632:419::-;40798:4;40836:2;40825:9;40821:18;40813:26;;40885:9;40879:4;40875:20;40871:1;40860:9;40856:17;40849:47;40913:131;41039:4;40913:131;:::i;:::-;40905:139;;40632:419;;;:::o;41057:220::-;41197:34;41193:1;41185:6;41181:14;41174:58;41266:3;41261:2;41253:6;41249:15;41242:28;41057:220;:::o;41283:366::-;41425:3;41446:67;41510:2;41505:3;41446:67;:::i;:::-;41439:74;;41522:93;41611:3;41522:93;:::i;:::-;41640:2;41635:3;41631:12;41624:19;;41283:366;;;:::o;41655:419::-;41821:4;41859:2;41848:9;41844:18;41836:26;;41908:9;41902:4;41898:20;41894:1;41883:9;41879:17;41872:47;41936:131;42062:4;41936:131;:::i;:::-;41928:139;;41655:419;;;:::o;42080:177::-;42220:29;42216:1;42208:6;42204:14;42197:53;42080:177;:::o;42263:366::-;42405:3;42426:67;42490:2;42485:3;42426:67;:::i;:::-;42419:74;;42502:93;42591:3;42502:93;:::i;:::-;42620:2;42615:3;42611:12;42604:19;;42263:366;;;:::o;42635:419::-;42801:4;42839:2;42828:9;42824:18;42816:26;;42888:9;42882:4;42878:20;42874:1;42863:9;42859:17;42852:47;42916:131;43042:4;42916:131;:::i;:::-;42908:139;;42635:419;;;:::o;43060:160::-;43200:12;43196:1;43188:6;43184:14;43177:36;43060:160;:::o;43226:366::-;43368:3;43389:67;43453:2;43448:3;43389:67;:::i;:::-;43382:74;;43465:93;43554:3;43465:93;:::i;:::-;43583:2;43578:3;43574:12;43567:19;;43226:366;;;:::o;43598:419::-;43764:4;43802:2;43791:9;43787:18;43779:26;;43851:9;43845:4;43841:20;43837:1;43826:9;43822:17;43815:47;43879:131;44005:4;43879:131;:::i;:::-;43871:139;;43598:419;;;:::o;44023:171::-;44163:23;44159:1;44151:6;44147:14;44140:47;44023:171;:::o;44200:366::-;44342:3;44363:67;44427:2;44422:3;44363:67;:::i;:::-;44356:74;;44439:93;44528:3;44439:93;:::i;:::-;44557:2;44552:3;44548:12;44541:19;;44200:366;;;:::o;44572:419::-;44738:4;44776:2;44765:9;44761:18;44753:26;;44825:9;44819:4;44815:20;44811:1;44800:9;44796:17;44789:47;44853:131;44979:4;44853:131;:::i;:::-;44845:139;;44572:419;;;:::o;44997:143::-;45054:5;45085:6;45079:13;45070:22;;45101:33;45128:5;45101:33;:::i;:::-;44997:143;;;;:::o;45146:351::-;45216:6;45265:2;45253:9;45244:7;45240:23;45236:32;45233:119;;;45271:79;;:::i;:::-;45233:119;45391:1;45416:64;45472:7;45463:6;45452:9;45448:22;45416:64;:::i;:::-;45406:74;;45362:128;45146:351;;;;:::o;45503:171::-;45643:23;45639:1;45631:6;45627:14;45620:47;45503:171;:::o;45680:366::-;45822:3;45843:67;45907:2;45902:3;45843:67;:::i;:::-;45836:74;;45919:93;46008:3;45919:93;:::i;:::-;46037:2;46032:3;46028:12;46021:19;;45680:366;;;:::o;46052:419::-;46218:4;46256:2;46245:9;46241:18;46233:26;;46305:9;46299:4;46295:20;46291:1;46280:9;46276:17;46269:47;46333:131;46459:4;46333:131;:::i;:::-;46325:139;;46052:419;;;:::o;46477:234::-;46617:34;46613:1;46605:6;46601:14;46594:58;46686:17;46681:2;46673:6;46669:15;46662:42;46477:234;:::o;46717:366::-;46859:3;46880:67;46944:2;46939:3;46880:67;:::i;:::-;46873:74;;46956:93;47045:3;46956:93;:::i;:::-;47074:2;47069:3;47065:12;47058:19;;46717:366;;;:::o;47089:419::-;47255:4;47293:2;47282:9;47278:18;47270:26;;47342:9;47336:4;47332:20;47328:1;47317:9;47313:17;47306:47;47370:131;47496:4;47370:131;:::i;:::-;47362:139;;47089:419;;;:::o;47514:148::-;47616:11;47653:3;47638:18;;47514:148;;;;:::o;47668:377::-;47774:3;47802:39;47835:5;47802:39;:::i;:::-;47857:89;47939:6;47934:3;47857:89;:::i;:::-;47850:96;;47955:52;48000:6;47995:3;47988:4;47981:5;47977:16;47955:52;:::i;:::-;48032:6;48027:3;48023:16;48016:23;;47778:267;47668:377;;;;:::o;48051:165::-;48191:17;48187:1;48179:6;48175:14;48168:41;48051:165;:::o;48222:402::-;48382:3;48403:85;48485:2;48480:3;48403:85;:::i;:::-;48396:92;;48497:93;48586:3;48497:93;:::i;:::-;48615:2;48610:3;48606:12;48599:19;;48222:402;;;:::o;48630:541::-;48863:3;48885:95;48976:3;48967:6;48885:95;:::i;:::-;48878:102;;48997:148;49141:3;48997:148;:::i;:::-;48990:155;;49162:3;49155:10;;48630:541;;;;:::o;49177:155::-;49317:7;49313:1;49305:6;49301:14;49294:31;49177:155;:::o;49338:400::-;49498:3;49519:84;49601:1;49596:3;49519:84;:::i;:::-;49512:91;;49612:93;49701:3;49612:93;:::i;:::-;49730:1;49725:3;49721:11;49714:18;;49338:400;;;:::o;49744:701::-;50025:3;50047:95;50138:3;50129:6;50047:95;:::i;:::-;50040:102;;50159:95;50250:3;50241:6;50159:95;:::i;:::-;50152:102;;50271:148;50415:3;50271:148;:::i;:::-;50264:155;;50436:3;50429:10;;49744:701;;;;;:::o;50451:225::-;50591:34;50587:1;50579:6;50575:14;50568:58;50660:8;50655:2;50647:6;50643:15;50636:33;50451:225;:::o;50682:366::-;50824:3;50845:67;50909:2;50904:3;50845:67;:::i;:::-;50838:74;;50921:93;51010:3;50921:93;:::i;:::-;51039:2;51034:3;51030:12;51023:19;;50682:366;;;:::o;51054:419::-;51220:4;51258:2;51247:9;51243:18;51235:26;;51307:9;51301:4;51297:20;51293:1;51282:9;51278:17;51271:47;51335:131;51461:4;51335:131;:::i;:::-;51327:139;;51054:419;;;:::o;51479:231::-;51619:34;51615:1;51607:6;51603:14;51596:58;51688:14;51683:2;51675:6;51671:15;51664:39;51479:231;:::o;51716:366::-;51858:3;51879:67;51943:2;51938:3;51879:67;:::i;:::-;51872:74;;51955:93;52044:3;51955:93;:::i;:::-;52073:2;52068:3;52064:12;52057:19;;51716:366;;;:::o;52088:419::-;52254:4;52292:2;52281:9;52277:18;52269:26;;52341:9;52335:4;52331:20;52327:1;52316:9;52312:17;52305:47;52369:131;52495:4;52369:131;:::i;:::-;52361:139;;52088:419;;;:::o;52513:228::-;52653:34;52649:1;52641:6;52637:14;52630:58;52722:11;52717:2;52709:6;52705:15;52698:36;52513:228;:::o;52747:366::-;52889:3;52910:67;52974:2;52969:3;52910:67;:::i;:::-;52903:74;;52986:93;53075:3;52986:93;:::i;:::-;53104:2;53099:3;53095:12;53088:19;;52747:366;;;:::o;53119:419::-;53285:4;53323:2;53312:9;53308:18;53300:26;;53372:9;53366:4;53362:20;53358:1;53347:9;53343:17;53336:47;53400:131;53526:4;53400:131;:::i;:::-;53392:139;;53119:419;;;:::o;53544:223::-;53684:34;53680:1;53672:6;53668:14;53661:58;53753:6;53748:2;53740:6;53736:15;53729:31;53544:223;:::o;53773:366::-;53915:3;53936:67;54000:2;53995:3;53936:67;:::i;:::-;53929:74;;54012:93;54101:3;54012:93;:::i;:::-;54130:2;54125:3;54121:12;54114:19;;53773:366;;;:::o;54145:419::-;54311:4;54349:2;54338:9;54334:18;54326:26;;54398:9;54392:4;54388:20;54384:1;54373:9;54369:17;54362:47;54426:131;54552:4;54426:131;:::i;:::-;54418:139;;54145:419;;;:::o;54570:191::-;54610:4;54630:20;54648:1;54630:20;:::i;:::-;54625:25;;54664:20;54682:1;54664:20;:::i;:::-;54659:25;;54703:1;54700;54697:8;54694:34;;;54708:18;;:::i;:::-;54694:34;54753:1;54750;54746:9;54738:17;;54570:191;;;;:::o;54767:175::-;54907:27;54903:1;54895:6;54891:14;54884:51;54767:175;:::o;54948:366::-;55090:3;55111:67;55175:2;55170:3;55111:67;:::i;:::-;55104:74;;55187:93;55276:3;55187:93;:::i;:::-;55305:2;55300:3;55296:12;55289:19;;54948:366;;;:::o;55320:419::-;55486:4;55524:2;55513:9;55509:18;55501:26;;55573:9;55567:4;55563:20;55559:1;55548:9;55544:17;55537:47;55601:131;55727:4;55601:131;:::i;:::-;55593:139;;55320:419;;;:::o;55745:237::-;55885:34;55881:1;55873:6;55869:14;55862:58;55954:20;55949:2;55941:6;55937:15;55930:45;55745:237;:::o;55988:366::-;56130:3;56151:67;56215:2;56210:3;56151:67;:::i;:::-;56144:74;;56227:93;56316:3;56227:93;:::i;:::-;56345:2;56340:3;56336:12;56329:19;;55988:366;;;:::o;56360:419::-;56526:4;56564:2;56553:9;56549:18;56541:26;;56613:9;56607:4;56603:20;56599:1;56588:9;56584:17;56577:47;56641:131;56767:4;56641:131;:::i;:::-;56633:139;;56360:419;;;:::o;56785:176::-;56817:1;56834:20;56852:1;56834:20;:::i;:::-;56829:25;;56868:20;56886:1;56868:20;:::i;:::-;56863:25;;56907:1;56897:35;;56912:18;;:::i;:::-;56897:35;56953:1;56950;56946:9;56941:14;;56785:176;;;;:::o;56967:98::-;57018:6;57052:5;57046:12;57036:22;;56967:98;;;:::o;57071:168::-;57154:11;57188:6;57183:3;57176:19;57228:4;57223:3;57219:14;57204:29;;57071:168;;;;:::o;57245:360::-;57331:3;57359:38;57391:5;57359:38;:::i;:::-;57413:70;57476:6;57471:3;57413:70;:::i;:::-;57406:77;;57492:52;57537:6;57532:3;57525:4;57518:5;57514:16;57492:52;:::i;:::-;57569:29;57591:6;57569:29;:::i;:::-;57564:3;57560:39;57553:46;;57335:270;57245:360;;;;:::o;57611:640::-;57806:4;57844:3;57833:9;57829:19;57821:27;;57858:71;57926:1;57915:9;57911:17;57902:6;57858:71;:::i;:::-;57939:72;58007:2;57996:9;57992:18;57983:6;57939:72;:::i;:::-;58021;58089:2;58078:9;58074:18;58065:6;58021:72;:::i;:::-;58140:9;58134:4;58130:20;58125:2;58114:9;58110:18;58103:48;58168:76;58239:4;58230:6;58168:76;:::i;:::-;58160:84;;57611:640;;;;;;;:::o;58257:141::-;58313:5;58344:6;58338:13;58329:22;;58360:32;58386:5;58360:32;:::i;:::-;58257:141;;;;:::o;58404:349::-;58473:6;58522:2;58510:9;58501:7;58497:23;58493:32;58490:119;;;58528:79;;:::i;:::-;58490:119;58648:1;58673:63;58728:7;58719:6;58708:9;58704:22;58673:63;:::i;:::-;58663:73;;58619:127;58404:349;;;;:::o;58759:182::-;58899:34;58895:1;58887:6;58883:14;58876:58;58759:182;:::o;58947:366::-;59089:3;59110:67;59174:2;59169:3;59110:67;:::i;:::-;59103:74;;59186:93;59275:3;59186:93;:::i;:::-;59304:2;59299:3;59295:12;59288:19;;58947:366;;;:::o;59319:419::-;59485:4;59523:2;59512:9;59508:18;59500:26;;59572:9;59566:4;59562:20;59558:1;59547:9;59543:17;59536:47;59600:131;59726:4;59600:131;:::i;:::-;59592:139;;59319:419;;;:::o;59744:178::-;59884:30;59880:1;59872:6;59868:14;59861:54;59744:178;:::o;59928:366::-;60070:3;60091:67;60155:2;60150:3;60091:67;:::i;:::-;60084:74;;60167:93;60256:3;60167:93;:::i;:::-;60285:2;60280:3;60276:12;60269:19;;59928:366;;;:::o;60300:419::-;60466:4;60504:2;60493:9;60489:18;60481:26;;60553:9;60547:4;60543:20;60539:1;60528:9;60524:17;60517:47;60581:131;60707:4;60581:131;:::i;:::-;60573:139;;60300:419;;;:::o

Swarm Source

ipfs://8e708746b7c8c214bc5a20c20a6b55fd3d3a508be002aa3ed3fd822a82d16b41
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.