Token Crosharks
Overview CRC721
Total Supply:
999 CS
Holders:
142 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Crosharks
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-08-10 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/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/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/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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/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/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/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/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/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/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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 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: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.1 (utils/escrow/Escrow.sol) /** * @title Escrow * @dev Base escrow contract, holds funds designated for a payee until they * withdraw them. * * Intended usage: This contract (and derived escrow contracts) should be a * standalone contract, that only interacts with the contract that instantiated * it. That way, it is guaranteed that all Ether will be handled according to * the `Escrow` rules, and there is no need to check for payable functions or * transfers in the inheritance tree. The contract that uses the escrow as its * payment method should be its owner, and provide public methods redirecting * to the escrow's deposit and withdraw. */ contract Escrow is Ownable { using Address for address payable; event Deposited(address indexed payee, uint256 weiAmount); event Withdrawn(address indexed payee, uint256 weiAmount); mapping(address => uint256) private _deposits; function depositsOf(address payee) public view returns (uint256) { return _deposits[payee]; } /** * @dev Stores the sent amount as credit to be withdrawn. * @param payee The destination address of the funds. */ function deposit(address payee) public payable virtual onlyOwner { uint256 amount = msg.value; _deposits[payee] += amount; emit Deposited(payee, amount); } /** * @dev Withdraw accumulated balance for a payee, forwarding all gas to the * recipient. * * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities. * Make sure you trust the recipient, or are either following the * checks-effects-interactions pattern or using {ReentrancyGuard}. * * @param payee The address whose funds will be withdrawn and transferred to. */ function withdraw(address payable payee) public virtual onlyOwner { uint256 payment = _deposits[payee]; _deposits[payee] = 0; payee.sendValue(payment); emit Withdrawn(payee, payment); } } // OpenZeppelin Contracts v4.4.1 (security/PullPayment.sol) /** * @dev Simple implementation of a * https://consensys.github.io/smart-contract-best-practices/recommendations/#favor-pull-over-push-for-external-calls[pull-payment] * strategy, where the paying contract doesn't interact directly with the * receiver account, which must withdraw its payments itself. * * Pull-payments are often considered the best practice when it comes to sending * Ether, security-wise. It prevents recipients from blocking execution, and * eliminates reentrancy concerns. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * To use, derive from the `PullPayment` contract, and use {_asyncTransfer} * instead of Solidity's `transfer` function. Payees can query their due * payments with {payments}, and retrieve them with {withdrawPayments}. */ abstract contract PullPayment { Escrow private immutable _escrow; constructor() { _escrow = new Escrow(); } /** * @dev Withdraw accumulated payments, forwarding all gas to the recipient. * * Note that _any_ account can call this function, not just the `payee`. * This means that contracts unaware of the `PullPayment` protocol can still * receive funds this way, by having a separate account call * {withdrawPayments}. * * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities. * Make sure you trust the recipient, or are either following the * checks-effects-interactions pattern or using {ReentrancyGuard}. * * @param payee Whose payments will be withdrawn. */ function withdrawPayments(address payable payee) public virtual { _escrow.withdraw(payee); } /** * @dev Returns the payments owed to an address. * @param dest The creditor's address. */ function payments(address dest) public view returns (uint256) { return _escrow.depositsOf(dest); } /** * @dev Called by the payer to store the sent amount as credit to be pulled. * Funds sent in this way are stored in an intermediate {Escrow} contract, so * there is no danger of them being spent before withdrawal. * * @param dest The destination address of the funds. * @param amount The amount to transfer. */ function _asyncTransfer(address dest, uint256 amount) internal virtual { _escrow.deposit{value: amount}(dest); } } pragma solidity >=0.7.0 <0.9.0; interface NFTMasterchef { function getArrayTokenIDs(uint256 _pid, address _user) external view returns (uint256[] memory); } contract Crosharks is ERC721Enumerable, Ownable, PullPayment { IERC721 public foundingMember = IERC721(0xCc9a4c16261745812d0c5ce7f4B5Ac66A4cf943c); using Strings for uint256; using Counters for Counters.Counter; Counters.Counter public _tokenIdCounter; uint8 private currentChunkIndex; uint16[] internal order; string baseURI; address public revenueWallet = 0xDB72d7705a553ed71109796F504CCA2269AdA50b; uint256 public cost = 100 ether; uint256 public nftFMPrice = 85 ether; uint256 public Wlcost = 75 ether; uint256 public maxSupply = 999; uint256 public maxMintAmount = 10; NFTMasterchef public nftStaking = NFTMasterchef(0x2941d0EF38d74a4941C4Fee75624b831898126A9); bool public paused = false; uint256 public cyborgswapFee = 30; // 3% address public cyborgswapWallet = 0x97E4ae563f5Ea9fe63DA7abaCaEE2C8Cd54C3FC0; uint16 public stakingPoolId = 0; mapping(address => uint8) private _allowList; uint256 public startPresaleTimestamp = 1660388400; uint256 public startAllTimestamp = 1660388400; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } function setAllowList(address[] calldata addresses, uint8 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { _allowList[addresses[i]] = numAllowedToMint; } } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint8 _mintAmount) public payable { uint256 supply = totalSupply(); uint256 userPrice = mintCost(msg.sender); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require (block.timestamp > startPresaleTimestamp, "Presale not started"); if(block.timestamp < startAllTimestamp){ require (userPrice == Wlcost || userPrice == nftFMPrice, "Presale ongoing"); } require(msg.value >= userPrice * _mintAmount, "Cro value sent is not correct"); uint256 amountFee = ((userPrice * _mintAmount) * cyborgswapFee) / 1000; if(userPrice == Wlcost){ require(_mintAmount <= _allowList[msg.sender], "Exceeded max available to purchase"); require(Wlcost * _mintAmount <= msg.value, "Cro value sent is not correct"); _allowList[msg.sender] -= _mintAmount; require(msg.value >= Wlcost * _mintAmount); } else if(userPrice == cost){ require(cost * _mintAmount <= msg.value, "Cro value sent is not correct"); require(msg.value >= cost * _mintAmount); } else if(userPrice == nftFMPrice){ require(nftFMPrice * _mintAmount <= msg.value, "Cro value sent is not correct"); require(msg.value >= nftFMPrice * _mintAmount); } _asyncTransfer(revenueWallet, (userPrice * _mintAmount) - amountFee); _asyncTransfer(cyborgswapWallet, amountFee); } for (uint256 i = 1; i <= _mintAmount; i++) { uint256 tokenId = _tokenIdCounter.current(); _safeMint(msg.sender, order[tokenId]); _tokenIdCounter.increment(); } } function mintCost(address _address) public view returns (uint256) { uint256 userPrice = cost; if(foundingMember.balanceOf(_address) > 0){ userPrice = nftFMPrice; }else if(nftStaking.getArrayTokenIDs(stakingPoolId, _address).length > 0){ userPrice = nftFMPrice; } if(_allowList[_address] > 0){ userPrice = Wlcost; } return userPrice; } function getLen() external view returns(uint) { return order.length; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json")) : ""; } //onlyOwner function setSequnceChunk(uint8 _chunkIndex, uint16[] calldata _chunk) external onlyOwner { require(currentChunkIndex <= _chunkIndex, "chunkIndex exists"); if (_chunkIndex == 0) { order = _chunk; } else { uint len = _chunk.length; for(uint i = 0; i < len; i ++) { order.push(_chunk[i]); } } currentChunkIndex = _chunkIndex + 1; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setWlCost(uint256 _newCost) public onlyOwner { Wlcost = _newCost; } function setFMCost(uint256 _newCost) public onlyOwner { nftFMPrice = _newCost; } function setCyborgswapFee(uint256 _cyborgswapFee) public onlyOwner { require (_cyborgswapFee <= 200, "Max Fee is 20%"); cyborgswapFee = _cyborgswapFee; } function setStartPresaleTimestamp(uint256 _startPresaleTimestamp) public onlyOwner { require (block.timestamp < _startPresaleTimestamp, "no"); startPresaleTimestamp = _startPresaleTimestamp; } function setStartAllTimestamp(uint256 _startAllTimestamp) public onlyOwner { require (block.timestamp < _startAllTimestamp, "no"); startAllTimestamp = _startAllTimestamp; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool all, ) = payable(owner()).call{value: address(this).balance}(""); require(all); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"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":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":"Wlcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenIdCounter","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cyborgswapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cyborgswapWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"foundingMember","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"mintCost","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":"nftFMPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftStaking","outputs":[{"internalType":"contract NFTMasterchef","name":"","type":"address"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dest","type":"address"}],"name":"payments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8","name":"numAllowedToMint","type":"uint8"}],"name":"setAllowList","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cyborgswapFee","type":"uint256"}],"name":"setCyborgswapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setFMCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_chunkIndex","type":"uint8"},{"internalType":"uint16[]","name":"_chunk","type":"uint16[]"}],"name":"setSequnceChunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startAllTimestamp","type":"uint256"}],"name":"setStartAllTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startPresaleTimestamp","type":"uint256"}],"name":"setStartPresaleTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPoolId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startAllTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startPresaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payee","type":"address"}],"name":"withdrawPayments","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405273cc9a4c16261745812d0c5ce7f4b5ac66a4cf943c600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073db72d7705a553ed71109796f504cca2269ada50b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068056bc75e2d6310000060115568049b9ca9a694340000601255680410d586a20a4c00006013556103e7601455600a601555732941d0ef38d74a4941c4fee75624b831898126a9601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601660146101000a81548160ff021916908315150217905550601e6017557397e4ae563f5ea9fe63da7abacaee2c8cd54c3fc0601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860146101000a81548161ffff021916908361ffff1602179055506362f78430601a556362f78430601b55348015620001e557600080fd5b506040516200726b3803806200726b83398181016040528101906200020b9190620005bc565b828281600090805190602001906200022592919062000480565b5080600190805190602001906200023e92919062000480565b5050506200026162000255620002dd60201b60201c565b620002e560201b60201c565b6040516200026f9062000511565b604051809103906000f0801580156200028c573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620002d481620003ab60201b60201c565b5050506200087c565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003bb620002dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003e16200045660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000431906200069c565b60405180910390fd5b80600f90805190602001906200045292919062000480565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200048e9062000764565b90600052602060002090601f016020900481019282620004b25760008555620004fe565b82601f10620004cd57805160ff1916838001178555620004fe565b82800160010185558215620004fe579182015b82811115620004fd578251825591602001919060010190620004e0565b5b5090506200050d91906200051f565b5090565b610d16806200655583390190565b5b808211156200053a57600081600090555060010162000520565b5090565b6000620005556200054f84620006e7565b620006be565b90508281526020810184848401111562000574576200057362000833565b5b620005818482856200072e565b509392505050565b600082601f830112620005a157620005a06200082e565b5b8151620005b38482602086016200053e565b91505092915050565b600080600060608486031215620005d857620005d76200083d565b5b600084015167ffffffffffffffff811115620005f957620005f862000838565b5b620006078682870162000589565b935050602084015167ffffffffffffffff8111156200062b576200062a62000838565b5b620006398682870162000589565b925050604084015167ffffffffffffffff8111156200065d576200065c62000838565b5b6200066b8682870162000589565b9150509250925092565b6000620006846020836200071d565b9150620006918262000853565b602082019050919050565b60006020820190508181036000830152620006b78162000675565b9050919050565b6000620006ca620006dd565b9050620006d882826200079a565b919050565b6000604051905090565b600067ffffffffffffffff821115620007055762000704620007ff565b5b620007108262000842565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200074e57808201518184015260208101905062000731565b838111156200075e576000848401525b50505050565b600060028204905060018216806200077d57607f821691505b60208210811415620007945762000793620007d0565b5b50919050565b620007a58262000842565b810181811067ffffffffffffffff82111715620007c757620007c6620007ff565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60805160601c615cac620008a9600039600081816113d40152818161282501526130300152615cac6000f3fe6080604052600436106102ff5760003560e01c80636352211e11610190578063a22cb465116100dc578063c4408c8a11610095578063e2982c211161006f578063e2982c2114610b52578063e985e9c514610b8f578063f12f6d5d14610bcc578063f2fde38b14610bf5576102ff565b8063c4408c8a14610abf578063c87b56dd14610aea578063d5abeb0114610b27576102ff565b8063a22cb465146109c3578063a46c8505146109ec578063ad72d28814610a17578063b6881c7d14610a40578063b88d4fde14610a6b578063c342e17f14610a94576102ff565b8063800a38be116101495780638a17b5f0116101235780638a17b5f0146109195780638da5cb5b14610944578063907c5e191461096f57806395d89b4114610998576102ff565b8063800a38be1461089a5780638295784d146108c557806384c4bd4b146108ee576102ff565b80636352211e146107995780636ecd2306146107d657806370a08231146107f2578063715018a61461082f5780637e23866b146108465780637f00c7a614610871576102ff565b80632f745c591161024f57806344478425116102085780634f6ccce7116101e25780634f6ccce7146106dd57806355f804b31461071a5780635b69368c146107435780635c975abb1461076e576102ff565b8063444784251461065e57806344a0d68a146106895780634a90be57146106b2576102ff565b80632f745c591461055f57806331b3eb941461059c5780633b3c523a146105c55780633ccfd60b146105ee57806342842e0e146105f8578063438b630014610621576102ff565b806313faede6116102bc578063237d21da11610296578063237d21da146104a5578063239c70ae146104ce57806323b872dd146104f95780632acc659e14610522576102ff565b806313faede61461042657806318160ddd146104515780631a85ad671461047c576102ff565b806301ffc9a71461030457806302329a29146103415780630457d16b1461036a57806306fdde0314610395578063081812fc146103c0578063095ea7b3146103fd575b600080fd5b34801561031057600080fd5b5061032b6004803603810190610326919061436f565b610c1e565b6040516103389190614b5f565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190614342565b610c98565b005b34801561037657600080fd5b5061037f610d31565b60405161038c9190614f36565b60405180910390f35b3480156103a157600080fd5b506103aa610d37565b6040516103b79190614bb0565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e2919061443f565b610dc9565b6040516103f49190614abb565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190614259565b610e4e565b005b34801561043257600080fd5b5061043b610f66565b6040516104489190614f36565b60405180910390f35b34801561045d57600080fd5b50610466610f6c565b6040516104739190614f36565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061443f565b610f79565b005b3480156104b157600080fd5b506104cc60048036038101906104c7919061443f565b611043565b005b3480156104da57600080fd5b506104e36110c9565b6040516104f09190614f36565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190614143565b6110cf565b005b34801561052e57600080fd5b50610549600480360381019061054491906140a9565b61112f565b6040516105569190614f36565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614259565b61132d565b6040516105939190614f36565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be91906140d6565b6113d2565b005b3480156105d157600080fd5b506105ec60048036038101906105e791906144c6565b611460565b005b6105f661161d565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614143565b611719565b005b34801561062d57600080fd5b50610648600480360381019061064391906140a9565b611739565b6040516106559190614b3d565b60405180910390f35b34801561066a57600080fd5b506106736117e7565b6040516106809190614abb565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab919061443f565b61180d565b005b3480156106be57600080fd5b506106c7611893565b6040516106d49190614f36565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061443f565b6118a0565b6040516107119190614f36565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906143c9565b611911565b005b34801561074f57600080fd5b506107586119a7565b6040516107659190614f36565b60405180910390f35b34801561077a57600080fd5b506107836119ad565b6040516107909190614b5f565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb919061443f565b6119c0565b6040516107cd9190614abb565b60405180910390f35b6107f060048036038101906107eb9190614499565b611a72565b005b3480156107fe57600080fd5b50610819600480360381019061081491906140a9565b611fb9565b6040516108269190614f36565b60405180910390f35b34801561083b57600080fd5b50610844612071565b005b34801561085257600080fd5b5061085b6120f9565b6040516108689190614b7a565b60405180910390f35b34801561087d57600080fd5b506108986004803603810190610893919061443f565b61211f565b005b3480156108a657600080fd5b506108af6121a5565b6040516108bc9190614f36565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e79190614299565b6121ab565b005b3480156108fa57600080fd5b506109036122cd565b6040516109109190614f36565b60405180910390f35b34801561092557600080fd5b5061092e6122d9565b60405161093b9190614abb565b60405180910390f35b34801561095057600080fd5b506109596122ff565b6040516109669190614abb565b60405180910390f35b34801561097b57600080fd5b506109966004803603810190610991919061443f565b612329565b005b3480156109a457600080fd5b506109ad6123f1565b6040516109ba9190614bb0565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190614219565b612483565b005b3480156109f857600080fd5b50610a01612604565b604051610a0e9190614ef2565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061443f565b612618565b005b348015610a4c57600080fd5b50610a556126e0565b604051610a629190614f36565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190614196565b6126e6565b005b348015610aa057600080fd5b50610aa9612748565b604051610ab69190614f36565b60405180910390f35b348015610acb57600080fd5b50610ad461274e565b604051610ae19190614b95565b60405180910390f35b348015610af657600080fd5b50610b116004803603810190610b0c919061443f565b612774565b604051610b1e9190614bb0565b60405180910390f35b348015610b3357600080fd5b50610b3c61281b565b604051610b499190614f36565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b7491906140a9565b612821565b604051610b869190614f36565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb19190614103565b6128d3565b604051610bc39190614b5f565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee919061443f565b612967565b005b348015610c0157600080fd5b50610c1c6004803603810190610c1791906140a9565b6129ed565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c915750610c9082612ae5565b5b9050919050565b610ca0612bc7565b73ffffffffffffffffffffffffffffffffffffffff16610cbe6122ff565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90614dd2565b60405180910390fd5b80601660146101000a81548160ff02191690831515021790555050565b60135481565b606060008054610d4690615348565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290615348565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610dd482612bcf565b610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90614db2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e59826119c0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190614e52565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee9612bc7565b73ffffffffffffffffffffffffffffffffffffffff161480610f185750610f1781610f12612bc7565b6128d3565b5b610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90614cd2565b60405180910390fd5b610f618383612c3b565b505050565b60115481565b6000600880549050905090565b610f81612bc7565b73ffffffffffffffffffffffffffffffffffffffff16610f9f6122ff565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90614dd2565b60405180910390fd5b60c8811115611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090614bd2565b60405180910390fd5b8060178190555050565b61104b612bc7565b73ffffffffffffffffffffffffffffffffffffffff166110696122ff565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690614dd2565b60405180910390fd5b8060128190555050565b60155481565b6110e06110da612bc7565b82612cf4565b61111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614e92565b60405180910390fd5b61112a838383612dd2565b505050565b60008060115490506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111949190614abb565b60206040518083038186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e4919061446c565b11156111f45760125490506112c6565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a71896dc601860149054906101000a900461ffff16866040518363ffffffff1660e01b8152600401611263929190614f0d565b60006040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112b891906142f9565b5111156112c55760125490505b5b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1611156113245760135490505b80915050919050565b600061133883611fb9565b8210611379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137090614bf2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161142b9190614ad6565b600060405180830381600087803b15801561144557600080fd5b505af1158015611459573d6000803e3d6000fd5b5050505050565b611468612bc7565b73ffffffffffffffffffffffffffffffffffffffff166114866122ff565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390614dd2565b60405180910390fd5b8260ff16600d60009054906101000a900460ff1660ff161115611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614ed2565b60405180910390fd5b60008360ff161415611557578181600e9190611551929190613c71565b506115f1565b600082829050905060005b818110156115ee57600e84848381811061157f5761157e6154e1565b5b90506020020160208101906115949190614412565b90806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff16021790555080806115e6906153ab565b915050611562565b50505b6001836115fe91906150e1565b600d60006101000a81548160ff021916908360ff160217905550505050565b611625612bc7565b73ffffffffffffffffffffffffffffffffffffffff166116436122ff565b73ffffffffffffffffffffffffffffffffffffffff1614611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090614dd2565b60405180910390fd5b60006116a36122ff565b73ffffffffffffffffffffffffffffffffffffffff16476040516116c690614aa6565b60006040518083038185875af1925050503d8060008114611703576040519150601f19603f3d011682016040523d82523d6000602084013e611708565b606091505b505090508061171657600080fd5b50565b611734838383604051806020016040528060008152506126e6565b505050565b6060600061174683611fb9565b905060008167ffffffffffffffff81111561176457611763615510565b5b6040519080825280602002602001820160405280156117925781602001602082028036833780820191505090505b50905060005b828110156117dc576117aa858261132d565b8282815181106117bd576117bc6154e1565b5b60200260200101818152505080806117d4906153ab565b915050611798565b508092505050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611815612bc7565b73ffffffffffffffffffffffffffffffffffffffff166118336122ff565b73ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614dd2565b60405180910390fd5b8060118190555050565b6000600e80549050905090565b60006118aa610f6c565b82106118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290614eb2565b60405180910390fd5b600882815481106118ff576118fe6154e1565b5b90600052602060002001549050919050565b611919612bc7565b73ffffffffffffffffffffffffffffffffffffffff166119376122ff565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490614dd2565b60405180910390fd5b80600f90805190602001906119a3929190613d1f565b5050565b60125481565b601660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090614d12565b60405180910390fd5b80915050919050565b6000611a7c610f6c565b90506000611a893361112f565b9050601660149054906101000a900460ff1615611aa557600080fd5b60008360ff1611611ab557600080fd5b6015548360ff161115611ac757600080fd5b6014548360ff1683611ad9919061508b565b1115611ae457600080fd5b611aec6122ff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f3157601a544211611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614d72565b60405180910390fd5b601b54421015611bbd57601354811480611b7d575060125481145b611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614e32565b60405180910390fd5b5b8260ff1681611bcc9190615149565b341015611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590614d52565b60405180910390fd5b60006103e86017548560ff1684611c259190615149565b611c2f9190615149565b611c399190615118565b9050601354821415611dc257601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168460ff161115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614e72565b60405180910390fd5b348460ff16601354611cec9190615149565b1115611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490614d52565b60405180910390fd5b83601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611d8891906151d7565b92506101000a81548160ff021916908360ff1602179055508360ff16601354611db19190615149565b341015611dbd57600080fd5b611ebe565b601154821415611e4157348460ff16601154611dde9190615149565b1115611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614d52565b60405180910390fd5b8360ff16601154611e309190615149565b341015611e3c57600080fd5b611ebd565b601254821415611ebc57348460ff16601254611e5d9190615149565b1115611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590614d52565b60405180910390fd5b8360ff16601254611eaf9190615149565b341015611ebb57600080fd5b5b5b5b611f03601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828660ff1685611ef49190615149565b611efe91906151a3565b61302e565b611f2f601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261302e565b505b6000600190505b8360ff168111611fb3576000611f4e600c6130be565b9050611f9533600e8381548110611f6857611f676154e1565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff166130cc565b611f9f600c6130ea565b508080611fab906153ab565b915050611f38565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190614cf2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612079612bc7565b73ffffffffffffffffffffffffffffffffffffffff166120976122ff565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614dd2565b60405180910390fd5b6120f76000613100565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612127612bc7565b73ffffffffffffffffffffffffffffffffffffffff166121456122ff565b73ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290614dd2565b60405180910390fd5b8060158190555050565b601b5481565b6121b3612bc7565b73ffffffffffffffffffffffffffffffffffffffff166121d16122ff565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614dd2565b60405180910390fd5b60005b838390508110156122c757816019600086868581811061224d5761224c6154e1565b5b905060200201602081019061226291906140a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806122bf906153ab565b91505061222a565b50505050565b600c8060000154905081565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612331612bc7565b73ffffffffffffffffffffffffffffffffffffffff1661234f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16146123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90614dd2565b60405180910390fd5b8042106123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90614d32565b60405180910390fd5b80601b8190555050565b60606001805461240090615348565b80601f016020809104026020016040519081016040528092919081815260200182805461242c90615348565b80156124795780601f1061244e57610100808354040283529160200191612479565b820191906000526020600020905b81548152906001019060200180831161245c57829003601f168201915b5050505050905090565b61248b612bc7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f090614c92565b60405180910390fd5b8060056000612506612bc7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166125b3612bc7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125f89190614b5f565b60405180910390a35050565b601860149054906101000a900461ffff1681565b612620612bc7565b73ffffffffffffffffffffffffffffffffffffffff1661263e6122ff565b73ffffffffffffffffffffffffffffffffffffffff1614612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b90614dd2565b60405180910390fd5b8042106126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd90614d32565b60405180910390fd5b80601a8190555050565b60175481565b6126f76126f1612bc7565b83612cf4565b612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272d90614e92565b60405180910390fd5b612742848484846131c6565b50505050565b601a5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061277f82612bcf565b6127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614e12565b60405180910390fd5b60006127c8613222565b905060008151116127e85760405180602001604052806000815250612813565b806127f2846132b4565b604051602001612803929190614a77565b6040516020818303038152906040525b915050919050565b60145481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b815260040161287c9190614abb565b60206040518083038186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc919061446c565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61296f612bc7565b73ffffffffffffffffffffffffffffffffffffffff1661298d6122ff565b73ffffffffffffffffffffffffffffffffffffffff16146129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90614dd2565b60405180910390fd5b8060138190555050565b6129f5612bc7565b73ffffffffffffffffffffffffffffffffffffffff16612a136122ff565b73ffffffffffffffffffffffffffffffffffffffff1614612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090614c32565b60405180910390fd5b612ae281613100565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bb057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612bc05750612bbf82613415565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cae836119c0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612cff82612bcf565b612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3590614cb2565b60405180910390fd5b6000612d49836119c0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612db857508373ffffffffffffffffffffffffffffffffffffffff16612da084610dc9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612dc95750612dc881856128d3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612df2826119c0565b73ffffffffffffffffffffffffffffffffffffffff1614612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90614df2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614c72565b60405180910390fd5b612ec383838361347f565b612ece600082612c3b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f1e91906151a3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f75919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b81526004016130889190614abb565b6000604051808303818588803b1580156130a157600080fd5b505af11580156130b5573d6000803e3d6000fd5b50505050505050565b600081600001549050919050565b6130e6828260405180602001604052806000815250613593565b5050565b6001816000016000828254019250508190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6131d1848484612dd2565b6131dd848484846135ee565b61321c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321390614c12565b60405180910390fd5b50505050565b6060600f805461323190615348565b80601f016020809104026020016040519081016040528092919081815260200182805461325d90615348565b80156132aa5780601f1061327f576101008083540402835291602001916132aa565b820191906000526020600020905b81548152906001019060200180831161328d57829003601f168201915b5050505050905090565b606060008214156132fc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613410565b600082905060005b6000821461332e578080613317906153ab565b915050600a826133279190615118565b9150613304565b60008167ffffffffffffffff81111561334a57613349615510565b5b6040519080825280601f01601f19166020018201604052801561337c5781602001600182028036833780820191505090505b5090505b600085146134095760018261339591906151a3565b9150600a856133a491906153f4565b60306133b0919061508b565b60f81b8183815181106133c6576133c56154e1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134029190615118565b9450613380565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61348a838383613785565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134cd576134c88161378a565b61350c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461350b5761350a83826137d3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561354f5761354a81613940565b61358e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461358d5761358c8282613a11565b5b5b505050565b61359d8383613a90565b6135aa60008484846135ee565b6135e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e090614c12565b60405180910390fd5b505050565b600061360f8473ffffffffffffffffffffffffffffffffffffffff16613c5e565b15613778578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613638612bc7565b8786866040518563ffffffff1660e01b815260040161365a9493929190614af1565b602060405180830381600087803b15801561367457600080fd5b505af19250505080156136a557506040513d601f19601f820116820180604052508101906136a2919061439c565b60015b613728573d80600081146136d5576040519150601f19603f3d011682016040523d82523d6000602084013e6136da565b606091505b50600081511415613720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371790614c12565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061377d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137e084611fb9565b6137ea91906151a3565b90506000600760008481526020019081526020016000205490508181146138cf576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061395491906151a3565b9050600060096000848152602001908152602001600020549050600060088381548110613984576139836154e1565b5b9060005260206000200154905080600883815481106139a6576139a56154e1565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139f5576139f46154b2565b5b6001900381819060005260206000200160009055905550505050565b6000613a1c83611fb9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af790614d92565b60405180910390fd5b613b0981612bcf565b15613b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4090614c52565b60405180910390fd5b613b556000838361347f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ba5919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f01601090048101928215613d0e5791602002820160005b83821115613cde57833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613c9a565b8015613d0c5782816101000a81549061ffff0219169055600201602081600101049283019260010302613cde565b505b509050613d1b9190613da5565b5090565b828054613d2b90615348565b90600052602060002090601f016020900481019282613d4d5760008555613d94565b82601f10613d6657805160ff1916838001178555613d94565b82800160010185558215613d94579182015b82811115613d93578251825591602001919060010190613d78565b5b509050613da19190613da5565b5090565b5b80821115613dbe576000816000905550600101613da6565b5090565b6000613dd5613dd084614f76565b614f51565b90508083825260208201905082856020860282011115613df857613df7615549565b5b60005b85811015613e285781613e0e888261407f565b845260208401935060208301925050600181019050613dfb565b5050509392505050565b6000613e45613e4084614fa2565b614f51565b905082815260208101848484011115613e6157613e6061554e565b5b613e6c848285615306565b509392505050565b6000613e87613e8284614fd3565b614f51565b905082815260208101848484011115613ea357613ea261554e565b5b613eae848285615306565b509392505050565b600081359050613ec581615bd5565b92915050565b600081359050613eda81615bec565b92915050565b60008083601f840112613ef657613ef5615544565b5b8235905067ffffffffffffffff811115613f1357613f1261553f565b5b602083019150836020820283011115613f2f57613f2e615549565b5b9250929050565b60008083601f840112613f4c57613f4b615544565b5b8235905067ffffffffffffffff811115613f6957613f6861553f565b5b602083019150836020820283011115613f8557613f84615549565b5b9250929050565b600082601f830112613fa157613fa0615544565b5b8151613fb1848260208601613dc2565b91505092915050565b600081359050613fc981615c03565b92915050565b600081359050613fde81615c1a565b92915050565b600081519050613ff381615c1a565b92915050565b600082601f83011261400e5761400d615544565b5b813561401e848260208601613e32565b91505092915050565b600082601f83011261403c5761403b615544565b5b813561404c848260208601613e74565b91505092915050565b60008135905061406481615c31565b92915050565b60008135905061407981615c48565b92915050565b60008151905061408e81615c48565b92915050565b6000813590506140a381615c5f565b92915050565b6000602082840312156140bf576140be615558565b5b60006140cd84828501613eb6565b91505092915050565b6000602082840312156140ec576140eb615558565b5b60006140fa84828501613ecb565b91505092915050565b6000806040838503121561411a57614119615558565b5b600061412885828601613eb6565b925050602061413985828601613eb6565b9150509250929050565b60008060006060848603121561415c5761415b615558565b5b600061416a86828701613eb6565b935050602061417b86828701613eb6565b925050604061418c8682870161406a565b9150509250925092565b600080600080608085870312156141b0576141af615558565b5b60006141be87828801613eb6565b94505060206141cf87828801613eb6565b93505060406141e08782880161406a565b925050606085013567ffffffffffffffff81111561420157614200615553565b5b61420d87828801613ff9565b91505092959194509250565b600080604083850312156142305761422f615558565b5b600061423e85828601613eb6565b925050602061424f85828601613fba565b9150509250929050565b600080604083850312156142705761426f615558565b5b600061427e85828601613eb6565b925050602061428f8582860161406a565b9150509250929050565b6000806000604084860312156142b2576142b1615558565b5b600084013567ffffffffffffffff8111156142d0576142cf615553565b5b6142dc86828701613ee0565b935093505060206142ef86828701614094565b9150509250925092565b60006020828403121561430f5761430e615558565b5b600082015167ffffffffffffffff81111561432d5761432c615553565b5b61433984828501613f8c565b91505092915050565b60006020828403121561435857614357615558565b5b600061436684828501613fba565b91505092915050565b60006020828403121561438557614384615558565b5b600061439384828501613fcf565b91505092915050565b6000602082840312156143b2576143b1615558565b5b60006143c084828501613fe4565b91505092915050565b6000602082840312156143df576143de615558565b5b600082013567ffffffffffffffff8111156143fd576143fc615553565b5b61440984828501614027565b91505092915050565b60006020828403121561442857614427615558565b5b600061443684828501614055565b91505092915050565b60006020828403121561445557614454615558565b5b60006144638482850161406a565b91505092915050565b60006020828403121561448257614481615558565b5b60006144908482850161407f565b91505092915050565b6000602082840312156144af576144ae615558565b5b60006144bd84828501614094565b91505092915050565b6000806000604084860312156144df576144de615558565b5b60006144ed86828701614094565b935050602084013567ffffffffffffffff81111561450e5761450d615553565b5b61451a86828701613f36565b92509250509250925092565b60006145328383614a59565b60208301905092915050565b6145478161521d565b82525050565b6145568161520b565b82525050565b600061456782615014565b6145718185615042565b935061457c83615004565b8060005b838110156145ad5781516145948882614526565b975061459f83615035565b925050600181019050614580565b5085935050505092915050565b6145c38161522f565b82525050565b60006145d48261501f565b6145de8185615053565b93506145ee818560208601615315565b6145f78161555d565b840191505092915050565b61460b816152ac565b82525050565b61461a816152be565b82525050565b600061462b8261502a565b614635818561506f565b9350614645818560208601615315565b61464e8161555d565b840191505092915050565b60006146648261502a565b61466e8185615080565b935061467e818560208601615315565b80840191505092915050565b6000614697600e8361506f565b91506146a28261556e565b602082019050919050565b60006146ba602b8361506f565b91506146c582615597565b604082019050919050565b60006146dd60328361506f565b91506146e8826155e6565b604082019050919050565b600061470060268361506f565b915061470b82615635565b604082019050919050565b6000614723601c8361506f565b915061472e82615684565b602082019050919050565b600061474660248361506f565b9150614751826156ad565b604082019050919050565b600061476960198361506f565b9150614774826156fc565b602082019050919050565b600061478c602c8361506f565b915061479782615725565b604082019050919050565b60006147af60388361506f565b91506147ba82615774565b604082019050919050565b60006147d2602a8361506f565b91506147dd826157c3565b604082019050919050565b60006147f560298361506f565b915061480082615812565b604082019050919050565b600061481860028361506f565b915061482382615861565b602082019050919050565b600061483b601d8361506f565b91506148468261588a565b602082019050919050565b600061485e60138361506f565b9150614869826158b3565b602082019050919050565b600061488160208361506f565b915061488c826158dc565b602082019050919050565b60006148a4602c8361506f565b91506148af82615905565b604082019050919050565b60006148c7600583615080565b91506148d282615954565b600582019050919050565b60006148ea60208361506f565b91506148f58261597d565b602082019050919050565b600061490d60298361506f565b9150614918826159a6565b604082019050919050565b6000614930602f8361506f565b915061493b826159f5565b604082019050919050565b6000614953600f8361506f565b915061495e82615a44565b602082019050919050565b600061497660218361506f565b915061498182615a6d565b604082019050919050565b600061499960228361506f565b91506149a482615abc565b604082019050919050565b60006149bc600083615064565b91506149c782615b0b565b600082019050919050565b60006149df60318361506f565b91506149ea82615b0e565b604082019050919050565b6000614a02602c8361506f565b9150614a0d82615b5d565b604082019050919050565b6000614a2560118361506f565b9150614a3082615bac565b602082019050919050565b614a4481615267565b82525050565b614a53816152f4565b82525050565b614a6281615295565b82525050565b614a7181615295565b82525050565b6000614a838285614659565b9150614a8f8284614659565b9150614a9a826148ba565b91508190509392505050565b6000614ab1826149af565b9150819050919050565b6000602082019050614ad0600083018461454d565b92915050565b6000602082019050614aeb600083018461453e565b92915050565b6000608082019050614b06600083018761454d565b614b13602083018661454d565b614b206040830185614a68565b8181036060830152614b3281846145c9565b905095945050505050565b60006020820190508181036000830152614b57818461455c565b905092915050565b6000602082019050614b7460008301846145ba565b92915050565b6000602082019050614b8f6000830184614602565b92915050565b6000602082019050614baa6000830184614611565b92915050565b60006020820190508181036000830152614bca8184614620565b905092915050565b60006020820190508181036000830152614beb8161468a565b9050919050565b60006020820190508181036000830152614c0b816146ad565b9050919050565b60006020820190508181036000830152614c2b816146d0565b9050919050565b60006020820190508181036000830152614c4b816146f3565b9050919050565b60006020820190508181036000830152614c6b81614716565b9050919050565b60006020820190508181036000830152614c8b81614739565b9050919050565b60006020820190508181036000830152614cab8161475c565b9050919050565b60006020820190508181036000830152614ccb8161477f565b9050919050565b60006020820190508181036000830152614ceb816147a2565b9050919050565b60006020820190508181036000830152614d0b816147c5565b9050919050565b60006020820190508181036000830152614d2b816147e8565b9050919050565b60006020820190508181036000830152614d4b8161480b565b9050919050565b60006020820190508181036000830152614d6b8161482e565b9050919050565b60006020820190508181036000830152614d8b81614851565b9050919050565b60006020820190508181036000830152614dab81614874565b9050919050565b60006020820190508181036000830152614dcb81614897565b9050919050565b60006020820190508181036000830152614deb816148dd565b9050919050565b60006020820190508181036000830152614e0b81614900565b9050919050565b60006020820190508181036000830152614e2b81614923565b9050919050565b60006020820190508181036000830152614e4b81614946565b9050919050565b60006020820190508181036000830152614e6b81614969565b9050919050565b60006020820190508181036000830152614e8b8161498c565b9050919050565b60006020820190508181036000830152614eab816149d2565b9050919050565b60006020820190508181036000830152614ecb816149f5565b9050919050565b60006020820190508181036000830152614eeb81614a18565b9050919050565b6000602082019050614f076000830184614a3b565b92915050565b6000604082019050614f226000830185614a4a565b614f2f602083018461454d565b9392505050565b6000602082019050614f4b6000830184614a68565b92915050565b6000614f5b614f6c565b9050614f67828261537a565b919050565b6000604051905090565b600067ffffffffffffffff821115614f9157614f90615510565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614fbd57614fbc615510565b5b614fc68261555d565b9050602081019050919050565b600067ffffffffffffffff821115614fee57614fed615510565b5b614ff78261555d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061509682615295565b91506150a183615295565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150d6576150d5615425565b5b828201905092915050565b60006150ec8261529f565b91506150f78361529f565b92508260ff0382111561510d5761510c615425565b5b828201905092915050565b600061512382615295565b915061512e83615295565b92508261513e5761513d615454565b5b828204905092915050565b600061515482615295565b915061515f83615295565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561519857615197615425565b5b828202905092915050565b60006151ae82615295565b91506151b983615295565b9250828210156151cc576151cb615425565b5b828203905092915050565b60006151e28261529f565b91506151ed8361529f565b925082821015615200576151ff615425565b5b828203905092915050565b600061521682615275565b9050919050565b600061522882615275565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152b7826152d0565b9050919050565b60006152c9826152d0565b9050919050565b60006152db826152e2565b9050919050565b60006152ed82615275565b9050919050565b60006152ff82615267565b9050919050565b82818337600083830152505050565b60005b83811015615333578082015181840152602081019050615318565b83811115615342576000848401525b50505050565b6000600282049050600182168061536057607f821691505b6020821081141561537457615373615483565b5b50919050565b6153838261555d565b810181811067ffffffffffffffff821117156153a2576153a1615510565b5b80604052505050565b60006153b682615295565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153e9576153e8615425565b5b600182019050919050565b60006153ff82615295565b915061540a83615295565b92508261541a57615419615454565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d61782046656520697320323025000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f000000000000000000000000000000000000000000000000000000000000600082015250565b7f43726f2076616c75652073656e74206973206e6f7420636f7272656374000000600082015250565b7f50726573616c65206e6f74207374617274656400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f50726573616c65206f6e676f696e670000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6368756e6b496e64657820657869737473000000000000000000000000000000600082015250565b615bde8161520b565b8114615be957600080fd5b50565b615bf58161521d565b8114615c0057600080fd5b50565b615c0c8161522f565b8114615c1757600080fd5b50565b615c238161523b565b8114615c2e57600080fd5b50565b615c3a81615267565b8114615c4557600080fd5b50565b615c5181615295565b8114615c5c57600080fd5b50565b615c688161529f565b8114615c7357600080fd5b5056fea26469706673582212202b7a0a7764d438e76afb6841d068b797366acdb7f08b6420da58a0c936b300e264736f6c63430008070033608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610c098061010d6000396000f3fe6080604052600436106100555760003560e01c806351cff8d91461005a578063715018a6146100835780638da5cb5b1461009a578063e3a9db1a146100c5578063f2fde38b14610102578063f340fa011461012b575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c91906107f9565b610147565b005b34801561008f57600080fd5b506100986102c7565b005b3480156100a657600080fd5b506100af61034f565b6040516100bc9190610908565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906107cc565b610378565b6040516100f991906109a3565b60405180910390f35b34801561010e57600080fd5b50610129600480360381019061012491906107cc565b6103c1565b005b610145600480360381019061014091906107cc565b6104b9565b005b61014f6105e2565b73ffffffffffffffffffffffffffffffffffffffff1661016d61034f565b73ffffffffffffffffffffffffffffffffffffffff16146101c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ba90610983565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610275818373ffffffffffffffffffffffffffffffffffffffff166105ea90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516102bb91906109a3565b60405180910390a25050565b6102cf6105e2565b73ffffffffffffffffffffffffffffffffffffffff166102ed61034f565b73ffffffffffffffffffffffffffffffffffffffff1614610343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033a90610983565b60405180910390fd5b61034d60006106de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103c96105e2565b73ffffffffffffffffffffffffffffffffffffffff166103e761034f565b73ffffffffffffffffffffffffffffffffffffffff161461043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043490610983565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156104ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a490610923565b60405180910390fd5b6104b6816106de565b50565b6104c16105e2565b73ffffffffffffffffffffffffffffffffffffffff166104df61034f565b73ffffffffffffffffffffffffffffffffffffffff1614610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052c90610983565b60405180910390fd5b600034905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461058991906109da565b925050819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040516105d691906109a3565b60405180910390a25050565b600033905090565b8047101561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610963565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610653906108f3565b60006040518083038185875af1925050503d8060008114610690576040519150601f19603f3d011682016040523d82523d6000602084013e610695565b606091505b50509050806106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090610943565b60405180910390fd5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000813590506107b181610ba5565b92915050565b6000813590506107c681610bbc565b92915050565b6000602082840312156107e2576107e1610aad565b5b60006107f0848285016107a2565b91505092915050565b60006020828403121561080f5761080e610aad565b5b600061081d848285016107b7565b91505092915050565b61082f81610a30565b82525050565b60006108426026836109c9565b915061084d82610ab2565b604082019050919050565b6000610865603a836109c9565b915061087082610b01565b604082019050919050565b6000610888601d836109c9565b915061089382610b50565b602082019050919050565b60006108ab6020836109c9565b91506108b682610b79565b602082019050919050565b60006108ce6000836109be565b91506108d982610ba2565b600082019050919050565b6108ed81610a74565b82525050565b60006108fe826108c1565b9150819050919050565b600060208201905061091d6000830184610826565b92915050565b6000602082019050818103600083015261093c81610835565b9050919050565b6000602082019050818103600083015261095c81610858565b9050919050565b6000602082019050818103600083015261097c8161087b565b9050919050565b6000602082019050818103600083015261099c8161089e565b9050919050565b60006020820190506109b860008301846108e4565b92915050565b600081905092915050565b600082825260208201905092915050565b60006109e582610a74565b91506109f083610a74565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610a2557610a24610a7e565b5b828201905092915050565b6000610a3b82610a54565b9050919050565b6000610a4d82610a54565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b610bae81610a30565b8114610bb957600080fd5b50565b610bc581610a42565b8114610bd057600080fd5b5056fea2646970667358221220dd5451a5f458bc44b92d9950749f81af88c413a8c9aa50c96a0a422123bac86564736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000943726f736861726b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024353000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6368726f6e6f737761702e6d7970696e6174612e636c6f75642f697066732f516d636867336a4167336d7074353962424864467652696f66366365336478627144486b5377644170634a3437362f00000000000000000000
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80636352211e11610190578063a22cb465116100dc578063c4408c8a11610095578063e2982c211161006f578063e2982c2114610b52578063e985e9c514610b8f578063f12f6d5d14610bcc578063f2fde38b14610bf5576102ff565b8063c4408c8a14610abf578063c87b56dd14610aea578063d5abeb0114610b27576102ff565b8063a22cb465146109c3578063a46c8505146109ec578063ad72d28814610a17578063b6881c7d14610a40578063b88d4fde14610a6b578063c342e17f14610a94576102ff565b8063800a38be116101495780638a17b5f0116101235780638a17b5f0146109195780638da5cb5b14610944578063907c5e191461096f57806395d89b4114610998576102ff565b8063800a38be1461089a5780638295784d146108c557806384c4bd4b146108ee576102ff565b80636352211e146107995780636ecd2306146107d657806370a08231146107f2578063715018a61461082f5780637e23866b146108465780637f00c7a614610871576102ff565b80632f745c591161024f57806344478425116102085780634f6ccce7116101e25780634f6ccce7146106dd57806355f804b31461071a5780635b69368c146107435780635c975abb1461076e576102ff565b8063444784251461065e57806344a0d68a146106895780634a90be57146106b2576102ff565b80632f745c591461055f57806331b3eb941461059c5780633b3c523a146105c55780633ccfd60b146105ee57806342842e0e146105f8578063438b630014610621576102ff565b806313faede6116102bc578063237d21da11610296578063237d21da146104a5578063239c70ae146104ce57806323b872dd146104f95780632acc659e14610522576102ff565b806313faede61461042657806318160ddd146104515780631a85ad671461047c576102ff565b806301ffc9a71461030457806302329a29146103415780630457d16b1461036a57806306fdde0314610395578063081812fc146103c0578063095ea7b3146103fd575b600080fd5b34801561031057600080fd5b5061032b6004803603810190610326919061436f565b610c1e565b6040516103389190614b5f565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190614342565b610c98565b005b34801561037657600080fd5b5061037f610d31565b60405161038c9190614f36565b60405180910390f35b3480156103a157600080fd5b506103aa610d37565b6040516103b79190614bb0565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e2919061443f565b610dc9565b6040516103f49190614abb565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190614259565b610e4e565b005b34801561043257600080fd5b5061043b610f66565b6040516104489190614f36565b60405180910390f35b34801561045d57600080fd5b50610466610f6c565b6040516104739190614f36565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061443f565b610f79565b005b3480156104b157600080fd5b506104cc60048036038101906104c7919061443f565b611043565b005b3480156104da57600080fd5b506104e36110c9565b6040516104f09190614f36565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190614143565b6110cf565b005b34801561052e57600080fd5b50610549600480360381019061054491906140a9565b61112f565b6040516105569190614f36565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614259565b61132d565b6040516105939190614f36565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be91906140d6565b6113d2565b005b3480156105d157600080fd5b506105ec60048036038101906105e791906144c6565b611460565b005b6105f661161d565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614143565b611719565b005b34801561062d57600080fd5b50610648600480360381019061064391906140a9565b611739565b6040516106559190614b3d565b60405180910390f35b34801561066a57600080fd5b506106736117e7565b6040516106809190614abb565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab919061443f565b61180d565b005b3480156106be57600080fd5b506106c7611893565b6040516106d49190614f36565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061443f565b6118a0565b6040516107119190614f36565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906143c9565b611911565b005b34801561074f57600080fd5b506107586119a7565b6040516107659190614f36565b60405180910390f35b34801561077a57600080fd5b506107836119ad565b6040516107909190614b5f565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb919061443f565b6119c0565b6040516107cd9190614abb565b60405180910390f35b6107f060048036038101906107eb9190614499565b611a72565b005b3480156107fe57600080fd5b50610819600480360381019061081491906140a9565b611fb9565b6040516108269190614f36565b60405180910390f35b34801561083b57600080fd5b50610844612071565b005b34801561085257600080fd5b5061085b6120f9565b6040516108689190614b7a565b60405180910390f35b34801561087d57600080fd5b506108986004803603810190610893919061443f565b61211f565b005b3480156108a657600080fd5b506108af6121a5565b6040516108bc9190614f36565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e79190614299565b6121ab565b005b3480156108fa57600080fd5b506109036122cd565b6040516109109190614f36565b60405180910390f35b34801561092557600080fd5b5061092e6122d9565b60405161093b9190614abb565b60405180910390f35b34801561095057600080fd5b506109596122ff565b6040516109669190614abb565b60405180910390f35b34801561097b57600080fd5b506109966004803603810190610991919061443f565b612329565b005b3480156109a457600080fd5b506109ad6123f1565b6040516109ba9190614bb0565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190614219565b612483565b005b3480156109f857600080fd5b50610a01612604565b604051610a0e9190614ef2565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a39919061443f565b612618565b005b348015610a4c57600080fd5b50610a556126e0565b604051610a629190614f36565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190614196565b6126e6565b005b348015610aa057600080fd5b50610aa9612748565b604051610ab69190614f36565b60405180910390f35b348015610acb57600080fd5b50610ad461274e565b604051610ae19190614b95565b60405180910390f35b348015610af657600080fd5b50610b116004803603810190610b0c919061443f565b612774565b604051610b1e9190614bb0565b60405180910390f35b348015610b3357600080fd5b50610b3c61281b565b604051610b499190614f36565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b7491906140a9565b612821565b604051610b869190614f36565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb19190614103565b6128d3565b604051610bc39190614b5f565b60405180910390f35b348015610bd857600080fd5b50610bf36004803603810190610bee919061443f565b612967565b005b348015610c0157600080fd5b50610c1c6004803603810190610c1791906140a9565b6129ed565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c915750610c9082612ae5565b5b9050919050565b610ca0612bc7565b73ffffffffffffffffffffffffffffffffffffffff16610cbe6122ff565b73ffffffffffffffffffffffffffffffffffffffff1614610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90614dd2565b60405180910390fd5b80601660146101000a81548160ff02191690831515021790555050565b60135481565b606060008054610d4690615348565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290615348565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610dd482612bcf565b610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90614db2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e59826119c0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec190614e52565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee9612bc7565b73ffffffffffffffffffffffffffffffffffffffff161480610f185750610f1781610f12612bc7565b6128d3565b5b610f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4e90614cd2565b60405180910390fd5b610f618383612c3b565b505050565b60115481565b6000600880549050905090565b610f81612bc7565b73ffffffffffffffffffffffffffffffffffffffff16610f9f6122ff565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90614dd2565b60405180910390fd5b60c8811115611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090614bd2565b60405180910390fd5b8060178190555050565b61104b612bc7565b73ffffffffffffffffffffffffffffffffffffffff166110696122ff565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690614dd2565b60405180910390fd5b8060128190555050565b60155481565b6110e06110da612bc7565b82612cf4565b61111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614e92565b60405180910390fd5b61112a838383612dd2565b505050565b60008060115490506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016111949190614abb565b60206040518083038186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e4919061446c565b11156111f45760125490506112c6565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a71896dc601860149054906101000a900461ffff16866040518363ffffffff1660e01b8152600401611263929190614f0d565b60006040518083038186803b15801561127b57600080fd5b505afa15801561128f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112b891906142f9565b5111156112c55760125490505b5b6000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1611156113245760135490505b80915050919050565b600061133883611fb9565b8210611379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137090614bf2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b7f000000000000000000000000192a194e9d5c1223b25b217984db4bb0b9140e5273ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161142b9190614ad6565b600060405180830381600087803b15801561144557600080fd5b505af1158015611459573d6000803e3d6000fd5b5050505050565b611468612bc7565b73ffffffffffffffffffffffffffffffffffffffff166114866122ff565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d390614dd2565b60405180910390fd5b8260ff16600d60009054906101000a900460ff1660ff161115611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614ed2565b60405180910390fd5b60008360ff161415611557578181600e9190611551929190613c71565b506115f1565b600082829050905060005b818110156115ee57600e84848381811061157f5761157e6154e1565b5b90506020020160208101906115949190614412565b90806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff16021790555080806115e6906153ab565b915050611562565b50505b6001836115fe91906150e1565b600d60006101000a81548160ff021916908360ff160217905550505050565b611625612bc7565b73ffffffffffffffffffffffffffffffffffffffff166116436122ff565b73ffffffffffffffffffffffffffffffffffffffff1614611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090614dd2565b60405180910390fd5b60006116a36122ff565b73ffffffffffffffffffffffffffffffffffffffff16476040516116c690614aa6565b60006040518083038185875af1925050503d8060008114611703576040519150601f19603f3d011682016040523d82523d6000602084013e611708565b606091505b505090508061171657600080fd5b50565b611734838383604051806020016040528060008152506126e6565b505050565b6060600061174683611fb9565b905060008167ffffffffffffffff81111561176457611763615510565b5b6040519080825280602002602001820160405280156117925781602001602082028036833780820191505090505b50905060005b828110156117dc576117aa858261132d565b8282815181106117bd576117bc6154e1565b5b60200260200101818152505080806117d4906153ab565b915050611798565b508092505050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611815612bc7565b73ffffffffffffffffffffffffffffffffffffffff166118336122ff565b73ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614dd2565b60405180910390fd5b8060118190555050565b6000600e80549050905090565b60006118aa610f6c565b82106118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290614eb2565b60405180910390fd5b600882815481106118ff576118fe6154e1565b5b90600052602060002001549050919050565b611919612bc7565b73ffffffffffffffffffffffffffffffffffffffff166119376122ff565b73ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490614dd2565b60405180910390fd5b80600f90805190602001906119a3929190613d1f565b5050565b60125481565b601660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090614d12565b60405180910390fd5b80915050919050565b6000611a7c610f6c565b90506000611a893361112f565b9050601660149054906101000a900460ff1615611aa557600080fd5b60008360ff1611611ab557600080fd5b6015548360ff161115611ac757600080fd5b6014548360ff1683611ad9919061508b565b1115611ae457600080fd5b611aec6122ff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f3157601a544211611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614d72565b60405180910390fd5b601b54421015611bbd57601354811480611b7d575060125481145b611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614e32565b60405180910390fd5b5b8260ff1681611bcc9190615149565b341015611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590614d52565b60405180910390fd5b60006103e86017548560ff1684611c259190615149565b611c2f9190615149565b611c399190615118565b9050601354821415611dc257601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168460ff161115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614e72565b60405180910390fd5b348460ff16601354611cec9190615149565b1115611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490614d52565b60405180910390fd5b83601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611d8891906151d7565b92506101000a81548160ff021916908360ff1602179055508360ff16601354611db19190615149565b341015611dbd57600080fd5b611ebe565b601154821415611e4157348460ff16601154611dde9190615149565b1115611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690614d52565b60405180910390fd5b8360ff16601154611e309190615149565b341015611e3c57600080fd5b611ebd565b601254821415611ebc57348460ff16601254611e5d9190615149565b1115611e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590614d52565b60405180910390fd5b8360ff16601254611eaf9190615149565b341015611ebb57600080fd5b5b5b5b611f03601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828660ff1685611ef49190615149565b611efe91906151a3565b61302e565b611f2f601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261302e565b505b6000600190505b8360ff168111611fb3576000611f4e600c6130be565b9050611f9533600e8381548110611f6857611f676154e1565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff166130cc565b611f9f600c6130ea565b508080611fab906153ab565b915050611f38565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190614cf2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b612079612bc7565b73ffffffffffffffffffffffffffffffffffffffff166120976122ff565b73ffffffffffffffffffffffffffffffffffffffff16146120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e490614dd2565b60405180910390fd5b6120f76000613100565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612127612bc7565b73ffffffffffffffffffffffffffffffffffffffff166121456122ff565b73ffffffffffffffffffffffffffffffffffffffff161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290614dd2565b60405180910390fd5b8060158190555050565b601b5481565b6121b3612bc7565b73ffffffffffffffffffffffffffffffffffffffff166121d16122ff565b73ffffffffffffffffffffffffffffffffffffffff1614612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614dd2565b60405180910390fd5b60005b838390508110156122c757816019600086868581811061224d5761224c6154e1565b5b905060200201602081019061226291906140a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806122bf906153ab565b91505061222a565b50505050565b600c8060000154905081565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612331612bc7565b73ffffffffffffffffffffffffffffffffffffffff1661234f6122ff565b73ffffffffffffffffffffffffffffffffffffffff16146123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c90614dd2565b60405180910390fd5b8042106123e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123de90614d32565b60405180910390fd5b80601b8190555050565b60606001805461240090615348565b80601f016020809104026020016040519081016040528092919081815260200182805461242c90615348565b80156124795780601f1061244e57610100808354040283529160200191612479565b820191906000526020600020905b81548152906001019060200180831161245c57829003601f168201915b5050505050905090565b61248b612bc7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f090614c92565b60405180910390fd5b8060056000612506612bc7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166125b3612bc7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125f89190614b5f565b60405180910390a35050565b601860149054906101000a900461ffff1681565b612620612bc7565b73ffffffffffffffffffffffffffffffffffffffff1661263e6122ff565b73ffffffffffffffffffffffffffffffffffffffff1614612694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268b90614dd2565b60405180910390fd5b8042106126d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cd90614d32565b60405180910390fd5b80601a8190555050565b60175481565b6126f76126f1612bc7565b83612cf4565b612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272d90614e92565b60405180910390fd5b612742848484846131c6565b50505050565b601a5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061277f82612bcf565b6127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614e12565b60405180910390fd5b60006127c8613222565b905060008151116127e85760405180602001604052806000815250612813565b806127f2846132b4565b604051602001612803929190614a77565b6040516020818303038152906040525b915050919050565b60145481565b60007f000000000000000000000000192a194e9d5c1223b25b217984db4bb0b9140e5273ffffffffffffffffffffffffffffffffffffffff1663e3a9db1a836040518263ffffffff1660e01b815260040161287c9190614abb565b60206040518083038186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc919061446c565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61296f612bc7565b73ffffffffffffffffffffffffffffffffffffffff1661298d6122ff565b73ffffffffffffffffffffffffffffffffffffffff16146129e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129da90614dd2565b60405180910390fd5b8060138190555050565b6129f5612bc7565b73ffffffffffffffffffffffffffffffffffffffff16612a136122ff565b73ffffffffffffffffffffffffffffffffffffffff1614612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614dd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090614c32565b60405180910390fd5b612ae281613100565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612bb057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612bc05750612bbf82613415565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cae836119c0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612cff82612bcf565b612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3590614cb2565b60405180910390fd5b6000612d49836119c0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612db857508373ffffffffffffffffffffffffffffffffffffffff16612da084610dc9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612dc95750612dc881856128d3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612df2826119c0565b73ffffffffffffffffffffffffffffffffffffffff1614612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f90614df2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614c72565b60405180910390fd5b612ec383838361347f565b612ece600082612c3b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f1e91906151a3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f75919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b7f000000000000000000000000192a194e9d5c1223b25b217984db4bb0b9140e5273ffffffffffffffffffffffffffffffffffffffff1663f340fa0182846040518363ffffffff1660e01b81526004016130889190614abb565b6000604051808303818588803b1580156130a157600080fd5b505af11580156130b5573d6000803e3d6000fd5b50505050505050565b600081600001549050919050565b6130e6828260405180602001604052806000815250613593565b5050565b6001816000016000828254019250508190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6131d1848484612dd2565b6131dd848484846135ee565b61321c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321390614c12565b60405180910390fd5b50505050565b6060600f805461323190615348565b80601f016020809104026020016040519081016040528092919081815260200182805461325d90615348565b80156132aa5780601f1061327f576101008083540402835291602001916132aa565b820191906000526020600020905b81548152906001019060200180831161328d57829003601f168201915b5050505050905090565b606060008214156132fc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613410565b600082905060005b6000821461332e578080613317906153ab565b915050600a826133279190615118565b9150613304565b60008167ffffffffffffffff81111561334a57613349615510565b5b6040519080825280601f01601f19166020018201604052801561337c5781602001600182028036833780820191505090505b5090505b600085146134095760018261339591906151a3565b9150600a856133a491906153f4565b60306133b0919061508b565b60f81b8183815181106133c6576133c56154e1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134029190615118565b9450613380565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61348a838383613785565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134cd576134c88161378a565b61350c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461350b5761350a83826137d3565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561354f5761354a81613940565b61358e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461358d5761358c8282613a11565b5b5b505050565b61359d8383613a90565b6135aa60008484846135ee565b6135e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e090614c12565b60405180910390fd5b505050565b600061360f8473ffffffffffffffffffffffffffffffffffffffff16613c5e565b15613778578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613638612bc7565b8786866040518563ffffffff1660e01b815260040161365a9493929190614af1565b602060405180830381600087803b15801561367457600080fd5b505af19250505080156136a557506040513d601f19601f820116820180604052508101906136a2919061439c565b60015b613728573d80600081146136d5576040519150601f19603f3d011682016040523d82523d6000602084013e6136da565b606091505b50600081511415613720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371790614c12565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061377d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016137e084611fb9565b6137ea91906151a3565b90506000600760008481526020019081526020016000205490508181146138cf576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061395491906151a3565b9050600060096000848152602001908152602001600020549050600060088381548110613984576139836154e1565b5b9060005260206000200154905080600883815481106139a6576139a56154e1565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139f5576139f46154b2565b5b6001900381819060005260206000200160009055905550505050565b6000613a1c83611fb9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af790614d92565b60405180910390fd5b613b0981612bcf565b15613b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4090614c52565b60405180910390fd5b613b556000838361347f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ba5919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805482825590600052602060002090600f01601090048101928215613d0e5791602002820160005b83821115613cde57833561ffff1683826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613c9a565b8015613d0c5782816101000a81549061ffff0219169055600201602081600101049283019260010302613cde565b505b509050613d1b9190613da5565b5090565b828054613d2b90615348565b90600052602060002090601f016020900481019282613d4d5760008555613d94565b82601f10613d6657805160ff1916838001178555613d94565b82800160010185558215613d94579182015b82811115613d93578251825591602001919060010190613d78565b5b509050613da19190613da5565b5090565b5b80821115613dbe576000816000905550600101613da6565b5090565b6000613dd5613dd084614f76565b614f51565b90508083825260208201905082856020860282011115613df857613df7615549565b5b60005b85811015613e285781613e0e888261407f565b845260208401935060208301925050600181019050613dfb565b5050509392505050565b6000613e45613e4084614fa2565b614f51565b905082815260208101848484011115613e6157613e6061554e565b5b613e6c848285615306565b509392505050565b6000613e87613e8284614fd3565b614f51565b905082815260208101848484011115613ea357613ea261554e565b5b613eae848285615306565b509392505050565b600081359050613ec581615bd5565b92915050565b600081359050613eda81615bec565b92915050565b60008083601f840112613ef657613ef5615544565b5b8235905067ffffffffffffffff811115613f1357613f1261553f565b5b602083019150836020820283011115613f2f57613f2e615549565b5b9250929050565b60008083601f840112613f4c57613f4b615544565b5b8235905067ffffffffffffffff811115613f6957613f6861553f565b5b602083019150836020820283011115613f8557613f84615549565b5b9250929050565b600082601f830112613fa157613fa0615544565b5b8151613fb1848260208601613dc2565b91505092915050565b600081359050613fc981615c03565b92915050565b600081359050613fde81615c1a565b92915050565b600081519050613ff381615c1a565b92915050565b600082601f83011261400e5761400d615544565b5b813561401e848260208601613e32565b91505092915050565b600082601f83011261403c5761403b615544565b5b813561404c848260208601613e74565b91505092915050565b60008135905061406481615c31565b92915050565b60008135905061407981615c48565b92915050565b60008151905061408e81615c48565b92915050565b6000813590506140a381615c5f565b92915050565b6000602082840312156140bf576140be615558565b5b60006140cd84828501613eb6565b91505092915050565b6000602082840312156140ec576140eb615558565b5b60006140fa84828501613ecb565b91505092915050565b6000806040838503121561411a57614119615558565b5b600061412885828601613eb6565b925050602061413985828601613eb6565b9150509250929050565b60008060006060848603121561415c5761415b615558565b5b600061416a86828701613eb6565b935050602061417b86828701613eb6565b925050604061418c8682870161406a565b9150509250925092565b600080600080608085870312156141b0576141af615558565b5b60006141be87828801613eb6565b94505060206141cf87828801613eb6565b93505060406141e08782880161406a565b925050606085013567ffffffffffffffff81111561420157614200615553565b5b61420d87828801613ff9565b91505092959194509250565b600080604083850312156142305761422f615558565b5b600061423e85828601613eb6565b925050602061424f85828601613fba565b9150509250929050565b600080604083850312156142705761426f615558565b5b600061427e85828601613eb6565b925050602061428f8582860161406a565b9150509250929050565b6000806000604084860312156142b2576142b1615558565b5b600084013567ffffffffffffffff8111156142d0576142cf615553565b5b6142dc86828701613ee0565b935093505060206142ef86828701614094565b9150509250925092565b60006020828403121561430f5761430e615558565b5b600082015167ffffffffffffffff81111561432d5761432c615553565b5b61433984828501613f8c565b91505092915050565b60006020828403121561435857614357615558565b5b600061436684828501613fba565b91505092915050565b60006020828403121561438557614384615558565b5b600061439384828501613fcf565b91505092915050565b6000602082840312156143b2576143b1615558565b5b60006143c084828501613fe4565b91505092915050565b6000602082840312156143df576143de615558565b5b600082013567ffffffffffffffff8111156143fd576143fc615553565b5b61440984828501614027565b91505092915050565b60006020828403121561442857614427615558565b5b600061443684828501614055565b91505092915050565b60006020828403121561445557614454615558565b5b60006144638482850161406a565b91505092915050565b60006020828403121561448257614481615558565b5b60006144908482850161407f565b91505092915050565b6000602082840312156144af576144ae615558565b5b60006144bd84828501614094565b91505092915050565b6000806000604084860312156144df576144de615558565b5b60006144ed86828701614094565b935050602084013567ffffffffffffffff81111561450e5761450d615553565b5b61451a86828701613f36565b92509250509250925092565b60006145328383614a59565b60208301905092915050565b6145478161521d565b82525050565b6145568161520b565b82525050565b600061456782615014565b6145718185615042565b935061457c83615004565b8060005b838110156145ad5781516145948882614526565b975061459f83615035565b925050600181019050614580565b5085935050505092915050565b6145c38161522f565b82525050565b60006145d48261501f565b6145de8185615053565b93506145ee818560208601615315565b6145f78161555d565b840191505092915050565b61460b816152ac565b82525050565b61461a816152be565b82525050565b600061462b8261502a565b614635818561506f565b9350614645818560208601615315565b61464e8161555d565b840191505092915050565b60006146648261502a565b61466e8185615080565b935061467e818560208601615315565b80840191505092915050565b6000614697600e8361506f565b91506146a28261556e565b602082019050919050565b60006146ba602b8361506f565b91506146c582615597565b604082019050919050565b60006146dd60328361506f565b91506146e8826155e6565b604082019050919050565b600061470060268361506f565b915061470b82615635565b604082019050919050565b6000614723601c8361506f565b915061472e82615684565b602082019050919050565b600061474660248361506f565b9150614751826156ad565b604082019050919050565b600061476960198361506f565b9150614774826156fc565b602082019050919050565b600061478c602c8361506f565b915061479782615725565b604082019050919050565b60006147af60388361506f565b91506147ba82615774565b604082019050919050565b60006147d2602a8361506f565b91506147dd826157c3565b604082019050919050565b60006147f560298361506f565b915061480082615812565b604082019050919050565b600061481860028361506f565b915061482382615861565b602082019050919050565b600061483b601d8361506f565b91506148468261588a565b602082019050919050565b600061485e60138361506f565b9150614869826158b3565b602082019050919050565b600061488160208361506f565b915061488c826158dc565b602082019050919050565b60006148a4602c8361506f565b91506148af82615905565b604082019050919050565b60006148c7600583615080565b91506148d282615954565b600582019050919050565b60006148ea60208361506f565b91506148f58261597d565b602082019050919050565b600061490d60298361506f565b9150614918826159a6565b604082019050919050565b6000614930602f8361506f565b915061493b826159f5565b604082019050919050565b6000614953600f8361506f565b915061495e82615a44565b602082019050919050565b600061497660218361506f565b915061498182615a6d565b604082019050919050565b600061499960228361506f565b91506149a482615abc565b604082019050919050565b60006149bc600083615064565b91506149c782615b0b565b600082019050919050565b60006149df60318361506f565b91506149ea82615b0e565b604082019050919050565b6000614a02602c8361506f565b9150614a0d82615b5d565b604082019050919050565b6000614a2560118361506f565b9150614a3082615bac565b602082019050919050565b614a4481615267565b82525050565b614a53816152f4565b82525050565b614a6281615295565b82525050565b614a7181615295565b82525050565b6000614a838285614659565b9150614a8f8284614659565b9150614a9a826148ba565b91508190509392505050565b6000614ab1826149af565b9150819050919050565b6000602082019050614ad0600083018461454d565b92915050565b6000602082019050614aeb600083018461453e565b92915050565b6000608082019050614b06600083018761454d565b614b13602083018661454d565b614b206040830185614a68565b8181036060830152614b3281846145c9565b905095945050505050565b60006020820190508181036000830152614b57818461455c565b905092915050565b6000602082019050614b7460008301846145ba565b92915050565b6000602082019050614b8f6000830184614602565b92915050565b6000602082019050614baa6000830184614611565b92915050565b60006020820190508181036000830152614bca8184614620565b905092915050565b60006020820190508181036000830152614beb8161468a565b9050919050565b60006020820190508181036000830152614c0b816146ad565b9050919050565b60006020820190508181036000830152614c2b816146d0565b9050919050565b60006020820190508181036000830152614c4b816146f3565b9050919050565b60006020820190508181036000830152614c6b81614716565b9050919050565b60006020820190508181036000830152614c8b81614739565b9050919050565b60006020820190508181036000830152614cab8161475c565b9050919050565b60006020820190508181036000830152614ccb8161477f565b9050919050565b60006020820190508181036000830152614ceb816147a2565b9050919050565b60006020820190508181036000830152614d0b816147c5565b9050919050565b60006020820190508181036000830152614d2b816147e8565b9050919050565b60006020820190508181036000830152614d4b8161480b565b9050919050565b60006020820190508181036000830152614d6b8161482e565b9050919050565b60006020820190508181036000830152614d8b81614851565b9050919050565b60006020820190508181036000830152614dab81614874565b9050919050565b60006020820190508181036000830152614dcb81614897565b9050919050565b60006020820190508181036000830152614deb816148dd565b9050919050565b60006020820190508181036000830152614e0b81614900565b9050919050565b60006020820190508181036000830152614e2b81614923565b9050919050565b60006020820190508181036000830152614e4b81614946565b9050919050565b60006020820190508181036000830152614e6b81614969565b9050919050565b60006020820190508181036000830152614e8b8161498c565b9050919050565b60006020820190508181036000830152614eab816149d2565b9050919050565b60006020820190508181036000830152614ecb816149f5565b9050919050565b60006020820190508181036000830152614eeb81614a18565b9050919050565b6000602082019050614f076000830184614a3b565b92915050565b6000604082019050614f226000830185614a4a565b614f2f602083018461454d565b9392505050565b6000602082019050614f4b6000830184614a68565b92915050565b6000614f5b614f6c565b9050614f67828261537a565b919050565b6000604051905090565b600067ffffffffffffffff821115614f9157614f90615510565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614fbd57614fbc615510565b5b614fc68261555d565b9050602081019050919050565b600067ffffffffffffffff821115614fee57614fed615510565b5b614ff78261555d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061509682615295565b91506150a183615295565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150d6576150d5615425565b5b828201905092915050565b60006150ec8261529f565b91506150f78361529f565b92508260ff0382111561510d5761510c615425565b5b828201905092915050565b600061512382615295565b915061512e83615295565b92508261513e5761513d615454565b5b828204905092915050565b600061515482615295565b915061515f83615295565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561519857615197615425565b5b828202905092915050565b60006151ae82615295565b91506151b983615295565b9250828210156151cc576151cb615425565b5b828203905092915050565b60006151e28261529f565b91506151ed8361529f565b925082821015615200576151ff615425565b5b828203905092915050565b600061521682615275565b9050919050565b600061522882615275565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152b7826152d0565b9050919050565b60006152c9826152d0565b9050919050565b60006152db826152e2565b9050919050565b60006152ed82615275565b9050919050565b60006152ff82615267565b9050919050565b82818337600083830152505050565b60005b83811015615333578082015181840152602081019050615318565b83811115615342576000848401525b50505050565b6000600282049050600182168061536057607f821691505b6020821081141561537457615373615483565b5b50919050565b6153838261555d565b810181811067ffffffffffffffff821117156153a2576153a1615510565b5b80604052505050565b60006153b682615295565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153e9576153e8615425565b5b600182019050919050565b60006153ff82615295565b915061540a83615295565b92508261541a57615419615454565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d61782046656520697320323025000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f000000000000000000000000000000000000000000000000000000000000600082015250565b7f43726f2076616c75652073656e74206973206e6f7420636f7272656374000000600082015250565b7f50726573616c65206e6f74207374617274656400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f50726573616c65206f6e676f696e670000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6368756e6b496e64657820657869737473000000000000000000000000000000600082015250565b615bde8161520b565b8114615be957600080fd5b50565b615bf58161521d565b8114615c0057600080fd5b50565b615c0c8161522f565b8114615c1757600080fd5b50565b615c238161523b565b8114615c2e57600080fd5b50565b615c3a81615267565b8114615c4557600080fd5b50565b615c5181615295565b8114615c5c57600080fd5b50565b615c688161529f565b8114615c7357600080fd5b5056fea26469706673582212202b7a0a7764d438e76afb6841d068b797366acdb7f08b6420da58a0c936b300e264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000943726f736861726b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024353000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6368726f6e6f737761702e6d7970696e6174612e636c6f75642f697066732f516d636867336a4167336d7074353962424864467652696f66366365336478627144486b5377644170634a3437362f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Crosharks
Arg [1] : _symbol (string): CS
Arg [2] : _initBaseURI (string): https://chronoswap.mypinata.cloud/ipfs/Qmchg3jAg3mpt59bBHdFvRiof6ce3dxbqDHkSwdApcJ476/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 43726f736861726b730000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4353000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [8] : 68747470733a2f2f6368726f6e6f737761702e6d7970696e6174612e636c6f75
Arg [9] : 642f697066732f516d636867336a4167336d7074353962424864467652696f66
Arg [10] : 366365336478627144486b5377644170634a3437362f00000000000000000000
Deployed ByteCode Sourcemap
49422:6516:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36066:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55702:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49930:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23958:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25517:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25040:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49853:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36706:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54900:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54806:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50002:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26407:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52847:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36374:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48407:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54177:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55782:153;;;:::i;:::-;;26817:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53385:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49775:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54630:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53297:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36896:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55598:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49889:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50136:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23652:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51026:1815;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23382:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43855:94;;;;;;;;;;;;;:::i;:::-;;49490:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55476:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50437:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50668:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49648:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50211:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43204:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55285:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24127:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25810:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50296:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55072:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50167:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27073:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50383:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50040:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53739:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49967:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48637:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26176:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54716:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44104:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36066:224;36168:4;36207:35;36192:50;;;:11;:50;;;;:90;;;;36246:36;36270:11;36246:23;:36::i;:::-;36192:90;36185:97;;36066:224;;;:::o;55702:73::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55763:6:::1;55754;;:15;;;;;;;;;;;;;;;;;;55702:73:::0;:::o;49930:32::-;;;;:::o;23958:100::-;24012:13;24045:5;24038:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23958:100;:::o;25517:221::-;25593:7;25621:16;25629:7;25621;:16::i;:::-;25613:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25706:15;:24;25722:7;25706:24;;;;;;;;;;;;;;;;;;;;;25699:31;;25517:221;;;:::o;25040:411::-;25121:13;25137:23;25152:7;25137:14;:23::i;:::-;25121:39;;25185:5;25179:11;;:2;:11;;;;25171:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25279:5;25263:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25288:37;25305:5;25312:12;:10;:12::i;:::-;25288:16;:37::i;:::-;25263:62;25241:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25422:21;25431:2;25435:7;25422:8;:21::i;:::-;25110:341;25040:411;;:::o;49853:31::-;;;;:::o;36706:113::-;36767:7;36794:10;:17;;;;36787:24;;36706:113;:::o;54900:166::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55001:3:::1;54983:14;:21;;54974:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;55046:14;55030:13;:30;;;;54900:166:::0;:::o;54806:88::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54880:8:::1;54867:10;:21;;;;54806:88:::0;:::o;50002:33::-;;;;:::o;26407:339::-;26602:41;26621:12;:10;:12::i;:::-;26635:7;26602:18;:41::i;:::-;26594:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26710:28;26720:4;26726:2;26730:7;26710:9;:28::i;:::-;26407:339;;;:::o;52847:444::-;52905:7;52924:17;52944:4;;52924:24;;53005:1;52968:14;;;;;;;;;;;:24;;;52993:8;52968:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;52965:211;;;53033:10;;53021:22;;52965:211;;;53125:1;53063:10;;;;;;;;;;;:27;;;53091:13;;;;;;;;;;;53106:8;53063:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;:63;53060:116;;;53154:10;;53142:22;;53060:116;52965:211;53212:1;53189:10;:20;53200:8;53189:20;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;53186:73;;;53241:6;;53229:18;;53186:73;53276:9;53269:16;;;52847:444;;;:::o;36374:256::-;36471:7;36507:23;36524:5;36507:16;:23::i;:::-;36499:5;:31;36491:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36596:12;:19;36609:5;36596:19;;;;;;;;;;;;;;;:26;36616:5;36596:26;;;;;;;;;;;;36589:33;;36374:256;;;;:::o;48407:106::-;48482:7;:16;;;48499:5;48482:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48407:106;:::o;54177:445::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54306:11:::1;54285:32;;:17;;;;;;;;;;;:32;;;;54277:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;54369:1;54354:11;:16;;;54350:221;;;54395:6;;54387:5;:14;;;;;;;:::i;:::-;;54350:221;;;54434:8;54445:6;;:13;;54434:24;;54477:6;54473:87;54493:3;54489:1;:7;54473:87;;;54523:5;54534:6;;54541:1;54534:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54523:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54498:4;;;;;:::i;:::-;;;;54473:87;;;;54419:152;54350:221;54615:1;54601:11;:15;;;;:::i;:::-;54581:17;;:35;;;;;;;;;;;;;;;;;;54177:445:::0;;;:::o;55782:153::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55835:8:::1;55857:7;:5;:7::i;:::-;55849:21;;55878;55849:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55834:70;;;55919:3;55911:12;;;::::0;::::1;;55827:108;55782:153::o:0;26817:185::-;26955:39;26972:4;26978:2;26982:7;26955:39;;;;;;;;;;;;:16;:39::i;:::-;26817:185;;;:::o;53385:348::-;53460:16;53488:23;53514:17;53524:6;53514:9;:17::i;:::-;53488:43;;53538:25;53580:15;53566:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53538:58;;53608:9;53603:103;53623:15;53619:1;:19;53603:103;;;53668:30;53688:6;53696:1;53668:19;:30::i;:::-;53654:8;53663:1;53654:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;53640:3;;;;;:::i;:::-;;;;53603:103;;;;53719:8;53712:15;;;;53385:348;;;:::o;49775:73::-;;;;;;;;;;;;;:::o;54630:80::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54696:8:::1;54689:4;:15;;;;54630:80:::0;:::o;53297:82::-;53337:4;53361:5;:12;;;;53354:19;;53297:82;:::o;36896:233::-;36971:7;37007:30;:28;:30::i;:::-;36999:5;:38;36991:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37104:10;37115:5;37104:17;;;;;;;;:::i;:::-;;;;;;;;;;37097:24;;36896:233;;;:::o;55598:98::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55679:11:::1;55669:7;:21;;;;;;;;;;;;:::i;:::-;;55598:98:::0;:::o;49889:36::-;;;;:::o;50136:26::-;;;;;;;;;;;;;:::o;23652:239::-;23724:7;23744:13;23760:7;:16;23768:7;23760:16;;;;;;;;;;;;;;;;;;;;;23744:32;;23812:1;23795:19;;:5;:19;;;;23787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:5;23871:12;;;23652:239;;;:::o;51026:1815::-;51081:14;51098:13;:11;:13::i;:::-;51081:30;;51118:17;51138:20;51147:10;51138:8;:20::i;:::-;51118:40;;51174:6;;;;;;;;;;;51173:7;51165:16;;;;;;51210:1;51196:11;:15;;;51188:24;;;;;;51242:13;;51227:11;:28;;;;51219:37;;;;;;51295:9;;51280:11;51271:20;;:6;:20;;;;:::i;:::-;:33;;51263:42;;;;;;51336:7;:5;:7::i;:::-;51322:21;;:10;:21;;;51318:1325;;51385:21;;51367:15;:39;51358:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51464:17;;51446:15;:35;51443:141;;;51519:6;;51506:9;:19;:46;;;;51542:10;;51529:9;:23;51506:46;51497:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51443:141;51629:11;51617:23;;:9;:23;;;;:::i;:::-;51604:9;:36;;51596:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51685:17;51751:4;51734:13;;51719:11;51707:23;;:9;:23;;;;:::i;:::-;51706:41;;;;:::i;:::-;51705:50;;;;:::i;:::-;51685:70;;51784:6;;51771:9;:19;51768:735;;;51829:10;:22;51840:10;51829:22;;;;;;;;;;;;;;;;;;;;;;;;;51814:37;;:11;:37;;;;51806:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51937:9;51922:11;51913:20;;:6;;:20;;;;:::i;:::-;:33;;51905:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52021:11;51995:10;:22;52006:10;51995:22;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52077:11;52068:20;;:6;;:20;;;;:::i;:::-;52055:9;:33;;52047:42;;;;;;51768:735;;;52132:4;;52119:9;:17;52116:387;;;52182:9;52167:11;52160:18;;:4;;:18;;;;:::i;:::-;:31;;52152:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52268:11;52261:18;;:4;;:18;;;;:::i;:::-;52248:9;:31;;52240:40;;;;;;52116:387;;;52324:10;;52311:9;:23;52308:195;;;52386:9;52371:11;52358:24;;:10;;:24;;;;:::i;:::-;:37;;52350:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52478:11;52465:24;;:10;;:24;;;;:::i;:::-;52452:9;:37;;52444:46;;;;;;52308:195;52116:387;51768:735;52513:68;52528:13;;;;;;;;;;;52571:9;52556:11;52544:23;;:9;:23;;;;:::i;:::-;52543:37;;;;:::i;:::-;52513:14;:68::i;:::-;52592:43;52607:16;;;;;;;;;;;52625:9;52592:14;:43::i;:::-;51345:1298;51318:1325;52656:9;52668:1;52656:13;;52651:185;52676:11;52671:16;;:1;:16;52651:185;;52703:15;52721:25;:15;:23;:25::i;:::-;52703:43;;52755:37;52765:10;52777:5;52783:7;52777:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52755:37;;:9;:37::i;:::-;52801:27;:15;:25;:27::i;:::-;52694:142;52689:3;;;;;:::i;:::-;;;;52651:185;;;;51074:1767;;51026:1815;:::o;23382:208::-;23454:7;23499:1;23482:19;;:5;:19;;;;23474:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23566:9;:16;23576:5;23566:16;;;;;;;;;;;;;;;;23559:23;;23382:208;;;:::o;43855:94::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43920:21:::1;43938:1;43920:9;:21::i;:::-;43855:94::o:0;49490:83::-;;;;;;;;;;;;;:::o;55476:116::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55569:17:::1;55553:13;:33;;;;55476:116:::0;:::o;50437:45::-;;;;:::o;50668:214::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50775:9:::1;50770:109;50794:9;;:16;;50790:1;:20;50770:109;;;50855:16;50828:10;:24;50839:9;;50849:1;50839:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50828:24;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;50812:3;;;;;:::i;:::-;;;;50770:109;;;;50668:214:::0;;;:::o;49648:39::-;;;;;;;;;:::o;50211:76::-;;;;;;;;;;;;;:::o;43204:87::-;43250:7;43277:6;;;;;;;;;;;43270:13;;43204:87;:::o;55285:185::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55394:18:::1;55376:15;:36;55367:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;55446:18;55426:17;:38;;;;55285:185:::0;:::o;24127:104::-;24183:13;24216:7;24209:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24127:104;:::o;25810:295::-;25925:12;:10;:12::i;:::-;25913:24;;:8;:24;;;;25905:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26025:8;25980:18;:32;25999:12;:10;:12::i;:::-;25980:32;;;;;;;;;;;;;;;:42;26013:8;25980:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26078:8;26049:48;;26064:12;:10;:12::i;:::-;26049:48;;;26088:8;26049:48;;;;;;:::i;:::-;;;;;;;;25810:295;;:::o;50296:31::-;;;;;;;;;;;;;:::o;55072:205::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55189:22:::1;55171:15;:40;55162:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;55249:22;55225:21;:46;;;;55072:205:::0;:::o;50167:33::-;;;;:::o;27073:328::-;27248:41;27267:12;:10;:12::i;:::-;27281:7;27248:18;:41::i;:::-;27240:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:39;27368:4;27374:2;27378:7;27387:5;27354:13;:39::i;:::-;27073:328;;;;:::o;50383:49::-;;;;:::o;50040:91::-;;;;;;;;;;;;;:::o;53739:417::-;53837:13;53878:16;53886:7;53878;:16::i;:::-;53862:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;53968:28;53999:10;:8;:10::i;:::-;53968:41;;54054:1;54029:14;54023:28;:32;:127;;;;;;;;;;;;;;;;;54091:14;54107:18;:7;:16;:18::i;:::-;54074:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54023:127;54016:134;;;53739:417;;;:::o;49967:30::-;;;;:::o;48637:112::-;48690:7;48717;:18;;;48736:4;48717:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48710:31;;48637:112;;;:::o;26176:164::-;26273:4;26297:18;:25;26316:5;26297:25;;;;;;;;;;;;;;;:35;26323:8;26297:35;;;;;;;;;;;;;;;;;;;;;;;;;26290:42;;26176:164;;;;:::o;54716:84::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54786:8:::1;54777:6;:17;;;;54716:84:::0;:::o;44104:192::-;43435:12;:10;:12::i;:::-;43424:23;;:7;:5;:7::i;:::-;:23;;;43416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44213:1:::1;44193:22;;:8;:22;;;;44185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44269:19;44279:8;44269:9;:19::i;:::-;44104:192:::0;:::o;23013:305::-;23115:4;23167:25;23152:40;;;:11;:40;;;;:105;;;;23224:33;23209:48;;;:11;:48;;;;23152:105;:158;;;;23274:36;23298:11;23274:23;:36::i;:::-;23152:158;23132:178;;23013:305;;;:::o;21487:98::-;21540:7;21567:10;21560:17;;21487:98;:::o;28911:127::-;28976:4;29028:1;29000:30;;:7;:16;29008:7;29000:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28993:37;;28911:127;;;:::o;32893:174::-;32995:2;32968:15;:24;32984:7;32968:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33051:7;33047:2;33013:46;;33022:23;33037:7;33022:14;:23::i;:::-;33013:46;;;;;;;;;;;;32893:174;;:::o;29205:348::-;29298:4;29323:16;29331:7;29323;:16::i;:::-;29315:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29399:13;29415:23;29430:7;29415:14;:23::i;:::-;29399:39;;29468:5;29457:16;;:7;:16;;;:51;;;;29501:7;29477:31;;:20;29489:7;29477:11;:20::i;:::-;:31;;;29457:51;:87;;;;29512:32;29529:5;29536:7;29512:16;:32::i;:::-;29457:87;29449:96;;;29205:348;;;;:::o;32197:578::-;32356:4;32329:31;;:23;32344:7;32329:14;:23::i;:::-;:31;;;32321:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32439:1;32425:16;;:2;:16;;;;32417:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32495:39;32516:4;32522:2;32526:7;32495:20;:39::i;:::-;32599:29;32616:1;32620:7;32599:8;:29::i;:::-;32660:1;32641:9;:15;32651:4;32641:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32689:1;32672:9;:13;32682:2;32672:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32720:2;32701:7;:16;32709:7;32701:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32759:7;32755:2;32740:27;;32749:4;32740:27;;;;;;;;;;;;32197:578;;;:::o;49118:126::-;49200:7;:15;;;49223:6;49231:4;49200:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49118:126;;:::o;846:114::-;911:7;938;:14;;;931:21;;846:114;;;:::o;29895:110::-;29971:26;29981:2;29985:7;29971:26;;;;;;;;;;;;:9;:26::i;:::-;29895:110;;:::o;968:127::-;1075:1;1057:7;:14;;;:19;;;;;;;;;;;968:127;:::o;44304:173::-;44360:16;44379:6;;;;;;;;;;;44360:25;;44405:8;44396:6;;:17;;;;;;;;;;;;;;;;;;44460:8;44429:40;;44450:8;44429:40;;;;;;;;;;;;44349:128;44304:173;:::o;28283:315::-;28440:28;28450:4;28456:2;28460:7;28440:9;:28::i;:::-;28487:48;28510:4;28516:2;28520:7;28529:5;28487:22;:48::i;:::-;28479:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28283:315;;;;:::o;50903:102::-;50963:13;50992:7;50985:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50903:102;:::o;9319:723::-;9375:13;9605:1;9596:5;:10;9592:53;;;9623:10;;;;;;;;;;;;;;;;;;;;;9592:53;9655:12;9670:5;9655:20;;9686:14;9711:78;9726:1;9718:4;:9;9711:78;;9744:8;;;;;:::i;:::-;;;;9775:2;9767:10;;;;;:::i;:::-;;;9711:78;;;9799:19;9831:6;9821:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9799:39;;9849:154;9865:1;9856:5;:10;9849:154;;9893:1;9883:11;;;;;:::i;:::-;;;9960:2;9952:5;:10;;;;:::i;:::-;9939:2;:24;;;;:::i;:::-;9926:39;;9909:6;9916;9909:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9989:2;9980:11;;;;;:::i;:::-;;;9849:154;;;10027:6;10013:21;;;;;9319:723;;;;:::o;8844:157::-;8929:4;8968:25;8953:40;;;:11;:40;;;;8946:47;;8844:157;;;:::o;37742:589::-;37886:45;37913:4;37919:2;37923:7;37886:26;:45::i;:::-;37964:1;37948:18;;:4;:18;;;37944:187;;;37983:40;38015:7;37983:31;:40::i;:::-;37944:187;;;38053:2;38045:10;;:4;:10;;;38041:90;;38072:47;38105:4;38111:7;38072:32;:47::i;:::-;38041:90;37944:187;38159:1;38145:16;;:2;:16;;;38141:183;;;38178:45;38215:7;38178:36;:45::i;:::-;38141:183;;;38251:4;38245:10;;:2;:10;;;38241:83;;38272:40;38300:2;38304:7;38272:27;:40::i;:::-;38241:83;38141:183;37742:589;;;:::o;30232:321::-;30362:18;30368:2;30372:7;30362:5;:18::i;:::-;30413:54;30444:1;30448:2;30452:7;30461:5;30413:22;:54::i;:::-;30391:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30232:321;;;:::o;33632:799::-;33787:4;33808:15;:2;:13;;;:15::i;:::-;33804:620;;;33860:2;33844:36;;;33881:12;:10;:12::i;:::-;33895:4;33901:7;33910:5;33844:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33840:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34103:1;34086:6;:13;:18;34082:272;;;34129:60;;;;;;;;;;:::i;:::-;;;;;;;;34082:272;34304:6;34298:13;34289:6;34285:2;34281:15;34274:38;33840:529;33977:41;;;33967:51;;;:6;:51;;;;33960:58;;;;;33804:620;34408:4;34401:11;;33632:799;;;;;;;:::o;35003:126::-;;;;:::o;39054:164::-;39158:10;:17;;;;39131:15;:24;39147:7;39131:24;;;;;;;;;;;:44;;;;39186:10;39202:7;39186:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39054:164;:::o;39845:988::-;40111:22;40161:1;40136:22;40153:4;40136:16;:22::i;:::-;:26;;;;:::i;:::-;40111:51;;40173:18;40194:17;:26;40212:7;40194:26;;;;;;;;;;;;40173:47;;40341:14;40327:10;:28;40323:328;;40372:19;40394:12;:18;40407:4;40394:18;;;;;;;;;;;;;;;:34;40413:14;40394:34;;;;;;;;;;;;40372:56;;40478:11;40445:12;:18;40458:4;40445:18;;;;;;;;;;;;;;;:30;40464:10;40445:30;;;;;;;;;;;:44;;;;40595:10;40562:17;:30;40580:11;40562:30;;;;;;;;;;;:43;;;;40357:294;40323:328;40747:17;:26;40765:7;40747:26;;;;;;;;;;;40740:33;;;40791:12;:18;40804:4;40791:18;;;;;;;;;;;;;;;:34;40810:14;40791:34;;;;;;;;;;;40784:41;;;39926:907;;39845:988;;:::o;41128:1079::-;41381:22;41426:1;41406:10;:17;;;;:21;;;;:::i;:::-;41381:46;;41438:18;41459:15;:24;41475:7;41459:24;;;;;;;;;;;;41438:45;;41810:19;41832:10;41843:14;41832:26;;;;;;;;:::i;:::-;;;;;;;;;;41810:48;;41896:11;41871:10;41882;41871:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42007:10;41976:15;:28;41992:11;41976:28;;;;;;;;;;;:41;;;;42148:15;:24;42164:7;42148:24;;;;;;;;;;;42141:31;;;42183:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41199:1008;;;41128:1079;:::o;38632:221::-;38717:14;38734:20;38751:2;38734:16;:20::i;:::-;38717:37;;38792:7;38765:12;:16;38778:2;38765:16;;;;;;;;;;;;;;;:24;38782:6;38765:24;;;;;;;;;;;:34;;;;38839:6;38810:17;:26;38828:7;38810:26;;;;;;;;;;;:35;;;;38706:147;38632:221;;:::o;30889:382::-;30983:1;30969:16;;:2;:16;;;;30961:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31042:16;31050:7;31042;:16::i;:::-;31041:17;31033:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31104:45;31133:1;31137:2;31141:7;31104:20;:45::i;:::-;31179:1;31162:9;:13;31172:2;31162:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31210:2;31191:7;:16;31199:7;31191:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31255:7;31251:2;31230:33;;31247:1;31230:33;;;;;;;;;;;;30889:382;;:::o;11844:387::-;11904:4;12112:12;12179:7;12167:20;12159:28;;12222:1;12215:4;:8;12208:15;;;11844:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:112;;;1047:79;;:::i;:::-;1016:112;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;774:410;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:112;;;1465:79;;:::i;:::-;1434:112;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;1190:412;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1608:139;;;;:::o;1753:155::-;1807:5;1845:6;1832:20;1823:29;;1861:41;1896:5;1861:41;:::i;:::-;1753:155;;;;:::o;1931:568::-;2004:8;2014:6;2064:3;2057:4;2049:6;2045:17;2041:27;2031:122;;2072:79;;:::i;:::-;2031:122;2185:6;2172:20;2162:30;;2215:18;2207:6;2204:30;2201:117;;;2237:79;;:::i;:::-;2201:117;2351:4;2343:6;2339:17;2327:29;;2405:3;2397:4;2389:6;2385:17;2375:8;2371:32;2368:41;2365:128;;;2412:79;;:::i;:::-;2365:128;1931:568;;;;;:::o;2521:567::-;2593:8;2603:6;2653:3;2646:4;2638:6;2634:17;2630:27;2620:122;;2661:79;;:::i;:::-;2620:122;2774:6;2761:20;2751:30;;2804:18;2796:6;2793:30;2790:117;;;2826:79;;:::i;:::-;2790:117;2940:4;2932:6;2928:17;2916:29;;2994:3;2986:4;2978:6;2974:17;2964:8;2960:32;2957:41;2954:128;;;3001:79;;:::i;:::-;2954:128;2521:567;;;;;:::o;3111:385::-;3193:5;3242:3;3235:4;3227:6;3223:17;3219:27;3209:122;;3250:79;;:::i;:::-;3209:122;3360:6;3354:13;3385:105;3486:3;3478:6;3471:4;3463:6;3459:17;3385:105;:::i;:::-;3376:114;;3199:297;3111:385;;;;:::o;3502:133::-;3545:5;3583:6;3570:20;3561:29;;3599:30;3623:5;3599:30;:::i;:::-;3502:133;;;;:::o;3641:137::-;3686:5;3724:6;3711:20;3702:29;;3740:32;3766:5;3740:32;:::i;:::-;3641:137;;;;:::o;3784:141::-;3840:5;3871:6;3865:13;3856:22;;3887:32;3913:5;3887:32;:::i;:::-;3784:141;;;;:::o;3944:338::-;3999:5;4048:3;4041:4;4033:6;4029:17;4025:27;4015:122;;4056:79;;:::i;:::-;4015:122;4173:6;4160:20;4198:78;4272:3;4264:6;4257:4;4249:6;4245:17;4198:78;:::i;:::-;4189:87;;4005:277;3944:338;;;;:::o;4302:340::-;4358:5;4407:3;4400:4;4392:6;4388:17;4384:27;4374:122;;4415:79;;:::i;:::-;4374:122;4532:6;4519:20;4557:79;4632:3;4624:6;4617:4;4609:6;4605:17;4557:79;:::i;:::-;4548:88;;4364:278;4302:340;;;;:::o;4648:137::-;4693:5;4731:6;4718:20;4709:29;;4747:32;4773:5;4747:32;:::i;:::-;4648:137;;;;:::o;4791:139::-;4837:5;4875:6;4862:20;4853:29;;4891:33;4918:5;4891:33;:::i;:::-;4791:139;;;;:::o;4936:143::-;4993:5;5024:6;5018:13;5009:22;;5040:33;5067:5;5040:33;:::i;:::-;4936:143;;;;:::o;5085:135::-;5129:5;5167:6;5154:20;5145:29;;5183:31;5208:5;5183:31;:::i;:::-;5085:135;;;;:::o;5226:329::-;5285:6;5334:2;5322:9;5313:7;5309:23;5305:32;5302:119;;;5340:79;;:::i;:::-;5302:119;5460:1;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5431:117;5226:329;;;;:::o;5561:345::-;5628:6;5677:2;5665:9;5656:7;5652:23;5648:32;5645:119;;;5683:79;;:::i;:::-;5645:119;5803:1;5828:61;5881:7;5872:6;5861:9;5857:22;5828:61;:::i;:::-;5818:71;;5774:125;5561:345;;;;:::o;5912:474::-;5980:6;5988;6037:2;6025:9;6016:7;6012:23;6008:32;6005:119;;;6043:79;;:::i;:::-;6005:119;6163:1;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6134:117;6290:2;6316:53;6361:7;6352:6;6341:9;6337:22;6316:53;:::i;:::-;6306:63;;6261:118;5912:474;;;;;:::o;6392:619::-;6469:6;6477;6485;6534:2;6522:9;6513:7;6509:23;6505:32;6502:119;;;6540:79;;:::i;:::-;6502:119;6660:1;6685:53;6730:7;6721:6;6710:9;6706:22;6685:53;:::i;:::-;6675:63;;6631:117;6787:2;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6758:118;6915:2;6941:53;6986:7;6977:6;6966:9;6962:22;6941:53;:::i;:::-;6931:63;;6886:118;6392:619;;;;;:::o;7017:943::-;7112:6;7120;7128;7136;7185:3;7173:9;7164:7;7160:23;7156:33;7153:120;;;7192:79;;:::i;:::-;7153:120;7312:1;7337:53;7382:7;7373:6;7362:9;7358:22;7337:53;:::i;:::-;7327:63;;7283:117;7439:2;7465:53;7510:7;7501:6;7490:9;7486:22;7465:53;:::i;:::-;7455:63;;7410:118;7567:2;7593:53;7638:7;7629:6;7618:9;7614:22;7593:53;:::i;:::-;7583:63;;7538:118;7723:2;7712:9;7708:18;7695:32;7754:18;7746:6;7743:30;7740:117;;;7776:79;;:::i;:::-;7740:117;7881:62;7935:7;7926:6;7915:9;7911:22;7881:62;:::i;:::-;7871:72;;7666:287;7017:943;;;;;;;:::o;7966:468::-;8031:6;8039;8088:2;8076:9;8067:7;8063:23;8059:32;8056:119;;;8094:79;;:::i;:::-;8056:119;8214:1;8239:53;8284:7;8275:6;8264:9;8260:22;8239:53;:::i;:::-;8229:63;;8185:117;8341:2;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8312:115;7966:468;;;;;:::o;8440:474::-;8508:6;8516;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8818:2;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8789:118;8440:474;;;;;:::o;8920:700::-;9013:6;9021;9029;9078:2;9066:9;9057:7;9053:23;9049:32;9046:119;;;9084:79;;:::i;:::-;9046:119;9232:1;9221:9;9217:17;9204:31;9262:18;9254:6;9251:30;9248:117;;;9284:79;;:::i;:::-;9248:117;9397:80;9469:7;9460:6;9449:9;9445:22;9397:80;:::i;:::-;9379:98;;;;9175:312;9526:2;9552:51;9595:7;9586:6;9575:9;9571:22;9552:51;:::i;:::-;9542:61;;9497:116;8920:700;;;;;:::o;9626:554::-;9721:6;9770:2;9758:9;9749:7;9745:23;9741:32;9738:119;;;9776:79;;:::i;:::-;9738:119;9917:1;9906:9;9902:17;9896:24;9947:18;9939:6;9936:30;9933:117;;;9969:79;;:::i;:::-;9933:117;10074:89;10155:7;10146:6;10135:9;10131:22;10074:89;:::i;:::-;10064:99;;9867:306;9626:554;;;;:::o;10186:323::-;10242:6;10291:2;10279:9;10270:7;10266:23;10262:32;10259:119;;;10297:79;;:::i;:::-;10259:119;10417:1;10442:50;10484:7;10475:6;10464:9;10460:22;10442:50;:::i;:::-;10432:60;;10388:114;10186:323;;;;:::o;10515:327::-;10573:6;10622:2;10610:9;10601:7;10597:23;10593:32;10590:119;;;10628:79;;:::i;:::-;10590:119;10748:1;10773:52;10817:7;10808:6;10797:9;10793:22;10773:52;:::i;:::-;10763:62;;10719:116;10515:327;;;;:::o;10848:349::-;10917:6;10966:2;10954:9;10945:7;10941:23;10937:32;10934:119;;;10972:79;;:::i;:::-;10934:119;11092:1;11117:63;11172:7;11163:6;11152:9;11148:22;11117:63;:::i;:::-;11107:73;;11063:127;10848:349;;;;:::o;11203:509::-;11272:6;11321:2;11309:9;11300:7;11296:23;11292:32;11289:119;;;11327:79;;:::i;:::-;11289:119;11475:1;11464:9;11460:17;11447:31;11505:18;11497:6;11494:30;11491:117;;;11527:79;;:::i;:::-;11491:117;11632:63;11687:7;11678:6;11667:9;11663:22;11632:63;:::i;:::-;11622:73;;11418:287;11203:509;;;;:::o;11718:327::-;11776:6;11825:2;11813:9;11804:7;11800:23;11796:32;11793:119;;;11831:79;;:::i;:::-;11793:119;11951:1;11976:52;12020:7;12011:6;12000:9;11996:22;11976:52;:::i;:::-;11966:62;;11922:116;11718:327;;;;:::o;12051:329::-;12110:6;12159:2;12147:9;12138:7;12134:23;12130:32;12127:119;;;12165:79;;:::i;:::-;12127:119;12285:1;12310:53;12355:7;12346:6;12335:9;12331:22;12310:53;:::i;:::-;12300:63;;12256:117;12051:329;;;;:::o;12386:351::-;12456:6;12505:2;12493:9;12484:7;12480:23;12476:32;12473:119;;;12511:79;;:::i;:::-;12473:119;12631:1;12656:64;12712:7;12703:6;12692:9;12688:22;12656:64;:::i;:::-;12646:74;;12602:128;12386:351;;;;:::o;12743:325::-;12800:6;12849:2;12837:9;12828:7;12824:23;12820:32;12817:119;;;12855:79;;:::i;:::-;12817:119;12975:1;13000:51;13043:7;13034:6;13023:9;13019:22;13000:51;:::i;:::-;12990:61;;12946:115;12743:325;;;;:::o;13074:698::-;13166:6;13174;13182;13231:2;13219:9;13210:7;13206:23;13202:32;13199:119;;;13237:79;;:::i;:::-;13199:119;13357:1;13382:51;13425:7;13416:6;13405:9;13401:22;13382:51;:::i;:::-;13372:61;;13328:115;13510:2;13499:9;13495:18;13482:32;13541:18;13533:6;13530:30;13527:117;;;13563:79;;:::i;:::-;13527:117;13676:79;13747:7;13738:6;13727:9;13723:22;13676:79;:::i;:::-;13658:97;;;;13453:312;13074:698;;;;;:::o;13778:179::-;13847:10;13868:46;13910:3;13902:6;13868:46;:::i;:::-;13946:4;13941:3;13937:14;13923:28;;13778:179;;;;:::o;13963:142::-;14066:32;14092:5;14066:32;:::i;:::-;14061:3;14054:45;13963:142;;:::o;14111:118::-;14198:24;14216:5;14198:24;:::i;:::-;14193:3;14186:37;14111:118;;:::o;14265:732::-;14384:3;14413:54;14461:5;14413:54;:::i;:::-;14483:86;14562:6;14557:3;14483:86;:::i;:::-;14476:93;;14593:56;14643:5;14593:56;:::i;:::-;14672:7;14703:1;14688:284;14713:6;14710:1;14707:13;14688:284;;;14789:6;14783:13;14816:63;14875:3;14860:13;14816:63;:::i;:::-;14809:70;;14902:60;14955:6;14902:60;:::i;:::-;14892:70;;14748:224;14735:1;14732;14728:9;14723:14;;14688:284;;;14692:14;14988:3;14981:10;;14389:608;;;14265:732;;;;:::o;15003:109::-;15084:21;15099:5;15084:21;:::i;:::-;15079:3;15072:34;15003:109;;:::o;15118:360::-;15204:3;15232:38;15264:5;15232:38;:::i;:::-;15286:70;15349:6;15344:3;15286:70;:::i;:::-;15279:77;;15365:52;15410:6;15405:3;15398:4;15391:5;15387:16;15365:52;:::i;:::-;15442:29;15464:6;15442:29;:::i;:::-;15437:3;15433:39;15426:46;;15208:270;15118:360;;;;:::o;15484:161::-;15586:52;15632:5;15586:52;:::i;:::-;15581:3;15574:65;15484:161;;:::o;15651:175::-;15760:59;15813:5;15760:59;:::i;:::-;15755:3;15748:72;15651:175;;:::o;15832:364::-;15920:3;15948:39;15981:5;15948:39;:::i;:::-;16003:71;16067:6;16062:3;16003:71;:::i;:::-;15996:78;;16083:52;16128:6;16123:3;16116:4;16109:5;16105:16;16083:52;:::i;:::-;16160:29;16182:6;16160:29;:::i;:::-;16155:3;16151:39;16144:46;;15924:272;15832:364;;;;:::o;16202:377::-;16308:3;16336:39;16369:5;16336:39;:::i;:::-;16391:89;16473:6;16468:3;16391:89;:::i;:::-;16384:96;;16489:52;16534:6;16529:3;16522:4;16515:5;16511:16;16489:52;:::i;:::-;16566:6;16561:3;16557:16;16550:23;;16312:267;16202:377;;;;:::o;16585:366::-;16727:3;16748:67;16812:2;16807:3;16748:67;:::i;:::-;16741:74;;16824:93;16913:3;16824:93;:::i;:::-;16942:2;16937:3;16933:12;16926:19;;16585:366;;;:::o;16957:::-;17099:3;17120:67;17184:2;17179:3;17120:67;:::i;:::-;17113:74;;17196:93;17285:3;17196:93;:::i;:::-;17314:2;17309:3;17305:12;17298:19;;16957:366;;;:::o;17329:::-;17471:3;17492:67;17556:2;17551:3;17492:67;:::i;:::-;17485:74;;17568:93;17657:3;17568:93;:::i;:::-;17686:2;17681:3;17677:12;17670:19;;17329:366;;;:::o;17701:::-;17843:3;17864:67;17928:2;17923:3;17864:67;:::i;:::-;17857:74;;17940:93;18029:3;17940:93;:::i;:::-;18058:2;18053:3;18049:12;18042:19;;17701:366;;;:::o;18073:::-;18215:3;18236:67;18300:2;18295:3;18236:67;:::i;:::-;18229:74;;18312:93;18401:3;18312:93;:::i;:::-;18430:2;18425:3;18421:12;18414:19;;18073:366;;;:::o;18445:::-;18587:3;18608:67;18672:2;18667:3;18608:67;:::i;:::-;18601:74;;18684:93;18773:3;18684:93;:::i;:::-;18802:2;18797:3;18793:12;18786:19;;18445:366;;;:::o;18817:::-;18959:3;18980:67;19044:2;19039:3;18980:67;:::i;:::-;18973:74;;19056:93;19145:3;19056:93;:::i;:::-;19174:2;19169:3;19165:12;19158:19;;18817:366;;;:::o;19189:::-;19331:3;19352:67;19416:2;19411:3;19352:67;:::i;:::-;19345:74;;19428:93;19517:3;19428:93;:::i;:::-;19546:2;19541:3;19537:12;19530:19;;19189:366;;;:::o;19561:::-;19703:3;19724:67;19788:2;19783:3;19724:67;:::i;:::-;19717:74;;19800:93;19889:3;19800:93;:::i;:::-;19918:2;19913:3;19909:12;19902:19;;19561:366;;;:::o;19933:::-;20075:3;20096:67;20160:2;20155:3;20096:67;:::i;:::-;20089:74;;20172:93;20261:3;20172:93;:::i;:::-;20290:2;20285:3;20281:12;20274:19;;19933:366;;;:::o;20305:::-;20447:3;20468:67;20532:2;20527:3;20468:67;:::i;:::-;20461:74;;20544:93;20633:3;20544:93;:::i;:::-;20662:2;20657:3;20653:12;20646:19;;20305:366;;;:::o;20677:365::-;20819:3;20840:66;20904:1;20899:3;20840:66;:::i;:::-;20833:73;;20915:93;21004:3;20915:93;:::i;:::-;21033:2;21028:3;21024:12;21017:19;;20677:365;;;:::o;21048:366::-;21190:3;21211:67;21275:2;21270:3;21211:67;:::i;:::-;21204:74;;21287:93;21376:3;21287:93;:::i;:::-;21405:2;21400:3;21396:12;21389:19;;21048:366;;;:::o;21420:::-;21562:3;21583:67;21647:2;21642:3;21583:67;:::i;:::-;21576:74;;21659:93;21748:3;21659:93;:::i;:::-;21777:2;21772:3;21768:12;21761:19;;21420:366;;;:::o;21792:::-;21934:3;21955:67;22019:2;22014:3;21955:67;:::i;:::-;21948:74;;22031:93;22120:3;22031:93;:::i;:::-;22149:2;22144:3;22140:12;22133:19;;21792:366;;;:::o;22164:::-;22306:3;22327:67;22391:2;22386:3;22327:67;:::i;:::-;22320:74;;22403:93;22492:3;22403:93;:::i;:::-;22521:2;22516:3;22512:12;22505:19;;22164:366;;;:::o;22536:400::-;22696:3;22717:84;22799:1;22794:3;22717:84;:::i;:::-;22710:91;;22810:93;22899:3;22810:93;:::i;:::-;22928:1;22923:3;22919:11;22912:18;;22536:400;;;:::o;22942:366::-;23084:3;23105:67;23169:2;23164:3;23105:67;:::i;:::-;23098:74;;23181:93;23270:3;23181:93;:::i;:::-;23299:2;23294:3;23290:12;23283:19;;22942:366;;;:::o;23314:::-;23456:3;23477:67;23541:2;23536:3;23477:67;:::i;:::-;23470:74;;23553:93;23642:3;23553:93;:::i;:::-;23671:2;23666:3;23662:12;23655:19;;23314:366;;;:::o;23686:::-;23828:3;23849:67;23913:2;23908:3;23849:67;:::i;:::-;23842:74;;23925:93;24014:3;23925:93;:::i;:::-;24043:2;24038:3;24034:12;24027:19;;23686:366;;;:::o;24058:::-;24200:3;24221:67;24285:2;24280:3;24221:67;:::i;:::-;24214:74;;24297:93;24386:3;24297:93;:::i;:::-;24415:2;24410:3;24406:12;24399:19;;24058:366;;;:::o;24430:::-;24572:3;24593:67;24657:2;24652:3;24593:67;:::i;:::-;24586:74;;24669:93;24758:3;24669:93;:::i;:::-;24787:2;24782:3;24778:12;24771:19;;24430:366;;;:::o;24802:::-;24944:3;24965:67;25029:2;25024:3;24965:67;:::i;:::-;24958:74;;25041:93;25130:3;25041:93;:::i;:::-;25159:2;25154:3;25150:12;25143:19;;24802:366;;;:::o;25174:398::-;25333:3;25354:83;25435:1;25430:3;25354:83;:::i;:::-;25347:90;;25446:93;25535:3;25446:93;:::i;:::-;25564:1;25559:3;25555:11;25548:18;;25174:398;;;:::o;25578:366::-;25720:3;25741:67;25805:2;25800:3;25741:67;:::i;:::-;25734:74;;25817:93;25906:3;25817:93;:::i;:::-;25935:2;25930:3;25926:12;25919:19;;25578:366;;;:::o;25950:::-;26092:3;26113:67;26177:2;26172:3;26113:67;:::i;:::-;26106:74;;26189:93;26278:3;26189:93;:::i;:::-;26307:2;26302:3;26298:12;26291:19;;25950:366;;;:::o;26322:::-;26464:3;26485:67;26549:2;26544:3;26485:67;:::i;:::-;26478:74;;26561:93;26650:3;26561:93;:::i;:::-;26679:2;26674:3;26670:12;26663:19;;26322:366;;;:::o;26694:115::-;26779:23;26796:5;26779:23;:::i;:::-;26774:3;26767:36;26694:115;;:::o;26815:129::-;26901:36;26931:5;26901:36;:::i;:::-;26896:3;26889:49;26815:129;;:::o;26950:108::-;27027:24;27045:5;27027:24;:::i;:::-;27022:3;27015:37;26950:108;;:::o;27064:118::-;27151:24;27169:5;27151:24;:::i;:::-;27146:3;27139:37;27064:118;;:::o;27188:701::-;27469:3;27491:95;27582:3;27573:6;27491:95;:::i;:::-;27484:102;;27603:95;27694:3;27685:6;27603:95;:::i;:::-;27596:102;;27715:148;27859:3;27715:148;:::i;:::-;27708:155;;27880:3;27873:10;;27188:701;;;;;:::o;27895:379::-;28079:3;28101:147;28244:3;28101:147;:::i;:::-;28094:154;;28265:3;28258:10;;27895:379;;;:::o;28280:222::-;28373:4;28411:2;28400:9;28396:18;28388:26;;28424:71;28492:1;28481:9;28477:17;28468:6;28424:71;:::i;:::-;28280:222;;;;:::o;28508:254::-;28617:4;28655:2;28644:9;28640:18;28632:26;;28668:87;28752:1;28741:9;28737:17;28728:6;28668:87;:::i;:::-;28508:254;;;;:::o;28768:640::-;28963:4;29001:3;28990:9;28986:19;28978:27;;29015:71;29083:1;29072:9;29068:17;29059:6;29015:71;:::i;:::-;29096:72;29164:2;29153:9;29149:18;29140:6;29096:72;:::i;:::-;29178;29246:2;29235:9;29231:18;29222:6;29178:72;:::i;:::-;29297:9;29291:4;29287:20;29282:2;29271:9;29267:18;29260:48;29325:76;29396:4;29387:6;29325:76;:::i;:::-;29317:84;;28768:640;;;;;;;:::o;29414:373::-;29557:4;29595:2;29584:9;29580:18;29572:26;;29644:9;29638:4;29634:20;29630:1;29619:9;29615:17;29608:47;29672:108;29775:4;29766:6;29672:108;:::i;:::-;29664:116;;29414:373;;;;:::o;29793:210::-;29880:4;29918:2;29907:9;29903:18;29895:26;;29931:65;29993:1;29982:9;29978:17;29969:6;29931:65;:::i;:::-;29793:210;;;;:::o;30009:252::-;30117:4;30155:2;30144:9;30140:18;30132:26;;30168:86;30251:1;30240:9;30236:17;30227:6;30168:86;:::i;:::-;30009:252;;;;:::o;30267:266::-;30382:4;30420:2;30409:9;30405:18;30397:26;;30433:93;30523:1;30512:9;30508:17;30499:6;30433:93;:::i;:::-;30267:266;;;;:::o;30539:313::-;30652:4;30690:2;30679:9;30675:18;30667:26;;30739:9;30733:4;30729:20;30725:1;30714:9;30710:17;30703:47;30767:78;30840:4;30831:6;30767:78;:::i;:::-;30759:86;;30539:313;;;;:::o;30858:419::-;31024:4;31062:2;31051:9;31047:18;31039:26;;31111:9;31105:4;31101:20;31097:1;31086:9;31082:17;31075:47;31139:131;31265:4;31139:131;:::i;:::-;31131:139;;30858:419;;;:::o;31283:::-;31449:4;31487:2;31476:9;31472:18;31464:26;;31536:9;31530:4;31526:20;31522:1;31511:9;31507:17;31500:47;31564:131;31690:4;31564:131;:::i;:::-;31556:139;;31283:419;;;:::o;31708:::-;31874:4;31912:2;31901:9;31897:18;31889:26;;31961:9;31955:4;31951:20;31947:1;31936:9;31932:17;31925:47;31989:131;32115:4;31989:131;:::i;:::-;31981:139;;31708:419;;;:::o;32133:::-;32299:4;32337:2;32326:9;32322:18;32314:26;;32386:9;32380:4;32376:20;32372:1;32361:9;32357:17;32350:47;32414:131;32540:4;32414:131;:::i;:::-;32406:139;;32133:419;;;:::o;32558:::-;32724:4;32762:2;32751:9;32747:18;32739:26;;32811:9;32805:4;32801:20;32797:1;32786:9;32782:17;32775:47;32839:131;32965:4;32839:131;:::i;:::-;32831:139;;32558:419;;;:::o;32983:::-;33149:4;33187:2;33176:9;33172:18;33164:26;;33236:9;33230:4;33226:20;33222:1;33211:9;33207:17;33200:47;33264:131;33390:4;33264:131;:::i;:::-;33256:139;;32983:419;;;:::o;33408:::-;33574:4;33612:2;33601:9;33597:18;33589:26;;33661:9;33655:4;33651:20;33647:1;33636:9;33632:17;33625:47;33689:131;33815:4;33689:131;:::i;:::-;33681:139;;33408:419;;;:::o;33833:::-;33999:4;34037:2;34026:9;34022:18;34014:26;;34086:9;34080:4;34076:20;34072:1;34061:9;34057:17;34050:47;34114:131;34240:4;34114:131;:::i;:::-;34106:139;;33833:419;;;:::o;34258:::-;34424:4;34462:2;34451:9;34447:18;34439:26;;34511:9;34505:4;34501:20;34497:1;34486:9;34482:17;34475:47;34539:131;34665:4;34539:131;:::i;:::-;34531:139;;34258:419;;;:::o;34683:::-;34849:4;34887:2;34876:9;34872:18;34864:26;;34936:9;34930:4;34926:20;34922:1;34911:9;34907:17;34900:47;34964:131;35090:4;34964:131;:::i;:::-;34956:139;;34683:419;;;:::o;35108:::-;35274:4;35312:2;35301:9;35297:18;35289:26;;35361:9;35355:4;35351:20;35347:1;35336:9;35332:17;35325:47;35389:131;35515:4;35389:131;:::i;:::-;35381:139;;35108:419;;;:::o;35533:::-;35699:4;35737:2;35726:9;35722:18;35714:26;;35786:9;35780:4;35776:20;35772:1;35761:9;35757:17;35750:47;35814:131;35940:4;35814:131;:::i;:::-;35806:139;;35533:419;;;:::o;35958:::-;36124:4;36162:2;36151:9;36147:18;36139:26;;36211:9;36205:4;36201:20;36197:1;36186:9;36182:17;36175:47;36239:131;36365:4;36239:131;:::i;:::-;36231:139;;35958:419;;;:::o;36383:::-;36549:4;36587:2;36576:9;36572:18;36564:26;;36636:9;36630:4;36626:20;36622:1;36611:9;36607:17;36600:47;36664:131;36790:4;36664:131;:::i;:::-;36656:139;;36383:419;;;:::o;36808:::-;36974:4;37012:2;37001:9;36997:18;36989:26;;37061:9;37055:4;37051:20;37047:1;37036:9;37032:17;37025:47;37089:131;37215:4;37089:131;:::i;:::-;37081:139;;36808:419;;;:::o;37233:::-;37399:4;37437:2;37426:9;37422:18;37414:26;;37486:9;37480:4;37476:20;37472:1;37461:9;37457:17;37450:47;37514:131;37640:4;37514:131;:::i;:::-;37506:139;;37233:419;;;:::o;37658:::-;37824:4;37862:2;37851:9;37847:18;37839:26;;37911:9;37905:4;37901:20;37897:1;37886:9;37882:17;37875:47;37939:131;38065:4;37939:131;:::i;:::-;37931:139;;37658:419;;;:::o;38083:::-;38249:4;38287:2;38276:9;38272:18;38264:26;;38336:9;38330:4;38326:20;38322:1;38311:9;38307:17;38300:47;38364:131;38490:4;38364:131;:::i;:::-;38356:139;;38083:419;;;:::o;38508:::-;38674:4;38712:2;38701:9;38697:18;38689:26;;38761:9;38755:4;38751:20;38747:1;38736:9;38732:17;38725:47;38789:131;38915:4;38789:131;:::i;:::-;38781:139;;38508:419;;;:::o;38933:::-;39099:4;39137:2;39126:9;39122:18;39114:26;;39186:9;39180:4;39176:20;39172:1;39161:9;39157:17;39150:47;39214:131;39340:4;39214:131;:::i;:::-;39206:139;;38933:419;;;:::o;39358:::-;39524:4;39562:2;39551:9;39547:18;39539:26;;39611:9;39605:4;39601:20;39597:1;39586:9;39582:17;39575:47;39639:131;39765:4;39639:131;:::i;:::-;39631:139;;39358:419;;;:::o;39783:::-;39949:4;39987:2;39976:9;39972:18;39964:26;;40036:9;40030:4;40026:20;40022:1;40011:9;40007:17;40000:47;40064:131;40190:4;40064:131;:::i;:::-;40056:139;;39783:419;;;:::o;40208:::-;40374:4;40412:2;40401:9;40397:18;40389:26;;40461:9;40455:4;40451:20;40447:1;40436:9;40432:17;40425:47;40489:131;40615:4;40489:131;:::i;:::-;40481:139;;40208:419;;;:::o;40633:::-;40799:4;40837:2;40826:9;40822:18;40814:26;;40886:9;40880:4;40876:20;40872:1;40861:9;40857:17;40850:47;40914:131;41040:4;40914:131;:::i;:::-;40906:139;;40633:419;;;:::o;41058:::-;41224:4;41262:2;41251:9;41247:18;41239:26;;41311:9;41305:4;41301:20;41297:1;41286:9;41282:17;41275:47;41339:131;41465:4;41339:131;:::i;:::-;41331:139;;41058:419;;;:::o;41483:218::-;41574:4;41612:2;41601:9;41597:18;41589:26;;41625:69;41691:1;41680:9;41676:17;41667:6;41625:69;:::i;:::-;41483:218;;;;:::o;41707:330::-;41827:4;41865:2;41854:9;41850:18;41842:26;;41878:70;41945:1;41934:9;41930:17;41921:6;41878:70;:::i;:::-;41958:72;42026:2;42015:9;42011:18;42002:6;41958:72;:::i;:::-;41707:330;;;;;:::o;42043:222::-;42136:4;42174:2;42163:9;42159:18;42151:26;;42187:71;42255:1;42244:9;42240:17;42231:6;42187:71;:::i;:::-;42043:222;;;;:::o;42271:129::-;42305:6;42332:20;;:::i;:::-;42322:30;;42361:33;42389:4;42381:6;42361:33;:::i;:::-;42271:129;;;:::o;42406:75::-;42439:6;42472:2;42466:9;42456:19;;42406:75;:::o;42487:311::-;42564:4;42654:18;42646:6;42643:30;42640:56;;;42676:18;;:::i;:::-;42640:56;42726:4;42718:6;42714:17;42706:25;;42786:4;42780;42776:15;42768:23;;42487:311;;;:::o;42804:307::-;42865:4;42955:18;42947:6;42944:30;42941:56;;;42977:18;;:::i;:::-;42941:56;43015:29;43037:6;43015:29;:::i;:::-;43007:37;;43099:4;43093;43089:15;43081:23;;42804:307;;;:::o;43117:308::-;43179:4;43269:18;43261:6;43258:30;43255:56;;;43291:18;;:::i;:::-;43255:56;43329:29;43351:6;43329:29;:::i;:::-;43321:37;;43413:4;43407;43403:15;43395:23;;43117:308;;;:::o;43431:132::-;43498:4;43521:3;43513:11;;43551:4;43546:3;43542:14;43534:22;;43431:132;;;:::o;43569:114::-;43636:6;43670:5;43664:12;43654:22;;43569:114;;;:::o;43689:98::-;43740:6;43774:5;43768:12;43758:22;;43689:98;;;:::o;43793:99::-;43845:6;43879:5;43873:12;43863:22;;43793:99;;;:::o;43898:113::-;43968:4;44000;43995:3;43991:14;43983:22;;43898:113;;;:::o;44017:184::-;44116:11;44150:6;44145:3;44138:19;44190:4;44185:3;44181:14;44166:29;;44017:184;;;;:::o;44207:168::-;44290:11;44324:6;44319:3;44312:19;44364:4;44359:3;44355:14;44340:29;;44207:168;;;;:::o;44381:147::-;44482:11;44519:3;44504:18;;44381:147;;;;:::o;44534:169::-;44618:11;44652:6;44647:3;44640:19;44692:4;44687:3;44683:14;44668:29;;44534:169;;;;:::o;44709:148::-;44811:11;44848:3;44833:18;;44709:148;;;;:::o;44863:305::-;44903:3;44922:20;44940:1;44922:20;:::i;:::-;44917:25;;44956:20;44974:1;44956:20;:::i;:::-;44951:25;;45110:1;45042:66;45038:74;45035:1;45032:81;45029:107;;;45116:18;;:::i;:::-;45029:107;45160:1;45157;45153:9;45146:16;;44863:305;;;;:::o;45174:237::-;45212:3;45231:18;45247:1;45231:18;:::i;:::-;45226:23;;45263:18;45279:1;45263:18;:::i;:::-;45258:23;;45353:1;45347:4;45343:12;45340:1;45337:19;45334:45;;;45359:18;;:::i;:::-;45334:45;45403:1;45400;45396:9;45389:16;;45174:237;;;;:::o;45417:185::-;45457:1;45474:20;45492:1;45474:20;:::i;:::-;45469:25;;45508:20;45526:1;45508:20;:::i;:::-;45503:25;;45547:1;45537:35;;45552:18;;:::i;:::-;45537:35;45594:1;45591;45587:9;45582:14;;45417:185;;;;:::o;45608:348::-;45648:7;45671:20;45689:1;45671:20;:::i;:::-;45666:25;;45705:20;45723:1;45705:20;:::i;:::-;45700:25;;45893:1;45825:66;45821:74;45818:1;45815:81;45810:1;45803:9;45796:17;45792:105;45789:131;;;45900:18;;:::i;:::-;45789:131;45948:1;45945;45941:9;45930:20;;45608:348;;;;:::o;45962:191::-;46002:4;46022:20;46040:1;46022:20;:::i;:::-;46017:25;;46056:20;46074:1;46056:20;:::i;:::-;46051:25;;46095:1;46092;46089:8;46086:34;;;46100:18;;:::i;:::-;46086:34;46145:1;46142;46138:9;46130:17;;45962:191;;;;:::o;46159:185::-;46197:4;46217:18;46233:1;46217:18;:::i;:::-;46212:23;;46249:18;46265:1;46249:18;:::i;:::-;46244:23;;46286:1;46283;46280:8;46277:34;;;46291:18;;:::i;:::-;46277:34;46336:1;46333;46329:9;46321:17;;46159:185;;;;:::o;46350:96::-;46387:7;46416:24;46434:5;46416:24;:::i;:::-;46405:35;;46350:96;;;:::o;46452:104::-;46497:7;46526:24;46544:5;46526:24;:::i;:::-;46515:35;;46452:104;;;:::o;46562:90::-;46596:7;46639:5;46632:13;46625:21;46614:32;;46562:90;;;:::o;46658:149::-;46694:7;46734:66;46727:5;46723:78;46712:89;;46658:149;;;:::o;46813:89::-;46849:7;46889:6;46882:5;46878:18;46867:29;;46813:89;;;:::o;46908:126::-;46945:7;46985:42;46978:5;46974:54;46963:65;;46908:126;;;:::o;47040:77::-;47077:7;47106:5;47095:16;;47040:77;;;:::o;47123:86::-;47158:7;47198:4;47191:5;47187:16;47176:27;;47123:86;;;:::o;47215:141::-;47280:9;47313:37;47344:5;47313:37;:::i;:::-;47300:50;;47215:141;;;:::o;47362:148::-;47434:9;47467:37;47498:5;47467:37;:::i;:::-;47454:50;;47362:148;;;:::o;47516:126::-;47566:9;47599:37;47630:5;47599:37;:::i;:::-;47586:50;;47516:126;;;:::o;47648:113::-;47698:9;47731:24;47749:5;47731:24;:::i;:::-;47718:37;;47648:113;;;:::o;47767:111::-;47816:9;47849:23;47866:5;47849:23;:::i;:::-;47836:36;;47767:111;;;:::o;47884:154::-;47968:6;47963:3;47958;47945:30;48030:1;48021:6;48016:3;48012:16;48005:27;47884:154;;;:::o;48044:307::-;48112:1;48122:113;48136:6;48133:1;48130:13;48122:113;;;48221:1;48216:3;48212:11;48206:18;48202:1;48197:3;48193:11;48186:39;48158:2;48155:1;48151:10;48146:15;;48122:113;;;48253:6;48250:1;48247:13;48244:101;;;48333:1;48324:6;48319:3;48315:16;48308:27;48244:101;48093:258;48044:307;;;:::o;48357:320::-;48401:6;48438:1;48432:4;48428:12;48418:22;;48485:1;48479:4;48475:12;48506:18;48496:81;;48562:4;48554:6;48550:17;48540:27;;48496:81;48624:2;48616:6;48613:14;48593:18;48590:38;48587:84;;;48643:18;;:::i;:::-;48587:84;48408:269;48357:320;;;:::o;48683:281::-;48766:27;48788:4;48766:27;:::i;:::-;48758:6;48754:40;48896:6;48884:10;48881:22;48860:18;48848:10;48845:34;48842:62;48839:88;;;48907:18;;:::i;:::-;48839:88;48947:10;48943:2;48936:22;48726:238;48683:281;;:::o;48970:233::-;49009:3;49032:24;49050:5;49032:24;:::i;:::-;49023:33;;49078:66;49071:5;49068:77;49065:103;;;49148:18;;:::i;:::-;49065:103;49195:1;49188:5;49184:13;49177:20;;48970:233;;;:::o;49209:176::-;49241:1;49258:20;49276:1;49258:20;:::i;:::-;49253:25;;49292:20;49310:1;49292:20;:::i;:::-;49287:25;;49331:1;49321:35;;49336:18;;:::i;:::-;49321:35;49377:1;49374;49370:9;49365:14;;49209:176;;;;:::o;49391:180::-;49439:77;49436:1;49429:88;49536:4;49533:1;49526:15;49560:4;49557:1;49550:15;49577:180;49625:77;49622:1;49615:88;49722:4;49719:1;49712:15;49746:4;49743:1;49736:15;49763:180;49811:77;49808:1;49801:88;49908:4;49905:1;49898:15;49932:4;49929:1;49922:15;49949:180;49997:77;49994:1;49987:88;50094:4;50091:1;50084:15;50118:4;50115:1;50108:15;50135:180;50183:77;50180:1;50173:88;50280:4;50277:1;50270:15;50304:4;50301:1;50294:15;50321:180;50369:77;50366:1;50359:88;50466:4;50463:1;50456:15;50490:4;50487:1;50480:15;50507:117;50616:1;50613;50606:12;50630:117;50739:1;50736;50729:12;50753:117;50862:1;50859;50852:12;50876:117;50985:1;50982;50975:12;50999:117;51108:1;51105;51098:12;51122:117;51231:1;51228;51221:12;51245:102;51286:6;51337:2;51333:7;51328:2;51321:5;51317:14;51313:28;51303:38;;51245:102;;;:::o;51353:164::-;51493:16;51489:1;51481:6;51477:14;51470:40;51353:164;:::o;51523:230::-;51663:34;51659:1;51651:6;51647:14;51640:58;51732:13;51727:2;51719:6;51715:15;51708:38;51523:230;:::o;51759:237::-;51899:34;51895:1;51887:6;51883:14;51876:58;51968:20;51963:2;51955:6;51951:15;51944:45;51759:237;:::o;52002:225::-;52142:34;52138:1;52130:6;52126:14;52119:58;52211:8;52206:2;52198:6;52194:15;52187:33;52002:225;:::o;52233:178::-;52373:30;52369:1;52361:6;52357:14;52350:54;52233:178;:::o;52417:223::-;52557:34;52553:1;52545:6;52541:14;52534:58;52626:6;52621:2;52613:6;52609:15;52602:31;52417:223;:::o;52646:175::-;52786:27;52782:1;52774:6;52770:14;52763:51;52646:175;:::o;52827:231::-;52967:34;52963:1;52955:6;52951:14;52944:58;53036:14;53031:2;53023:6;53019:15;53012:39;52827:231;:::o;53064:243::-;53204:34;53200:1;53192:6;53188:14;53181:58;53273:26;53268:2;53260:6;53256:15;53249:51;53064:243;:::o;53313:229::-;53453:34;53449:1;53441:6;53437:14;53430:58;53522:12;53517:2;53509:6;53505:15;53498:37;53313:229;:::o;53548:228::-;53688:34;53684:1;53676:6;53672:14;53665:58;53757:11;53752:2;53744:6;53740:15;53733:36;53548:228;:::o;53782:152::-;53922:4;53918:1;53910:6;53906:14;53899:28;53782:152;:::o;53940:179::-;54080:31;54076:1;54068:6;54064:14;54057:55;53940:179;:::o;54125:169::-;54265:21;54261:1;54253:6;54249:14;54242:45;54125:169;:::o;54300:182::-;54440:34;54436:1;54428:6;54424:14;54417:58;54300:182;:::o;54488:231::-;54628:34;54624:1;54616:6;54612:14;54605:58;54697:14;54692:2;54684:6;54680:15;54673:39;54488:231;:::o;54725:155::-;54865:7;54861:1;54853:6;54849:14;54842:31;54725:155;:::o;54886:182::-;55026:34;55022:1;55014:6;55010:14;55003:58;54886:182;:::o;55074:228::-;55214:34;55210:1;55202:6;55198:14;55191:58;55283:11;55278:2;55270:6;55266:15;55259:36;55074:228;:::o;55308:234::-;55448:34;55444:1;55436:6;55432:14;55425:58;55517:17;55512:2;55504:6;55500:15;55493:42;55308:234;:::o;55548:165::-;55688:17;55684:1;55676:6;55672:14;55665:41;55548:165;:::o;55719:220::-;55859:34;55855:1;55847:6;55843:14;55836:58;55928:3;55923:2;55915:6;55911:15;55904:28;55719:220;:::o;55945:221::-;56085:34;56081:1;56073:6;56069:14;56062:58;56154:4;56149:2;56141:6;56137:15;56130:29;55945:221;:::o;56172:114::-;;:::o;56292:236::-;56432:34;56428:1;56420:6;56416:14;56409:58;56501:19;56496:2;56488:6;56484:15;56477:44;56292:236;:::o;56534:231::-;56674:34;56670:1;56662:6;56658:14;56651:58;56743:14;56738:2;56730:6;56726:15;56719:39;56534:231;:::o;56771:167::-;56911:19;56907:1;56899:6;56895:14;56888:43;56771:167;:::o;56944:122::-;57017:24;57035:5;57017:24;:::i;:::-;57010:5;57007:35;56997:63;;57056:1;57053;57046:12;56997:63;56944:122;:::o;57072:138::-;57153:32;57179:5;57153:32;:::i;:::-;57146:5;57143:43;57133:71;;57200:1;57197;57190:12;57133:71;57072:138;:::o;57216:116::-;57286:21;57301:5;57286:21;:::i;:::-;57279:5;57276:32;57266:60;;57322:1;57319;57312:12;57266:60;57216:116;:::o;57338:120::-;57410:23;57427:5;57410:23;:::i;:::-;57403:5;57400:34;57390:62;;57448:1;57445;57438:12;57390:62;57338:120;:::o;57464:::-;57536:23;57553:5;57536:23;:::i;:::-;57529:5;57526:34;57516:62;;57574:1;57571;57564:12;57516:62;57464:120;:::o;57590:122::-;57663:24;57681:5;57663:24;:::i;:::-;57656:5;57653:35;57643:63;;57702:1;57699;57692:12;57643:63;57590:122;:::o;57718:118::-;57789:22;57805:5;57789:22;:::i;:::-;57782:5;57779:33;57769:61;;57826:1;57823;57816:12;57769:61;57718:118;:::o
Swarm Source
ipfs://dd5451a5f458bc44b92d9950749f81af88c413a8c9aa50c96a0a422123bac865