ETH Price: $3,352.60 (-2.82%)
Gas: 3 Gwei

Token

LiteralSquidGame (LSG)
 

Overview

Max Total Supply

1,590 LSG

Holders

304

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 LSG
0x2A5ceC2f23D62E19F351107c1e563F2EE9ccdCF7
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:
SquidGame

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-03
*/

// SPDX-License-Identifier: MIT

/*
_     _____ _____ ___________  ___   _       _____  _____ _   _ ___________   _____   ___  ___  ___ _____ 
| |   |_   _|_   _|  ___| ___ \/ _ \ | |     /  ___||  _  | | | |_   _|  _  \ |  __ \ / _ \ |  \/  ||  ___|
| |     | |   | | | |__ | |_/ / /_\ \| |     \ `--. | | | | | | | | | | | | | | |  \// /_\ \| .  . || |__  
| |     | |   | | |  __||    /|  _  || |      `--. \| | | | | | | | | | | | | | | __ |  _  || |\/| ||  __| 
| |_____| |_  | | | |___| |\ \| | | || |____ /\__/ /\ \/' / |_| |_| |_| |/ /  | |_\ \| | | || |  | || |___ 
\_____/\___/  \_/ \____/\_| \_\_| |_/\_____/ \____/  \_/\_\\___/ \___/|___/    \____/\_| |_/\_|  |_/\____/ 
                                                                                                           
                                                                                                           
*/

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


// OpenZeppelin Contracts v4.4.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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/Shark.sol



pragma solidity ^0.8.9;



interface IInkk {
    function balanceOf(address owner) external view returns (uint);
    function burn(address account, uint amount) external;
}

interface IReef {
    function randomSharkOwner() external returns (address);
    function addTokensToStake(address account, uint16[] calldata tokenIds) external;
}

contract SquidGame is ERC721, Ownable {
    uint public MAX_TOKENS = 50000;
    uint constant public MINT_PER_TX_LIMIT = 20;

    uint public tokensMinted = 0;
    uint16 public phase = 1;
    uint16 public sharkStolen = 0;
    uint16 public squidStolen = 0;
    uint16 public sharkMinted = 0;
    uint16 public maxFreeMint = 888;

    bool private _paused = true;

    mapping(uint16 => uint) public phasePrice;

    IReef public reef;
    IInkk public inkk;

    string private _apiURI; //NEED TO UPDATE
    mapping(uint16 => bool) private _isShark;
    
    uint16[] private _availableTokens;
    uint16 private _randomIndex = 0;
    uint private _randomCalls = 0;

    mapping(uint16 => address) private _randomSource;

    event TokenStolen(address owner, uint16 tokenId, address thief);

    constructor() ERC721("LiteralSquidGame", "LSG") {
        _safeMint(msg.sender, 0);
        tokensMinted += 1;

        // Phase 1 is available in the beginning
        switchToSalePhase(1, true);

        // Set default price for each phase
        phasePrice[1] = 0.042 ether;
        phasePrice[2] = 20000 ether;
        phasePrice[3] = 40000 ether;
        phasePrice[4] = 80000 ether;
        
        // Fill random source addresses
        _randomSource[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
        _randomSource[1] = 0x3cD751E6b0078Be393132286c442345e5DC49699;
        _randomSource[2] = 0xb5d85CBf7cB3EE0D56b3bB207D5Fc4B82f43F511;
        _randomSource[3] = 0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94;
        _randomSource[4] = 0x28C6c06298d514Db089934071355E5743bf21d60;
        _randomSource[5] = 0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2;
        _randomSource[6] = 0x267be1C1D684F78cb4F6a176C4911b741E4Ffdc0;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function setPaused(bool _state) external onlyOwner {
        _paused = _state;
    }

    function addAvailableTokens(uint16 _from, uint16 _to) public onlyOwner {
        internalAddTokens(_from, _to);
    }

    function internalAddTokens(uint16 _from, uint16 _to) internal {
        for (uint16 i = _from; i <= _to; i++) {
            _availableTokens.push(i);
        }
    }

    function switchToSalePhase(uint16 _phase, bool _setTokens) public onlyOwner {
        phase = _phase;

        if (!_setTokens) {
            return;
        }

        if (phase == 1) {
            internalAddTokens(1, 9999);
        } else if (phase == 2) {
            internalAddTokens(10000, 20000);
        } else if (phase == 3) {
            internalAddTokens(20001, 40000);
        } else if (phase == 4) {
            internalAddTokens(40001, 49999);
        }
    }

    function giveAway(uint _amount, address _address) public onlyOwner {
        require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        for (uint i = 0; i < _amount; i++) {
            uint16 tokenId = getTokenToBeMinted();
            _safeMint(_address, tokenId);
        }
    }

    function freeMint() external whenNotPaused {
        require(tokensMinted < maxFreeMint, "there are no free mints remaining");
        tokensMinted++;
        uint16 tokenId = getTokenToBeMinted();
        _safeMint(msg.sender, tokenId);
    }

    function mint(uint _amount, bool _stake) public payable whenNotPaused {
        require(tx.origin == msg.sender, "Only EOA");
        require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted");
        require(_amount > 0 && _amount <= MINT_PER_TX_LIMIT, "Invalid mint amount");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        uint totalInkkCost = 0;

        if (phase == 1) {
            // Paid mint
            require(mintPrice(_amount) == msg.value, "Invalid payment amount");
        } else {
            // Mint via inkk burn
            require(msg.value == 0, "Minting is now done with INKK");
            totalInkkCost = mintPrice(_amount);
            require(inkk.balanceOf(msg.sender) >= totalInkkCost, "Not enough INKK");
        }

        if (totalInkkCost > 0) {
            inkk.burn(msg.sender, totalInkkCost);
        }

        tokensMinted += _amount;
        uint16[] memory tokenIds = _stake ? new uint16[](_amount) : new uint16[](0);
        for (uint i = 0; i < _amount; i++) {
            address recipient = selectRecipient();
            if (phase != 1) {
                updateRandomIndex();
            }

            uint16 tokenId = getTokenToBeMinted();

            if (isShark(tokenId)) {
                sharkMinted += 1;
            }

            if (recipient != msg.sender) {
                isShark(tokenId) ? sharkStolen += 1 : squidStolen += 1;
                emit TokenStolen(msg.sender, tokenId, recipient);
            }
            
            if (!_stake || recipient != msg.sender) {
                _safeMint(recipient, tokenId);
            } else {
                _safeMint(address(reef), tokenId);
                tokenIds[i] = tokenId;
            }
        }
        if (_stake) {
            reef.addTokensToStake(msg.sender, tokenIds);
        }
    }

    function selectRecipient() internal returns (address) {
        if (phase == 1) {
            return msg.sender; // During ETH sale there is no chance to steal NTF
        }

        // 10% chance to steal NTF
        if (getSomeRandomNumber(sharkMinted, 100) >= 10) {
            return msg.sender; // 90%
        }

        address thief = reef.randomSharkOwner();
        if (thief == address(0x0)) {
            return msg.sender;
        }
        return thief;
    }

    function mintPrice(uint _amount) public view returns (uint) {
        return _amount * phasePrice[phase];
    }

    function isShark(uint16 id) public view returns (bool) {
        return _isShark[id];
    }

    function getTokenToBeMinted() private returns (uint16) {
        uint random = getSomeRandomNumber(_availableTokens.length, _availableTokens.length);
        uint16 tokenId = _availableTokens[random];

        _availableTokens[random] = _availableTokens[_availableTokens.length - 1];
        _availableTokens.pop();

        return tokenId;
    }
    
    function updateRandomIndex() internal {
        _randomIndex += 1;
        _randomCalls += 1;
        if (_randomIndex > 6) _randomIndex = 0;
    }

    function getSomeRandomNumber(uint _seed, uint _limit) internal view returns (uint16) {
        uint extra = 0;
        for (uint16 i = 0; i < 7; i++) {
            extra += _randomSource[_randomIndex].balance;
        }

        uint random = uint(
            keccak256(
                abi.encodePacked(
                    _seed,
                    blockhash(block.number - 1),
                    block.coinbase,
                    block.difficulty,
                    msg.sender,
                    tokensMinted,
                    extra,
                    _randomCalls,
                    _randomIndex
                )
            )
        );

        return uint16(random % _limit);
    }

    function shuffleSeeds(uint _seed, uint _max) external onlyOwner {
        uint shuffleCount = getSomeRandomNumber(_seed, _max);
        _randomIndex = uint16(shuffleCount);
        for (uint i = 0; i < shuffleCount; i++) {
            updateRandomIndex();
        }
    }

    function setSharkId(uint16 id, bool special) external onlyOwner {
        _isShark[id] = special;
    }

    function setSharkIds(uint16[] calldata ids) external onlyOwner {
        for (uint i = 0; i < ids.length; i++) {
            _isShark[ids[i]] = true;
        }
    }

    function setReef(address _reef) external onlyOwner {
        reef = IReef(_reef);
    }

    function setInkk(address _inkk) external onlyOwner {
        inkk = IInkk(_inkk);
    }

    function changePhasePrice(uint16 _phase, uint _weiPrice) external onlyOwner {
        phasePrice[_phase] = _weiPrice;
    }

    function transferFrom(address from, address to, uint tokenId) public virtual override {
        // Hardcode the Manager's approval so that users don't have to waste gas approving
        if (_msgSender() != address(reef))
            require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function totalSupply() external view returns (uint) {
        return tokensMinted;
    }

    function _baseURI() internal view override returns (string memory) {
        return _apiURI;
    }

    function setBaseURI(string memory uri) external onlyOwner {
        _apiURI = uri;
    }

    function changeRandomSource(uint16 _id, address _address) external onlyOwner {
        _randomSource[_id] = _address;
    }

    function withdraw(address to) external onlyOwner { //UPDATE WITH BREAKDOWN BY ADDRESS
        uint balance = address(this).balance;
        uint share = (balance * 20) / 100;
        payable(address(0x000000)).transfer(share);
        payable(to).transfer(balance - share);
    }
    
    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0);

        _withdraw(0xeB9308d65EF1d3729b5acfa0fF6983407366fAe2, (balance * 125) / 1000);
        _withdraw(0x8942bfA6390710039e94D27cF461f4AF90Bd6698, (balance * 113) / 1000);
        _withdraw(0x05542104Ce35D64D94A02d1169B19f3c6692e1C6, (balance * 125) / 1000);
        _withdraw(0x45062131e00aBd9Ce764Cc0F59E5BA5aa4bcE6C0, (balance * 125) / 1000);
        _withdraw(0xFcE6a0067A3530967E888beF2fd0f03bb3C71c08, (balance * 125) / 1000);
        _withdraw(0xD51DcF312de6b68DD832cacAB0fCe8D191b1F4B0, (balance * 61) / 1000);
        _withdraw(0xEaA86e6108D77B9461E944a9c6768D755Fdf9d8D, (balance * 99) / 1000);
        _withdraw(0xEfeB49409434D8A4d97254363Ff0AabE95366e61, (balance * 99) / 1000);
        _withdraw(0x641fB314Fb59D0352B6bFd90A98f1DA643fF9e5c, (balance * 125) / 1000);
        _withdraw(0x46e6634E84570dc13020d16017839614E6FEE495, (balance * 3) / 1000);
    }

    function _withdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{value: _amount}("");
        require(success, "Transfer failed.");
    }
    function ownerWithdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"address","name":"thief","type":"address"}],"name":"TokenStolen","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":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PER_TX_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_from","type":"uint16"},{"internalType":"uint16","name":"_to","type":"uint16"}],"name":"addAvailableTokens","outputs":[],"stateMutability":"nonpayable","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":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"uint256","name":"_weiPrice","type":"uint256"}],"name":"changePhasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeRandomSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inkk","outputs":[{"internalType":"contract IInkk","name":"","type":"address"}],"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":"uint16","name":"id","type":"uint16"}],"name":"isShark","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMint","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPrice","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":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"phasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reef","outputs":[{"internalType":"contract IReef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_inkk","type":"address"}],"name":"setInkk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reef","type":"address"}],"name":"setReef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"bool","name":"special","type":"bool"}],"name":"setSharkId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"setSharkIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sharkMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sharkStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"shuffleSeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"squidStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"bool","name":"_setTokens","type":"bool"}],"name":"switchToSalePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261c35060075560006008556001600960006101000a81548161ffff021916908361ffff1602179055506000600960026101000a81548161ffff021916908361ffff1602179055506000600960046101000a81548161ffff021916908361ffff1602179055506000600960066101000a81548161ffff021916908361ffff160217905550610378600960086101000a81548161ffff021916908361ffff16021790555060016009600a6101000a81548160ff0219169083151502179055506000601060006101000a81548161ffff021916908361ffff1602179055506000601155348015620000f157600080fd5b506040518060400160405280601081526020017f4c69746572616c537175696447616d65000000000000000000000000000000008152506040518060400160405280600381526020017f4c5347000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017692919062000d4c565b5080600190805190602001906200018f92919062000d4c565b505050620001b2620001a66200057f60201b60201c565b6200058760201b60201c565b620001c53360006200064d60201b60201c565b600160086000828254620001da919062000e35565b92505081905550620001f46001806200067360201b60201c565b669536c708910000600a6000600161ffff1681526020019081526020016000208190555069043c33c1937564800000600a6000600261ffff16815260200190815260200160002081905550690878678326eac9000000600a6000600361ffff168152602001908152602001600020819055506910f0cf064dd592000000600a6000600461ffff1681526020019081526020016000208190555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2601260008061ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733cd751e6b0078be393132286c442345e5dc4969960126000600161ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f51160126000600261ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c098b2a3aa256d2140208c3de6543aaef5cd3a9460126000600361ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507328c6c06298d514db089934071355e5743bf21d6060126000600461ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732faf487a4414fe77e2327f0bf4ae2a264a776ad260126000600561ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073267be1c1d684f78cb4f6a176c4911b741e4ffdc060126000600661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062001316565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066f8282604051806020016040528060008152506200081560201b60201c565b5050565b620006836200057f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006a96200088360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000702576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f99062000ef3565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff160217905550806200072b5762000811565b6001600960009054906101000a900461ffff1661ffff16141562000764576200075e600161270f620008ad60201b60201c565b62000810565b6002600960009054906101000a900461ffff1661ffff1614156200079e5762000798612710614e20620008ad60201b60201c565b6200080f565b6003600960009054906101000a900461ffff1661ffff161415620007d857620007d2614e21619c40620008ad60201b60201c565b6200080e565b6004600960009054906101000a900461ffff1661ffff1614156200080d576200080c619c4161c34f620008ad60201b60201c565b5b5b5b5b5b5050565b6200082783836200092860201b60201c565b6200083c600084848462000b0e60201b60201c565b6200087e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008759062000f8b565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008290505b8161ffff168161ffff16116200092357600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff16021790555080806200091a9062000fbb565b915050620008b3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000992906200103b565b60405180910390fd5b620009ac8162000cc860201b60201c565b15620009ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e690620010ad565b60405180910390fd5b62000a036000838362000d3460201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a55919062000e35565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000b3c8473ffffffffffffffffffffffffffffffffffffffff1662000d3960201b62002c831760201c565b1562000cbb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b6e6200057f60201b60201c565b8786866040518563ffffffff1660e01b815260040162000b929493929190620011c9565b602060405180830381600087803b15801562000bad57600080fd5b505af192505050801562000be157506040513d601f19601f8201168201806040525081019062000bde91906200127f565b60015b62000c6a573d806000811462000c14576040519150601f19603f3d011682016040523d82523d6000602084013e62000c19565b606091505b5060008151141562000c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c599062000f8b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000cc0565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b82805462000d5a90620012e0565b90600052602060002090601f01602090048101928262000d7e576000855562000dca565b82601f1062000d9957805160ff191683800117855562000dca565b8280016001018555821562000dca579182015b8281111562000dc957825182559160200191906001019062000dac565b5b50905062000dd9919062000ddd565b5090565b5b8082111562000df857600081600090555060010162000dde565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e428262000dfc565b915062000e4f8362000dfc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e875762000e8662000e06565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000edb60208362000e92565b915062000ee88262000ea3565b602082019050919050565b6000602082019050818103600083015262000f0e8162000ecc565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000f7360328362000e92565b915062000f808262000f15565b604082019050919050565b6000602082019050818103600083015262000fa68162000f64565b9050919050565b600061ffff82169050919050565b600062000fc88262000fad565b915061ffff82141562000fe05762000fdf62000e06565b5b600182019050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200102360208362000e92565b9150620010308262000feb565b602082019050919050565b60006020820190508181036000830152620010568162001014565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001095601c8362000e92565b9150620010a2826200105d565b602082019050919050565b60006020820190508181036000830152620010c88162001086565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010fc82620010cf565b9050919050565b6200110e81620010ef565b82525050565b6200111f8162000dfc565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200116157808201518184015260208101905062001144565b8381111562001171576000848401525b50505050565b6000601f19601f8301169050919050565b6000620011958262001125565b620011a1818562001130565b9350620011b381856020860162001141565b620011be8162001177565b840191505092915050565b6000608082019050620011e0600083018762001103565b620011ef602083018662001103565b620011fe604083018562001114565b818103606083015262001212818462001188565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620012598162001222565b81146200126557600080fd5b50565b60008151905062001279816200124e565b92915050565b6000602082840312156200129857620012976200121d565b5b6000620012a88482850162001268565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012f957607f821691505b6020821081141562001310576200130f620012b1565b5b50919050565b615f8d80620013266000396000f3fe6080604052600436106102935760003560e01c8063715018a61161015a578063bc1e6246116100c1578063efb3d0081161007a578063efb3d008146109c9578063f1ff5dec146109f2578063f2fde38b14610a1b578063f453eeae14610a44578063f47c84c514610a6f578063f931690914610a9a57610293565b8063bc1e624614610881578063c44554f2146108aa578063c87b56dd146108d5578063c9150a9e14610912578063e6a72acf1461094f578063e985e9c51461098c57610293565b806395d89b411161011357806395d89b41146107855780639a601263146107b0578063a22cb465146107d9578063a591252d14610802578063b1c9fe6e1461082d578063b88d4fde1461085857610293565b8063715018a6146106af578063853828b6146106c657806386b854c8146106dd5780638da5cb5b14610706578063908c45e21461073157806392b242291461075c57610293565b80634311de8f116101fe5780635b70ea9f116101b75780635b70ea9f146105ac5780635c975abb146105c35780636352211e146105ee57806367f68fac1461062b5780636de9f32b1461064757806370a082311461067257610293565b80634311de8f146104c657806345d51007146104dd5780634efc09f5146105085780634ff448371461053157806351cff8d91461055a57806355f804b31461058357610293565b80631b6ac35b116102505780631b6ac35b146103ba57806323b872dd146103f7578063261d3b2114610420578063360a4692146104495780633d4729371461047457806342842e0e1461049d57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d57806316c38b3c1461036657806318160ddd1461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190614017565b610ac5565b6040516102cc919061405f565b60405180910390f35b3480156102e157600080fd5b506102ea610ba7565b6040516102f79190614113565b60405180910390f35b34801561030c57600080fd5b506103276004803603810190610322919061416b565b610c39565b60405161033491906141d9565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190614220565b610cbe565b005b34801561037257600080fd5b5061038d6004803603810190610388919061428c565b610dd6565b005b34801561039b57600080fd5b506103a4610e6f565b6040516103b191906142c8565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc919061431d565b610e79565b6040516103ee919061405f565b60405180910390f35b34801561040357600080fd5b5061041e6004803603810190610419919061434a565b610eab565b005b34801561042c57600080fd5b506104476004803603810190610442919061439d565b610f68565b005b34801561045557600080fd5b5061045e6110bc565b60405161046b919061443c565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190614457565b6110e2565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061434a565b611248565b005b3480156104d257600080fd5b506104db611268565b005b3480156104e957600080fd5b506104f2611334565b6040516104ff91906142c8565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190614497565b611339565b005b34801561053d57600080fd5b50610558600480360381019061055391906144d7565b6113d9565b005b34801561056657600080fd5b50610581600480360381019061057c91906144d7565b611499565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190614639565b6115d6565b005b3480156105b857600080fd5b506105c161166c565b005b3480156105cf57600080fd5b506105d8611741565b6040516105e5919061405f565b60405180910390f35b3480156105fa57600080fd5b506106156004803603810190610610919061416b565b611758565b60405161062291906141d9565b60405180910390f35b61064560048036038101906106409190614682565b61180a565b005b34801561065357600080fd5b5061065c611f8c565b60405161066991906142c8565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906144d7565b611f92565b6040516106a691906142c8565b60405180910390f35b3480156106bb57600080fd5b506106c461204a565b005b3480156106d257600080fd5b506106db6120d2565b005b3480156106e957600080fd5b5061070460048036038101906106ff91906146c2565b612389565b005b34801561071257600080fd5b5061071b612463565b60405161072891906141d9565b60405180910390f35b34801561073d57600080fd5b5061074661248d565b6040516107539190614711565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e919061472c565b6124a1565b005b34801561079157600080fd5b5061079a612578565b6040516107a79190614113565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906144d7565b61260a565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061476c565b6126ca565b005b34801561080e57600080fd5b506108176126e0565b6040516108249190614711565b60405180910390f35b34801561083957600080fd5b506108426126f4565b60405161084f9190614711565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061484d565b612708565b005b34801561088d57600080fd5b506108a860048036038101906108a39190614457565b61276a565b005b3480156108b657600080fd5b506108bf61281d565b6040516108cc9190614711565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f7919061416b565b612831565b6040516109099190614113565b60405180910390f35b34801561091e57600080fd5b506109396004803603810190610934919061431d565b6128d8565b60405161094691906142c8565b60405180910390f35b34801561095b57600080fd5b506109766004803603810190610971919061416b565b6128f0565b60405161098391906142c8565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae91906148d0565b612930565b6040516109c0919061405f565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190614910565b6129c4565b005b3480156109fe57600080fd5b50610a196004803603810190610a1491906149b0565b612a4e565b005b348015610a2757600080fd5b50610a426004803603810190610a3d91906144d7565b612b4b565b005b348015610a5057600080fd5b50610a59612c43565b604051610a669190614711565b60405180910390f35b348015610a7b57600080fd5b50610a84612c57565b604051610a9191906142c8565b60405180910390f35b348015610aa657600080fd5b50610aaf612c5d565b604051610abc9190614a1e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ba05750610b9f82612c96565b5b9050919050565b606060008054610bb690614a68565b80601f0160208091040260200160405190810160405280929190818152602001828054610be290614a68565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b6000610c4482612d00565b610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90614b0c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cc982611758565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190614b9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d59612d6c565b73ffffffffffffffffffffffffffffffffffffffff161480610d885750610d8781610d82612d6c565b612930565b5b610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90614c30565b60405180910390fd5b610dd18383612d74565b505050565b610dde612d6c565b73ffffffffffffffffffffffffffffffffffffffff16610dfc612463565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614c9c565b60405180910390fd5b806009600a6101000a81548160ff02191690831515021790555050565b6000600854905090565b6000600e60008361ffff1661ffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610eec612d6c565b73ffffffffffffffffffffffffffffffffffffffff1614610f5857610f18610f12612d6c565b82612e2d565b610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90614d2e565b60405180910390fd5b5b610f63838383612f0b565b505050565b610f70612d6c565b73ffffffffffffffffffffffffffffffffffffffff16610f8e612463565b73ffffffffffffffffffffffffffffffffffffffff1614610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90614c9c565b60405180910390fd5b60075482600854610ff59190614d7d565b1115611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614e1f565b60405180910390fd5b6000600f805490501161107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614eb1565b60405180910390fd5b60005b828110156110b7576000611093613167565b90506110a3838261ffff16613294565b5080806110af90614ed1565b915050611081565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ea612d6c565b73ffffffffffffffffffffffffffffffffffffffff16611108612463565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590614c9c565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff1602179055508061118557611244565b6001600960009054906101000a900461ffff1661ffff1614156111b4576111af600161270f6132b2565b611243565b6002600960009054906101000a900461ffff1661ffff1614156111e4576111df612710614e206132b2565b611242565b6003600960009054906101000a900461ffff1661ffff1614156112145761120f614e21619c406132b2565b611241565b6004600960009054906101000a900461ffff1661ffff1614156112405761123f619c4161c34f6132b2565b5b5b5b5b5b5050565b61126383838360405180602001604052806000815250612708565b505050565b611270612d6c565b73ffffffffffffffffffffffffffffffffffffffff1661128e612463565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614c9c565b60405180910390fd5b6112ec612463565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611331573d6000803e3d6000fd5b50565b601481565b611341612d6c565b73ffffffffffffffffffffffffffffffffffffffff1661135f612463565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90614c9c565b60405180910390fd5b80600a60008461ffff1661ffff168152602001908152602001600020819055505050565b6113e1612d6c565b73ffffffffffffffffffffffffffffffffffffffff166113ff612463565b73ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614c9c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114a1612d6c565b73ffffffffffffffffffffffffffffffffffffffff166114bf612463565b73ffffffffffffffffffffffffffffffffffffffff1614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90614c9c565b60405180910390fd5b60004790506000606460148361152b9190614f1a565b6115359190614fa3565b9050600073ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561157e573d6000803e3d6000fd5b508273ffffffffffffffffffffffffffffffffffffffff166108fc82846115a59190614fd4565b9081150290604051600060405180830381858888f193505050501580156115d0573d6000803e3d6000fd5b50505050565b6115de612d6c565b73ffffffffffffffffffffffffffffffffffffffff166115fc612463565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990614c9c565b60405180910390fd5b80600d9080519060200190611668929190613f08565b5050565b611674611741565b156116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90615054565b60405180910390fd5b600960089054906101000a900461ffff1661ffff166008541061170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906150e6565b60405180910390fd5b6008600081548092919061171f90614ed1565b9190505550600061172e613167565b905061173e338261ffff16613294565b50565b60006009600a9054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890615178565b60405180910390fd5b80915050919050565b611812611741565b15611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990615054565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b7906151e4565b60405180910390fd5b600754826008546118d19190614d7d565b1115611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614e1f565b60405180910390fd5b600082118015611923575060148211155b611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990615250565b60405180910390fd5b6000600f80549050116119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614eb1565b60405180910390fd5b60006001600960009054906101000a900461ffff1661ffff161415611a1857346119d3846128f0565b14611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906152bc565b60405180910390fd5b611b54565b60003414611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290615328565b60405180910390fd5b611a64836128f0565b905080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611ac291906141d9565b60206040518083038186803b158015611ada57600080fd5b505afa158015611aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b12919061535d565b1015611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906153d6565b60405180910390fd5b5b6000811115611bed57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401611bba9291906153f6565b600060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050505b8260086000828254611bff9190614d7d565b92505081905550600082611c5c57600067ffffffffffffffff811115611c2857611c2761450e565b5b604051908082528060200260200182016040528015611c565781602001602082028036833780820191505090505b50611ca6565b8367ffffffffffffffff811115611c7657611c7561450e565b5b604051908082528060200260200182016040528015611ca45781602001602082028036833780820191505090505b505b905060005b84811015611eef576000611cbd613329565b90506001600960009054906101000a900461ffff1661ffff1614611ce457611ce361346e565b5b6000611cee613167565b9050611cf981610e79565b15611d39576001600960068282829054906101000a900461ffff16611d1e919061541f565b92506101000a81548161ffff021916908361ffff1602179055505b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e2e57611d7581610e79565b611db7576001600960048282829054906101000a900461ffff16611d99919061541f565b92506101000a81548161ffff021916908361ffff1602179055611df1565b6001600960028282829054906101000a900461ffff16611dd7919061541f565b92506101000a81548161ffff021916908361ffff16021790555b507f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e0610338284604051611e2593929190615457565b60405180910390a15b851580611e6757503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611e7f57611e7a828261ffff16613294565b611eda565b611eaf600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261ffff16613294565b80848481518110611ec357611ec261548e565b5b602002602001019061ffff16908161ffff16815250505b50508080611ee790614ed1565b915050611cab565b508215611f8657600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e21f4cbe33836040518363ffffffff1660e01b8152600401611f5392919061557b565b600060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050505b50505050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa9061561d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612052612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612070612463565b73ffffffffffffffffffffffffffffffffffffffff16146120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614c9c565b60405180910390fd5b6120d06000613500565b565b6120da612d6c565b73ffffffffffffffffffffffffffffffffffffffff166120f8612463565b73ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590614c9c565b60405180910390fd5b60004790506000811161216057600080fd5b61219773eb9308d65ef1d3729b5acfa0ff6983407366fae26103e8607d846121889190614f1a565b6121929190614fa3565b6135c6565b6121ce738942bfa6390710039e94d27cf461f4af90bd66986103e86071846121bf9190614f1a565b6121c99190614fa3565b6135c6565b6122057305542104ce35d64d94a02d1169b19f3c6692e1c66103e8607d846121f69190614f1a565b6122009190614fa3565b6135c6565b61223c7345062131e00abd9ce764cc0f59e5ba5aa4bce6c06103e8607d8461222d9190614f1a565b6122379190614fa3565b6135c6565b61227373fce6a0067a3530967e888bef2fd0f03bb3c71c086103e8607d846122649190614f1a565b61226e9190614fa3565b6135c6565b6122aa73d51dcf312de6b68dd832cacab0fce8d191b1f4b06103e8603d8461229b9190614f1a565b6122a59190614fa3565b6135c6565b6122e173eaa86e6108d77b9461e944a9c6768d755fdf9d8d6103e86063846122d29190614f1a565b6122dc9190614fa3565b6135c6565b61231873efeb49409434d8a4d97254363ff0aabe95366e616103e86063846123099190614f1a565b6123139190614fa3565b6135c6565b61234f73641fb314fb59d0352b6bfd90a98f1da643ff9e5c6103e8607d846123409190614f1a565b61234a9190614fa3565b6135c6565b6123867346e6634e84570dc13020d16017839614e6fee4956103e86003846123779190614f1a565b6123819190614fa3565b6135c6565b50565b612391612d6c565b73ffffffffffffffffffffffffffffffffffffffff166123af612463565b73ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614c9c565b60405180910390fd5b80601260008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960029054906101000a900461ffff1681565b6124a9612d6c565b73ffffffffffffffffffffffffffffffffffffffff166124c7612463565b73ffffffffffffffffffffffffffffffffffffffff161461251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614c9c565b60405180910390fd5b60006125298383613677565b61ffff16905080601060006101000a81548161ffff021916908361ffff16021790555060005b818110156125725761255f61346e565b808061256a90614ed1565b91505061254f565b50505050565b60606001805461258790614a68565b80601f01602080910402602001604051908101604052809291908181526020018280546125b390614a68565b80156126005780601f106125d557610100808354040283529160200191612600565b820191906000526020600020905b8154815290600101906020018083116125e357829003601f168201915b5050505050905090565b612612612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612630612463565b73ffffffffffffffffffffffffffffffffffffffff1614612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614c9c565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126dc6126d5612d6c565b8383613787565b5050565b600960089054906101000a900461ffff1681565b600960009054906101000a900461ffff1681565b612719612713612d6c565b83612e2d565b612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614d2e565b60405180910390fd5b612764848484846138f4565b50505050565b612772612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612790612463565b73ffffffffffffffffffffffffffffffffffffffff16146127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90614c9c565b60405180910390fd5b80600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960069054906101000a900461ffff1681565b606061283c82612d00565b61287b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612872906156af565b60405180910390fd5b6000612885613950565b905060008151116128a557604051806020016040528060008152506128d0565b806128af846139e2565b6040516020016128c092919061570b565b6040516020818303038152906040525b915050919050565b600a6020528060005260406000206000915090505481565b6000600a6000600960009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002054826129299190614f1a565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129cc612d6c565b73ffffffffffffffffffffffffffffffffffffffff166129ea612463565b73ffffffffffffffffffffffffffffffffffffffff1614612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790614c9c565b60405180910390fd5b612a4a82826132b2565b5050565b612a56612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612a74612463565b73ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614c9c565b60405180910390fd5b60005b82829050811015612b46576001600e6000858585818110612af157612af061548e565b5b9050602002016020810190612b06919061431d565b61ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612b3e90614ed1565b915050612acd565b505050565b612b53612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612b71612463565b73ffffffffffffffffffffffffffffffffffffffff1614612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe90614c9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e906157a1565b60405180910390fd5b612c4081613500565b50565b600960049054906101000a900461ffff1681565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612de783611758565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e3882612d00565b612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e90615833565b60405180910390fd5b6000612e8283611758565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ef157508373ffffffffffffffffffffffffffffffffffffffff16612ed984610c39565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f025750612f018185612930565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f2b82611758565b73ffffffffffffffffffffffffffffffffffffffff1614612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f78906158c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe890615957565b60405180910390fd5b612ffc838383613b43565b613007600082612d74565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130579190614fd4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ae9190614d7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008061317e600f80549050600f80549050613677565b61ffff1690506000600f828154811061319a5761319961548e565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050600f6001600f805490506131d49190614fd4565b815481106131e5576131e461548e565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600f838154811061321d5761321c61548e565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600f80548061325e5761325d615977565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b6132ae828260405180602001604052806000815250613b48565b5050565b60008290505b8161ffff168161ffff161161332457600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550808061331c906159a6565b9150506132b8565b505050565b60006001600960009054906101000a900461ffff1661ffff1614156133505733905061346b565b600a613371600960069054906101000a900461ffff1661ffff166064613677565b61ffff16106133825733905061346b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368d3c2b96040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342691906159e6565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613466573391505061346b565b809150505b90565b6001601060008282829054906101000a900461ffff1661348e919061541f565b92506101000a81548161ffff021916908361ffff1602179055506001601160008282546134bb9190614d7d565b925050819055506006601060009054906101000a900461ffff1661ffff1611156134fe576000601060006101000a81548161ffff021916908361ffff1602179055505b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516135ec90615a44565b60006040518083038185875af1925050503d8060008114613629576040519150601f19603f3d011682016040523d82523d6000602084013e61362e565b606091505b5050905080613672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366990615aa5565b60405180910390fd5b505050565b6000806000905060005b60078161ffff1610156137115760126000601060009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631826136fc9190614d7d565b91508080613709906159a6565b915050613681565b506000846001436137229190614fd4565b4041443360085487601154601060009054906101000a900461ffff1660405160200161375699989796959493929190615bca565b6040516020818303038152906040528051906020012060001c9050838161377d9190615c6d565b9250505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90615cea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138e7919061405f565b60405180910390a3505050565b6138ff848484612f0b565b61390b84848484613ba3565b61394a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394190615d7c565b60405180910390fd5b50505050565b6060600d805461395f90614a68565b80601f016020809104026020016040519081016040528092919081815260200182805461398b90614a68565b80156139d85780601f106139ad576101008083540402835291602001916139d8565b820191906000526020600020905b8154815290600101906020018083116139bb57829003601f168201915b5050505050905090565b60606000821415613a2a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b3e565b600082905060005b60008214613a5c578080613a4590614ed1565b915050600a82613a559190614fa3565b9150613a32565b60008167ffffffffffffffff811115613a7857613a7761450e565b5b6040519080825280601f01601f191660200182016040528015613aaa5781602001600182028036833780820191505090505b5090505b60008514613b3757600182613ac39190614fd4565b9150600a85613ad29190615c6d565b6030613ade9190614d7d565b60f81b818381518110613af457613af361548e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b309190614fa3565b9450613aae565b8093505050505b919050565b505050565b613b528383613d3a565b613b5f6000848484613ba3565b613b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9590615d7c565b60405180910390fd5b505050565b6000613bc48473ffffffffffffffffffffffffffffffffffffffff16612c83565b15613d2d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613bed612d6c565b8786866040518563ffffffff1660e01b8152600401613c0f9493929190615df1565b602060405180830381600087803b158015613c2957600080fd5b505af1925050508015613c5a57506040513d601f19601f82011682018060405250810190613c579190615e52565b60015b613cdd573d8060008114613c8a576040519150601f19603f3d011682016040523d82523d6000602084013e613c8f565b606091505b50600081511415613cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ccc90615d7c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d32565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da190615ecb565b60405180910390fd5b613db381612d00565b15613df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dea90615f37565b60405180910390fd5b613dff60008383613b43565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e4f9190614d7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613f1490614a68565b90600052602060002090601f016020900481019282613f365760008555613f7d565b82601f10613f4f57805160ff1916838001178555613f7d565b82800160010185558215613f7d579182015b82811115613f7c578251825591602001919060010190613f61565b5b509050613f8a9190613f8e565b5090565b5b80821115613fa7576000816000905550600101613f8f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613ff481613fbf565b8114613fff57600080fd5b50565b60008135905061401181613feb565b92915050565b60006020828403121561402d5761402c613fb5565b5b600061403b84828501614002565b91505092915050565b60008115159050919050565b61405981614044565b82525050565b60006020820190506140746000830184614050565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140b4578082015181840152602081019050614099565b838111156140c3576000848401525b50505050565b6000601f19601f8301169050919050565b60006140e58261407a565b6140ef8185614085565b93506140ff818560208601614096565b614108816140c9565b840191505092915050565b6000602082019050818103600083015261412d81846140da565b905092915050565b6000819050919050565b61414881614135565b811461415357600080fd5b50565b6000813590506141658161413f565b92915050565b60006020828403121561418157614180613fb5565b5b600061418f84828501614156565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141c382614198565b9050919050565b6141d3816141b8565b82525050565b60006020820190506141ee60008301846141ca565b92915050565b6141fd816141b8565b811461420857600080fd5b50565b60008135905061421a816141f4565b92915050565b6000806040838503121561423757614236613fb5565b5b60006142458582860161420b565b925050602061425685828601614156565b9150509250929050565b61426981614044565b811461427457600080fd5b50565b60008135905061428681614260565b92915050565b6000602082840312156142a2576142a1613fb5565b5b60006142b084828501614277565b91505092915050565b6142c281614135565b82525050565b60006020820190506142dd60008301846142b9565b92915050565b600061ffff82169050919050565b6142fa816142e3565b811461430557600080fd5b50565b600081359050614317816142f1565b92915050565b60006020828403121561433357614332613fb5565b5b600061434184828501614308565b91505092915050565b60008060006060848603121561436357614362613fb5565b5b60006143718682870161420b565b93505060206143828682870161420b565b925050604061439386828701614156565b9150509250925092565b600080604083850312156143b4576143b3613fb5565b5b60006143c285828601614156565b92505060206143d38582860161420b565b9150509250929050565b6000819050919050565b60006144026143fd6143f884614198565b6143dd565b614198565b9050919050565b6000614414826143e7565b9050919050565b600061442682614409565b9050919050565b6144368161441b565b82525050565b6000602082019050614451600083018461442d565b92915050565b6000806040838503121561446e5761446d613fb5565b5b600061447c85828601614308565b925050602061448d85828601614277565b9150509250929050565b600080604083850312156144ae576144ad613fb5565b5b60006144bc85828601614308565b92505060206144cd85828601614156565b9150509250929050565b6000602082840312156144ed576144ec613fb5565b5b60006144fb8482850161420b565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614546826140c9565b810181811067ffffffffffffffff821117156145655761456461450e565b5b80604052505050565b6000614578613fab565b9050614584828261453d565b919050565b600067ffffffffffffffff8211156145a4576145a361450e565b5b6145ad826140c9565b9050602081019050919050565b82818337600083830152505050565b60006145dc6145d784614589565b61456e565b9050828152602081018484840111156145f8576145f7614509565b5b6146038482856145ba565b509392505050565b600082601f8301126146205761461f614504565b5b81356146308482602086016145c9565b91505092915050565b60006020828403121561464f5761464e613fb5565b5b600082013567ffffffffffffffff81111561466d5761466c613fba565b5b6146798482850161460b565b91505092915050565b6000806040838503121561469957614698613fb5565b5b60006146a785828601614156565b92505060206146b885828601614277565b9150509250929050565b600080604083850312156146d9576146d8613fb5565b5b60006146e785828601614308565b92505060206146f88582860161420b565b9150509250929050565b61470b816142e3565b82525050565b60006020820190506147266000830184614702565b92915050565b6000806040838503121561474357614742613fb5565b5b600061475185828601614156565b925050602061476285828601614156565b9150509250929050565b6000806040838503121561478357614782613fb5565b5b60006147918582860161420b565b92505060206147a285828601614277565b9150509250929050565b600067ffffffffffffffff8211156147c7576147c661450e565b5b6147d0826140c9565b9050602081019050919050565b60006147f06147eb846147ac565b61456e565b90508281526020810184848401111561480c5761480b614509565b5b6148178482856145ba565b509392505050565b600082601f83011261483457614833614504565b5b81356148448482602086016147dd565b91505092915050565b6000806000806080858703121561486757614866613fb5565b5b60006148758782880161420b565b94505060206148868782880161420b565b935050604061489787828801614156565b925050606085013567ffffffffffffffff8111156148b8576148b7613fba565b5b6148c48782880161481f565b91505092959194509250565b600080604083850312156148e7576148e6613fb5565b5b60006148f58582860161420b565b92505060206149068582860161420b565b9150509250929050565b6000806040838503121561492757614926613fb5565b5b600061493585828601614308565b925050602061494685828601614308565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126149705761496f614504565b5b8235905067ffffffffffffffff81111561498d5761498c614950565b5b6020830191508360208202830111156149a9576149a8614955565b5b9250929050565b600080602083850312156149c7576149c6613fb5565b5b600083013567ffffffffffffffff8111156149e5576149e4613fba565b5b6149f18582860161495a565b92509250509250929050565b6000614a0882614409565b9050919050565b614a18816149fd565b82525050565b6000602082019050614a336000830184614a0f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a8057607f821691505b60208210811415614a9457614a93614a39565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614af6602c83614085565b9150614b0182614a9a565b604082019050919050565b60006020820190508181036000830152614b2581614ae9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b88602183614085565b9150614b9382614b2c565b604082019050919050565b60006020820190508181036000830152614bb781614b7b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614c1a603883614085565b9150614c2582614bbe565b604082019050919050565b60006020820190508181036000830152614c4981614c0d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c86602083614085565b9150614c9182614c50565b602082019050919050565b60006020820190508181036000830152614cb581614c79565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614d18603183614085565b9150614d2382614cbc565b604082019050919050565b60006020820190508181036000830152614d4781614d0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d8882614135565b9150614d9383614135565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dc857614dc7614d4e565b5b828201905092915050565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b6000614e09601183614085565b9150614e1482614dd3565b602082019050919050565b60006020820190508181036000830152614e3881614dfc565b9050919050565b7f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c60008201527f726561647920736f6c6400000000000000000000000000000000000000000000602082015250565b6000614e9b602a83614085565b9150614ea682614e3f565b604082019050919050565b60006020820190508181036000830152614eca81614e8e565b9050919050565b6000614edc82614135565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f0f57614f0e614d4e565b5b600182019050919050565b6000614f2582614135565b9150614f3083614135565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6957614f68614d4e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fae82614135565b9150614fb983614135565b925082614fc957614fc8614f74565b5b828204905092915050565b6000614fdf82614135565b9150614fea83614135565b925082821015614ffd57614ffc614d4e565b5b828203905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061503e601083614085565b915061504982615008565b602082019050919050565b6000602082019050818103600083015261506d81615031565b9050919050565b7f746865726520617265206e6f2066726565206d696e74732072656d61696e696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d0602183614085565b91506150db82615074565b604082019050919050565b600060208201905081810360008301526150ff816150c3565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000615162602983614085565b915061516d82615106565b604082019050919050565b6000602082019050818103600083015261519181615155565b9050919050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006151ce600883614085565b91506151d982615198565b602082019050919050565b600060208201905081810360008301526151fd816151c1565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b600061523a601383614085565b915061524582615204565b602082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b7f496e76616c6964207061796d656e7420616d6f756e7400000000000000000000600082015250565b60006152a6601683614085565b91506152b182615270565b602082019050919050565b600060208201905081810360008301526152d581615299565b9050919050565b7f4d696e74696e67206973206e6f7720646f6e65207769746820494e4b4b000000600082015250565b6000615312601d83614085565b915061531d826152dc565b602082019050919050565b6000602082019050818103600083015261534181615305565b9050919050565b6000815190506153578161413f565b92915050565b60006020828403121561537357615372613fb5565b5b600061538184828501615348565b91505092915050565b7f4e6f7420656e6f75676820494e4b4b0000000000000000000000000000000000600082015250565b60006153c0600f83614085565b91506153cb8261538a565b602082019050919050565b600060208201905081810360008301526153ef816153b3565b9050919050565b600060408201905061540b60008301856141ca565b61541860208301846142b9565b9392505050565b600061542a826142e3565b9150615435836142e3565b92508261ffff0382111561544c5761544b614d4e565b5b828201905092915050565b600060608201905061546c60008301866141ca565b6154796020830185614702565b61548660408301846141ca565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154f2816142e3565b82525050565b600061550483836154e9565b60208301905092915050565b6000602082019050919050565b6000615528826154bd565b61553281856154c8565b935061553d836154d9565b8060005b8381101561556e57815161555588826154f8565b975061556083615510565b925050600181019050615541565b5085935050505092915050565b600060408201905061559060008301856141ca565b81810360208301526155a2818461551d565b90509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000615607602a83614085565b9150615612826155ab565b604082019050919050565b60006020820190508181036000830152615636816155fa565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615699602f83614085565b91506156a48261563d565b604082019050919050565b600060208201905081810360008301526156c88161568c565b9050919050565b600081905092915050565b60006156e58261407a565b6156ef81856156cf565b93506156ff818560208601614096565b80840191505092915050565b600061571782856156da565b915061572382846156da565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061578b602683614085565b91506157968261572f565b604082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061581d602c83614085565b9150615828826157c1565b604082019050919050565b6000602082019050818103600083015261584c81615810565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006158af602983614085565b91506158ba82615853565b604082019050919050565b600060208201905081810360008301526158de816158a2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615941602483614085565b915061594c826158e5565b604082019050919050565b6000602082019050818103600083015261597081615934565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006159b1826142e3565b915061ffff8214156159c6576159c5614d4e565b5b600182019050919050565b6000815190506159e0816141f4565b92915050565b6000602082840312156159fc576159fb613fb5565b5b6000615a0a848285016159d1565b91505092915050565b600081905092915050565b50565b6000615a2e600083615a13565b9150615a3982615a1e565b600082019050919050565b6000615a4f82615a21565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000615a8f601083614085565b9150615a9a82615a59565b602082019050919050565b60006020820190508181036000830152615abe81615a82565b9050919050565b6000819050919050565b615ae0615adb82614135565b615ac5565b82525050565b6000819050919050565b6000819050919050565b615b0b615b0682615ae6565b615af0565b82525050565b6000615b1c82614198565b9050919050565b60008160601b9050919050565b6000615b3b82615b23565b9050919050565b6000615b4d82615b30565b9050919050565b615b65615b6082615b11565b615b42565b82525050565b6000615b7682615b30565b9050919050565b615b8e615b89826141b8565b615b6b565b82525050565b60008160f01b9050919050565b6000615bac82615b94565b9050919050565b615bc4615bbf826142e3565b615ba1565b82525050565b6000615bd6828c615acf565b602082019150615be6828b615afa565b602082019150615bf6828a615b54565b601482019150615c068289615acf565b602082019150615c168288615b7d565b601482019150615c268287615acf565b602082019150615c368286615acf565b602082019150615c468285615acf565b602082019150615c568284615bb3565b6002820191508190509a9950505050505050505050565b6000615c7882614135565b9150615c8383614135565b925082615c9357615c92614f74565b5b828206905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615cd4601983614085565b9150615cdf82615c9e565b602082019050919050565b60006020820190508181036000830152615d0381615cc7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615d66603283614085565b9150615d7182615d0a565b604082019050919050565b60006020820190508181036000830152615d9581615d59565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000615dc382615d9c565b615dcd8185615da7565b9350615ddd818560208601614096565b615de6816140c9565b840191505092915050565b6000608082019050615e0660008301876141ca565b615e1360208301866141ca565b615e2060408301856142b9565b8181036060830152615e328184615db8565b905095945050505050565b600081519050615e4c81613feb565b92915050565b600060208284031215615e6857615e67613fb5565b5b6000615e7684828501615e3d565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615eb5602083614085565b9150615ec082615e7f565b602082019050919050565b60006020820190508181036000830152615ee481615ea8565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615f21601c83614085565b9150615f2c82615eeb565b602082019050919050565b60006020820190508181036000830152615f5081615f14565b905091905056fea2646970667358221220d80c9587430f13e7bc8a798b5b047bc8978d5cd0550cc68db00d9cdc874bc39164736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102935760003560e01c8063715018a61161015a578063bc1e6246116100c1578063efb3d0081161007a578063efb3d008146109c9578063f1ff5dec146109f2578063f2fde38b14610a1b578063f453eeae14610a44578063f47c84c514610a6f578063f931690914610a9a57610293565b8063bc1e624614610881578063c44554f2146108aa578063c87b56dd146108d5578063c9150a9e14610912578063e6a72acf1461094f578063e985e9c51461098c57610293565b806395d89b411161011357806395d89b41146107855780639a601263146107b0578063a22cb465146107d9578063a591252d14610802578063b1c9fe6e1461082d578063b88d4fde1461085857610293565b8063715018a6146106af578063853828b6146106c657806386b854c8146106dd5780638da5cb5b14610706578063908c45e21461073157806392b242291461075c57610293565b80634311de8f116101fe5780635b70ea9f116101b75780635b70ea9f146105ac5780635c975abb146105c35780636352211e146105ee57806367f68fac1461062b5780636de9f32b1461064757806370a082311461067257610293565b80634311de8f146104c657806345d51007146104dd5780634efc09f5146105085780634ff448371461053157806351cff8d91461055a57806355f804b31461058357610293565b80631b6ac35b116102505780631b6ac35b146103ba57806323b872dd146103f7578063261d3b2114610420578063360a4692146104495780633d4729371461047457806342842e0e1461049d57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d57806316c38b3c1461036657806318160ddd1461038f575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190614017565b610ac5565b6040516102cc919061405f565b60405180910390f35b3480156102e157600080fd5b506102ea610ba7565b6040516102f79190614113565b60405180910390f35b34801561030c57600080fd5b506103276004803603810190610322919061416b565b610c39565b60405161033491906141d9565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190614220565b610cbe565b005b34801561037257600080fd5b5061038d6004803603810190610388919061428c565b610dd6565b005b34801561039b57600080fd5b506103a4610e6f565b6040516103b191906142c8565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc919061431d565b610e79565b6040516103ee919061405f565b60405180910390f35b34801561040357600080fd5b5061041e6004803603810190610419919061434a565b610eab565b005b34801561042c57600080fd5b506104476004803603810190610442919061439d565b610f68565b005b34801561045557600080fd5b5061045e6110bc565b60405161046b919061443c565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190614457565b6110e2565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061434a565b611248565b005b3480156104d257600080fd5b506104db611268565b005b3480156104e957600080fd5b506104f2611334565b6040516104ff91906142c8565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190614497565b611339565b005b34801561053d57600080fd5b50610558600480360381019061055391906144d7565b6113d9565b005b34801561056657600080fd5b50610581600480360381019061057c91906144d7565b611499565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190614639565b6115d6565b005b3480156105b857600080fd5b506105c161166c565b005b3480156105cf57600080fd5b506105d8611741565b6040516105e5919061405f565b60405180910390f35b3480156105fa57600080fd5b506106156004803603810190610610919061416b565b611758565b60405161062291906141d9565b60405180910390f35b61064560048036038101906106409190614682565b61180a565b005b34801561065357600080fd5b5061065c611f8c565b60405161066991906142c8565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906144d7565b611f92565b6040516106a691906142c8565b60405180910390f35b3480156106bb57600080fd5b506106c461204a565b005b3480156106d257600080fd5b506106db6120d2565b005b3480156106e957600080fd5b5061070460048036038101906106ff91906146c2565b612389565b005b34801561071257600080fd5b5061071b612463565b60405161072891906141d9565b60405180910390f35b34801561073d57600080fd5b5061074661248d565b6040516107539190614711565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e919061472c565b6124a1565b005b34801561079157600080fd5b5061079a612578565b6040516107a79190614113565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906144d7565b61260a565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061476c565b6126ca565b005b34801561080e57600080fd5b506108176126e0565b6040516108249190614711565b60405180910390f35b34801561083957600080fd5b506108426126f4565b60405161084f9190614711565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061484d565b612708565b005b34801561088d57600080fd5b506108a860048036038101906108a39190614457565b61276a565b005b3480156108b657600080fd5b506108bf61281d565b6040516108cc9190614711565b60405180910390f35b3480156108e157600080fd5b506108fc60048036038101906108f7919061416b565b612831565b6040516109099190614113565b60405180910390f35b34801561091e57600080fd5b506109396004803603810190610934919061431d565b6128d8565b60405161094691906142c8565b60405180910390f35b34801561095b57600080fd5b506109766004803603810190610971919061416b565b6128f0565b60405161098391906142c8565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae91906148d0565b612930565b6040516109c0919061405f565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190614910565b6129c4565b005b3480156109fe57600080fd5b50610a196004803603810190610a1491906149b0565b612a4e565b005b348015610a2757600080fd5b50610a426004803603810190610a3d91906144d7565b612b4b565b005b348015610a5057600080fd5b50610a59612c43565b604051610a669190614711565b60405180910390f35b348015610a7b57600080fd5b50610a84612c57565b604051610a9191906142c8565b60405180910390f35b348015610aa657600080fd5b50610aaf612c5d565b604051610abc9190614a1e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ba05750610b9f82612c96565b5b9050919050565b606060008054610bb690614a68565b80601f0160208091040260200160405190810160405280929190818152602001828054610be290614a68565b8015610c2f5780601f10610c0457610100808354040283529160200191610c2f565b820191906000526020600020905b815481529060010190602001808311610c1257829003601f168201915b5050505050905090565b6000610c4482612d00565b610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90614b0c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cc982611758565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190614b9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d59612d6c565b73ffffffffffffffffffffffffffffffffffffffff161480610d885750610d8781610d82612d6c565b612930565b5b610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe90614c30565b60405180910390fd5b610dd18383612d74565b505050565b610dde612d6c565b73ffffffffffffffffffffffffffffffffffffffff16610dfc612463565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614c9c565b60405180910390fd5b806009600a6101000a81548160ff02191690831515021790555050565b6000600854905090565b6000600e60008361ffff1661ffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610eec612d6c565b73ffffffffffffffffffffffffffffffffffffffff1614610f5857610f18610f12612d6c565b82612e2d565b610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90614d2e565b60405180910390fd5b5b610f63838383612f0b565b505050565b610f70612d6c565b73ffffffffffffffffffffffffffffffffffffffff16610f8e612463565b73ffffffffffffffffffffffffffffffffffffffff1614610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90614c9c565b60405180910390fd5b60075482600854610ff59190614d7d565b1115611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90614e1f565b60405180910390fd5b6000600f805490501161107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614eb1565b60405180910390fd5b60005b828110156110b7576000611093613167565b90506110a3838261ffff16613294565b5080806110af90614ed1565b915050611081565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ea612d6c565b73ffffffffffffffffffffffffffffffffffffffff16611108612463565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590614c9c565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff1602179055508061118557611244565b6001600960009054906101000a900461ffff1661ffff1614156111b4576111af600161270f6132b2565b611243565b6002600960009054906101000a900461ffff1661ffff1614156111e4576111df612710614e206132b2565b611242565b6003600960009054906101000a900461ffff1661ffff1614156112145761120f614e21619c406132b2565b611241565b6004600960009054906101000a900461ffff1661ffff1614156112405761123f619c4161c34f6132b2565b5b5b5b5b5b5050565b61126383838360405180602001604052806000815250612708565b505050565b611270612d6c565b73ffffffffffffffffffffffffffffffffffffffff1661128e612463565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614c9c565b60405180910390fd5b6112ec612463565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611331573d6000803e3d6000fd5b50565b601481565b611341612d6c565b73ffffffffffffffffffffffffffffffffffffffff1661135f612463565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac90614c9c565b60405180910390fd5b80600a60008461ffff1661ffff168152602001908152602001600020819055505050565b6113e1612d6c565b73ffffffffffffffffffffffffffffffffffffffff166113ff612463565b73ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614c9c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114a1612d6c565b73ffffffffffffffffffffffffffffffffffffffff166114bf612463565b73ffffffffffffffffffffffffffffffffffffffff1614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90614c9c565b60405180910390fd5b60004790506000606460148361152b9190614f1a565b6115359190614fa3565b9050600073ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561157e573d6000803e3d6000fd5b508273ffffffffffffffffffffffffffffffffffffffff166108fc82846115a59190614fd4565b9081150290604051600060405180830381858888f193505050501580156115d0573d6000803e3d6000fd5b50505050565b6115de612d6c565b73ffffffffffffffffffffffffffffffffffffffff166115fc612463565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990614c9c565b60405180910390fd5b80600d9080519060200190611668929190613f08565b5050565b611674611741565b156116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90615054565b60405180910390fd5b600960089054906101000a900461ffff1661ffff166008541061170c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611703906150e6565b60405180910390fd5b6008600081548092919061171f90614ed1565b9190505550600061172e613167565b905061173e338261ffff16613294565b50565b60006009600a9054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890615178565b60405180910390fd5b80915050919050565b611812611741565b15611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990615054565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b7906151e4565b60405180910390fd5b600754826008546118d19190614d7d565b1115611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614e1f565b60405180910390fd5b600082118015611923575060148211155b611962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195990615250565b60405180910390fd5b6000600f80549050116119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614eb1565b60405180910390fd5b60006001600960009054906101000a900461ffff1661ffff161415611a1857346119d3846128f0565b14611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906152bc565b60405180910390fd5b611b54565b60003414611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290615328565b60405180910390fd5b611a64836128f0565b905080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611ac291906141d9565b60206040518083038186803b158015611ada57600080fd5b505afa158015611aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b12919061535d565b1015611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906153d6565b60405180910390fd5b5b6000811115611bed57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b8152600401611bba9291906153f6565b600060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050505b8260086000828254611bff9190614d7d565b92505081905550600082611c5c57600067ffffffffffffffff811115611c2857611c2761450e565b5b604051908082528060200260200182016040528015611c565781602001602082028036833780820191505090505b50611ca6565b8367ffffffffffffffff811115611c7657611c7561450e565b5b604051908082528060200260200182016040528015611ca45781602001602082028036833780820191505090505b505b905060005b84811015611eef576000611cbd613329565b90506001600960009054906101000a900461ffff1661ffff1614611ce457611ce361346e565b5b6000611cee613167565b9050611cf981610e79565b15611d39576001600960068282829054906101000a900461ffff16611d1e919061541f565b92506101000a81548161ffff021916908361ffff1602179055505b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e2e57611d7581610e79565b611db7576001600960048282829054906101000a900461ffff16611d99919061541f565b92506101000a81548161ffff021916908361ffff1602179055611df1565b6001600960028282829054906101000a900461ffff16611dd7919061541f565b92506101000a81548161ffff021916908361ffff16021790555b507f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e0610338284604051611e2593929190615457565b60405180910390a15b851580611e6757503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611e7f57611e7a828261ffff16613294565b611eda565b611eaf600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261ffff16613294565b80848481518110611ec357611ec261548e565b5b602002602001019061ffff16908161ffff16815250505b50508080611ee790614ed1565b915050611cab565b508215611f8657600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e21f4cbe33836040518363ffffffff1660e01b8152600401611f5392919061557b565b600060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050505b50505050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa9061561d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612052612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612070612463565b73ffffffffffffffffffffffffffffffffffffffff16146120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614c9c565b60405180910390fd5b6120d06000613500565b565b6120da612d6c565b73ffffffffffffffffffffffffffffffffffffffff166120f8612463565b73ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590614c9c565b60405180910390fd5b60004790506000811161216057600080fd5b61219773eb9308d65ef1d3729b5acfa0ff6983407366fae26103e8607d846121889190614f1a565b6121929190614fa3565b6135c6565b6121ce738942bfa6390710039e94d27cf461f4af90bd66986103e86071846121bf9190614f1a565b6121c99190614fa3565b6135c6565b6122057305542104ce35d64d94a02d1169b19f3c6692e1c66103e8607d846121f69190614f1a565b6122009190614fa3565b6135c6565b61223c7345062131e00abd9ce764cc0f59e5ba5aa4bce6c06103e8607d8461222d9190614f1a565b6122379190614fa3565b6135c6565b61227373fce6a0067a3530967e888bef2fd0f03bb3c71c086103e8607d846122649190614f1a565b61226e9190614fa3565b6135c6565b6122aa73d51dcf312de6b68dd832cacab0fce8d191b1f4b06103e8603d8461229b9190614f1a565b6122a59190614fa3565b6135c6565b6122e173eaa86e6108d77b9461e944a9c6768d755fdf9d8d6103e86063846122d29190614f1a565b6122dc9190614fa3565b6135c6565b61231873efeb49409434d8a4d97254363ff0aabe95366e616103e86063846123099190614f1a565b6123139190614fa3565b6135c6565b61234f73641fb314fb59d0352b6bfd90a98f1da643ff9e5c6103e8607d846123409190614f1a565b61234a9190614fa3565b6135c6565b6123867346e6634e84570dc13020d16017839614e6fee4956103e86003846123779190614f1a565b6123819190614fa3565b6135c6565b50565b612391612d6c565b73ffffffffffffffffffffffffffffffffffffffff166123af612463565b73ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614c9c565b60405180910390fd5b80601260008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960029054906101000a900461ffff1681565b6124a9612d6c565b73ffffffffffffffffffffffffffffffffffffffff166124c7612463565b73ffffffffffffffffffffffffffffffffffffffff161461251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614c9c565b60405180910390fd5b60006125298383613677565b61ffff16905080601060006101000a81548161ffff021916908361ffff16021790555060005b818110156125725761255f61346e565b808061256a90614ed1565b91505061254f565b50505050565b60606001805461258790614a68565b80601f01602080910402602001604051908101604052809291908181526020018280546125b390614a68565b80156126005780601f106125d557610100808354040283529160200191612600565b820191906000526020600020905b8154815290600101906020018083116125e357829003601f168201915b5050505050905090565b612612612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612630612463565b73ffffffffffffffffffffffffffffffffffffffff1614612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90614c9c565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126dc6126d5612d6c565b8383613787565b5050565b600960089054906101000a900461ffff1681565b600960009054906101000a900461ffff1681565b612719612713612d6c565b83612e2d565b612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614d2e565b60405180910390fd5b612764848484846138f4565b50505050565b612772612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612790612463565b73ffffffffffffffffffffffffffffffffffffffff16146127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90614c9c565b60405180910390fd5b80600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960069054906101000a900461ffff1681565b606061283c82612d00565b61287b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612872906156af565b60405180910390fd5b6000612885613950565b905060008151116128a557604051806020016040528060008152506128d0565b806128af846139e2565b6040516020016128c092919061570b565b6040516020818303038152906040525b915050919050565b600a6020528060005260406000206000915090505481565b6000600a6000600960009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002054826129299190614f1a565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129cc612d6c565b73ffffffffffffffffffffffffffffffffffffffff166129ea612463565b73ffffffffffffffffffffffffffffffffffffffff1614612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790614c9c565b60405180910390fd5b612a4a82826132b2565b5050565b612a56612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612a74612463565b73ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614c9c565b60405180910390fd5b60005b82829050811015612b46576001600e6000858585818110612af157612af061548e565b5b9050602002016020810190612b06919061431d565b61ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612b3e90614ed1565b915050612acd565b505050565b612b53612d6c565b73ffffffffffffffffffffffffffffffffffffffff16612b71612463565b73ffffffffffffffffffffffffffffffffffffffff1614612bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbe90614c9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2e906157a1565b60405180910390fd5b612c4081613500565b50565b600960049054906101000a900461ffff1681565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612de783611758565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e3882612d00565b612e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6e90615833565b60405180910390fd5b6000612e8283611758565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ef157508373ffffffffffffffffffffffffffffffffffffffff16612ed984610c39565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f025750612f018185612930565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f2b82611758565b73ffffffffffffffffffffffffffffffffffffffff1614612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f78906158c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe890615957565b60405180910390fd5b612ffc838383613b43565b613007600082612d74565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130579190614fd4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ae9190614d7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008061317e600f80549050600f80549050613677565b61ffff1690506000600f828154811061319a5761319961548e565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050600f6001600f805490506131d49190614fd4565b815481106131e5576131e461548e565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600f838154811061321d5761321c61548e565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600f80548061325e5761325d615977565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b6132ae828260405180602001604052806000815250613b48565b5050565b60008290505b8161ffff168161ffff161161332457600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550808061331c906159a6565b9150506132b8565b505050565b60006001600960009054906101000a900461ffff1661ffff1614156133505733905061346b565b600a613371600960069054906101000a900461ffff1661ffff166064613677565b61ffff16106133825733905061346b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166368d3c2b96040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342691906159e6565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613466573391505061346b565b809150505b90565b6001601060008282829054906101000a900461ffff1661348e919061541f565b92506101000a81548161ffff021916908361ffff1602179055506001601160008282546134bb9190614d7d565b925050819055506006601060009054906101000a900461ffff1661ffff1611156134fe576000601060006101000a81548161ffff021916908361ffff1602179055505b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516135ec90615a44565b60006040518083038185875af1925050503d8060008114613629576040519150601f19603f3d011682016040523d82523d6000602084013e61362e565b606091505b5050905080613672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366990615aa5565b60405180910390fd5b505050565b6000806000905060005b60078161ffff1610156137115760126000601060009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631826136fc9190614d7d565b91508080613709906159a6565b915050613681565b506000846001436137229190614fd4565b4041443360085487601154601060009054906101000a900461ffff1660405160200161375699989796959493929190615bca565b6040516020818303038152906040528051906020012060001c9050838161377d9190615c6d565b9250505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ed90615cea565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138e7919061405f565b60405180910390a3505050565b6138ff848484612f0b565b61390b84848484613ba3565b61394a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394190615d7c565b60405180910390fd5b50505050565b6060600d805461395f90614a68565b80601f016020809104026020016040519081016040528092919081815260200182805461398b90614a68565b80156139d85780601f106139ad576101008083540402835291602001916139d8565b820191906000526020600020905b8154815290600101906020018083116139bb57829003601f168201915b5050505050905090565b60606000821415613a2a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b3e565b600082905060005b60008214613a5c578080613a4590614ed1565b915050600a82613a559190614fa3565b9150613a32565b60008167ffffffffffffffff811115613a7857613a7761450e565b5b6040519080825280601f01601f191660200182016040528015613aaa5781602001600182028036833780820191505090505b5090505b60008514613b3757600182613ac39190614fd4565b9150600a85613ad29190615c6d565b6030613ade9190614d7d565b60f81b818381518110613af457613af361548e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613b309190614fa3565b9450613aae565b8093505050505b919050565b505050565b613b528383613d3a565b613b5f6000848484613ba3565b613b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9590615d7c565b60405180910390fd5b505050565b6000613bc48473ffffffffffffffffffffffffffffffffffffffff16612c83565b15613d2d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613bed612d6c565b8786866040518563ffffffff1660e01b8152600401613c0f9493929190615df1565b602060405180830381600087803b158015613c2957600080fd5b505af1925050508015613c5a57506040513d601f19601f82011682018060405250810190613c579190615e52565b60015b613cdd573d8060008114613c8a576040519150601f19603f3d011682016040523d82523d6000602084013e613c8f565b606091505b50600081511415613cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ccc90615d7c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d32565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da190615ecb565b60405180910390fd5b613db381612d00565b15613df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dea90615f37565b60405180910390fd5b613dff60008383613b43565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e4f9190614d7d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613f1490614a68565b90600052602060002090601f016020900481019282613f365760008555613f7d565b82601f10613f4f57805160ff1916838001178555613f7d565b82800160010185558215613f7d579182015b82811115613f7c578251825591602001919060010190613f61565b5b509050613f8a9190613f8e565b5090565b5b80821115613fa7576000816000905550600101613f8f565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613ff481613fbf565b8114613fff57600080fd5b50565b60008135905061401181613feb565b92915050565b60006020828403121561402d5761402c613fb5565b5b600061403b84828501614002565b91505092915050565b60008115159050919050565b61405981614044565b82525050565b60006020820190506140746000830184614050565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140b4578082015181840152602081019050614099565b838111156140c3576000848401525b50505050565b6000601f19601f8301169050919050565b60006140e58261407a565b6140ef8185614085565b93506140ff818560208601614096565b614108816140c9565b840191505092915050565b6000602082019050818103600083015261412d81846140da565b905092915050565b6000819050919050565b61414881614135565b811461415357600080fd5b50565b6000813590506141658161413f565b92915050565b60006020828403121561418157614180613fb5565b5b600061418f84828501614156565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141c382614198565b9050919050565b6141d3816141b8565b82525050565b60006020820190506141ee60008301846141ca565b92915050565b6141fd816141b8565b811461420857600080fd5b50565b60008135905061421a816141f4565b92915050565b6000806040838503121561423757614236613fb5565b5b60006142458582860161420b565b925050602061425685828601614156565b9150509250929050565b61426981614044565b811461427457600080fd5b50565b60008135905061428681614260565b92915050565b6000602082840312156142a2576142a1613fb5565b5b60006142b084828501614277565b91505092915050565b6142c281614135565b82525050565b60006020820190506142dd60008301846142b9565b92915050565b600061ffff82169050919050565b6142fa816142e3565b811461430557600080fd5b50565b600081359050614317816142f1565b92915050565b60006020828403121561433357614332613fb5565b5b600061434184828501614308565b91505092915050565b60008060006060848603121561436357614362613fb5565b5b60006143718682870161420b565b93505060206143828682870161420b565b925050604061439386828701614156565b9150509250925092565b600080604083850312156143b4576143b3613fb5565b5b60006143c285828601614156565b92505060206143d38582860161420b565b9150509250929050565b6000819050919050565b60006144026143fd6143f884614198565b6143dd565b614198565b9050919050565b6000614414826143e7565b9050919050565b600061442682614409565b9050919050565b6144368161441b565b82525050565b6000602082019050614451600083018461442d565b92915050565b6000806040838503121561446e5761446d613fb5565b5b600061447c85828601614308565b925050602061448d85828601614277565b9150509250929050565b600080604083850312156144ae576144ad613fb5565b5b60006144bc85828601614308565b92505060206144cd85828601614156565b9150509250929050565b6000602082840312156144ed576144ec613fb5565b5b60006144fb8482850161420b565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614546826140c9565b810181811067ffffffffffffffff821117156145655761456461450e565b5b80604052505050565b6000614578613fab565b9050614584828261453d565b919050565b600067ffffffffffffffff8211156145a4576145a361450e565b5b6145ad826140c9565b9050602081019050919050565b82818337600083830152505050565b60006145dc6145d784614589565b61456e565b9050828152602081018484840111156145f8576145f7614509565b5b6146038482856145ba565b509392505050565b600082601f8301126146205761461f614504565b5b81356146308482602086016145c9565b91505092915050565b60006020828403121561464f5761464e613fb5565b5b600082013567ffffffffffffffff81111561466d5761466c613fba565b5b6146798482850161460b565b91505092915050565b6000806040838503121561469957614698613fb5565b5b60006146a785828601614156565b92505060206146b885828601614277565b9150509250929050565b600080604083850312156146d9576146d8613fb5565b5b60006146e785828601614308565b92505060206146f88582860161420b565b9150509250929050565b61470b816142e3565b82525050565b60006020820190506147266000830184614702565b92915050565b6000806040838503121561474357614742613fb5565b5b600061475185828601614156565b925050602061476285828601614156565b9150509250929050565b6000806040838503121561478357614782613fb5565b5b60006147918582860161420b565b92505060206147a285828601614277565b9150509250929050565b600067ffffffffffffffff8211156147c7576147c661450e565b5b6147d0826140c9565b9050602081019050919050565b60006147f06147eb846147ac565b61456e565b90508281526020810184848401111561480c5761480b614509565b5b6148178482856145ba565b509392505050565b600082601f83011261483457614833614504565b5b81356148448482602086016147dd565b91505092915050565b6000806000806080858703121561486757614866613fb5565b5b60006148758782880161420b565b94505060206148868782880161420b565b935050604061489787828801614156565b925050606085013567ffffffffffffffff8111156148b8576148b7613fba565b5b6148c48782880161481f565b91505092959194509250565b600080604083850312156148e7576148e6613fb5565b5b60006148f58582860161420b565b92505060206149068582860161420b565b9150509250929050565b6000806040838503121561492757614926613fb5565b5b600061493585828601614308565b925050602061494685828601614308565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126149705761496f614504565b5b8235905067ffffffffffffffff81111561498d5761498c614950565b5b6020830191508360208202830111156149a9576149a8614955565b5b9250929050565b600080602083850312156149c7576149c6613fb5565b5b600083013567ffffffffffffffff8111156149e5576149e4613fba565b5b6149f18582860161495a565b92509250509250929050565b6000614a0882614409565b9050919050565b614a18816149fd565b82525050565b6000602082019050614a336000830184614a0f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a8057607f821691505b60208210811415614a9457614a93614a39565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614af6602c83614085565b9150614b0182614a9a565b604082019050919050565b60006020820190508181036000830152614b2581614ae9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b88602183614085565b9150614b9382614b2c565b604082019050919050565b60006020820190508181036000830152614bb781614b7b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614c1a603883614085565b9150614c2582614bbe565b604082019050919050565b60006020820190508181036000830152614c4981614c0d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c86602083614085565b9150614c9182614c50565b602082019050919050565b60006020820190508181036000830152614cb581614c79565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614d18603183614085565b9150614d2382614cbc565b604082019050919050565b60006020820190508181036000830152614d4781614d0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d8882614135565b9150614d9383614135565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dc857614dc7614d4e565b5b828201905092915050565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b6000614e09601183614085565b9150614e1482614dd3565b602082019050919050565b60006020820190508181036000830152614e3881614dfc565b9050919050565b7f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c60008201527f726561647920736f6c6400000000000000000000000000000000000000000000602082015250565b6000614e9b602a83614085565b9150614ea682614e3f565b604082019050919050565b60006020820190508181036000830152614eca81614e8e565b9050919050565b6000614edc82614135565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f0f57614f0e614d4e565b5b600182019050919050565b6000614f2582614135565b9150614f3083614135565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f6957614f68614d4e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fae82614135565b9150614fb983614135565b925082614fc957614fc8614f74565b5b828204905092915050565b6000614fdf82614135565b9150614fea83614135565b925082821015614ffd57614ffc614d4e565b5b828203905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061503e601083614085565b915061504982615008565b602082019050919050565b6000602082019050818103600083015261506d81615031565b9050919050565b7f746865726520617265206e6f2066726565206d696e74732072656d61696e696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d0602183614085565b91506150db82615074565b604082019050919050565b600060208201905081810360008301526150ff816150c3565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000615162602983614085565b915061516d82615106565b604082019050919050565b6000602082019050818103600083015261519181615155565b9050919050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006151ce600883614085565b91506151d982615198565b602082019050919050565b600060208201905081810360008301526151fd816151c1565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b600061523a601383614085565b915061524582615204565b602082019050919050565b600060208201905081810360008301526152698161522d565b9050919050565b7f496e76616c6964207061796d656e7420616d6f756e7400000000000000000000600082015250565b60006152a6601683614085565b91506152b182615270565b602082019050919050565b600060208201905081810360008301526152d581615299565b9050919050565b7f4d696e74696e67206973206e6f7720646f6e65207769746820494e4b4b000000600082015250565b6000615312601d83614085565b915061531d826152dc565b602082019050919050565b6000602082019050818103600083015261534181615305565b9050919050565b6000815190506153578161413f565b92915050565b60006020828403121561537357615372613fb5565b5b600061538184828501615348565b91505092915050565b7f4e6f7420656e6f75676820494e4b4b0000000000000000000000000000000000600082015250565b60006153c0600f83614085565b91506153cb8261538a565b602082019050919050565b600060208201905081810360008301526153ef816153b3565b9050919050565b600060408201905061540b60008301856141ca565b61541860208301846142b9565b9392505050565b600061542a826142e3565b9150615435836142e3565b92508261ffff0382111561544c5761544b614d4e565b5b828201905092915050565b600060608201905061546c60008301866141ca565b6154796020830185614702565b61548660408301846141ca565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154f2816142e3565b82525050565b600061550483836154e9565b60208301905092915050565b6000602082019050919050565b6000615528826154bd565b61553281856154c8565b935061553d836154d9565b8060005b8381101561556e57815161555588826154f8565b975061556083615510565b925050600181019050615541565b5085935050505092915050565b600060408201905061559060008301856141ca565b81810360208301526155a2818461551d565b90509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000615607602a83614085565b9150615612826155ab565b604082019050919050565b60006020820190508181036000830152615636816155fa565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615699602f83614085565b91506156a48261563d565b604082019050919050565b600060208201905081810360008301526156c88161568c565b9050919050565b600081905092915050565b60006156e58261407a565b6156ef81856156cf565b93506156ff818560208601614096565b80840191505092915050565b600061571782856156da565b915061572382846156da565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061578b602683614085565b91506157968261572f565b604082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061581d602c83614085565b9150615828826157c1565b604082019050919050565b6000602082019050818103600083015261584c81615810565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006158af602983614085565b91506158ba82615853565b604082019050919050565b600060208201905081810360008301526158de816158a2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615941602483614085565b915061594c826158e5565b604082019050919050565b6000602082019050818103600083015261597081615934565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006159b1826142e3565b915061ffff8214156159c6576159c5614d4e565b5b600182019050919050565b6000815190506159e0816141f4565b92915050565b6000602082840312156159fc576159fb613fb5565b5b6000615a0a848285016159d1565b91505092915050565b600081905092915050565b50565b6000615a2e600083615a13565b9150615a3982615a1e565b600082019050919050565b6000615a4f82615a21565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000615a8f601083614085565b9150615a9a82615a59565b602082019050919050565b60006020820190508181036000830152615abe81615a82565b9050919050565b6000819050919050565b615ae0615adb82614135565b615ac5565b82525050565b6000819050919050565b6000819050919050565b615b0b615b0682615ae6565b615af0565b82525050565b6000615b1c82614198565b9050919050565b60008160601b9050919050565b6000615b3b82615b23565b9050919050565b6000615b4d82615b30565b9050919050565b615b65615b6082615b11565b615b42565b82525050565b6000615b7682615b30565b9050919050565b615b8e615b89826141b8565b615b6b565b82525050565b60008160f01b9050919050565b6000615bac82615b94565b9050919050565b615bc4615bbf826142e3565b615ba1565b82525050565b6000615bd6828c615acf565b602082019150615be6828b615afa565b602082019150615bf6828a615b54565b601482019150615c068289615acf565b602082019150615c168288615b7d565b601482019150615c268287615acf565b602082019150615c368286615acf565b602082019150615c468285615acf565b602082019150615c568284615bb3565b6002820191508190509a9950505050505050505050565b6000615c7882614135565b9150615c8383614135565b925082615c9357615c92614f74565b5b828206905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615cd4601983614085565b9150615cdf82615c9e565b602082019050919050565b60006020820190508181036000830152615d0381615cc7565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615d66603283614085565b9150615d7182615d0a565b604082019050919050565b60006020820190508181036000830152615d9581615d59565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000615dc382615d9c565b615dcd8185615da7565b9350615ddd818560208601614096565b615de6816140c9565b840191505092915050565b6000608082019050615e0660008301876141ca565b615e1360208301866141ca565b615e2060408301856142b9565b8181036060830152615e328184615db8565b905095945050505050565b600081519050615e4c81613feb565b92915050565b600060208284031215615e6857615e67613fb5565b5b6000615e7684828501615e3d565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615eb5602083614085565b9150615ec082615e7f565b602082019050919050565b60006020820190508181036000830152615ee481615ea8565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615f21601c83614085565b9150615f2c82615eeb565b602082019050919050565b60006020820190508181036000830152615f5081615f14565b905091905056fea2646970667358221220d80c9587430f13e7bc8a798b5b047bc8978d5cd0550cc68db00d9cdc874bc39164736f6c63430008090033

Deployed Bytecode Sourcemap

37488:10909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24658:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25603:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27162:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26685:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39581:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46350:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43691:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45955:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40479:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37921:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39979:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28322:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48283:111;;;;;;;;;;;;;:::i;:::-;;37570:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45822:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45725:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46787:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46556:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40886:248;;;;;;;;;;;;;:::i;:::-;;39285:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25297:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41142:1925;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37622:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25027:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5646:103;;;;;;;;;;;;;:::i;:::-;;47083:1006;;;;;;;;;;;;;:::i;:::-;;46654:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4995:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37687:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45053:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25772:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45628:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27455:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37795:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37657:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28578:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45338:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37759:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25947:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37871:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43570:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27681:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39675:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45451:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5904:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37723:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37533:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37945:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24658:305;24760:4;24812:25;24797:40;;;:11;:40;;;;:105;;;;24869:33;24854:48;;;:11;:48;;;;24797:105;:158;;;;24919:36;24943:11;24919:23;:36::i;:::-;24797:158;24777:178;;24658:305;;;:::o;25603:100::-;25657:13;25690:5;25683:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25603:100;:::o;27162:221::-;27238:7;27266:16;27274:7;27266;:16::i;:::-;27258:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27351:15;:24;27367:7;27351:24;;;;;;;;;;;;;;;;;;;;;27344:31;;27162:221;;;:::o;26685:411::-;26766:13;26782:23;26797:7;26782:14;:23::i;:::-;26766:39;;26830:5;26824:11;;:2;:11;;;;26816:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26924:5;26908:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26933:37;26950:5;26957:12;:10;:12::i;:::-;26933:16;:37::i;:::-;26908:62;26886:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27067:21;27076:2;27080:7;27067:8;:21::i;:::-;26755:341;26685:411;;:::o;39581:86::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39653:6:::1;39643:7;;:16;;;;;;;;;;;;;;;;;;39581:86:::0;:::o;46350:90::-;46396:4;46420:12;;46413:19;;46350:90;:::o;43691:93::-;43740:4;43764:8;:12;43773:2;43764:12;;;;;;;;;;;;;;;;;;;;;;;;;43757:19;;43691:93;;;:::o;45955:387::-;46172:4;;;;;;;;;;;46148:29;;:12;:10;:12::i;:::-;:29;;;46144:151;;46200:41;46219:12;:10;:12::i;:::-;46233:7;46200:18;:41::i;:::-;46192:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;46144:151;46306:28;46316:4;46322:2;46326:7;46306:9;:28::i;:::-;45955:387;;;:::o;40479:399::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40591:10:::1;;40580:7;40565:12;;:22;;;;:::i;:::-;:36;;40557:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40668:1;40642:16;:23;;;;:27;40634:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;40734:6;40729:142;40750:7;40746:1;:11;40729:142;;;40779:14;40796:20;:18;:20::i;:::-;40779:37;;40831:28;40841:8;40851:7;40831:28;;:9;:28::i;:::-;40764:107;40759:3;;;;;:::i;:::-;;;;40729:142;;;;40479:399:::0;;:::o;37921:17::-;;;;;;;;;;;;;:::o;39979:492::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40074:6:::1;40066:5;;:14;;;;;;;;;;;;;;;;;;40098:10;40093:50;;40125:7;;40093:50;40168:1;40159:5;;;;;;;;;;;:10;;;40155:309;;;40186:26;40204:1;40207:4;40186:17;:26::i;:::-;40155:309;;;40243:1;40234:5;;;;;;;;;;;:10;;;40230:234;;;40261:31;40279:5;40286;40261:17;:31::i;:::-;40230:234;;;40323:1;40314:5;;;;;;;;;;;:10;;;40310:154;;;40341:31;40359:5;40366;40341:17;:31::i;:::-;40310:154;;;40403:1;40394:5;;;;;;;;;;;:10;;;40390:74;;;40421:31;40439:5;40446;40421:17;:31::i;:::-;40390:74;40310:154;40230:234;40155:309;5286:1;39979:492:::0;;:::o;28322:185::-;28460:39;28477:4;28483:2;28487:7;28460:39;;;;;;;;;;;;:16;:39::i;:::-;28322:185;;;:::o;48283:111::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48346:7:::1;:5;:7::i;:::-;48338:25;;:48;48364:21;48338:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48283:111::o:0;37570:43::-;37611:2;37570:43;:::o;45822:125::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45930:9:::1;45909:10;:18;45920:6;45909:18;;;;;;;;;;;;;;;:30;;;;45822:125:::0;;:::o;45725:89::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45800:5:::1;45787:4;;:19;;;;;;;;;;;;;;;;;;45725:89:::0;:::o;46787:284::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46882:12:::1;46897:21;46882:36;;46929:10;46959:3;46953:2;46943:7;:12;;;;:::i;:::-;46942:20;;;;:::i;:::-;46929:33;;46989:8;46973:35;;:42;47009:5;46973:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47034:2;47026:20;;:37;47057:5;47047:7;:15;;;;:::i;:::-;47026:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46836:235;;46787:284:::0;:::o;46556:90::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46635:3:::1;46625:7;:13;;;;;;;;;;;;:::i;:::-;;46556:90:::0;:::o;40886:248::-;39424:8;:6;:8::i;:::-;39423:9;39415:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40963:11:::1;;;;;;;;;;;40948:26;;:12;;:26;40940:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41023:12;;:14;;;;;;;;;:::i;:::-;;;;;;41048;41065:20;:18;:20::i;:::-;41048:37;;41096:30;41106:10;41118:7;41096:30;;:9;:30::i;:::-;40929:205;40886:248::o:0;39285:86::-;39332:4;39356:7;;;;;;;;;;;39349:14;;39285:86;:::o;25297:239::-;25369:7;25389:13;25405:7;:16;25413:7;25405:16;;;;;;;;;;;;;;;;;;;;;25389:32;;25457:1;25440:19;;:5;:19;;;;25432:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25523:5;25516:12;;;25297:239;;;:::o;41142:1925::-;39424:8;:6;:8::i;:::-;39423:9;39415:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;41244:10:::1;41231:23;;:9;:23;;;41223:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;41312:10;;41301:7;41286:12;;:22;;;;:::i;:::-;:36;;41278:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41373:1;41363:7;:11;:43;;;;;37611:2;41378:7;:28;;41363:43;41355:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41475:1;41449:16;:23;;;;:27;41441:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41536:18;41584:1;41575:5;;;;;;;;;;;:10;;;41571:394;;;41658:9;41636:18;41646:7;41636:9;:18::i;:::-;:31;41628:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41571:394;;;41783:1;41770:9;:14;41762:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41849:18;41859:7;41849:9;:18::i;:::-;41833:34;;41920:13;41890:4;;;;;;;;;;;:14;;;41905:10;41890:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;41882:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41571:394;41997:1;41981:13;:17;41977:86;;;42015:4;;;;;;;;;;;:9;;;42025:10;42037:13;42015:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41977:86;42091:7;42075:12;;:23;;;;;;;:::i;:::-;;;;;;;;42109:24;42136:6;:48;;42182:1;42169:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42136:48;;;42158:7;42145:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42136:48;42109:75;;42200:6;42195:773;42216:7;42212:1;:11;42195:773;;;42245:17;42265;:15;:17::i;:::-;42245:37;;42310:1;42301:5;;;;;;;;;;;:10;;;42297:70;;42332:19;:17;:19::i;:::-;42297:70;42383:14;42400:20;:18;:20::i;:::-;42383:37;;42441:16;42449:7;42441;:16::i;:::-;42437:73;;;42493:1;42478:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42437:73;42543:10;42530:23;;:9;:23;;;42526:185;;42574:16;42582:7;42574;:16::i;:::-;:54;;42627:1;42612:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;42574:54;;;42608:1;42593:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;42574:54;;42652:43;42664:10;42676:7;42685:9;42652:43;;;;;;;;:::i;:::-;;;;;;;;42526:185;42744:6;42743:7;:34;;;;42767:10;42754:23;;:9;:23;;;;42743:34;42739:218;;;42798:29;42808:9;42819:7;42798:29;;:9;:29::i;:::-;42739:218;;;42868:33;42886:4;;;;;;;;;;;42893:7;42868:33;;:9;:33::i;:::-;42934:7;42920:8;42929:1;42920:11;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;::::0;::::1;42739:218;42230:738;;42225:3;;;;;:::i;:::-;;;;42195:773;;;;42982:6;42978:82;;;43005:4;;;;;;;;;;;:21;;;43027:10;43039:8;43005:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42978:82;41212:1855;;41142:1925:::0;;:::o;37622:28::-;;;;:::o;25027:208::-;25099:7;25144:1;25127:19;;:5;:19;;;;25119:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25211:9;:16;25221:5;25211:16;;;;;;;;;;;;;;;;25204:23;;25027:208;;;:::o;5646:103::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5711:30:::1;5738:1;5711:18;:30::i;:::-;5646:103::o:0;47083:1006::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47134:15:::1;47152:21;47134:39;;47202:1;47192:7;:11;47184:20;;;::::0;::::1;;47217:77;47227:42;47289:4;47282:3;47272:7;:13;;;;:::i;:::-;47271:22;;;;:::i;:::-;47217:9;:77::i;:::-;47305;47315:42;47377:4;47370:3;47360:7;:13;;;;:::i;:::-;47359:22;;;;:::i;:::-;47305:9;:77::i;:::-;47393;47403:42;47465:4;47458:3;47448:7;:13;;;;:::i;:::-;47447:22;;;;:::i;:::-;47393:9;:77::i;:::-;47481;47491:42;47553:4;47546:3;47536:7;:13;;;;:::i;:::-;47535:22;;;;:::i;:::-;47481:9;:77::i;:::-;47569;47579:42;47641:4;47634:3;47624:7;:13;;;;:::i;:::-;47623:22;;;;:::i;:::-;47569:9;:77::i;:::-;47657:76;47667:42;47728:4;47722:2;47712:7;:12;;;;:::i;:::-;47711:21;;;;:::i;:::-;47657:9;:76::i;:::-;47744;47754:42;47815:4;47809:2;47799:7;:12;;;;:::i;:::-;47798:21;;;;:::i;:::-;47744:9;:76::i;:::-;47831;47841:42;47902:4;47896:2;47886:7;:12;;;;:::i;:::-;47885:21;;;;:::i;:::-;47831:9;:76::i;:::-;47918:77;47928:42;47990:4;47983:3;47973:7;:13;;;;:::i;:::-;47972:22;;;;:::i;:::-;47918:9;:77::i;:::-;48006:75;48016:42;48076:4;48071:1;48061:7;:11;;;;:::i;:::-;48060:20;;;;:::i;:::-;48006:9;:75::i;:::-;47123:966;47083:1006::o:0;46654:125::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46763:8:::1;46742:13;:18;46756:3;46742:18;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46654:125:::0;;:::o;4995:87::-;5041:7;5068:6;;;;;;;;;;;5061:13;;4995:87;:::o;37687:29::-;;;;;;;;;;;;;:::o;45053:277::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45128:17:::1;45148:32;45168:5;45175:4;45148:19;:32::i;:::-;45128:52;;;;45213:12;45191;;:35;;;;;;;;;;;;;;;;;;45242:6;45237:86;45258:12;45254:1;:16;45237:86;;;45292:19;:17;:19::i;:::-;45272:3;;;;;:::i;:::-;;;;45237:86;;;;45117:213;45053:277:::0;;:::o;25772:104::-;25828:13;25861:7;25854:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25772:104;:::o;45628:89::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45703:5:::1;45690:4;;:19;;;;;;;;;;;;;;;;;;45628:89:::0;:::o;27455:155::-;27550:52;27569:12;:10;:12::i;:::-;27583:8;27593;27550:18;:52::i;:::-;27455:155;;:::o;37795:31::-;;;;;;;;;;;;;:::o;37657:23::-;;;;;;;;;;;;;:::o;28578:328::-;28753:41;28772:12;:10;:12::i;:::-;28786:7;28753:18;:41::i;:::-;28745:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28859:39;28873:4;28879:2;28883:7;28892:5;28859:13;:39::i;:::-;28578:328;;;;:::o;45338:105::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45428:7:::1;45413:8;:12;45422:2;45413:12;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;45338:105:::0;;:::o;37759:29::-;;;;;;;;;;;;;:::o;25947:334::-;26020:13;26054:16;26062:7;26054;:16::i;:::-;26046:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26135:21;26159:10;:8;:10::i;:::-;26135:34;;26211:1;26193:7;26187:21;:25;:86;;;;;;;;;;;;;;;;;26239:7;26248:18;:7;:16;:18::i;:::-;26222:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26187:86;26180:93;;;25947:334;;;:::o;37871:41::-;;;;;;;;;;;;;;;;;:::o;43570:113::-;43624:4;43658:10;:17;43669:5;;;;;;;;;;;43658:17;;;;;;;;;;;;;;;;43648:7;:27;;;;:::i;:::-;43641:34;;43570:113;;;:::o;27681:164::-;27778:4;27802:18;:25;27821:5;27802:25;;;;;;;;;;;;;;;:35;27828:8;27802:35;;;;;;;;;;;;;;;;;;;;;;;;;27795:42;;27681:164;;;;:::o;39675:119::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39757:29:::1;39775:5;39782:3;39757:17;:29::i;:::-;39675:119:::0;;:::o;45451:169::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45530:6:::1;45525:88;45546:3;;:10;;45542:1;:14;45525:88;;;45597:4;45578:8;:16;45587:3;;45591:1;45587:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45578:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;45558:3;;;;;:::i;:::-;;;;45525:88;;;;45451:169:::0;;:::o;5904:201::-;5226:12;:10;:12::i;:::-;5215:23;;:7;:5;:7::i;:::-;:23;;;5207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6013:1:::1;5993:22;;:8;:22;;;;5985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6069:28;6088:8;6069:18;:28::i;:::-;5904:201:::0;:::o;37723:29::-;;;;;;;;;;;;;:::o;37533:30::-;;;;:::o;37945:17::-;;;;;;;;;;;;;:::o;7283:387::-;7343:4;7551:12;7618:7;7606:20;7598:28;;7661:1;7654:4;:8;7647:15;;;7283:387;;;:::o;17427:157::-;17512:4;17551:25;17536:40;;;:11;:40;;;;17529:47;;17427:157;;;:::o;30416:127::-;30481:4;30533:1;30505:30;;:7;:16;30513:7;30505:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30498:37;;30416:127;;;:::o;3719:98::-;3772:7;3799:10;3792:17;;3719:98;:::o;34398:174::-;34500:2;34473:15;:24;34489:7;34473:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34556:7;34552:2;34518:46;;34527:23;34542:7;34527:14;:23::i;:::-;34518:46;;;;;;;;;;;;34398:174;;:::o;30710:348::-;30803:4;30828:16;30836:7;30828;:16::i;:::-;30820:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30904:13;30920:23;30935:7;30920:14;:23::i;:::-;30904:39;;30973:5;30962:16;;:7;:16;;;:51;;;;31006:7;30982:31;;:20;30994:7;30982:11;:20::i;:::-;:31;;;30962:51;:87;;;;31017:32;31034:5;31041:7;31017:16;:32::i;:::-;30962:87;30954:96;;;30710:348;;;;:::o;33702:578::-;33861:4;33834:31;;:23;33849:7;33834:14;:23::i;:::-;:31;;;33826:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33944:1;33930:16;;:2;:16;;;;33922:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34000:39;34021:4;34027:2;34031:7;34000:20;:39::i;:::-;34104:29;34121:1;34125:7;34104:8;:29::i;:::-;34165:1;34146:9;:15;34156:4;34146:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34194:1;34177:9;:13;34187:2;34177:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34225:2;34206:7;:16;34214:7;34206:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34264:7;34260:2;34245:27;;34254:4;34245:27;;;;;;;;;;;;33702:578;;;:::o;43792:354::-;43839:6;43858:11;43872:69;43892:16;:23;;;;43917:16;:23;;;;43872:19;:69::i;:::-;43858:83;;;;43952:14;43969:16;43986:6;43969:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43952:41;;44033:16;44076:1;44050:16;:23;;;;:27;;;;:::i;:::-;44033:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44006:16;44023:6;44006:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;44089:16;:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44131:7;44124:14;;;;43792:354;:::o;31400:110::-;31476:26;31486:2;31490:7;31476:26;;;;;;;;;;;;:9;:26::i;:::-;31400:110;;:::o;39802:169::-;39880:8;39891:5;39880:16;;39875:89;39903:3;39898:8;;:1;:8;;;39875:89;;39928:16;39950:1;39928:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39908:3;;;;;:::i;:::-;;;;39875:89;;;;39802:169;;:::o;43075:487::-;43120:7;43153:1;43144:5;;;;;;;;;;;:10;;;43140:111;;;43178:10;43171:17;;;;43140:111;43344:2;43303:37;43323:11;;;;;;;;;;;43303:37;;43336:3;43303:19;:37::i;:::-;:43;;;43299:100;;43370:10;43363:17;;;;43299:100;43411:13;43427:4;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43411:39;;43482:3;43465:21;;:5;:21;;;43461:71;;;43510:10;43503:17;;;;;43461:71;43549:5;43542:12;;;43075:487;;:::o;44158:151::-;44223:1;44207:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44251:1;44235:12;;:17;;;;;;;:::i;:::-;;;;;;;;44282:1;44267:12;;;;;;;;;;;:16;;;44263:38;;;44300:1;44285:12;;:16;;;;;;;;;;;;;;;;;;44263:38;44158:151::o;6265:191::-;6339:16;6358:6;;;;;;;;;;;6339:25;;6384:8;6375:6;;:17;;;;;;;;;;;;;;;;;;6439:8;6408:40;;6429:8;6408:40;;;;;;;;;;;;6328:128;6265:191;:::o;48097:180::-;48171:12;48189:8;:13;;48210:7;48189:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48170:52;;;48241:7;48233:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;48159:118;48097:180;;:::o;44317:728::-;44394:6;44413:10;44426:1;44413:14;;44443:8;44438:102;44461:1;44457;:5;;;44438:102;;;44493:13;:27;44507:12;;;;;;;;;;;44493:27;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;44484:44;;;;;:::i;:::-;;;44464:3;;;;;:::i;:::-;;;;44438:102;;;;44552:11;44652:5;44705:1;44690:12;:16;;;;:::i;:::-;44680:27;44730:14;44767:16;44806:10;44839:12;;44874:5;44902:12;;44937;;;;;;;;;;;44613:355;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44585:398;;;;;;44566:428;;44552:442;;45030:6;45021;:15;;;;:::i;:::-;45007:30;;;;44317:728;;;;:::o;34714:315::-;34869:8;34860:17;;:5;:17;;;;34852:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34956:8;34918:18;:25;34937:5;34918:25;;;;;;;;;;;;;;;:35;34944:8;34918:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35002:8;34980:41;;34995:5;34980:41;;;35012:8;34980:41;;;;;;:::i;:::-;;;;;;;;34714:315;;;:::o;29788:::-;29945:28;29955:4;29961:2;29965:7;29945:9;:28::i;:::-;29992:48;30015:4;30021:2;30025:7;30034:5;29992:22;:48::i;:::-;29984:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29788:315;;;;:::o;46448:100::-;46500:13;46533:7;46526:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46448:100;:::o;1281:723::-;1337:13;1567:1;1558:5;:10;1554:53;;;1585:10;;;;;;;;;;;;;;;;;;;;;1554:53;1617:12;1632:5;1617:20;;1648:14;1673:78;1688:1;1680:4;:9;1673:78;;1706:8;;;;;:::i;:::-;;;;1737:2;1729:10;;;;;:::i;:::-;;;1673:78;;;1761:19;1793:6;1783:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1761:39;;1811:154;1827:1;1818:5;:10;1811:154;;1855:1;1845:11;;;;;:::i;:::-;;;1922:2;1914:5;:10;;;;:::i;:::-;1901:2;:24;;;;:::i;:::-;1888:39;;1871:6;1878;1871:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1951:2;1942:11;;;;;:::i;:::-;;;1811:154;;;1989:6;1975:21;;;;;1281:723;;;;:::o;36965:126::-;;;;:::o;31737:321::-;31867:18;31873:2;31877:7;31867:5;:18::i;:::-;31918:54;31949:1;31953:2;31957:7;31966:5;31918:22;:54::i;:::-;31896:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31737:321;;;:::o;35594:799::-;35749:4;35770:15;:2;:13;;;:15::i;:::-;35766:620;;;35822:2;35806:36;;;35843:12;:10;:12::i;:::-;35857:4;35863:7;35872:5;35806:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35802:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36065:1;36048:6;:13;:18;36044:272;;;36091:60;;;;;;;;;;:::i;:::-;;;;;;;;36044:272;36266:6;36260:13;36251:6;36247:2;36243:15;36236:38;35802:529;35939:41;;;35929:51;;;:6;:51;;;;35922:58;;;;;35766:620;36370:4;36363:11;;35594:799;;;;;;;:::o;32394:382::-;32488:1;32474:16;;:2;:16;;;;32466:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32547:16;32555:7;32547;:16::i;:::-;32546:17;32538:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32609:45;32638:1;32642:2;32646:7;32609:20;:45::i;:::-;32684:1;32667:9;:13;32677:2;32667:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32715:2;32696:7;:16;32704:7;32696:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32760:7;32756:2;32735:33;;32752:1;32735:33;;;;;;;;;;;;32394: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:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:323::-;5255:6;5304:2;5292:9;5283:7;5279:23;5275:32;5272:119;;;5310:79;;:::i;:::-;5272:119;5430:1;5455:50;5497:7;5488:6;5477:9;5473:22;5455:50;:::i;:::-;5445:60;;5401:114;5199:323;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:89::-;5916:7;5956:6;5949:5;5945:18;5934:29;;5880:89;;;:::o;5975:120::-;6047:23;6064:5;6047:23;:::i;:::-;6040:5;6037:34;6027:62;;6085:1;6082;6075:12;6027:62;5975:120;:::o;6101:137::-;6146:5;6184:6;6171:20;6162:29;;6200:32;6226:5;6200:32;:::i;:::-;6101:137;;;;:::o;6244:327::-;6302:6;6351:2;6339:9;6330:7;6326:23;6322:32;6319:119;;;6357:79;;:::i;:::-;6319:119;6477:1;6502:52;6546:7;6537:6;6526:9;6522:22;6502:52;:::i;:::-;6492:62;;6448:116;6244:327;;;;:::o;6577:619::-;6654:6;6662;6670;6719:2;6707:9;6698:7;6694:23;6690:32;6687:119;;;6725:79;;:::i;:::-;6687:119;6845:1;6870:53;6915:7;6906:6;6895:9;6891:22;6870:53;:::i;:::-;6860:63;;6816:117;6972:2;6998:53;7043:7;7034:6;7023:9;7019:22;6998:53;:::i;:::-;6988:63;;6943:118;7100:2;7126:53;7171:7;7162:6;7151:9;7147:22;7126:53;:::i;:::-;7116:63;;7071:118;6577:619;;;;;:::o;7202:474::-;7270:6;7278;7327:2;7315:9;7306:7;7302:23;7298:32;7295:119;;;7333:79;;:::i;:::-;7295:119;7453:1;7478:53;7523:7;7514:6;7503:9;7499:22;7478:53;:::i;:::-;7468:63;;7424:117;7580:2;7606:53;7651:7;7642:6;7631:9;7627:22;7606:53;:::i;:::-;7596:63;;7551:118;7202:474;;;;;:::o;7682:60::-;7710:3;7731:5;7724:12;;7682:60;;;:::o;7748:142::-;7798:9;7831:53;7849:34;7858:24;7876:5;7858:24;:::i;:::-;7849:34;:::i;:::-;7831:53;:::i;:::-;7818:66;;7748:142;;;:::o;7896:126::-;7946:9;7979:37;8010:5;7979:37;:::i;:::-;7966:50;;7896:126;;;:::o;8028:140::-;8092:9;8125:37;8156:5;8125:37;:::i;:::-;8112:50;;8028:140;;;:::o;8174:159::-;8275:51;8320:5;8275:51;:::i;:::-;8270:3;8263:64;8174:159;;:::o;8339:250::-;8446:4;8484:2;8473:9;8469:18;8461:26;;8497:85;8579:1;8568:9;8564:17;8555:6;8497:85;:::i;:::-;8339:250;;;;:::o;8595:466::-;8659:6;8667;8716:2;8704:9;8695:7;8691:23;8687:32;8684:119;;;8722:79;;:::i;:::-;8684:119;8842:1;8867:52;8911:7;8902:6;8891:9;8887:22;8867:52;:::i;:::-;8857:62;;8813:116;8968:2;8994:50;9036:7;9027:6;9016:9;9012:22;8994:50;:::i;:::-;8984:60;;8939:115;8595:466;;;;;:::o;9067:472::-;9134:6;9142;9191:2;9179:9;9170:7;9166:23;9162:32;9159:119;;;9197:79;;:::i;:::-;9159:119;9317:1;9342:52;9386:7;9377:6;9366:9;9362:22;9342:52;:::i;:::-;9332:62;;9288:116;9443:2;9469:53;9514:7;9505:6;9494:9;9490:22;9469:53;:::i;:::-;9459:63;;9414:118;9067:472;;;;;:::o;9545:329::-;9604:6;9653:2;9641:9;9632:7;9628:23;9624:32;9621:119;;;9659:79;;:::i;:::-;9621:119;9779:1;9804:53;9849:7;9840:6;9829:9;9825:22;9804:53;:::i;:::-;9794:63;;9750:117;9545:329;;;;:::o;9880:117::-;9989:1;9986;9979:12;10003:117;10112:1;10109;10102:12;10126:180;10174:77;10171:1;10164:88;10271:4;10268:1;10261:15;10295:4;10292:1;10285:15;10312:281;10395:27;10417:4;10395:27;:::i;:::-;10387:6;10383:40;10525:6;10513:10;10510:22;10489:18;10477:10;10474:34;10471:62;10468:88;;;10536:18;;:::i;:::-;10468:88;10576:10;10572:2;10565:22;10355:238;10312:281;;:::o;10599:129::-;10633:6;10660:20;;:::i;:::-;10650:30;;10689:33;10717:4;10709:6;10689:33;:::i;:::-;10599:129;;;:::o;10734:308::-;10796:4;10886:18;10878:6;10875:30;10872:56;;;10908:18;;:::i;:::-;10872:56;10946:29;10968:6;10946:29;:::i;:::-;10938:37;;11030:4;11024;11020:15;11012:23;;10734:308;;;:::o;11048:154::-;11132:6;11127:3;11122;11109:30;11194:1;11185:6;11180:3;11176:16;11169:27;11048:154;;;:::o;11208:412::-;11286:5;11311:66;11327:49;11369:6;11327:49;:::i;:::-;11311:66;:::i;:::-;11302:75;;11400:6;11393:5;11386:21;11438:4;11431:5;11427:16;11476:3;11467:6;11462:3;11458:16;11455:25;11452:112;;;11483:79;;:::i;:::-;11452:112;11573:41;11607:6;11602:3;11597;11573:41;:::i;:::-;11292:328;11208:412;;;;;:::o;11640:340::-;11696:5;11745:3;11738:4;11730:6;11726:17;11722:27;11712:122;;11753:79;;:::i;:::-;11712:122;11870:6;11857:20;11895:79;11970:3;11962:6;11955:4;11947:6;11943:17;11895:79;:::i;:::-;11886:88;;11702:278;11640:340;;;;:::o;11986:509::-;12055:6;12104:2;12092:9;12083:7;12079:23;12075:32;12072:119;;;12110:79;;:::i;:::-;12072:119;12258:1;12247:9;12243:17;12230:31;12288:18;12280:6;12277:30;12274:117;;;12310:79;;:::i;:::-;12274:117;12415:63;12470:7;12461:6;12450:9;12446:22;12415:63;:::i;:::-;12405:73;;12201:287;11986:509;;;;:::o;12501:468::-;12566:6;12574;12623:2;12611:9;12602:7;12598:23;12594:32;12591:119;;;12629:79;;:::i;:::-;12591:119;12749:1;12774:53;12819:7;12810:6;12799:9;12795:22;12774:53;:::i;:::-;12764:63;;12720:117;12876:2;12902:50;12944:7;12935:6;12924:9;12920:22;12902:50;:::i;:::-;12892:60;;12847:115;12501:468;;;;;:::o;12975:472::-;13042:6;13050;13099:2;13087:9;13078:7;13074:23;13070:32;13067:119;;;13105:79;;:::i;:::-;13067:119;13225:1;13250:52;13294:7;13285:6;13274:9;13270:22;13250:52;:::i;:::-;13240:62;;13196:116;13351:2;13377:53;13422:7;13413:6;13402:9;13398:22;13377:53;:::i;:::-;13367:63;;13322:118;12975:472;;;;;:::o;13453:115::-;13538:23;13555:5;13538:23;:::i;:::-;13533:3;13526:36;13453:115;;:::o;13574:218::-;13665:4;13703:2;13692:9;13688:18;13680:26;;13716:69;13782:1;13771:9;13767:17;13758:6;13716:69;:::i;:::-;13574:218;;;;:::o;13798:474::-;13866:6;13874;13923:2;13911:9;13902:7;13898:23;13894:32;13891:119;;;13929:79;;:::i;:::-;13891:119;14049:1;14074:53;14119:7;14110:6;14099:9;14095:22;14074:53;:::i;:::-;14064:63;;14020:117;14176:2;14202:53;14247:7;14238:6;14227:9;14223:22;14202:53;:::i;:::-;14192:63;;14147:118;13798:474;;;;;:::o;14278:468::-;14343:6;14351;14400:2;14388:9;14379:7;14375:23;14371:32;14368:119;;;14406:79;;:::i;:::-;14368:119;14526:1;14551:53;14596:7;14587:6;14576:9;14572:22;14551:53;:::i;:::-;14541:63;;14497:117;14653:2;14679:50;14721:7;14712:6;14701:9;14697:22;14679:50;:::i;:::-;14669:60;;14624:115;14278:468;;;;;:::o;14752:307::-;14813:4;14903:18;14895:6;14892:30;14889:56;;;14925:18;;:::i;:::-;14889:56;14963:29;14985:6;14963:29;:::i;:::-;14955:37;;15047:4;15041;15037:15;15029:23;;14752:307;;;:::o;15065:410::-;15142:5;15167:65;15183:48;15224:6;15183:48;:::i;:::-;15167:65;:::i;:::-;15158:74;;15255:6;15248:5;15241:21;15293:4;15286:5;15282:16;15331:3;15322:6;15317:3;15313:16;15310:25;15307:112;;;15338:79;;:::i;:::-;15307:112;15428:41;15462:6;15457:3;15452;15428:41;:::i;:::-;15148:327;15065:410;;;;;:::o;15494:338::-;15549:5;15598:3;15591:4;15583:6;15579:17;15575:27;15565:122;;15606:79;;:::i;:::-;15565:122;15723:6;15710:20;15748:78;15822:3;15814:6;15807:4;15799:6;15795:17;15748:78;:::i;:::-;15739:87;;15555:277;15494:338;;;;:::o;15838:943::-;15933:6;15941;15949;15957;16006:3;15994:9;15985:7;15981:23;15977:33;15974:120;;;16013:79;;:::i;:::-;15974:120;16133:1;16158:53;16203:7;16194:6;16183:9;16179:22;16158:53;:::i;:::-;16148:63;;16104:117;16260:2;16286:53;16331:7;16322:6;16311:9;16307:22;16286:53;:::i;:::-;16276:63;;16231:118;16388:2;16414:53;16459:7;16450:6;16439:9;16435:22;16414:53;:::i;:::-;16404:63;;16359:118;16544:2;16533:9;16529:18;16516:32;16575:18;16567:6;16564:30;16561:117;;;16597:79;;:::i;:::-;16561:117;16702:62;16756:7;16747:6;16736:9;16732:22;16702:62;:::i;:::-;16692:72;;16487:287;15838:943;;;;;;;:::o;16787:474::-;16855:6;16863;16912:2;16900:9;16891:7;16887:23;16883:32;16880:119;;;16918:79;;:::i;:::-;16880:119;17038:1;17063:53;17108:7;17099:6;17088:9;17084:22;17063:53;:::i;:::-;17053:63;;17009:117;17165:2;17191:53;17236:7;17227:6;17216:9;17212:22;17191:53;:::i;:::-;17181:63;;17136:118;16787:474;;;;;:::o;17267:470::-;17333:6;17341;17390:2;17378:9;17369:7;17365:23;17361:32;17358:119;;;17396:79;;:::i;:::-;17358:119;17516:1;17541:52;17585:7;17576:6;17565:9;17561:22;17541:52;:::i;:::-;17531:62;;17487:116;17642:2;17668:52;17712:7;17703:6;17692:9;17688:22;17668:52;:::i;:::-;17658:62;;17613:117;17267:470;;;;;:::o;17743:117::-;17852:1;17849;17842:12;17866:117;17975:1;17972;17965:12;18005:567;18077:8;18087:6;18137:3;18130:4;18122:6;18118:17;18114:27;18104:122;;18145:79;;:::i;:::-;18104:122;18258:6;18245:20;18235:30;;18288:18;18280:6;18277:30;18274:117;;;18310:79;;:::i;:::-;18274:117;18424:4;18416:6;18412:17;18400:29;;18478:3;18470:4;18462:6;18458:17;18448:8;18444:32;18441:41;18438:128;;;18485:79;;:::i;:::-;18438:128;18005:567;;;;;:::o;18578:557::-;18663:6;18671;18720:2;18708:9;18699:7;18695:23;18691:32;18688:119;;;18726:79;;:::i;:::-;18688:119;18874:1;18863:9;18859:17;18846:31;18904:18;18896:6;18893:30;18890:117;;;18926:79;;:::i;:::-;18890:117;19039:79;19110:7;19101:6;19090:9;19086:22;19039:79;:::i;:::-;19021:97;;;;18817:311;18578:557;;;;;:::o;19141:140::-;19205:9;19238:37;19269:5;19238:37;:::i;:::-;19225:50;;19141:140;;;:::o;19287:159::-;19388:51;19433:5;19388:51;:::i;:::-;19383:3;19376:64;19287:159;;:::o;19452:250::-;19559:4;19597:2;19586:9;19582:18;19574:26;;19610:85;19692:1;19681:9;19677:17;19668:6;19610:85;:::i;:::-;19452:250;;;;:::o;19708:180::-;19756:77;19753:1;19746:88;19853:4;19850:1;19843:15;19877:4;19874:1;19867:15;19894:320;19938:6;19975:1;19969:4;19965:12;19955:22;;20022:1;20016:4;20012:12;20043:18;20033:81;;20099:4;20091:6;20087:17;20077:27;;20033:81;20161:2;20153:6;20150:14;20130:18;20127:38;20124:84;;;20180:18;;:::i;:::-;20124:84;19945:269;19894:320;;;:::o;20220:231::-;20360:34;20356:1;20348:6;20344:14;20337:58;20429:14;20424:2;20416:6;20412:15;20405:39;20220:231;:::o;20457:366::-;20599:3;20620:67;20684:2;20679:3;20620:67;:::i;:::-;20613:74;;20696:93;20785:3;20696:93;:::i;:::-;20814:2;20809:3;20805:12;20798:19;;20457:366;;;:::o;20829:419::-;20995:4;21033:2;21022:9;21018:18;21010:26;;21082:9;21076:4;21072:20;21068:1;21057:9;21053:17;21046:47;21110:131;21236:4;21110:131;:::i;:::-;21102:139;;20829:419;;;:::o;21254:220::-;21394:34;21390:1;21382:6;21378:14;21371:58;21463:3;21458:2;21450:6;21446:15;21439:28;21254:220;:::o;21480:366::-;21622:3;21643:67;21707:2;21702:3;21643:67;:::i;:::-;21636:74;;21719:93;21808:3;21719:93;:::i;:::-;21837:2;21832:3;21828:12;21821:19;;21480:366;;;:::o;21852:419::-;22018:4;22056:2;22045:9;22041:18;22033:26;;22105:9;22099:4;22095:20;22091:1;22080:9;22076:17;22069:47;22133:131;22259:4;22133:131;:::i;:::-;22125:139;;21852:419;;;:::o;22277:243::-;22417:34;22413:1;22405:6;22401:14;22394:58;22486:26;22481:2;22473:6;22469:15;22462:51;22277:243;:::o;22526:366::-;22668:3;22689:67;22753:2;22748:3;22689:67;:::i;:::-;22682:74;;22765:93;22854:3;22765:93;:::i;:::-;22883:2;22878:3;22874:12;22867:19;;22526:366;;;:::o;22898:419::-;23064:4;23102:2;23091:9;23087:18;23079:26;;23151:9;23145:4;23141:20;23137:1;23126:9;23122:17;23115:47;23179:131;23305:4;23179:131;:::i;:::-;23171:139;;22898:419;;;:::o;23323:182::-;23463:34;23459:1;23451:6;23447:14;23440:58;23323:182;:::o;23511:366::-;23653:3;23674:67;23738:2;23733:3;23674:67;:::i;:::-;23667:74;;23750:93;23839:3;23750:93;:::i;:::-;23868:2;23863:3;23859:12;23852:19;;23511:366;;;:::o;23883:419::-;24049:4;24087:2;24076:9;24072:18;24064:26;;24136:9;24130:4;24126:20;24122:1;24111:9;24107:17;24100:47;24164:131;24290:4;24164:131;:::i;:::-;24156:139;;23883:419;;;:::o;24308:236::-;24448:34;24444:1;24436:6;24432:14;24425:58;24517:19;24512:2;24504:6;24500:15;24493:44;24308:236;:::o;24550:366::-;24692:3;24713:67;24777:2;24772:3;24713:67;:::i;:::-;24706:74;;24789:93;24878:3;24789:93;:::i;:::-;24907:2;24902:3;24898:12;24891:19;;24550:366;;;:::o;24922:419::-;25088:4;25126:2;25115:9;25111:18;25103:26;;25175:9;25169:4;25165:20;25161:1;25150:9;25146:17;25139:47;25203:131;25329:4;25203:131;:::i;:::-;25195:139;;24922:419;;;:::o;25347:180::-;25395:77;25392:1;25385:88;25492:4;25489:1;25482:15;25516:4;25513:1;25506:15;25533:305;25573:3;25592:20;25610:1;25592:20;:::i;:::-;25587:25;;25626:20;25644:1;25626:20;:::i;:::-;25621:25;;25780:1;25712:66;25708:74;25705:1;25702:81;25699:107;;;25786:18;;:::i;:::-;25699:107;25830:1;25827;25823:9;25816:16;;25533:305;;;;:::o;25844:167::-;25984:19;25980:1;25972:6;25968:14;25961:43;25844:167;:::o;26017:366::-;26159:3;26180:67;26244:2;26239:3;26180:67;:::i;:::-;26173:74;;26256:93;26345:3;26256:93;:::i;:::-;26374:2;26369:3;26365:12;26358:19;;26017:366;;;:::o;26389:419::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:131;26796:4;26670:131;:::i;:::-;26662:139;;26389:419;;;:::o;26814:229::-;26954:34;26950:1;26942:6;26938:14;26931:58;27023:12;27018:2;27010:6;27006:15;26999:37;26814:229;:::o;27049:366::-;27191:3;27212:67;27276:2;27271:3;27212:67;:::i;:::-;27205:74;;27288:93;27377:3;27288:93;:::i;:::-;27406:2;27401:3;27397:12;27390:19;;27049:366;;;:::o;27421:419::-;27587:4;27625:2;27614:9;27610:18;27602:26;;27674:9;27668:4;27664:20;27660:1;27649:9;27645:17;27638:47;27702:131;27828:4;27702:131;:::i;:::-;27694:139;;27421:419;;;:::o;27846:233::-;27885:3;27908:24;27926:5;27908:24;:::i;:::-;27899:33;;27954:66;27947:5;27944:77;27941:103;;;28024:18;;:::i;:::-;27941:103;28071:1;28064:5;28060:13;28053:20;;27846:233;;;:::o;28085:348::-;28125:7;28148:20;28166:1;28148:20;:::i;:::-;28143:25;;28182:20;28200:1;28182:20;:::i;:::-;28177:25;;28370:1;28302:66;28298:74;28295:1;28292:81;28287:1;28280:9;28273:17;28269:105;28266:131;;;28377:18;;:::i;:::-;28266:131;28425:1;28422;28418:9;28407:20;;28085:348;;;;:::o;28439:180::-;28487:77;28484:1;28477:88;28584:4;28581:1;28574:15;28608:4;28605:1;28598:15;28625:185;28665:1;28682:20;28700:1;28682:20;:::i;:::-;28677:25;;28716:20;28734:1;28716:20;:::i;:::-;28711:25;;28755:1;28745:35;;28760:18;;:::i;:::-;28745:35;28802:1;28799;28795:9;28790:14;;28625:185;;;;:::o;28816:191::-;28856:4;28876:20;28894:1;28876:20;:::i;:::-;28871:25;;28910:20;28928:1;28910:20;:::i;:::-;28905:25;;28949:1;28946;28943:8;28940:34;;;28954:18;;:::i;:::-;28940:34;28999:1;28996;28992:9;28984:17;;28816:191;;;;:::o;29013:166::-;29153:18;29149:1;29141:6;29137:14;29130:42;29013:166;:::o;29185:366::-;29327:3;29348:67;29412:2;29407:3;29348:67;:::i;:::-;29341:74;;29424:93;29513:3;29424:93;:::i;:::-;29542:2;29537:3;29533:12;29526:19;;29185:366;;;:::o;29557:419::-;29723:4;29761:2;29750:9;29746:18;29738:26;;29810:9;29804:4;29800:20;29796:1;29785:9;29781:17;29774:47;29838:131;29964:4;29838:131;:::i;:::-;29830:139;;29557:419;;;:::o;29982:220::-;30122:34;30118:1;30110:6;30106:14;30099:58;30191:3;30186:2;30178:6;30174:15;30167:28;29982:220;:::o;30208:366::-;30350:3;30371:67;30435:2;30430:3;30371:67;:::i;:::-;30364:74;;30447:93;30536:3;30447:93;:::i;:::-;30565:2;30560:3;30556:12;30549:19;;30208:366;;;:::o;30580:419::-;30746:4;30784:2;30773:9;30769:18;30761:26;;30833:9;30827:4;30823:20;30819:1;30808:9;30804:17;30797:47;30861:131;30987:4;30861:131;:::i;:::-;30853:139;;30580:419;;;:::o;31005:228::-;31145:34;31141:1;31133:6;31129:14;31122:58;31214:11;31209:2;31201:6;31197:15;31190:36;31005:228;:::o;31239:366::-;31381:3;31402:67;31466:2;31461:3;31402:67;:::i;:::-;31395:74;;31478:93;31567:3;31478:93;:::i;:::-;31596:2;31591:3;31587:12;31580:19;;31239:366;;;:::o;31611:419::-;31777:4;31815:2;31804:9;31800:18;31792:26;;31864:9;31858:4;31854:20;31850:1;31839:9;31835:17;31828:47;31892:131;32018:4;31892:131;:::i;:::-;31884:139;;31611:419;;;:::o;32036:158::-;32176:10;32172:1;32164:6;32160:14;32153:34;32036:158;:::o;32200:365::-;32342:3;32363:66;32427:1;32422:3;32363:66;:::i;:::-;32356:73;;32438:93;32527:3;32438:93;:::i;:::-;32556:2;32551:3;32547:12;32540:19;;32200:365;;;:::o;32571:419::-;32737:4;32775:2;32764:9;32760:18;32752:26;;32824:9;32818:4;32814:20;32810:1;32799:9;32795:17;32788:47;32852:131;32978:4;32852:131;:::i;:::-;32844:139;;32571:419;;;:::o;32996:169::-;33136:21;33132:1;33124:6;33120:14;33113:45;32996:169;:::o;33171:366::-;33313:3;33334:67;33398:2;33393:3;33334:67;:::i;:::-;33327:74;;33410:93;33499:3;33410:93;:::i;:::-;33528:2;33523:3;33519:12;33512:19;;33171:366;;;:::o;33543:419::-;33709:4;33747:2;33736:9;33732:18;33724:26;;33796:9;33790:4;33786:20;33782:1;33771:9;33767:17;33760:47;33824:131;33950:4;33824:131;:::i;:::-;33816:139;;33543:419;;;:::o;33968:172::-;34108:24;34104:1;34096:6;34092:14;34085:48;33968:172;:::o;34146:366::-;34288:3;34309:67;34373:2;34368:3;34309:67;:::i;:::-;34302:74;;34385:93;34474:3;34385:93;:::i;:::-;34503:2;34498:3;34494:12;34487:19;;34146:366;;;:::o;34518:419::-;34684:4;34722:2;34711:9;34707:18;34699:26;;34771:9;34765:4;34761:20;34757:1;34746:9;34742:17;34735:47;34799:131;34925:4;34799:131;:::i;:::-;34791:139;;34518:419;;;:::o;34943:179::-;35083:31;35079:1;35071:6;35067:14;35060:55;34943:179;:::o;35128:366::-;35270:3;35291:67;35355:2;35350:3;35291:67;:::i;:::-;35284:74;;35367:93;35456:3;35367:93;:::i;:::-;35485:2;35480:3;35476:12;35469:19;;35128:366;;;:::o;35500:419::-;35666:4;35704:2;35693:9;35689:18;35681:26;;35753:9;35747:4;35743:20;35739:1;35728:9;35724:17;35717:47;35781:131;35907:4;35781:131;:::i;:::-;35773:139;;35500:419;;;:::o;35925:143::-;35982:5;36013:6;36007:13;35998:22;;36029:33;36056:5;36029:33;:::i;:::-;35925:143;;;;:::o;36074:351::-;36144:6;36193:2;36181:9;36172:7;36168:23;36164:32;36161:119;;;36199:79;;:::i;:::-;36161:119;36319:1;36344:64;36400:7;36391:6;36380:9;36376:22;36344:64;:::i;:::-;36334:74;;36290:128;36074:351;;;;:::o;36431:165::-;36571:17;36567:1;36559:6;36555:14;36548:41;36431:165;:::o;36602:366::-;36744:3;36765:67;36829:2;36824:3;36765:67;:::i;:::-;36758:74;;36841:93;36930:3;36841:93;:::i;:::-;36959:2;36954:3;36950:12;36943:19;;36602:366;;;:::o;36974:419::-;37140:4;37178:2;37167:9;37163:18;37155:26;;37227:9;37221:4;37217:20;37213:1;37202:9;37198:17;37191:47;37255:131;37381:4;37255:131;:::i;:::-;37247:139;;36974:419;;;:::o;37399:332::-;37520:4;37558:2;37547:9;37543:18;37535:26;;37571:71;37639:1;37628:9;37624:17;37615:6;37571:71;:::i;:::-;37652:72;37720:2;37709:9;37705:18;37696:6;37652:72;:::i;:::-;37399:332;;;;;:::o;37737:242::-;37776:3;37795:19;37812:1;37795:19;:::i;:::-;37790:24;;37828:19;37845:1;37828:19;:::i;:::-;37823:24;;37921:1;37913:6;37909:14;37906:1;37903:21;37900:47;;;37927:18;;:::i;:::-;37900:47;37971:1;37968;37964:9;37957:16;;37737:242;;;;:::o;37985:438::-;38132:4;38170:2;38159:9;38155:18;38147:26;;38183:71;38251:1;38240:9;38236:17;38227:6;38183:71;:::i;:::-;38264:70;38330:2;38319:9;38315:18;38306:6;38264:70;:::i;:::-;38344:72;38412:2;38401:9;38397:18;38388:6;38344:72;:::i;:::-;37985:438;;;;;;:::o;38429:180::-;38477:77;38474:1;38467:88;38574:4;38571:1;38564:15;38598:4;38595:1;38588:15;38615:113;38681:6;38715:5;38709:12;38699:22;;38615:113;;;:::o;38734:183::-;38832:11;38866:6;38861:3;38854:19;38906:4;38901:3;38897:14;38882:29;;38734:183;;;;:::o;38923:131::-;38989:4;39012:3;39004:11;;39042:4;39037:3;39033:14;39025:22;;38923:131;;;:::o;39060:105::-;39135:23;39152:5;39135:23;:::i;:::-;39130:3;39123:36;39060:105;;:::o;39171:175::-;39238:10;39259:44;39299:3;39291:6;39259:44;:::i;:::-;39335:4;39330:3;39326:14;39312:28;;39171:175;;;;:::o;39352:112::-;39421:4;39453;39448:3;39444:14;39436:22;;39352:112;;;:::o;39498:724::-;39615:3;39644:53;39691:5;39644:53;:::i;:::-;39713:85;39791:6;39786:3;39713:85;:::i;:::-;39706:92;;39822:55;39871:5;39822:55;:::i;:::-;39900:7;39931:1;39916:281;39941:6;39938:1;39935:13;39916:281;;;40017:6;40011:13;40044:61;40101:3;40086:13;40044:61;:::i;:::-;40037:68;;40128:59;40180:6;40128:59;:::i;:::-;40118:69;;39976:221;39963:1;39960;39956:9;39951:14;;39916:281;;;39920:14;40213:3;40206:10;;39620:602;;;39498:724;;;;:::o;40228:479::-;40397:4;40435:2;40424:9;40420:18;40412:26;;40448:71;40516:1;40505:9;40501:17;40492:6;40448:71;:::i;:::-;40566:9;40560:4;40556:20;40551:2;40540:9;40536:18;40529:48;40594:106;40695:4;40686:6;40594:106;:::i;:::-;40586:114;;40228:479;;;;;:::o;40713:229::-;40853:34;40849:1;40841:6;40837:14;40830:58;40922:12;40917:2;40909:6;40905:15;40898:37;40713:229;:::o;40948:366::-;41090:3;41111:67;41175:2;41170:3;41111:67;:::i;:::-;41104:74;;41187:93;41276:3;41187:93;:::i;:::-;41305:2;41300:3;41296:12;41289:19;;40948:366;;;:::o;41320:419::-;41486:4;41524:2;41513:9;41509:18;41501:26;;41573:9;41567:4;41563:20;41559:1;41548:9;41544:17;41537:47;41601:131;41727:4;41601:131;:::i;:::-;41593:139;;41320:419;;;:::o;41745:234::-;41885:34;41881:1;41873:6;41869:14;41862:58;41954:17;41949:2;41941:6;41937:15;41930:42;41745:234;:::o;41985:366::-;42127:3;42148:67;42212:2;42207:3;42148:67;:::i;:::-;42141:74;;42224:93;42313:3;42224:93;:::i;:::-;42342:2;42337:3;42333:12;42326:19;;41985:366;;;:::o;42357:419::-;42523:4;42561:2;42550:9;42546:18;42538:26;;42610:9;42604:4;42600:20;42596:1;42585:9;42581:17;42574:47;42638:131;42764:4;42638:131;:::i;:::-;42630:139;;42357:419;;;:::o;42782:148::-;42884:11;42921:3;42906:18;;42782:148;;;;:::o;42936:377::-;43042:3;43070:39;43103:5;43070:39;:::i;:::-;43125:89;43207:6;43202:3;43125:89;:::i;:::-;43118:96;;43223:52;43268:6;43263:3;43256:4;43249:5;43245:16;43223:52;:::i;:::-;43300:6;43295:3;43291:16;43284:23;;43046:267;42936:377;;;;:::o;43319:435::-;43499:3;43521:95;43612:3;43603:6;43521:95;:::i;:::-;43514:102;;43633:95;43724:3;43715:6;43633:95;:::i;:::-;43626:102;;43745:3;43738:10;;43319:435;;;;;:::o;43760:225::-;43900:34;43896:1;43888:6;43884:14;43877:58;43969:8;43964:2;43956:6;43952:15;43945:33;43760:225;:::o;43991:366::-;44133:3;44154:67;44218:2;44213:3;44154:67;:::i;:::-;44147:74;;44230:93;44319:3;44230:93;:::i;:::-;44348:2;44343:3;44339:12;44332:19;;43991:366;;;:::o;44363:419::-;44529:4;44567:2;44556:9;44552:18;44544:26;;44616:9;44610:4;44606:20;44602:1;44591:9;44587:17;44580:47;44644:131;44770:4;44644:131;:::i;:::-;44636:139;;44363:419;;;:::o;44788:231::-;44928:34;44924:1;44916:6;44912:14;44905:58;44997:14;44992:2;44984:6;44980:15;44973:39;44788:231;:::o;45025:366::-;45167:3;45188:67;45252:2;45247:3;45188:67;:::i;:::-;45181:74;;45264:93;45353:3;45264:93;:::i;:::-;45382:2;45377:3;45373:12;45366:19;;45025:366;;;:::o;45397:419::-;45563:4;45601:2;45590:9;45586:18;45578:26;;45650:9;45644:4;45640:20;45636:1;45625:9;45621:17;45614:47;45678:131;45804:4;45678:131;:::i;:::-;45670:139;;45397:419;;;:::o;45822:228::-;45962:34;45958:1;45950:6;45946:14;45939:58;46031:11;46026:2;46018:6;46014:15;46007:36;45822:228;:::o;46056:366::-;46198:3;46219:67;46283:2;46278:3;46219:67;:::i;:::-;46212:74;;46295:93;46384:3;46295:93;:::i;:::-;46413:2;46408:3;46404:12;46397:19;;46056:366;;;:::o;46428:419::-;46594:4;46632:2;46621:9;46617:18;46609:26;;46681:9;46675:4;46671:20;46667:1;46656:9;46652:17;46645:47;46709:131;46835:4;46709:131;:::i;:::-;46701:139;;46428:419;;;:::o;46853:223::-;46993:34;46989:1;46981:6;46977:14;46970:58;47062:6;47057:2;47049:6;47045:15;47038:31;46853:223;:::o;47082:366::-;47224:3;47245:67;47309:2;47304:3;47245:67;:::i;:::-;47238:74;;47321:93;47410:3;47321:93;:::i;:::-;47439:2;47434:3;47430:12;47423:19;;47082:366;;;:::o;47454:419::-;47620:4;47658:2;47647:9;47643:18;47635:26;;47707:9;47701:4;47697:20;47693:1;47682:9;47678:17;47671:47;47735:131;47861:4;47735:131;:::i;:::-;47727:139;;47454:419;;;:::o;47879:180::-;47927:77;47924:1;47917:88;48024:4;48021:1;48014:15;48048:4;48045:1;48038:15;48065:171;48103:3;48126:23;48143:5;48126:23;:::i;:::-;48117:32;;48171:6;48164:5;48161:17;48158:43;;;48181:18;;:::i;:::-;48158:43;48228:1;48221:5;48217:13;48210:20;;48065:171;;;:::o;48242:143::-;48299:5;48330:6;48324:13;48315:22;;48346:33;48373:5;48346:33;:::i;:::-;48242:143;;;;:::o;48391:351::-;48461:6;48510:2;48498:9;48489:7;48485:23;48481:32;48478:119;;;48516:79;;:::i;:::-;48478:119;48636:1;48661:64;48717:7;48708:6;48697:9;48693:22;48661:64;:::i;:::-;48651:74;;48607:128;48391:351;;;;:::o;48748:147::-;48849:11;48886:3;48871:18;;48748:147;;;;:::o;48901:114::-;;:::o;49021:398::-;49180:3;49201:83;49282:1;49277:3;49201:83;:::i;:::-;49194:90;;49293:93;49382:3;49293:93;:::i;:::-;49411:1;49406:3;49402:11;49395:18;;49021:398;;;:::o;49425:379::-;49609:3;49631:147;49774:3;49631:147;:::i;:::-;49624:154;;49795:3;49788:10;;49425:379;;;:::o;49810:166::-;49950:18;49946:1;49938:6;49934:14;49927:42;49810:166;:::o;49982:366::-;50124:3;50145:67;50209:2;50204:3;50145:67;:::i;:::-;50138:74;;50221:93;50310:3;50221:93;:::i;:::-;50339:2;50334:3;50330:12;50323:19;;49982:366;;;:::o;50354:419::-;50520:4;50558:2;50547:9;50543:18;50535:26;;50607:9;50601:4;50597:20;50593:1;50582:9;50578:17;50571:47;50635:131;50761:4;50635:131;:::i;:::-;50627:139;;50354:419;;;:::o;50779:79::-;50818:7;50847:5;50836:16;;50779:79;;;:::o;50864:157::-;50969:45;50989:24;51007:5;50989:24;:::i;:::-;50969:45;:::i;:::-;50964:3;50957:58;50864:157;;:::o;51027:77::-;51064:7;51093:5;51082:16;;51027:77;;;:::o;51110:79::-;51149:7;51178:5;51167:16;;51110:79;;;:::o;51195:157::-;51300:45;51320:24;51338:5;51320:24;:::i;:::-;51300:45;:::i;:::-;51295:3;51288:58;51195:157;;:::o;51358:104::-;51403:7;51432:24;51450:5;51432:24;:::i;:::-;51421:35;;51358:104;;;:::o;51468:94::-;51501:8;51549:5;51545:2;51541:14;51520:35;;51468:94;;;:::o;51568:::-;51607:7;51636:20;51650:5;51636:20;:::i;:::-;51625:31;;51568:94;;;:::o;51668:108::-;51715:7;51744:26;51764:5;51744:26;:::i;:::-;51733:37;;51668:108;;;:::o;51782:189::-;51903:61;51931:32;51957:5;51931:32;:::i;:::-;51903:61;:::i;:::-;51898:3;51891:74;51782:189;;:::o;51977:100::-;52016:7;52045:26;52065:5;52045:26;:::i;:::-;52034:37;;51977:100;;;:::o;52083:157::-;52188:45;52208:24;52226:5;52208:24;:::i;:::-;52188:45;:::i;:::-;52183:3;52176:58;52083:157;;:::o;52246:96::-;52280:8;52329:5;52324:3;52320:15;52299:36;;52246:96;;;:::o;52348:94::-;52386:7;52415:21;52430:5;52415:21;:::i;:::-;52404:32;;52348:94;;;:::o;52448:153::-;52551:43;52570:23;52587:5;52570:23;:::i;:::-;52551:43;:::i;:::-;52546:3;52539:56;52448:153;;:::o;52607:1411::-;52957:3;52972:75;53043:3;53034:6;52972:75;:::i;:::-;53072:2;53067:3;53063:12;53056:19;;53085:75;53156:3;53147:6;53085:75;:::i;:::-;53185:2;53180:3;53176:12;53169:19;;53198:91;53285:3;53276:6;53198:91;:::i;:::-;53314:2;53309:3;53305:12;53298:19;;53327:75;53398:3;53389:6;53327:75;:::i;:::-;53427:2;53422:3;53418:12;53411:19;;53440:75;53511:3;53502:6;53440:75;:::i;:::-;53540:2;53535:3;53531:12;53524:19;;53553:75;53624:3;53615:6;53553:75;:::i;:::-;53653:2;53648:3;53644:12;53637:19;;53666:75;53737:3;53728:6;53666:75;:::i;:::-;53766:2;53761:3;53757:12;53750:19;;53779:75;53850:3;53841:6;53779:75;:::i;:::-;53879:2;53874:3;53870:12;53863:19;;53892:73;53961:3;53952:6;53892:73;:::i;:::-;53990:1;53985:3;53981:11;53974:18;;54009:3;54002:10;;52607:1411;;;;;;;;;;;;:::o;54024:176::-;54056:1;54073:20;54091:1;54073:20;:::i;:::-;54068:25;;54107:20;54125:1;54107:20;:::i;:::-;54102:25;;54146:1;54136:35;;54151:18;;:::i;:::-;54136:35;54192:1;54189;54185:9;54180:14;;54024:176;;;;:::o;54206:175::-;54346:27;54342:1;54334:6;54330:14;54323:51;54206:175;:::o;54387:366::-;54529:3;54550:67;54614:2;54609:3;54550:67;:::i;:::-;54543:74;;54626:93;54715:3;54626:93;:::i;:::-;54744:2;54739:3;54735:12;54728:19;;54387:366;;;:::o;54759:419::-;54925:4;54963:2;54952:9;54948:18;54940:26;;55012:9;55006:4;55002:20;54998:1;54987:9;54983:17;54976:47;55040:131;55166:4;55040:131;:::i;:::-;55032:139;;54759:419;;;:::o;55184:237::-;55324:34;55320:1;55312:6;55308:14;55301:58;55393:20;55388:2;55380:6;55376:15;55369:45;55184:237;:::o;55427:366::-;55569:3;55590:67;55654:2;55649:3;55590:67;:::i;:::-;55583:74;;55666:93;55755:3;55666:93;:::i;:::-;55784:2;55779:3;55775:12;55768:19;;55427:366;;;:::o;55799:419::-;55965:4;56003:2;55992:9;55988:18;55980:26;;56052:9;56046:4;56042:20;56038:1;56027:9;56023:17;56016:47;56080:131;56206:4;56080:131;:::i;:::-;56072:139;;55799:419;;;:::o;56224:98::-;56275:6;56309:5;56303:12;56293:22;;56224:98;;;:::o;56328:168::-;56411:11;56445:6;56440:3;56433:19;56485:4;56480:3;56476:14;56461:29;;56328:168;;;;:::o;56502:360::-;56588:3;56616:38;56648:5;56616:38;:::i;:::-;56670:70;56733:6;56728:3;56670:70;:::i;:::-;56663:77;;56749:52;56794:6;56789:3;56782:4;56775:5;56771:16;56749:52;:::i;:::-;56826:29;56848:6;56826:29;:::i;:::-;56821:3;56817:39;56810:46;;56592:270;56502:360;;;;:::o;56868:640::-;57063:4;57101:3;57090:9;57086:19;57078:27;;57115:71;57183:1;57172:9;57168:17;57159:6;57115:71;:::i;:::-;57196:72;57264:2;57253:9;57249:18;57240:6;57196:72;:::i;:::-;57278;57346:2;57335:9;57331:18;57322:6;57278:72;:::i;:::-;57397:9;57391:4;57387:20;57382:2;57371:9;57367:18;57360:48;57425:76;57496:4;57487:6;57425:76;:::i;:::-;57417:84;;56868:640;;;;;;;:::o;57514:141::-;57570:5;57601:6;57595:13;57586:22;;57617:32;57643:5;57617:32;:::i;:::-;57514:141;;;;:::o;57661:349::-;57730:6;57779:2;57767:9;57758:7;57754:23;57750:32;57747:119;;;57785:79;;:::i;:::-;57747:119;57905:1;57930:63;57985:7;57976:6;57965:9;57961:22;57930:63;:::i;:::-;57920:73;;57876:127;57661:349;;;;:::o;58016:182::-;58156:34;58152:1;58144:6;58140:14;58133:58;58016:182;:::o;58204:366::-;58346:3;58367:67;58431:2;58426:3;58367:67;:::i;:::-;58360:74;;58443:93;58532:3;58443:93;:::i;:::-;58561:2;58556:3;58552:12;58545:19;;58204:366;;;:::o;58576:419::-;58742:4;58780:2;58769:9;58765:18;58757:26;;58829:9;58823:4;58819:20;58815:1;58804:9;58800:17;58793:47;58857:131;58983:4;58857:131;:::i;:::-;58849:139;;58576:419;;;:::o;59001:178::-;59141:30;59137:1;59129:6;59125:14;59118:54;59001:178;:::o;59185:366::-;59327:3;59348:67;59412:2;59407:3;59348:67;:::i;:::-;59341:74;;59424:93;59513:3;59424:93;:::i;:::-;59542:2;59537:3;59533:12;59526:19;;59185:366;;;:::o;59557:419::-;59723:4;59761:2;59750:9;59746:18;59738:26;;59810:9;59804:4;59800:20;59796:1;59785:9;59781:17;59774:47;59838:131;59964:4;59838:131;:::i;:::-;59830:139;;59557:419;;;:::o

Swarm Source

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