Overview
CRO Balance
CRO Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Latest 25 from a total of 3,492 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 17956506 | 47 days ago | IN | 0 CRO | 0.1538368 | ||||
Set Approval For... | 17955053 | 47 days ago | IN | 0 CRO | 0.1538368 | ||||
Set Approval For... | 17955052 | 47 days ago | IN | 0 CRO | 0.1538368 | ||||
Set Approval For... | 17954617 | 47 days ago | IN | 0 CRO | 0.1597536 | ||||
Set Approval For... | 17751520 | 61 days ago | IN | 0 CRO | 0.2357542 | ||||
Set Approval For... | 17191165 | 97 days ago | IN | 0 CRO | 0.23574475 | ||||
Set Approval For... | 17117600 | 102 days ago | IN | 0 CRO | 0.2579291 | ||||
Set Approval For... | 17112141 | 103 days ago | IN | 0 CRO | 0.1538368 | ||||
Set Approval For... | 17112139 | 103 days ago | IN | 0 CRO | 0.1538368 | ||||
Set Approval For... | 17112028 | 103 days ago | IN | 0 CRO | 0.1538368 | ||||
Set Approval For... | 16787242 | 125 days ago | IN | 0 CRO | 0.2358148 | ||||
Safe Transfer Fr... | 16745397 | 127 days ago | IN | 0 CRO | 0.4728113 | ||||
Set Approval For... | 16713081 | 129 days ago | IN | 0 CRO | 0.2358148 | ||||
Safe Transfer Fr... | 16588607 | 138 days ago | IN | 0 CRO | 0.51108128 | ||||
Safe Transfer Fr... | 16588282 | 138 days ago | IN | 0 CRO | 0.51108128 | ||||
Safe Transfer Fr... | 16588269 | 138 days ago | IN | 0 CRO | 0.55009882 | ||||
Safe Transfer Fr... | 16588145 | 138 days ago | IN | 0 CRO | 0.49674852 | ||||
Safe Transfer Fr... | 16588128 | 138 days ago | IN | 0 CRO | 0.55009882 | ||||
Safe Transfer Fr... | 16368162 | 152 days ago | IN | 0 CRO | 0.50630795 | ||||
Set Approval For... | 16214940 | 162 days ago | IN | 0 CRO | 0.2358148 | ||||
Set Approval For... | 16082403 | 171 days ago | IN | 0 CRO | 0.23349002 | ||||
Set Approval For... | 15936564 | 180 days ago | IN | 0 CRO | 0.23574475 | ||||
Set Approval For... | 15909902 | 182 days ago | IN | 0 CRO | 0.23568417 | ||||
Set Approval For... | 15870001 | 185 days ago | IN | 0 CRO | 0.2357542 | ||||
Transfer From | 15858034 | 185 days ago | IN | 0 CRO | 0.505 |
Loading...
Loading
Contract Name:
Mutantz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-07-03 */ // Sources flattened with hardhat v2.9.3 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @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/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (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/security/[email protected] // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // 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 contracts/Mutantz.sol pragma solidity ^0.8.7; abstract contract Microbes { function tokenOfOwnerByIndex(address owner, uint256 index) external virtual view returns (uint256); function safeTransferFrom(address from, address to, uint256 tokenId) external virtual; function approve(address to, uint256 tokenId) external virtual; function ownerOf(uint256 tokenId) external virtual view returns (address); function balanceOf(address owner) external virtual view returns (uint256 balance); function burnToken(uint256 tokenId) public virtual; } abstract contract Trooprz { function ownerOf(uint256 tokenId) external virtual view returns (address); } contract Mutantz is ERC721Enumerable, Pausable, Ownable { Microbes private microbes; Trooprz private trooprz; using Counters for Counters.Counter; Counters.Counter private _tokenIds; // Maximum tokens will be 2222 uint256 public _totalSupply = 2222; address burnerAddress = 0xAbe9c4bA987dA10523b5B3cA5823B547a72f6cce; mapping(address => uint256) public _spawnCount; mapping(uint256 => bool) public TokenIds; bool public _spawnActive = false; uint256 public _maxMint = 5; string public _prefixURI; event SetBaseURI(string newURI); event AirDrop(address[] indexed addrs); event ToggleSpawnActive(bool claimActive); event Spawn(address indexed addr, uint256[] microbes_ids, uint256[] ogTroopr_ids, address senderAddress); event ToggleTransferPause(bool paused); event UpdateTotalSupply(uint256 newMax); event UpdateBurnerAddress(address newAddress); event Withdraw(uint256 amount); constructor() ERC721("Mutantz", "MTNTZ") { microbes = Microbes(0xbabdFDD5f88035C9FbA58Be1b5c76DcFC6A847f3); trooprz = Trooprz(0x51112Bf32B9a1C64716DF2e6b82e63a04Bd384Fd); } function _baseURI() internal view override returns (string memory) { return _prefixURI; } function setBaseURI(string memory _uri) public onlyOwner { _prefixURI = _uri; emit SetBaseURI(_uri); } function airDrop(address[] memory addrs) public onlyOwner { require(addrs.length > 0, "need addresses to airdrop to"); require(_tokenIds.current() + addrs.length <= _totalSupply, "can't airdrop more than available"); for (uint256 i = 0; i < addrs.length; i++) { _mintItem(addrs[i]); } emit AirDrop(addrs); } function toggleSpawnActive() public onlyOwner { _spawnActive = !_spawnActive; emit ToggleSpawnActive(_spawnActive); } function checkIfOGTrooprUsedBefore(uint256[] memory tokenIds) public view returns (bool) { bool usedBefore = false; for (uint256 i = 0; i < tokenIds.length; i++) { if (TokenIds[tokenIds[i]]) { usedBefore = true; } } return usedBefore; } function deleteFromList(uint256 _tokenId) public onlyOwner { delete TokenIds[_tokenId]; } function checkIfListsAreNotEmpty(uint256[] memory microbesIds, uint256[] memory trooprIds) public pure returns (bool) { if (microbesIds.length > 0 && trooprIds.length > 0) { return true; } return false; } function calculateAmountOfGoldenMicrobes(uint256[] memory microbesIds) public pure returns (uint256) { uint256 amountOfGoldenMicrobes = 0; for (uint256 i = 0; i < microbesIds.length; i++) { if (microbesIds[i] <= 222) { amountOfGoldenMicrobes = amountOfGoldenMicrobes + 1; } } return amountOfGoldenMicrobes; } function calculateAmountOfRegularMicrobes(uint256[] memory microbesIds) public pure returns (uint256) { uint256 amountOfRegularMicrobes = 0; for (uint256 i = 0; i < microbesIds.length; i++) { if (microbesIds[i] > 222) { amountOfRegularMicrobes = amountOfRegularMicrobes + 1; } } return amountOfRegularMicrobes; } function checkIfAmountOfMicrobesAndTrooprzIsCorrect(uint256[] memory microbesIds, uint256[] memory trooprzIds) public pure returns (bool) { uint256 amountOfGoldenMicrobes = calculateAmountOfGoldenMicrobes(microbesIds); uint256 amountOfRegularMicrobes = calculateAmountOfRegularMicrobes(microbesIds); if (amountOfGoldenMicrobes == trooprzIds.length - (amountOfRegularMicrobes / 4) && amountOfRegularMicrobes == ((trooprzIds.length - amountOfGoldenMicrobes) * 4)) { return true; } return false; } function checkIfCallerIsOwnerOfMicrobes(uint256[] memory tokenIds) public view returns (bool) { bool isOwner = false; address sender = msg.sender; for (uint256 i = 0; i < tokenIds.length; i++) { if (!(microbes.ownerOf(tokenIds[i]) == sender)) { isOwner = false; break; } else { isOwner = true; } } return isOwner; } function checkIfCallerIsOwnerOfOGTrooprz(uint256[] memory tokenIds) public view returns (bool) { bool isOwner = false; address sender = msg.sender; for (uint256 i = 0; i < tokenIds.length; i++) { if (!(trooprz.ownerOf(tokenIds[i]) == sender)) { isOwner = false; break; } else { isOwner = true; } } return isOwner; } function spawn(uint256[] memory microbes_ids, uint256[] memory ogTroopr_ids, address senderAddress) public { address sender = msg.sender; require(_spawnActive, "spawn is not active"); require(checkIfListsAreNotEmpty(microbes_ids, ogTroopr_ids), "can't send empty lists"); require(checkIfAmountOfMicrobesAndTrooprzIsCorrect(microbes_ids, ogTroopr_ids), "must send four Microbes per OG Troopr or one golden microbe per OG Troopr"); require(checkIfCallerIsOwnerOfMicrobes(microbes_ids), "Must own the Microbes used for spawn"); require(checkIfCallerIsOwnerOfOGTrooprz(ogTroopr_ids), "Must own the OG Troopr used for spawn"); require(!checkIfOGTrooprUsedBefore(ogTroopr_ids), "Troopr token has been used before"); uint256 totalSpawned = _tokenIds.current(); require(totalSpawned + ogTroopr_ids.length <= _totalSupply, "sold out"); _spawnCount[sender] = _spawnCount[sender] + ogTroopr_ids.length; for (uint256 i = 0; i < ogTroopr_ids.length; i++) { _mintItem(msg.sender); } for (uint256 i = 0; i < microbes_ids.length; i++) { uint256 tokenToSend = microbes_ids[i]; microbes.safeTransferFrom(senderAddress, burnerAddress, tokenToSend); } for (uint256 i = 0; i < ogTroopr_ids.length; i++) { TokenIds[ogTroopr_ids[i]] = true; } emit Spawn(sender, microbes_ids, ogTroopr_ids, senderAddress); } function _mintItem(address to) internal { _tokenIds.increment(); uint256 id = _tokenIds.current(); _safeMint(to, id); } function toggleTransferPause() public onlyOwner { paused() ? _unpause() : _pause(); emit ToggleTransferPause(paused()); } function updateTotalSupply(uint256 newSupply) external onlyOwner { require(newSupply > 0, "new supply can not be 0"); _totalSupply = newSupply; emit UpdateTotalSupply(newSupply); } function updateBurnerAddress(address newAddress) external onlyOwner { burnerAddress = newAddress; emit UpdateBurnerAddress(newAddress); } function withdraw() external onlyOwner { require(address(this).balance > 0); uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); emit Withdraw(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"AirDrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"microbes_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"ogTroopr_ids","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"senderAddress","type":"address"}],"name":"Spawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"claimActive","type":"bool"}],"name":"ToggleSpawnActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ToggleTransferPause","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"UpdateBurnerAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"UpdateTotalSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"TokenIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_spawnActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_spawnCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"microbesIds","type":"uint256[]"}],"name":"calculateAmountOfGoldenMicrobes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"microbesIds","type":"uint256[]"}],"name":"calculateAmountOfRegularMicrobes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"microbesIds","type":"uint256[]"},{"internalType":"uint256[]","name":"trooprzIds","type":"uint256[]"}],"name":"checkIfAmountOfMicrobesAndTrooprzIsCorrect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkIfCallerIsOwnerOfMicrobes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkIfCallerIsOwnerOfOGTrooprz","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"microbesIds","type":"uint256[]"},{"internalType":"uint256[]","name":"trooprIds","type":"uint256[]"}],"name":"checkIfListsAreNotEmpty","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"checkIfOGTrooprUsedBefore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"deleteFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"microbes_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"ogTroopr_ids","type":"uint256[]"},{"internalType":"address","name":"senderAddress","type":"address"}],"name":"spawn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSpawnActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTransferPause","outputs":[],"stateMutability":"nonpayable","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":"newAddress","type":"address"}],"name":"updateBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"updateTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526108ae600e5573abe9c4ba987da10523b5b3ca5823b547a72f6cce600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260006101000a81548160ff02191690831515021790555060056013553480156200008c57600080fd5b506040518060400160405280600781526020017f4d7574616e747a000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d544e545a000000000000000000000000000000000000000000000000000000815250816000908051906020019062000111929190620002e6565b5080600190805190602001906200012a929190620002e6565b5050506000600a60006101000a81548160ff021916908315150217905550620001686200015c6200021860201b60201c565b6200022060201b60201c565b73babdfdd5f88035c9fba58be1b5c76dcfc6a847f3600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507351112bf32b9a1c64716df2e6b82e63a04bd384fd600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fb565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002f49062000396565b90600052602060002090601f01602090048101928262000318576000855562000364565b82601f106200033357805160ff191683800117855562000364565b8280016001018555821562000364579182015b828111156200036357825182559160200191906001019062000346565b5b50905062000373919062000377565b5090565b5b808211156200039257600081600090555060010162000378565b5090565b60006002820490506001821680620003af57607f821691505b60208210811415620003c657620003c5620003cc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615802806200040b6000396000f3fe608060405234801561001057600080fd5b506004361061025d5760003560e01c80636352211e116101465780639752a017116100c3578063c2069f0b11610087578063c2069f0b1461070c578063c5eddc1e1461073c578063c6ad68091461076c578063c87b56dd1461079c578063e985e9c5146107cc578063f2fde38b146107fc5761025d565b80639752a01714610690578063a22cb4651461069a578063b640392c146106b6578063b88d4fde146106d4578063ba4a7303146106f05761025d565b8063774a64b71161010a578063774a64b7146105d65780638da5cb5b146106065780638e09f0101461062457806391860f781461065457806395d89b41146106725761025d565b80636352211e1461052057806366d49bab146105505780636c9a802e1461056c57806370a082311461059c578063715018a6146105cc5761025d565b80632c8490bd116101df5780633ed0a44c116101a35780633ed0a44c1461043a57806342842e0e1461046a5780634f6ccce7146104865780635368b4d7146104b657806355f804b3146104e65780635c975abb146105025761025d565b80632c8490bd146103945780632f745c59146103c457806334316ad7146103f45780633ccfd60b146104125780633eaaf86b1461041c5761025d565b8063081812fc11610226578063081812fc146102f2578063095ea7b314610322578063112acb051461033e57806318160ddd1461035a57806323b872dd146103785761025d565b8062b6849f1461026257806301ffc9a71461027e57806302799ed9146102ae578063064b127c146102b857806306fdde03146102d4575b600080fd5b61027c60048036038101906102779190613ca1565b610818565b005b61029860048036038101906102939190613e36565b6109ba565b6040516102a59190614618565b60405180910390f35b6102b6610a34565b005b6102d260048036038101906102cd9190613ab1565b610b22565b005b6102dc610c19565b6040516102e99190614633565b60405180910390f35b61030c60048036038101906103079190613ed9565b610cab565b6040516103199190614535565b60405180910390f35b61033c60048036038101906103379190613c61565b610d30565b005b61035860048036038101906103539190613dab565b610e48565b005b6103626112d0565b60405161036f9190614a15565b60405180910390f35b610392600480360381019061038d9190613b4b565b6112dd565b005b6103ae60048036038101906103a99190613d33565b61133d565b6040516103bb9190614618565b60405180910390f35b6103de60048036038101906103d99190613c61565b6113b3565b6040516103eb9190614a15565b60405180910390f35b6103fc611458565b6040516104099190614618565b60405180910390f35b61041a61146b565b005b61042461157a565b6040516104319190614a15565b60405180910390f35b610454600480360381019061044f9190613cea565b611580565b6040516104619190614618565b60405180910390f35b610484600480360381019061047f9190613b4b565b6116ba565b005b6104a0600480360381019061049b9190613ed9565b6116da565b6040516104ad9190614a15565b60405180910390f35b6104d060048036038101906104cb9190613cea565b61174b565b6040516104dd9190614a15565b60405180910390f35b61050060048036038101906104fb9190613e90565b6117ae565b005b61050a61187b565b6040516105179190614618565b60405180910390f35b61053a60048036038101906105359190613ed9565b611892565b6040516105479190614535565b60405180910390f35b61056a60048036038101906105659190613ed9565b611944565b005b61058660048036038101906105819190613cea565b611a44565b6040516105939190614618565b60405180910390f35b6105b660048036038101906105b19190613ab1565b611ab9565b6040516105c39190614a15565b60405180910390f35b6105d4611b71565b005b6105f060048036038101906105eb9190613d33565b611bf9565b6040516105fd9190614618565b60405180910390f35b61060e611c25565b60405161061b9190614535565b60405180910390f35b61063e60048036038101906106399190613cea565b611c4f565b60405161064b9190614618565b60405180910390f35b61065c611d89565b6040516106699190614633565b60405180910390f35b61067a611e17565b6040516106879190614633565b60405180910390f35b610698611ea9565b005b6106b460048036038101906106af9190613c21565b611f87565b005b6106be611f9d565b6040516106cb9190614a15565b60405180910390f35b6106ee60048036038101906106e99190613b9e565b611fa3565b005b61070a60048036038101906107059190613ed9565b612005565b005b61072660048036038101906107219190613ab1565b6120a7565b6040516107339190614a15565b60405180910390f35b61075660048036038101906107519190613ed9565b6120bf565b6040516107639190614618565b60405180910390f35b61078660048036038101906107819190613cea565b6120df565b6040516107939190614a15565b60405180910390f35b6107b660048036038101906107b19190613ed9565b612141565b6040516107c39190614633565b60405180910390f35b6107e660048036038101906107e19190613b0b565b6121e8565b6040516107f39190614618565b60405180910390f35b61081660048036038101906108119190613ab1565b61227c565b005b610820612374565b73ffffffffffffffffffffffffffffffffffffffff1661083e611c25565b73ffffffffffffffffffffffffffffffffffffffff1614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b90614955565b60405180910390fd5b60008151116108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf90614855565b60405180910390fd5b600e5481516108e7600d61237c565b6108f19190614bbe565b1115610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092990614915565b60405180910390fd5b60005b81518110156109745761096182828151811061095457610953614f22565b5b602002602001015161238a565b808061096c90614dec565b915050610935565b508060405161098391906144fa565b60405180910390207fb9413d9dd40eadf97d2949c3c57a163bb454e537a8696520d52a74e0252011e960405160405180910390a250565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2d5750610a2c826123b0565b5b9050919050565b610a3c612374565b73ffffffffffffffffffffffffffffffffffffffff16610a5a611c25565b73ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790614955565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff0219169083151502179055507fee0de6ea10c1f647ab1220608069605f97d2bc3252f7c06b4022188fd82a21c8601260009054906101000a900460ff16604051610b189190614618565b60405180910390a1565b610b2a612374565b73ffffffffffffffffffffffffffffffffffffffff16610b48611c25565b73ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614955565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f05e6e3b077c20373757570ce85f169f7d18825938ea31eb63274238cc786433381604051610c0e9190614535565b60405180910390a150565b606060008054610c2890614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490614d89565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b6000610cb682612492565b610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec90614935565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3b82611892565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da3906149b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dcb612374565b73ffffffffffffffffffffffffffffffffffffffff161480610dfa5750610df981610df4612374565b6121e8565b5b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090614835565b60405180910390fd5b610e4383836124fe565b505050565b6000339050601260009054906101000a900460ff16610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906148d5565b60405180910390fd5b610ea68484611bf9565b610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90614815565b60405180910390fd5b610eef848461133d565b610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614995565b60405180910390fd5b610f3784611580565b610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614795565b60405180910390fd5b610f7f83611c4f565b610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590614755565b60405180910390fd5b610fc783611a44565b15611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614775565b60405180910390fd5b6000611013600d61237c565b9050600e548451826110259190614bbe565b1115611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d906147d5565b60405180910390fd5b8351601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b29190614bbe565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b845181101561111d5761110a3361238a565b808061111590614dec565b9150506110f8565b5060005b855181101561121057600086828151811061113f5761113e614f22565b5b60200260200101519050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e86600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016111ca93929190614550565b600060405180830381600087803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b5050505050808061120890614dec565b915050611121565b5060005b84518110156112765760016011600087848151811061123657611235614f22565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061126e90614dec565b915050611214565b508173ffffffffffffffffffffffffffffffffffffffff167f94302a7057fc1b2793abc3dcf7c0f9006404d706b62de3809d474a566cde04178686866040516112c1939291906145d3565b60405180910390a25050505050565b6000600880549050905090565b6112ee6112e8612374565b826125b7565b61132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906149d5565b60405180910390fd5b611338838383612695565b505050565b600080611349846120df565b905060006113568561174b565b90506004816113659190614c14565b84516113719190614c9f565b82148015611396575060048285516113899190614c9f565b6113939190614c45565b81145b156113a6576001925050506113ad565b6000925050505b92915050565b60006113be83611ab9565b82106113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690614675565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601260009054906101000a900460ff1681565b611473612374565b73ffffffffffffffffffffffffffffffffffffffff16611491611c25565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90614955565b60405180910390fd5b600047116114f457600080fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561153f573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d8160405161156f9190614a15565b60405180910390a150565b600e5481565b60008060009050600033905060005b84518110156116af578173ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e878481518110611600576115ff614f22565b5b60200260200101516040518263ffffffff1660e01b81526004016116249190614a15565b60206040518083038186803b15801561163c57600080fd5b505afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116749190613ade565b73ffffffffffffffffffffffffffffffffffffffff161461169857600092506116af565b6001925080806116a790614dec565b91505061158f565b508192505050919050565b6116d583838360405180602001604052806000815250611fa3565b505050565b60006116e46112d0565b8210611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906149f5565b60405180910390fd5b6008828154811061173957611738614f22565b5b90600052602060002001549050919050565b6000806000905060005b83518110156117a45760de84828151811061177357611772614f22565b5b602002602001015111156117915760018261178e9190614bbe565b91505b808061179c90614dec565b915050611755565b5080915050919050565b6117b6612374565b73ffffffffffffffffffffffffffffffffffffffff166117d4611c25565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190614955565b60405180910390fd5b8060149080519060200190611840929190613774565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa816040516118709190614633565b60405180910390a150565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290614895565b60405180910390fd5b80915050919050565b61194c612374565b73ffffffffffffffffffffffffffffffffffffffff1661196a611c25565b73ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790614955565b60405180910390fd5b60008111611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906148b5565b60405180910390fd5b80600e819055507fee643f334779f1031decbee003f80a0bcb7ecdc24b6693539cf7447a66afba8a81604051611a399190614a15565b60405180910390a150565b6000806000905060005b8351811015611aaf5760116000858381518110611a6e57611a6d614f22565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611a9c57600191505b8080611aa790614dec565b915050611a4e565b5080915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614875565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b79612374565b73ffffffffffffffffffffffffffffffffffffffff16611b97611c25565b73ffffffffffffffffffffffffffffffffffffffff1614611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614955565b60405180910390fd5b611bf760006128fc565b565b6000808351118015611c0c575060008251115b15611c1a5760019050611c1f565b600090505b92915050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009050600033905060005b8451811015611d7e578173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e878481518110611ccf57611cce614f22565b5b60200260200101516040518263ffffffff1660e01b8152600401611cf39190614a15565b60206040518083038186803b158015611d0b57600080fd5b505afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d439190613ade565b73ffffffffffffffffffffffffffffffffffffffff1614611d675760009250611d7e565b600192508080611d7690614dec565b915050611c5e565b508192505050919050565b60148054611d9690614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc290614d89565b8015611e0f5780601f10611de457610100808354040283529160200191611e0f565b820191906000526020600020905b815481529060010190602001808311611df257829003601f168201915b505050505081565b606060018054611e2690614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5290614d89565b8015611e9f5780601f10611e7457610100808354040283529160200191611e9f565b820191906000526020600020905b815481529060010190602001808311611e8257829003601f168201915b5050505050905090565b611eb1612374565b73ffffffffffffffffffffffffffffffffffffffff16611ecf611c25565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90614955565b60405180910390fd5b611f2d61187b565b611f3e57611f396129c2565b611f47565b611f46612a65565b5b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f611f7061187b565b604051611f7d9190614618565b60405180910390a1565b611f99611f92612374565b8383612b07565b5050565b60135481565b611fb4611fae612374565b836125b7565b611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea906149d5565b60405180910390fd5b611fff84848484612c74565b50505050565b61200d612374565b73ffffffffffffffffffffffffffffffffffffffff1661202b611c25565b73ffffffffffffffffffffffffffffffffffffffff1614612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890614955565b60405180910390fd5b6011600082815260200190815260200160002060006101000a81549060ff021916905550565b60106020528060005260406000206000915090505481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000806000905060005b83518110156121375760de84828151811061210757612106614f22565b5b602002602001015111612124576001826121219190614bbe565b91505b808061212f90614dec565b9150506120e9565b5080915050919050565b606061214c82612492565b61218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614975565b60405180910390fd5b6000612195612cd0565b905060008151116121b557604051806020016040528060008152506121e0565b806121bf84612d62565b6040516020016121d0929190614511565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612284612374565b73ffffffffffffffffffffffffffffffffffffffff166122a2611c25565b73ffffffffffffffffffffffffffffffffffffffff16146122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90614955565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f906146b5565b60405180910390fd5b612371816128fc565b50565b600033905090565b600081600001549050919050565b612394600d612ec3565b60006123a0600d61237c565b90506123ac8282612ed9565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061247b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061248b575061248a82612ef7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661257183611892565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125c282612492565b612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f8906147b5565b60405180910390fd5b600061260c83611892565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061267b57508373ffffffffffffffffffffffffffffffffffffffff1661266384610cab565b73ffffffffffffffffffffffffffffffffffffffff16145b8061268c575061268b81856121e8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611892565b73ffffffffffffffffffffffffffffffffffffffff161461270b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612702906146d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614715565b60405180910390fd5b612786838383612f61565b6127916000826124fe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e19190614c9f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128389190614bbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128f7838383613075565b505050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129ca61187b565b15612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a01906147f5565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a4e612374565b604051612a5b9190614535565b60405180910390a1565b612a6d61187b565b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa390614655565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612af0612374565b604051612afd9190614535565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6d90614735565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c679190614618565b60405180910390a3505050565b612c7f848484612695565b612c8b8484848461307a565b612cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc190614695565b60405180910390fd5b50505050565b606060148054612cdf90614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0b90614d89565b8015612d585780601f10612d2d57610100808354040283529160200191612d58565b820191906000526020600020905b815481529060010190602001808311612d3b57829003601f168201915b5050505050905090565b60606000821415612daa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ebe565b600082905060005b60008214612ddc578080612dc590614dec565b915050600a82612dd59190614c14565b9150612db2565b60008167ffffffffffffffff811115612df857612df7614f51565b5b6040519080825280601f01601f191660200182016040528015612e2a5781602001600182028036833780820191505090505b5090505b60008514612eb757600182612e439190614c9f565b9150600a85612e529190614e35565b6030612e5e9190614bbe565b60f81b818381518110612e7457612e73614f22565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eb09190614c14565b9450612e2e565b8093505050505b919050565b6001816000016000828254019250508190555050565b612ef3828260405180602001604052806000815250613211565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f6c83838361326c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612faf57612faa81613271565b612fee565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fed57612fec83826132ba565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130315761302c81613427565b613070565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461306f5761306e82826134f8565b5b5b505050565b505050565b600061309b8473ffffffffffffffffffffffffffffffffffffffff16613577565b15613204578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130c4612374565b8786866040518563ffffffff1660e01b81526004016130e69493929190614587565b602060405180830381600087803b15801561310057600080fd5b505af192505050801561313157506040513d601f19601f8201168201806040525081019061312e9190613e63565b60015b6131b4573d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b506000815114156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a390614695565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613209565b600190505b949350505050565b61321b838361359a565b613228600084848461307a565b613267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325e90614695565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132c784611ab9565b6132d19190614c9f565b90506000600760008481526020019081526020016000205490508181146133b6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061343b9190614c9f565b905060006009600084815260200190815260200160002054905060006008838154811061346b5761346a614f22565b5b90600052602060002001549050806008838154811061348d5761348c614f22565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134dc576134db614ef3565b5b6001900381819060005260206000200160009055905550505050565b600061350383611ab9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613601906148f5565b60405180910390fd5b61361381612492565b15613653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364a906146f5565b60405180910390fd5b61365f60008383612f61565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136af9190614bbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461377060008383613075565b5050565b82805461378090614d89565b90600052602060002090601f0160209004810192826137a257600085556137e9565b82601f106137bb57805160ff19168380011785556137e9565b828001600101855582156137e9579182015b828111156137e85782518255916020019190600101906137cd565b5b5090506137f691906137fa565b5090565b5b808211156138135760008160009055506001016137fb565b5090565b600061382a61382584614a55565b614a30565b9050808382526020820190508285602086028201111561384d5761384c614f85565b5b60005b8581101561387d5781613863888261397b565b845260208401935060208301925050600181019050613850565b5050509392505050565b600061389a61389584614a81565b614a30565b905080838252602082019050828560208602820111156138bd576138bc614f85565b5b60005b858110156138ed57816138d38882613a9c565b8452602084019350602083019250506001810190506138c0565b5050509392505050565b600061390a61390584614aad565b614a30565b90508281526020810184848401111561392657613925614f8a565b5b613931848285614d47565b509392505050565b600061394c61394784614ade565b614a30565b90508281526020810184848401111561396857613967614f8a565b5b613973848285614d47565b509392505050565b60008135905061398a81615770565b92915050565b60008151905061399f81615770565b92915050565b600082601f8301126139ba576139b9614f80565b5b81356139ca848260208601613817565b91505092915050565b600082601f8301126139e8576139e7614f80565b5b81356139f8848260208601613887565b91505092915050565b600081359050613a1081615787565b92915050565b600081359050613a258161579e565b92915050565b600081519050613a3a8161579e565b92915050565b600082601f830112613a5557613a54614f80565b5b8135613a658482602086016138f7565b91505092915050565b600082601f830112613a8357613a82614f80565b5b8135613a93848260208601613939565b91505092915050565b600081359050613aab816157b5565b92915050565b600060208284031215613ac757613ac6614f94565b5b6000613ad58482850161397b565b91505092915050565b600060208284031215613af457613af3614f94565b5b6000613b0284828501613990565b91505092915050565b60008060408385031215613b2257613b21614f94565b5b6000613b308582860161397b565b9250506020613b418582860161397b565b9150509250929050565b600080600060608486031215613b6457613b63614f94565b5b6000613b728682870161397b565b9350506020613b838682870161397b565b9250506040613b9486828701613a9c565b9150509250925092565b60008060008060808587031215613bb857613bb7614f94565b5b6000613bc68782880161397b565b9450506020613bd78782880161397b565b9350506040613be887828801613a9c565b925050606085013567ffffffffffffffff811115613c0957613c08614f8f565b5b613c1587828801613a40565b91505092959194509250565b60008060408385031215613c3857613c37614f94565b5b6000613c468582860161397b565b9250506020613c5785828601613a01565b9150509250929050565b60008060408385031215613c7857613c77614f94565b5b6000613c868582860161397b565b9250506020613c9785828601613a9c565b9150509250929050565b600060208284031215613cb757613cb6614f94565b5b600082013567ffffffffffffffff811115613cd557613cd4614f8f565b5b613ce1848285016139a5565b91505092915050565b600060208284031215613d0057613cff614f94565b5b600082013567ffffffffffffffff811115613d1e57613d1d614f8f565b5b613d2a848285016139d3565b91505092915050565b60008060408385031215613d4a57613d49614f94565b5b600083013567ffffffffffffffff811115613d6857613d67614f8f565b5b613d74858286016139d3565b925050602083013567ffffffffffffffff811115613d9557613d94614f8f565b5b613da1858286016139d3565b9150509250929050565b600080600060608486031215613dc457613dc3614f94565b5b600084013567ffffffffffffffff811115613de257613de1614f8f565b5b613dee868287016139d3565b935050602084013567ffffffffffffffff811115613e0f57613e0e614f8f565b5b613e1b868287016139d3565b9250506040613e2c8682870161397b565b9150509250925092565b600060208284031215613e4c57613e4b614f94565b5b6000613e5a84828501613a16565b91505092915050565b600060208284031215613e7957613e78614f94565b5b6000613e8784828501613a2b565b91505092915050565b600060208284031215613ea657613ea5614f94565b5b600082013567ffffffffffffffff811115613ec457613ec3614f8f565b5b613ed084828501613a6e565b91505092915050565b600060208284031215613eef57613eee614f94565b5b6000613efd84828501613a9c565b91505092915050565b6000613f128383613f45565b60208301905092915050565b6000613f2a83836144dc565b60208301905092915050565b613f3f81614cd3565b82525050565b613f4e81614cd3565b82525050565b6000613f5f82614b2f565b613f698185614b75565b9350613f7483614b0f565b8060005b83811015613fa5578151613f8c8882613f06565b9750613f9783614b5b565b925050600181019050613f78565b5085935050505092915050565b6000613fbd82614b3a565b613fc78185614b80565b9350613fd283614b1f565b8060005b83811015614003578151613fea8882613f1e565b9750613ff583614b68565b925050600181019050613fd6565b5085935050505092915050565b61401981614ce5565b82525050565b600061402a82614b45565b6140348185614b91565b9350614044818560208601614d56565b61404d81614f99565b840191505092915050565b600061406382614b50565b61406d8185614ba2565b935061407d818560208601614d56565b61408681614f99565b840191505092915050565b600061409c82614b50565b6140a68185614bb3565b93506140b6818560208601614d56565b80840191505092915050565b60006140cf601483614ba2565b91506140da82614faa565b602082019050919050565b60006140f2602b83614ba2565b91506140fd82614fd3565b604082019050919050565b6000614115603283614ba2565b915061412082615022565b604082019050919050565b6000614138602683614ba2565b915061414382615071565b604082019050919050565b600061415b602583614ba2565b9150614166826150c0565b604082019050919050565b600061417e601c83614ba2565b91506141898261510f565b602082019050919050565b60006141a1602483614ba2565b91506141ac82615138565b604082019050919050565b60006141c4601983614ba2565b91506141cf82615187565b602082019050919050565b60006141e7602583614ba2565b91506141f2826151b0565b604082019050919050565b600061420a602183614ba2565b9150614215826151ff565b604082019050919050565b600061422d602483614ba2565b91506142388261524e565b604082019050919050565b6000614250602c83614ba2565b915061425b8261529d565b604082019050919050565b6000614273600883614ba2565b915061427e826152ec565b602082019050919050565b6000614296601083614ba2565b91506142a182615315565b602082019050919050565b60006142b9601683614ba2565b91506142c48261533e565b602082019050919050565b60006142dc603883614ba2565b91506142e782615367565b604082019050919050565b60006142ff601c83614ba2565b915061430a826153b6565b602082019050919050565b6000614322602a83614ba2565b915061432d826153df565b604082019050919050565b6000614345602983614ba2565b91506143508261542e565b604082019050919050565b6000614368601783614ba2565b91506143738261547d565b602082019050919050565b600061438b601383614ba2565b9150614396826154a6565b602082019050919050565b60006143ae602083614ba2565b91506143b9826154cf565b602082019050919050565b60006143d1602183614ba2565b91506143dc826154f8565b604082019050919050565b60006143f4602c83614ba2565b91506143ff82615547565b604082019050919050565b6000614417602083614ba2565b915061442282615596565b602082019050919050565b600061443a602f83614ba2565b9150614445826155bf565b604082019050919050565b600061445d604983614ba2565b91506144688261560e565b606082019050919050565b6000614480602183614ba2565b915061448b82615683565b604082019050919050565b60006144a3603183614ba2565b91506144ae826156d2565b604082019050919050565b60006144c6602c83614ba2565b91506144d182615721565b604082019050919050565b6144e581614d3d565b82525050565b6144f481614d3d565b82525050565b60006145068284613f54565b915081905092915050565b600061451d8285614091565b91506145298284614091565b91508190509392505050565b600060208201905061454a6000830184613f36565b92915050565b60006060820190506145656000830186613f36565b6145726020830185613f36565b61457f60408301846144eb565b949350505050565b600060808201905061459c6000830187613f36565b6145a96020830186613f36565b6145b660408301856144eb565b81810360608301526145c8818461401f565b905095945050505050565b600060608201905081810360008301526145ed8186613fb2565b905081810360208301526146018185613fb2565b90506146106040830184613f36565b949350505050565b600060208201905061462d6000830184614010565b92915050565b6000602082019050818103600083015261464d8184614058565b905092915050565b6000602082019050818103600083015261466e816140c2565b9050919050565b6000602082019050818103600083015261468e816140e5565b9050919050565b600060208201905081810360008301526146ae81614108565b9050919050565b600060208201905081810360008301526146ce8161412b565b9050919050565b600060208201905081810360008301526146ee8161414e565b9050919050565b6000602082019050818103600083015261470e81614171565b9050919050565b6000602082019050818103600083015261472e81614194565b9050919050565b6000602082019050818103600083015261474e816141b7565b9050919050565b6000602082019050818103600083015261476e816141da565b9050919050565b6000602082019050818103600083015261478e816141fd565b9050919050565b600060208201905081810360008301526147ae81614220565b9050919050565b600060208201905081810360008301526147ce81614243565b9050919050565b600060208201905081810360008301526147ee81614266565b9050919050565b6000602082019050818103600083015261480e81614289565b9050919050565b6000602082019050818103600083015261482e816142ac565b9050919050565b6000602082019050818103600083015261484e816142cf565b9050919050565b6000602082019050818103600083015261486e816142f2565b9050919050565b6000602082019050818103600083015261488e81614315565b9050919050565b600060208201905081810360008301526148ae81614338565b9050919050565b600060208201905081810360008301526148ce8161435b565b9050919050565b600060208201905081810360008301526148ee8161437e565b9050919050565b6000602082019050818103600083015261490e816143a1565b9050919050565b6000602082019050818103600083015261492e816143c4565b9050919050565b6000602082019050818103600083015261494e816143e7565b9050919050565b6000602082019050818103600083015261496e8161440a565b9050919050565b6000602082019050818103600083015261498e8161442d565b9050919050565b600060208201905081810360008301526149ae81614450565b9050919050565b600060208201905081810360008301526149ce81614473565b9050919050565b600060208201905081810360008301526149ee81614496565b9050919050565b60006020820190508181036000830152614a0e816144b9565b9050919050565b6000602082019050614a2a60008301846144eb565b92915050565b6000614a3a614a4b565b9050614a468282614dbb565b919050565b6000604051905090565b600067ffffffffffffffff821115614a7057614a6f614f51565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a9c57614a9b614f51565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ac857614ac7614f51565b5b614ad182614f99565b9050602081019050919050565b600067ffffffffffffffff821115614af957614af8614f51565b5b614b0282614f99565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bc982614d3d565b9150614bd483614d3d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c0957614c08614e66565b5b828201905092915050565b6000614c1f82614d3d565b9150614c2a83614d3d565b925082614c3a57614c39614e95565b5b828204905092915050565b6000614c5082614d3d565b9150614c5b83614d3d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c9457614c93614e66565b5b828202905092915050565b6000614caa82614d3d565b9150614cb583614d3d565b925082821015614cc857614cc7614e66565b5b828203905092915050565b6000614cde82614d1d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d74578082015181840152602081019050614d59565b83811115614d83576000848401525b50505050565b60006002820490506001821680614da157607f821691505b60208210811415614db557614db4614ec4565b5b50919050565b614dc482614f99565b810181811067ffffffffffffffff82111715614de357614de2614f51565b5b80604052505050565b6000614df782614d3d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614e66565b5b600182019050919050565b6000614e4082614d3d565b9150614e4b83614d3d565b925082614e5b57614e5a614e95565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206f776e20746865204f472054726f6f7072207573656420666f722060008201527f737061776e000000000000000000000000000000000000000000000000000000602082015250565b7f54726f6f707220746f6b656e20686173206265656e2075736564206265666f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206f776e20746865204d6963726f626573207573656420666f72207360008201527f7061776e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f63616e27742073656e6420656d707479206c6973747300000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6e6565642061646472657373657320746f2061697264726f7020746f00000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e657720737570706c792063616e206e6f742062652030000000000000000000600082015250565b7f737061776e206973206e6f742061637469766500000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f63616e27742061697264726f70206d6f7265207468616e20617661696c61626c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6d7573742073656e6420666f7572204d6963726f62657320706572204f47205460008201527f726f6f7072206f72206f6e6520676f6c64656e206d6963726f6265207065722060208201527f4f472054726f6f70720000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61577981614cd3565b811461578457600080fd5b50565b61579081614ce5565b811461579b57600080fd5b50565b6157a781614cf1565b81146157b257600080fd5b50565b6157be81614d3d565b81146157c957600080fd5b5056fea2646970667358221220501ca311e488af314c324b01e3d23f8bfeea8e341248fd55c06dc412c55297bc64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025d5760003560e01c80636352211e116101465780639752a017116100c3578063c2069f0b11610087578063c2069f0b1461070c578063c5eddc1e1461073c578063c6ad68091461076c578063c87b56dd1461079c578063e985e9c5146107cc578063f2fde38b146107fc5761025d565b80639752a01714610690578063a22cb4651461069a578063b640392c146106b6578063b88d4fde146106d4578063ba4a7303146106f05761025d565b8063774a64b71161010a578063774a64b7146105d65780638da5cb5b146106065780638e09f0101461062457806391860f781461065457806395d89b41146106725761025d565b80636352211e1461052057806366d49bab146105505780636c9a802e1461056c57806370a082311461059c578063715018a6146105cc5761025d565b80632c8490bd116101df5780633ed0a44c116101a35780633ed0a44c1461043a57806342842e0e1461046a5780634f6ccce7146104865780635368b4d7146104b657806355f804b3146104e65780635c975abb146105025761025d565b80632c8490bd146103945780632f745c59146103c457806334316ad7146103f45780633ccfd60b146104125780633eaaf86b1461041c5761025d565b8063081812fc11610226578063081812fc146102f2578063095ea7b314610322578063112acb051461033e57806318160ddd1461035a57806323b872dd146103785761025d565b8062b6849f1461026257806301ffc9a71461027e57806302799ed9146102ae578063064b127c146102b857806306fdde03146102d4575b600080fd5b61027c60048036038101906102779190613ca1565b610818565b005b61029860048036038101906102939190613e36565b6109ba565b6040516102a59190614618565b60405180910390f35b6102b6610a34565b005b6102d260048036038101906102cd9190613ab1565b610b22565b005b6102dc610c19565b6040516102e99190614633565b60405180910390f35b61030c60048036038101906103079190613ed9565b610cab565b6040516103199190614535565b60405180910390f35b61033c60048036038101906103379190613c61565b610d30565b005b61035860048036038101906103539190613dab565b610e48565b005b6103626112d0565b60405161036f9190614a15565b60405180910390f35b610392600480360381019061038d9190613b4b565b6112dd565b005b6103ae60048036038101906103a99190613d33565b61133d565b6040516103bb9190614618565b60405180910390f35b6103de60048036038101906103d99190613c61565b6113b3565b6040516103eb9190614a15565b60405180910390f35b6103fc611458565b6040516104099190614618565b60405180910390f35b61041a61146b565b005b61042461157a565b6040516104319190614a15565b60405180910390f35b610454600480360381019061044f9190613cea565b611580565b6040516104619190614618565b60405180910390f35b610484600480360381019061047f9190613b4b565b6116ba565b005b6104a0600480360381019061049b9190613ed9565b6116da565b6040516104ad9190614a15565b60405180910390f35b6104d060048036038101906104cb9190613cea565b61174b565b6040516104dd9190614a15565b60405180910390f35b61050060048036038101906104fb9190613e90565b6117ae565b005b61050a61187b565b6040516105179190614618565b60405180910390f35b61053a60048036038101906105359190613ed9565b611892565b6040516105479190614535565b60405180910390f35b61056a60048036038101906105659190613ed9565b611944565b005b61058660048036038101906105819190613cea565b611a44565b6040516105939190614618565b60405180910390f35b6105b660048036038101906105b19190613ab1565b611ab9565b6040516105c39190614a15565b60405180910390f35b6105d4611b71565b005b6105f060048036038101906105eb9190613d33565b611bf9565b6040516105fd9190614618565b60405180910390f35b61060e611c25565b60405161061b9190614535565b60405180910390f35b61063e60048036038101906106399190613cea565b611c4f565b60405161064b9190614618565b60405180910390f35b61065c611d89565b6040516106699190614633565b60405180910390f35b61067a611e17565b6040516106879190614633565b60405180910390f35b610698611ea9565b005b6106b460048036038101906106af9190613c21565b611f87565b005b6106be611f9d565b6040516106cb9190614a15565b60405180910390f35b6106ee60048036038101906106e99190613b9e565b611fa3565b005b61070a60048036038101906107059190613ed9565b612005565b005b61072660048036038101906107219190613ab1565b6120a7565b6040516107339190614a15565b60405180910390f35b61075660048036038101906107519190613ed9565b6120bf565b6040516107639190614618565b60405180910390f35b61078660048036038101906107819190613cea565b6120df565b6040516107939190614a15565b60405180910390f35b6107b660048036038101906107b19190613ed9565b612141565b6040516107c39190614633565b60405180910390f35b6107e660048036038101906107e19190613b0b565b6121e8565b6040516107f39190614618565b60405180910390f35b61081660048036038101906108119190613ab1565b61227c565b005b610820612374565b73ffffffffffffffffffffffffffffffffffffffff1661083e611c25565b73ffffffffffffffffffffffffffffffffffffffff1614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b90614955565b60405180910390fd5b60008151116108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf90614855565b60405180910390fd5b600e5481516108e7600d61237c565b6108f19190614bbe565b1115610932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092990614915565b60405180910390fd5b60005b81518110156109745761096182828151811061095457610953614f22565b5b602002602001015161238a565b808061096c90614dec565b915050610935565b508060405161098391906144fa565b60405180910390207fb9413d9dd40eadf97d2949c3c57a163bb454e537a8696520d52a74e0252011e960405160405180910390a250565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2d5750610a2c826123b0565b5b9050919050565b610a3c612374565b73ffffffffffffffffffffffffffffffffffffffff16610a5a611c25565b73ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790614955565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff0219169083151502179055507fee0de6ea10c1f647ab1220608069605f97d2bc3252f7c06b4022188fd82a21c8601260009054906101000a900460ff16604051610b189190614618565b60405180910390a1565b610b2a612374565b73ffffffffffffffffffffffffffffffffffffffff16610b48611c25565b73ffffffffffffffffffffffffffffffffffffffff1614610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614955565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f05e6e3b077c20373757570ce85f169f7d18825938ea31eb63274238cc786433381604051610c0e9190614535565b60405180910390a150565b606060008054610c2890614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490614d89565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b6000610cb682612492565b610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec90614935565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d3b82611892565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da3906149b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dcb612374565b73ffffffffffffffffffffffffffffffffffffffff161480610dfa5750610df981610df4612374565b6121e8565b5b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090614835565b60405180910390fd5b610e4383836124fe565b505050565b6000339050601260009054906101000a900460ff16610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906148d5565b60405180910390fd5b610ea68484611bf9565b610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90614815565b60405180910390fd5b610eef848461133d565b610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614995565b60405180910390fd5b610f3784611580565b610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614795565b60405180910390fd5b610f7f83611c4f565b610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590614755565b60405180910390fd5b610fc783611a44565b15611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614775565b60405180910390fd5b6000611013600d61237c565b9050600e548451826110259190614bbe565b1115611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d906147d5565b60405180910390fd5b8351601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110b29190614bbe565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b845181101561111d5761110a3361238a565b808061111590614dec565b9150506110f8565b5060005b855181101561121057600086828151811061113f5761113e614f22565b5b60200260200101519050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e86600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b81526004016111ca93929190614550565b600060405180830381600087803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b5050505050808061120890614dec565b915050611121565b5060005b84518110156112765760016011600087848151811061123657611235614f22565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061126e90614dec565b915050611214565b508173ffffffffffffffffffffffffffffffffffffffff167f94302a7057fc1b2793abc3dcf7c0f9006404d706b62de3809d474a566cde04178686866040516112c1939291906145d3565b60405180910390a25050505050565b6000600880549050905090565b6112ee6112e8612374565b826125b7565b61132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906149d5565b60405180910390fd5b611338838383612695565b505050565b600080611349846120df565b905060006113568561174b565b90506004816113659190614c14565b84516113719190614c9f565b82148015611396575060048285516113899190614c9f565b6113939190614c45565b81145b156113a6576001925050506113ad565b6000925050505b92915050565b60006113be83611ab9565b82106113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690614675565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601260009054906101000a900460ff1681565b611473612374565b73ffffffffffffffffffffffffffffffffffffffff16611491611c25565b73ffffffffffffffffffffffffffffffffffffffff16146114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90614955565b60405180910390fd5b600047116114f457600080fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561153f573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d8160405161156f9190614a15565b60405180910390a150565b600e5481565b60008060009050600033905060005b84518110156116af578173ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e878481518110611600576115ff614f22565b5b60200260200101516040518263ffffffff1660e01b81526004016116249190614a15565b60206040518083038186803b15801561163c57600080fd5b505afa158015611650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116749190613ade565b73ffffffffffffffffffffffffffffffffffffffff161461169857600092506116af565b6001925080806116a790614dec565b91505061158f565b508192505050919050565b6116d583838360405180602001604052806000815250611fa3565b505050565b60006116e46112d0565b8210611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906149f5565b60405180910390fd5b6008828154811061173957611738614f22565b5b90600052602060002001549050919050565b6000806000905060005b83518110156117a45760de84828151811061177357611772614f22565b5b602002602001015111156117915760018261178e9190614bbe565b91505b808061179c90614dec565b915050611755565b5080915050919050565b6117b6612374565b73ffffffffffffffffffffffffffffffffffffffff166117d4611c25565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190614955565b60405180910390fd5b8060149080519060200190611840929190613774565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa816040516118709190614633565b60405180910390a150565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290614895565b60405180910390fd5b80915050919050565b61194c612374565b73ffffffffffffffffffffffffffffffffffffffff1661196a611c25565b73ffffffffffffffffffffffffffffffffffffffff16146119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790614955565b60405180910390fd5b60008111611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906148b5565b60405180910390fd5b80600e819055507fee643f334779f1031decbee003f80a0bcb7ecdc24b6693539cf7447a66afba8a81604051611a399190614a15565b60405180910390a150565b6000806000905060005b8351811015611aaf5760116000858381518110611a6e57611a6d614f22565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611a9c57600191505b8080611aa790614dec565b915050611a4e565b5080915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2190614875565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b79612374565b73ffffffffffffffffffffffffffffffffffffffff16611b97611c25565b73ffffffffffffffffffffffffffffffffffffffff1614611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490614955565b60405180910390fd5b611bf760006128fc565b565b6000808351118015611c0c575060008251115b15611c1a5760019050611c1f565b600090505b92915050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009050600033905060005b8451811015611d7e578173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e878481518110611ccf57611cce614f22565b5b60200260200101516040518263ffffffff1660e01b8152600401611cf39190614a15565b60206040518083038186803b158015611d0b57600080fd5b505afa158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d439190613ade565b73ffffffffffffffffffffffffffffffffffffffff1614611d675760009250611d7e565b600192508080611d7690614dec565b915050611c5e565b508192505050919050565b60148054611d9690614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc290614d89565b8015611e0f5780601f10611de457610100808354040283529160200191611e0f565b820191906000526020600020905b815481529060010190602001808311611df257829003601f168201915b505050505081565b606060018054611e2690614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5290614d89565b8015611e9f5780601f10611e7457610100808354040283529160200191611e9f565b820191906000526020600020905b815481529060010190602001808311611e8257829003601f168201915b5050505050905090565b611eb1612374565b73ffffffffffffffffffffffffffffffffffffffff16611ecf611c25565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90614955565b60405180910390fd5b611f2d61187b565b611f3e57611f396129c2565b611f47565b611f46612a65565b5b7f71aa6dbdf1045ea9e6926a7848dbdd98d55270c4fee88cbc77fd816ccc8d6d2f611f7061187b565b604051611f7d9190614618565b60405180910390a1565b611f99611f92612374565b8383612b07565b5050565b60135481565b611fb4611fae612374565b836125b7565b611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea906149d5565b60405180910390fd5b611fff84848484612c74565b50505050565b61200d612374565b73ffffffffffffffffffffffffffffffffffffffff1661202b611c25565b73ffffffffffffffffffffffffffffffffffffffff1614612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890614955565b60405180910390fd5b6011600082815260200190815260200160002060006101000a81549060ff021916905550565b60106020528060005260406000206000915090505481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000806000905060005b83518110156121375760de84828151811061210757612106614f22565b5b602002602001015111612124576001826121219190614bbe565b91505b808061212f90614dec565b9150506120e9565b5080915050919050565b606061214c82612492565b61218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614975565b60405180910390fd5b6000612195612cd0565b905060008151116121b557604051806020016040528060008152506121e0565b806121bf84612d62565b6040516020016121d0929190614511565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612284612374565b73ffffffffffffffffffffffffffffffffffffffff166122a2611c25565b73ffffffffffffffffffffffffffffffffffffffff16146122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90614955565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f906146b5565b60405180910390fd5b612371816128fc565b50565b600033905090565b600081600001549050919050565b612394600d612ec3565b60006123a0600d61237c565b90506123ac8282612ed9565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061247b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061248b575061248a82612ef7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661257183611892565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125c282612492565b612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f8906147b5565b60405180910390fd5b600061260c83611892565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061267b57508373ffffffffffffffffffffffffffffffffffffffff1661266384610cab565b73ffffffffffffffffffffffffffffffffffffffff16145b8061268c575061268b81856121e8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126b582611892565b73ffffffffffffffffffffffffffffffffffffffff161461270b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612702906146d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614715565b60405180910390fd5b612786838383612f61565b6127916000826124fe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e19190614c9f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128389190614bbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128f7838383613075565b505050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129ca61187b565b15612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a01906147f5565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612a4e612374565b604051612a5b9190614535565b60405180910390a1565b612a6d61187b565b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa390614655565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612af0612374565b604051612afd9190614535565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6d90614735565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c679190614618565b60405180910390a3505050565b612c7f848484612695565b612c8b8484848461307a565b612cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc190614695565b60405180910390fd5b50505050565b606060148054612cdf90614d89565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0b90614d89565b8015612d585780601f10612d2d57610100808354040283529160200191612d58565b820191906000526020600020905b815481529060010190602001808311612d3b57829003601f168201915b5050505050905090565b60606000821415612daa576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ebe565b600082905060005b60008214612ddc578080612dc590614dec565b915050600a82612dd59190614c14565b9150612db2565b60008167ffffffffffffffff811115612df857612df7614f51565b5b6040519080825280601f01601f191660200182016040528015612e2a5781602001600182028036833780820191505090505b5090505b60008514612eb757600182612e439190614c9f565b9150600a85612e529190614e35565b6030612e5e9190614bbe565b60f81b818381518110612e7457612e73614f22565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eb09190614c14565b9450612e2e565b8093505050505b919050565b6001816000016000828254019250508190555050565b612ef3828260405180602001604052806000815250613211565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612f6c83838361326c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612faf57612faa81613271565b612fee565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fed57612fec83826132ba565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130315761302c81613427565b613070565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461306f5761306e82826134f8565b5b5b505050565b505050565b600061309b8473ffffffffffffffffffffffffffffffffffffffff16613577565b15613204578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130c4612374565b8786866040518563ffffffff1660e01b81526004016130e69493929190614587565b602060405180830381600087803b15801561310057600080fd5b505af192505050801561313157506040513d601f19601f8201168201806040525081019061312e9190613e63565b60015b6131b4573d8060008114613161576040519150601f19603f3d011682016040523d82523d6000602084013e613166565b606091505b506000815114156131ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a390614695565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613209565b600190505b949350505050565b61321b838361359a565b613228600084848461307a565b613267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325e90614695565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132c784611ab9565b6132d19190614c9f565b90506000600760008481526020019081526020016000205490508181146133b6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061343b9190614c9f565b905060006009600084815260200190815260200160002054905060006008838154811061346b5761346a614f22565b5b90600052602060002001549050806008838154811061348d5761348c614f22565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134dc576134db614ef3565b5b6001900381819060005260206000200160009055905550505050565b600061350383611ab9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613601906148f5565b60405180910390fd5b61361381612492565b15613653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364a906146f5565b60405180910390fd5b61365f60008383612f61565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136af9190614bbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461377060008383613075565b5050565b82805461378090614d89565b90600052602060002090601f0160209004810192826137a257600085556137e9565b82601f106137bb57805160ff19168380011785556137e9565b828001600101855582156137e9579182015b828111156137e85782518255916020019190600101906137cd565b5b5090506137f691906137fa565b5090565b5b808211156138135760008160009055506001016137fb565b5090565b600061382a61382584614a55565b614a30565b9050808382526020820190508285602086028201111561384d5761384c614f85565b5b60005b8581101561387d5781613863888261397b565b845260208401935060208301925050600181019050613850565b5050509392505050565b600061389a61389584614a81565b614a30565b905080838252602082019050828560208602820111156138bd576138bc614f85565b5b60005b858110156138ed57816138d38882613a9c565b8452602084019350602083019250506001810190506138c0565b5050509392505050565b600061390a61390584614aad565b614a30565b90508281526020810184848401111561392657613925614f8a565b5b613931848285614d47565b509392505050565b600061394c61394784614ade565b614a30565b90508281526020810184848401111561396857613967614f8a565b5b613973848285614d47565b509392505050565b60008135905061398a81615770565b92915050565b60008151905061399f81615770565b92915050565b600082601f8301126139ba576139b9614f80565b5b81356139ca848260208601613817565b91505092915050565b600082601f8301126139e8576139e7614f80565b5b81356139f8848260208601613887565b91505092915050565b600081359050613a1081615787565b92915050565b600081359050613a258161579e565b92915050565b600081519050613a3a8161579e565b92915050565b600082601f830112613a5557613a54614f80565b5b8135613a658482602086016138f7565b91505092915050565b600082601f830112613a8357613a82614f80565b5b8135613a93848260208601613939565b91505092915050565b600081359050613aab816157b5565b92915050565b600060208284031215613ac757613ac6614f94565b5b6000613ad58482850161397b565b91505092915050565b600060208284031215613af457613af3614f94565b5b6000613b0284828501613990565b91505092915050565b60008060408385031215613b2257613b21614f94565b5b6000613b308582860161397b565b9250506020613b418582860161397b565b9150509250929050565b600080600060608486031215613b6457613b63614f94565b5b6000613b728682870161397b565b9350506020613b838682870161397b565b9250506040613b9486828701613a9c565b9150509250925092565b60008060008060808587031215613bb857613bb7614f94565b5b6000613bc68782880161397b565b9450506020613bd78782880161397b565b9350506040613be887828801613a9c565b925050606085013567ffffffffffffffff811115613c0957613c08614f8f565b5b613c1587828801613a40565b91505092959194509250565b60008060408385031215613c3857613c37614f94565b5b6000613c468582860161397b565b9250506020613c5785828601613a01565b9150509250929050565b60008060408385031215613c7857613c77614f94565b5b6000613c868582860161397b565b9250506020613c9785828601613a9c565b9150509250929050565b600060208284031215613cb757613cb6614f94565b5b600082013567ffffffffffffffff811115613cd557613cd4614f8f565b5b613ce1848285016139a5565b91505092915050565b600060208284031215613d0057613cff614f94565b5b600082013567ffffffffffffffff811115613d1e57613d1d614f8f565b5b613d2a848285016139d3565b91505092915050565b60008060408385031215613d4a57613d49614f94565b5b600083013567ffffffffffffffff811115613d6857613d67614f8f565b5b613d74858286016139d3565b925050602083013567ffffffffffffffff811115613d9557613d94614f8f565b5b613da1858286016139d3565b9150509250929050565b600080600060608486031215613dc457613dc3614f94565b5b600084013567ffffffffffffffff811115613de257613de1614f8f565b5b613dee868287016139d3565b935050602084013567ffffffffffffffff811115613e0f57613e0e614f8f565b5b613e1b868287016139d3565b9250506040613e2c8682870161397b565b9150509250925092565b600060208284031215613e4c57613e4b614f94565b5b6000613e5a84828501613a16565b91505092915050565b600060208284031215613e7957613e78614f94565b5b6000613e8784828501613a2b565b91505092915050565b600060208284031215613ea657613ea5614f94565b5b600082013567ffffffffffffffff811115613ec457613ec3614f8f565b5b613ed084828501613a6e565b91505092915050565b600060208284031215613eef57613eee614f94565b5b6000613efd84828501613a9c565b91505092915050565b6000613f128383613f45565b60208301905092915050565b6000613f2a83836144dc565b60208301905092915050565b613f3f81614cd3565b82525050565b613f4e81614cd3565b82525050565b6000613f5f82614b2f565b613f698185614b75565b9350613f7483614b0f565b8060005b83811015613fa5578151613f8c8882613f06565b9750613f9783614b5b565b925050600181019050613f78565b5085935050505092915050565b6000613fbd82614b3a565b613fc78185614b80565b9350613fd283614b1f565b8060005b83811015614003578151613fea8882613f1e565b9750613ff583614b68565b925050600181019050613fd6565b5085935050505092915050565b61401981614ce5565b82525050565b600061402a82614b45565b6140348185614b91565b9350614044818560208601614d56565b61404d81614f99565b840191505092915050565b600061406382614b50565b61406d8185614ba2565b935061407d818560208601614d56565b61408681614f99565b840191505092915050565b600061409c82614b50565b6140a68185614bb3565b93506140b6818560208601614d56565b80840191505092915050565b60006140cf601483614ba2565b91506140da82614faa565b602082019050919050565b60006140f2602b83614ba2565b91506140fd82614fd3565b604082019050919050565b6000614115603283614ba2565b915061412082615022565b604082019050919050565b6000614138602683614ba2565b915061414382615071565b604082019050919050565b600061415b602583614ba2565b9150614166826150c0565b604082019050919050565b600061417e601c83614ba2565b91506141898261510f565b602082019050919050565b60006141a1602483614ba2565b91506141ac82615138565b604082019050919050565b60006141c4601983614ba2565b91506141cf82615187565b602082019050919050565b60006141e7602583614ba2565b91506141f2826151b0565b604082019050919050565b600061420a602183614ba2565b9150614215826151ff565b604082019050919050565b600061422d602483614ba2565b91506142388261524e565b604082019050919050565b6000614250602c83614ba2565b915061425b8261529d565b604082019050919050565b6000614273600883614ba2565b915061427e826152ec565b602082019050919050565b6000614296601083614ba2565b91506142a182615315565b602082019050919050565b60006142b9601683614ba2565b91506142c48261533e565b602082019050919050565b60006142dc603883614ba2565b91506142e782615367565b604082019050919050565b60006142ff601c83614ba2565b915061430a826153b6565b602082019050919050565b6000614322602a83614ba2565b915061432d826153df565b604082019050919050565b6000614345602983614ba2565b91506143508261542e565b604082019050919050565b6000614368601783614ba2565b91506143738261547d565b602082019050919050565b600061438b601383614ba2565b9150614396826154a6565b602082019050919050565b60006143ae602083614ba2565b91506143b9826154cf565b602082019050919050565b60006143d1602183614ba2565b91506143dc826154f8565b604082019050919050565b60006143f4602c83614ba2565b91506143ff82615547565b604082019050919050565b6000614417602083614ba2565b915061442282615596565b602082019050919050565b600061443a602f83614ba2565b9150614445826155bf565b604082019050919050565b600061445d604983614ba2565b91506144688261560e565b606082019050919050565b6000614480602183614ba2565b915061448b82615683565b604082019050919050565b60006144a3603183614ba2565b91506144ae826156d2565b604082019050919050565b60006144c6602c83614ba2565b91506144d182615721565b604082019050919050565b6144e581614d3d565b82525050565b6144f481614d3d565b82525050565b60006145068284613f54565b915081905092915050565b600061451d8285614091565b91506145298284614091565b91508190509392505050565b600060208201905061454a6000830184613f36565b92915050565b60006060820190506145656000830186613f36565b6145726020830185613f36565b61457f60408301846144eb565b949350505050565b600060808201905061459c6000830187613f36565b6145a96020830186613f36565b6145b660408301856144eb565b81810360608301526145c8818461401f565b905095945050505050565b600060608201905081810360008301526145ed8186613fb2565b905081810360208301526146018185613fb2565b90506146106040830184613f36565b949350505050565b600060208201905061462d6000830184614010565b92915050565b6000602082019050818103600083015261464d8184614058565b905092915050565b6000602082019050818103600083015261466e816140c2565b9050919050565b6000602082019050818103600083015261468e816140e5565b9050919050565b600060208201905081810360008301526146ae81614108565b9050919050565b600060208201905081810360008301526146ce8161412b565b9050919050565b600060208201905081810360008301526146ee8161414e565b9050919050565b6000602082019050818103600083015261470e81614171565b9050919050565b6000602082019050818103600083015261472e81614194565b9050919050565b6000602082019050818103600083015261474e816141b7565b9050919050565b6000602082019050818103600083015261476e816141da565b9050919050565b6000602082019050818103600083015261478e816141fd565b9050919050565b600060208201905081810360008301526147ae81614220565b9050919050565b600060208201905081810360008301526147ce81614243565b9050919050565b600060208201905081810360008301526147ee81614266565b9050919050565b6000602082019050818103600083015261480e81614289565b9050919050565b6000602082019050818103600083015261482e816142ac565b9050919050565b6000602082019050818103600083015261484e816142cf565b9050919050565b6000602082019050818103600083015261486e816142f2565b9050919050565b6000602082019050818103600083015261488e81614315565b9050919050565b600060208201905081810360008301526148ae81614338565b9050919050565b600060208201905081810360008301526148ce8161435b565b9050919050565b600060208201905081810360008301526148ee8161437e565b9050919050565b6000602082019050818103600083015261490e816143a1565b9050919050565b6000602082019050818103600083015261492e816143c4565b9050919050565b6000602082019050818103600083015261494e816143e7565b9050919050565b6000602082019050818103600083015261496e8161440a565b9050919050565b6000602082019050818103600083015261498e8161442d565b9050919050565b600060208201905081810360008301526149ae81614450565b9050919050565b600060208201905081810360008301526149ce81614473565b9050919050565b600060208201905081810360008301526149ee81614496565b9050919050565b60006020820190508181036000830152614a0e816144b9565b9050919050565b6000602082019050614a2a60008301846144eb565b92915050565b6000614a3a614a4b565b9050614a468282614dbb565b919050565b6000604051905090565b600067ffffffffffffffff821115614a7057614a6f614f51565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a9c57614a9b614f51565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ac857614ac7614f51565b5b614ad182614f99565b9050602081019050919050565b600067ffffffffffffffff821115614af957614af8614f51565b5b614b0282614f99565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bc982614d3d565b9150614bd483614d3d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c0957614c08614e66565b5b828201905092915050565b6000614c1f82614d3d565b9150614c2a83614d3d565b925082614c3a57614c39614e95565b5b828204905092915050565b6000614c5082614d3d565b9150614c5b83614d3d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c9457614c93614e66565b5b828202905092915050565b6000614caa82614d3d565b9150614cb583614d3d565b925082821015614cc857614cc7614e66565b5b828203905092915050565b6000614cde82614d1d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d74578082015181840152602081019050614d59565b83811115614d83576000848401525b50505050565b60006002820490506001821680614da157607f821691505b60208210811415614db557614db4614ec4565b5b50919050565b614dc482614f99565b810181811067ffffffffffffffff82111715614de357614de2614f51565b5b80604052505050565b6000614df782614d3d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614e66565b5b600182019050919050565b6000614e4082614d3d565b9150614e4b83614d3d565b925082614e5b57614e5a614e95565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206f776e20746865204f472054726f6f7072207573656420666f722060008201527f737061776e000000000000000000000000000000000000000000000000000000602082015250565b7f54726f6f707220746f6b656e20686173206265656e2075736564206265666f7260008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206f776e20746865204d6963726f626573207573656420666f72207360008201527f7061776e00000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f63616e27742073656e6420656d707479206c6973747300000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6e6565642061646472657373657320746f2061697264726f7020746f00000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e657720737570706c792063616e206e6f742062652030000000000000000000600082015250565b7f737061776e206973206e6f742061637469766500000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f63616e27742061697264726f70206d6f7265207468616e20617661696c61626c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6d7573742073656e6420666f7572204d6963726f62657320706572204f47205460008201527f726f6f7072206f72206f6e6520676f6c64656e206d6963726f6265207065722060208201527f4f472054726f6f70720000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61577981614cd3565b811461578457600080fd5b50565b61579081614ce5565b811461579b57600080fd5b50565b6157a781614cf1565b81146157b257600080fd5b50565b6157be81614d3d565b81146157c957600080fd5b5056fea2646970667358221220501ca311e488af314c324b01e3d23f8bfeea8e341248fd55c06dc412c55297bc64736f6c63430008070033
Deployed Bytecode Sourcemap
45738:6200:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47036:314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33701:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47354:120;;;:::i;:::-;;51604:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20937:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22304:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21907:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49851:1306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34285:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22974:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48678:505;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33985:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46165:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51748:187;;;:::i;:::-;;45960:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49187:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23316:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34451:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48354:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46927:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40349:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20671:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51416:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47478:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20433:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43012:91;;;:::i;:::-;;47821:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42417:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49519:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46232:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21082:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51288:124;;;:::i;:::-;;22565:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46200:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23520:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47726:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46071:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46120:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48034:316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21233:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22767:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43246:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47036:314;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47120:1:::1;47105:5;:12;:16;47097:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;47203:12;;47187:5;:12;47165:19;:9;:17;:19::i;:::-;:34;;;;:::i;:::-;:50;;47157:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;47261:9;47256:69;47280:5;:12;47276:1;:16;47256:69;;;47302:19;47312:5;47318:1;47312:8;;;;;;;;:::i;:::-;;;;;;;;47302:9;:19::i;:::-;47294:3;;;;;:::i;:::-;;;;47256:69;;;;47340:5;47332:14;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;47036:314:::0;:::o;33701:212::-;33803:4;33834:35;33819:50;;;:11;:50;;;;:90;;;;33873:36;33897:11;33873:23;:36::i;:::-;33819:90;33812:97;;33701:212;;;:::o;47354:120::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47419:12:::1;;;;;;;;;;;47418:13;47403:12;;:28;;;;;;;;;;;;;;;;;;47439:31;47457:12;;;;;;;;;;;47439:31;;;;;;:::i;:::-;;;;;;;;47354:120::o:0;51604:140::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51691:10:::1;51675:13;;:26;;;;;;;;;;;;;;;;;;51709:31;51729:10;51709:31;;;;;;:::i;:::-;;;;;;;;51604:140:::0;:::o;20937:88::-;20991:13;21016:5;21009:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20937:88;:::o;22304:201::-;22380:7;22400:16;22408:7;22400;:16::i;:::-;22392:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22477:15;:24;22493:7;22477:24;;;;;;;;;;;;;;;;;;;;;22470:31;;22304:201;;;:::o;21907:343::-;21980:13;21996:23;22011:7;21996:14;:23::i;:::-;21980:39;;22036:5;22030:11;;:2;:11;;;;22022:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22110:5;22094:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22119:37;22136:5;22143:12;:10;:12::i;:::-;22119:16;:37::i;:::-;22094:62;22084:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;22225:21;22234:2;22238:7;22225:8;:21::i;:::-;21977:273;21907:343;;:::o;49851:1306::-;49961:14;49978:10;49961:27;;49999:12;;;;;;;;;;;49991:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;50046:51;50070:12;50084;50046:23;:51::i;:::-;50038:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50135:70;50178:12;50192;50135:42;:70::i;:::-;50127:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;50294:44;50325:12;50294:30;:44::i;:::-;50286:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;50390:45;50422:12;50390:31;:45::i;:::-;50382:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;50489:39;50515:12;50489:25;:39::i;:::-;50488:40;50480:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50569:20;50592:19;:9;:17;:19::i;:::-;50569:42;;50660:12;;50637;:19;50622:12;:34;;;;:::i;:::-;:50;;50614:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50732:12;:19;50710:11;:19;50722:6;50710:19;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;50688:11;:19;50700:6;50688:19;;;;;;;;;;;;;;;:63;;;;50759:9;50754:78;50778:12;:19;50774:1;:23;50754:78;;;50807:21;50817:10;50807:9;:21::i;:::-;50799:3;;;;;:::i;:::-;;;;50754:78;;;;50839:9;50834:165;50858:12;:19;50854:1;:23;50834:165;;;50887:19;50909:12;50922:1;50909:15;;;;;;;;:::i;:::-;;;;;;;;50887:37;;50927:8;;;;;;;;;;;:25;;;50953:13;50968;;;;;;;;;;;50983:11;50927:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50884:115;50879:3;;;;;:::i;:::-;;;;50834:165;;;;51006:9;51001:89;51025:12;:19;51021:1;:23;51001:89;;;51082:4;51054:8;:25;51063:12;51076:1;51063:15;;;;;;;;:::i;:::-;;;;;;;;51054:25;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;51046:3;;;;;:::i;:::-;;;;51001:89;;;;51103:6;51097:56;;;51111:12;51125;51139:13;51097:56;;;;;;;;:::i;:::-;;;;;;;;49958:1199;;49851:1306;;;:::o;34285:101::-;34346:7;34365:10;:17;;;;34358:24;;34285:101;:::o;22974:283::-;23125:41;23144:12;:10;:12::i;:::-;23158:7;23125:18;:41::i;:::-;23117:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23225:28;23235:4;23241:2;23245:7;23225:9;:28::i;:::-;22974:283;;;:::o;48678:505::-;48810:4;48819:30;48852:44;48884:11;48852:31;:44::i;:::-;48819:77;;48899:31;48933:45;48966:11;48933:32;:45::i;:::-;48899:79;;49060:1;49034:23;:27;;;;:::i;:::-;49013:10;:17;:49;;;;:::i;:::-;48987:22;:75;:156;;;;;49141:1;49115:22;49095:10;:17;:42;;;;:::i;:::-;49094:48;;;;:::i;:::-;49066:23;:77;48987:156;48983:180;;;49155:4;49148:11;;;;;;48983:180;49172:5;49165:12;;;;48678:505;;;;;:::o;33985:236::-;34082:7;34110:23;34127:5;34110:16;:23::i;:::-;34102:5;:31;34094:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34191:12;:19;34204:5;34191:19;;;;;;;;;;;;;;;:26;34211:5;34191:26;;;;;;;;;;;;34184:33;;33985:236;;;;:::o;46165:32::-;;;;;;;;;;;;;:::o;51748:187::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51822:1:::1;51798:21;:25;51790:34;;;::::0;::::1;;51827:15;51845:21;51827:39;;51877:10;51869:28;;:37;51898:7;51869:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51914:17;51923:7;51914:17;;;;;;:::i;:::-;;;;;;;;51787:148;51748:187::o:0;45960:35::-;;;;:::o;49187:328::-;49275:4;49284:12;49299:5;49284:20;;49307:14;49324:10;49307:27;;49342:9;49337:158;49361:8;:15;49357:1;:19;49337:158;;;49425:6;49392:39;;:8;;;;;;;;;;;:16;;;49409:8;49418:1;49409:11;;;;;;;;:::i;:::-;;;;;;;;49392:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;49386:106;;49447:5;49437:15;;49455:5;;49386:106;49484:4;49474:14;;49378:3;;;;;:::i;:::-;;;;49337:158;;;;49504:7;49497:14;;;;49187:328;;;:::o;23316:145::-;23418:39;23435:4;23441:2;23445:7;23418:39;;;;;;;;;;;;:16;:39::i;:::-;23316:145;;;:::o;34451:213::-;34526:7;34554:30;:28;:30::i;:::-;34546:5;:38;34538:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34643:10;34654:5;34643:17;;;;;;;;:::i;:::-;;;;;;;;;;34636:24;;34451:213;;;:::o;48354:320::-;48447:7;48459:31;48493:1;48459:35;;48502:9;48497:141;48521:11;:18;48517:1;:22;48497:141;;;48570:3;48553:11;48565:1;48553:14;;;;;;;;:::i;:::-;;;;;;;;:20;48549:86;;;48630:1;48604:23;:27;;;;:::i;:::-;48578:53;;48549:86;48541:3;;;;;:::i;:::-;;;;48497:141;;;;48647:23;48640:30;;;48354:320;;;:::o;46927:105::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47000:4:::1;46987:10;:17;;;;;;;;;;;;:::i;:::-;;47012:16;47023:4;47012:16;;;;;;:::i;:::-;;;;;;;;46927:105:::0;:::o;40349:74::-;40396:4;40412:7;;;;;;;;;;;40405:14;;40349:74;:::o;20671:211::-;20743:7;20755:13;20771:7;:16;20779:7;20771:16;;;;;;;;;;;;;;;;;;;;;20755:32;;20815:1;20798:19;;:5;:19;;;;20790:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20873:5;20866:12;;;20671:211;;;:::o;51416:184::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51504:1:::1;51492:9;:13;51484:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;51551:9;51536:12;:24;;;;51568:28;51586:9;51568:28;;;;;;:::i;:::-;;;;;;;;51416:184:::0;:::o;47478:244::-;47561:4;47570:15;47588:5;47570:23;;47601:9;47596:103;47620:8;:15;47616:1;:19;47596:103;;;47649:8;:21;47658:8;47667:1;47658:11;;;;;;;;:::i;:::-;;;;;;;;47649:21;;;;;;;;;;;;;;;;;;;;;47645:51;;;47688:4;47675:17;;47645:51;47637:3;;;;;:::i;:::-;;;;47596:103;;;;47708:10;47701:17;;;47478:244;;;:::o;20433:188::-;20505:7;20542:1;20525:19;;:5;:19;;;;20517:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20601:9;:16;20611:5;20601:16;;;;;;;;;;;;;;;;20594:23;;20433:188;;;:::o;43012:91::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43069:30:::1;43096:1;43069:18;:30::i;:::-;43012:91::o:0;47821:209::-;47933:4;47967:1;47946:11;:18;:22;:46;;;;;47991:1;47972:9;:16;:20;47946:46;47942:70;;;48004:4;47997:11;;;;47942:70;48021:5;48014:12;;47821:209;;;;;:::o;42417:75::-;42463:7;42482:6;;;;;;;;;;;42475:13;;42417:75;:::o;49519:328::-;49608:4;49617:12;49632:5;49617:20;;49640:14;49657:10;49640:27;;49675:9;49670:157;49694:8;:15;49690:1;:19;49670:157;;;49757:6;49725:38;;:7;;;;;;;;;;;:15;;;49741:8;49750:1;49741:11;;;;;;;;:::i;:::-;;;;;;;;49725:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;;49719:105;;49779:5;49769:15;;49787:5;;49719:105;49816:4;49806:14;;49711:3;;;;;:::i;:::-;;;;49670:157;;;;49836:7;49829:14;;;;49519:328;;;:::o;46232:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21082:92::-;21138:13;21163:7;21156:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21082:92;:::o;51288:124::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51339:8:::1;:6;:8::i;:::-;:32;;51363:8;:6;:8::i;:::-;51339:32;;;51350:10;:8;:10::i;:::-;51339:32;51379:29;51399:8;:6;:8::i;:::-;51379:29;;;;;;:::i;:::-;;;;;;;;51288:124::o:0;22565:143::-;22652:52;22671:12;:10;:12::i;:::-;22685:8;22695;22652:18;:52::i;:::-;22565:143;;:::o;46200:27::-;;;;:::o;23520:272::-;23651:41;23670:12;:10;:12::i;:::-;23684:7;23651:18;:41::i;:::-;23643:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23749:39;23763:4;23769:2;23773:7;23782:5;23749:13;:39::i;:::-;23520:272;;;;:::o;47726:91::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47795:8:::1;:18;47804:8;47795:18;;;;;;;;;;;;47788:25;;;;;;;;;;;47726:91:::0;:::o;46071:46::-;;;;;;;;;;;;;;;;;:::o;46120:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;48034:316::-;48126:7;48138:30;48171:1;48138:34;;48180:9;48175:140;48199:11;:18;48195:1;:22;48175:140;;;48249:3;48231:11;48243:1;48231:14;;;;;;;;:::i;:::-;;;;;;;;:21;48227:85;;48307:1;48282:22;:26;;;;:::i;:::-;48257:51;;48227:85;48219:3;;;;;:::i;:::-;;;;48175:140;;;;48324:22;48317:29;;;48034:316;;;:::o;21233:306::-;21306:13;21332:16;21340:7;21332;:16::i;:::-;21324:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21405:21;21429:10;:8;:10::i;:::-;21405:34;;21473:1;21455:7;21449:21;:25;:86;;;;;;;;;;;;;;;;;21501:7;21510:18;:7;:16;:18::i;:::-;21484:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21449:86;21442:93;;;21233:306;;;:::o;22767:152::-;22864:4;22880:18;:25;22899:5;22880:25;;;;;;;;;;;;;;;:35;22906:8;22880:35;;;;;;;;;;;;;;;;;;;;;;;;;22873:42;;22767:152;;;;:::o;43246:181::-;42616:12;:10;:12::i;:::-;42605:23;;:7;:5;:7::i;:::-;:23;;;42597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43347:1:::1;43327:22;;:8;:22;;;;43319:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43395:28;43414:8;43395:18;:28::i;:::-;43246:181:::0;:::o;15880:86::-;15933:7;15952:10;15945:17;;15880:86;:::o;44579:102::-;44644:7;44663;:14;;;44656:21;;44579:102;;;:::o;51161:123::-;51204:21;:9;:19;:21::i;:::-;51228:10;51241:19;:9;:17;:19::i;:::-;51228:32;;51263:17;51273:2;51277;51263:9;:17::i;:::-;51201:83;51161:123;:::o;20124:257::-;20226:4;20258:25;20243:40;;;:11;:40;;;;:93;;;;20303:33;20288:48;;;:11;:48;;;;20243:93;:134;;;;20341:36;20365:11;20341:23;:36::i;:::-;20243:134;20235:142;;20124:257;;;:::o;25222:115::-;25287:4;25331:1;25303:30;;:7;:16;25311:7;25303:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25296:37;;25222:115;;;:::o;28912:154::-;29006:2;28979:15;:24;28995:7;28979:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29054:7;29050:2;29016:46;;29025:23;29040:7;29025:14;:23::i;:::-;29016:46;;;;;;;;;;;;28912:154;;:::o;25492:320::-;25585:4;25602:16;25610:7;25602;:16::i;:::-;25594:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25670:13;25686:23;25701:7;25686:14;:23::i;:::-;25670:39;;25731:5;25720:16;;:7;:16;;;:51;;;;25764:7;25740:31;;:20;25752:7;25740:11;:20::i;:::-;:31;;;25720:51;:87;;;;25775:32;25792:5;25799:7;25775:16;:32::i;:::-;25720:87;25712:96;;;25492:320;;;;:::o;28293:513::-;28416:4;28389:31;;:23;28404:7;28389:14;:23::i;:::-;:31;;;28381:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28487:1;28473:16;;:2;:16;;;;28465:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28535:39;28556:4;28562:2;28566:7;28535:20;:39::i;:::-;28623:29;28640:1;28644:7;28623:8;:29::i;:::-;28676:1;28657:9;:15;28667:4;28657:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28697:1;28680:9;:13;28690:2;28680:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28720:2;28701:7;:16;28709:7;28701:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28751:7;28747:2;28732:27;;28741:4;28732:27;;;;;;;;;;;;28764:38;28784:4;28790:2;28794:7;28764:19;:38::i;:::-;28293:513;;;:::o;43575:163::-;43641:16;43660:6;;;;;;;;;;;43641:25;;43678:8;43669:6;;:17;;;;;;;;;;;;;;;;;;43725:8;43694:40;;43715:8;43694:40;;;;;;;;;;;;43638:100;43575:163;:::o;41061:98::-;40643:8;:6;:8::i;:::-;40642:9;40634:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;41123:4:::1;41113:7;;:14;;;;;;;;;;;;;;;;;;41135:20;41142:12;:10;:12::i;:::-;41135:20;;;;;;:::i;:::-;;;;;;;;41061:98::o:0;41288:100::-;40888:8;:6;:8::i;:::-;40880:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;41349:5:::1;41339:7;;:15;;;;;;;;;;;;;;;;;;41362:22;41371:12;:10;:12::i;:::-;41362:22;;;;;;:::i;:::-;;;;;;;;41288:100::o:0;29196:259::-;29315:8;29306:17;;:5;:17;;;;29298:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29394:8;29356:18;:25;29375:5;29356:25;;;;;;;;;;;;;;;:35;29382:8;29356:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29432:8;29410:41;;29425:5;29410:41;;;29442:8;29410:41;;;;;;:::i;:::-;;;;;;;;29196:259;;;:::o;24662:::-;24775:28;24785:4;24791:2;24795:7;24775:9;:28::i;:::-;24814:48;24837:4;24843:2;24847:7;24856:5;24814:22;:48::i;:::-;24806:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24662:259;;;;:::o;46832:91::-;46884:13;46909:10;46902:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46832:91;:::o;16421:551::-;16477:13;16683:1;16674:5;:10;16670:33;;;16689:10;;;;;;;;;;;;;;;;;;;;;16670:33;16705:12;16720:5;16705:20;;16728:14;16745:46;16760:1;16752:4;:9;16745:46;;16766:8;;;;;:::i;:::-;;;;16785:2;16777:10;;;;;:::i;:::-;;;16745:46;;;16793:19;16825:6;16815:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16793:39;;16835:110;16851:1;16842:5;:10;16835:110;;16867:1;16857:11;;;;;:::i;:::-;;;16922:2;16914:5;:10;;;;:::i;:::-;16901:2;:24;;;;:::i;:::-;16888:39;;16871:6;16878;16871:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16939:2;16930:11;;;;;:::i;:::-;;;16835:110;;;16961:6;16947:21;;;;;16421:551;;;;:::o;44685:95::-;44772:1;44754:7;:14;;;:19;;;;;;;;;;;44685:95;:::o;26142:98::-;26210:26;26220:2;26224:7;26210:26;;;;;;;;;;;;:9;:26::i;:::-;26142:98;;:::o;18661:145::-;18746:4;18777:25;18762:40;;;:11;:40;;;;18755:47;;18661:145;;;:::o;35265:453::-;35373:45;35400:4;35406:2;35410:7;35373:26;:45::i;:::-;35443:1;35427:18;;:4;:18;;;35423:147;;;35450:40;35482:7;35450:31;:40::i;:::-;35423:147;;;35512:2;35504:10;;:4;:10;;;35500:70;;35519:47;35552:4;35558:7;35519:32;:47::i;:::-;35500:70;35423:147;35590:1;35576:16;;:2;:16;;;35572:143;;;35597:45;35634:7;35597:36;:45::i;:::-;35572:143;;;35662:4;35656:10;;:2;:10;;;35652:63;;35671:40;35699:2;35703:7;35671:27;:40::i;:::-;35652:63;35572:143;35265:453;;;:::o;31578:97::-;;;;:::o;30008:539::-;30127:4;30140:15;:2;:13;;;:15::i;:::-;30136:408;;;30180:2;30164:36;;;30201:12;:10;:12::i;:::-;30215:4;30221:7;30230:5;30164:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30160:357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30379:1;30362:6;:13;:18;30358:156;;;30385:60;;;;;;;;;;:::i;:::-;;;;;;;;30358:156;30500:6;30494:13;30485:6;30481:2;30477:15;30470:38;30160:357;30281:41;;;30271:51;;;:6;:51;;;;30264:58;;;;;30136:408;30536:4;30529:11;;30008:539;;;;;;;:::o;26455:241::-;26549:18;26555:2;26559:7;26549:5;:18::i;:::-;26580:54;26611:1;26615:2;26619:7;26628:5;26580:22;:54::i;:::-;26570:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26455:241;;;:::o;31107:98::-;;;;:::o;36389:144::-;36485:10;:17;;;;36458:15;:24;36474:7;36458:24;;;;;;;;;;;:44;;;;36505:10;36521:7;36505:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36389:144;:::o;37148:868::-;37390:22;37440:1;37415:22;37432:4;37415:16;:22::i;:::-;:26;;;;:::i;:::-;37390:51;;37444:18;37465:17;:26;37483:7;37465:26;;;;;;;;;;;;37444:47;;37596:14;37582:10;:28;37578:284;;37615:19;37637:12;:18;37650:4;37637:18;;;;;;;;;;;;;;;:34;37656:14;37637:34;;;;;;;;;;;;37615:56;;37709:11;37676:12;:18;37689:4;37676:18;;;;;;;;;;;;;;;:30;37695:10;37676:30;;;;;;;;;;;:44;;;;37814:10;37781:17;:30;37799:11;37781:30;;;;;;;;;;;:43;;;;37612:250;37578:284;37942:17;:26;37960:7;37942:26;;;;;;;;;;;37935:33;;;37978:12;:18;37991:4;37978:18;;;;;;;;;;;;;;;:34;37997:14;37978:34;;;;;;;;;;;37971:41;;;37229:787;;37148:868;;:::o;38299:971::-;38528:22;38573:1;38553:10;:17;;;;:21;;;;:::i;:::-;38528:46;;38577:18;38598:15;:24;38614:7;38598:24;;;;;;;;;;;;38577:45;;38917:19;38939:10;38950:14;38939:26;;;;;;;;:::i;:::-;;;;;;;;;;38917:48;;38995:11;38970:10;38981;38970:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39098:10;39067:15;:28;39083:11;39067:28;;;;;;;;;;;:41;;;;39223:15;:24;39239:7;39223:24;;;;;;;;;;;39216:31;;;39250:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38370:900;;;38299:971;:::o;36007:193::-;36084:14;36101:20;36118:2;36101:16;:20::i;:::-;36084:37;;36151:7;36124:12;:16;36137:2;36124:16;;;;;;;;;;;;;;;:24;36141:6;36124:24;;;;;;;;;;;:34;;;;36190:6;36161:17;:26;36179:7;36161:26;;;;;;;;;;;:35;;;;36081:119;36007:193;;:::o;8633:290::-;8693:4;8918:1;8896:7;:19;;;:23;8889:30;;8633:290;;;:::o;27020:379::-;27106:1;27092:16;;:2;:16;;;;27084:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27157:16;27165:7;27157;:16::i;:::-;27156:17;27148:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27211:45;27240:1;27244:2;27248:7;27211:20;:45::i;:::-;27278:1;27261:9;:13;27271:2;27261:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27301:2;27282:7;:16;27290:7;27282:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27338:7;27334:2;27313:33;;27330:1;27313:33;;;;;;;;;;;;27351:44;27379:1;27383:2;27387:7;27351:19;:44::i;:::-;27020:379;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2476:143::-;2533:5;2564:6;2558:13;2549:22;;2580:33;2607:5;2580:33;:::i;:::-;2476:143;;;;:::o;2642:370::-;2713:5;2762:3;2755:4;2747:6;2743:17;2739:27;2729:122;;2770:79;;:::i;:::-;2729:122;2887:6;2874:20;2912:94;3002:3;2994:6;2987:4;2979:6;2975:17;2912:94;:::i;:::-;2903:103;;2719:293;2642:370;;;;:::o;3035:::-;3106:5;3155:3;3148:4;3140:6;3136:17;3132:27;3122:122;;3163:79;;:::i;:::-;3122:122;3280:6;3267:20;3305:94;3395:3;3387:6;3380:4;3372:6;3368:17;3305:94;:::i;:::-;3296:103;;3112:293;3035:370;;;;:::o;3411:133::-;3454:5;3492:6;3479:20;3470:29;;3508:30;3532:5;3508:30;:::i;:::-;3411:133;;;;:::o;3550:137::-;3595:5;3633:6;3620:20;3611:29;;3649:32;3675:5;3649:32;:::i;:::-;3550:137;;;;:::o;3693:141::-;3749:5;3780:6;3774:13;3765:22;;3796:32;3822:5;3796:32;:::i;:::-;3693:141;;;;:::o;3853:338::-;3908:5;3957:3;3950:4;3942:6;3938:17;3934:27;3924:122;;3965:79;;:::i;:::-;3924:122;4082:6;4069:20;4107:78;4181:3;4173:6;4166:4;4158:6;4154:17;4107:78;:::i;:::-;4098:87;;3914:277;3853:338;;;;:::o;4211:340::-;4267:5;4316:3;4309:4;4301:6;4297:17;4293:27;4283:122;;4324:79;;:::i;:::-;4283:122;4441:6;4428:20;4466:79;4541:3;4533:6;4526:4;4518:6;4514:17;4466:79;:::i;:::-;4457:88;;4273:278;4211:340;;;;:::o;4557:139::-;4603:5;4641:6;4628:20;4619:29;;4657:33;4684:5;4657:33;:::i;:::-;4557:139;;;;:::o;4702:329::-;4761:6;4810:2;4798:9;4789:7;4785:23;4781:32;4778:119;;;4816:79;;:::i;:::-;4778:119;4936:1;4961:53;5006:7;4997:6;4986:9;4982:22;4961:53;:::i;:::-;4951:63;;4907:117;4702:329;;;;:::o;5037:351::-;5107:6;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:64;5363:7;5354:6;5343:9;5339:22;5307:64;:::i;:::-;5297:74;;5253:128;5037:351;;;;:::o;5394:474::-;5462:6;5470;5519:2;5507:9;5498:7;5494:23;5490:32;5487:119;;;5525:79;;:::i;:::-;5487:119;5645:1;5670:53;5715:7;5706:6;5695:9;5691:22;5670:53;:::i;:::-;5660:63;;5616:117;5772:2;5798:53;5843:7;5834:6;5823:9;5819:22;5798:53;:::i;:::-;5788:63;;5743:118;5394:474;;;;;:::o;5874:619::-;5951:6;5959;5967;6016:2;6004:9;5995:7;5991:23;5987:32;5984:119;;;6022:79;;:::i;:::-;5984:119;6142:1;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6113:117;6269:2;6295:53;6340:7;6331:6;6320:9;6316:22;6295:53;:::i;:::-;6285:63;;6240:118;6397:2;6423:53;6468:7;6459:6;6448:9;6444:22;6423:53;:::i;:::-;6413:63;;6368:118;5874:619;;;;;:::o;6499:943::-;6594:6;6602;6610;6618;6667:3;6655:9;6646:7;6642:23;6638:33;6635:120;;;6674:79;;:::i;:::-;6635:120;6794:1;6819:53;6864:7;6855:6;6844:9;6840:22;6819:53;:::i;:::-;6809:63;;6765:117;6921:2;6947:53;6992:7;6983:6;6972:9;6968:22;6947:53;:::i;:::-;6937:63;;6892:118;7049:2;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7020:118;7205:2;7194:9;7190:18;7177:32;7236:18;7228:6;7225:30;7222:117;;;7258:79;;:::i;:::-;7222:117;7363:62;7417:7;7408:6;7397:9;7393:22;7363:62;:::i;:::-;7353:72;;7148:287;6499:943;;;;;;;:::o;7448:468::-;7513:6;7521;7570:2;7558:9;7549:7;7545:23;7541:32;7538:119;;;7576:79;;:::i;:::-;7538:119;7696:1;7721:53;7766:7;7757:6;7746:9;7742:22;7721:53;:::i;:::-;7711:63;;7667:117;7823:2;7849:50;7891:7;7882:6;7871:9;7867:22;7849:50;:::i;:::-;7839:60;;7794:115;7448:468;;;;;:::o;7922:474::-;7990:6;7998;8047:2;8035:9;8026:7;8022:23;8018:32;8015:119;;;8053:79;;:::i;:::-;8015:119;8173:1;8198:53;8243:7;8234:6;8223:9;8219:22;8198:53;:::i;:::-;8188:63;;8144:117;8300:2;8326:53;8371:7;8362:6;8351:9;8347:22;8326:53;:::i;:::-;8316:63;;8271:118;7922:474;;;;;:::o;8402:539::-;8486:6;8535:2;8523:9;8514:7;8510:23;8506:32;8503:119;;;8541:79;;:::i;:::-;8503:119;8689:1;8678:9;8674:17;8661:31;8719:18;8711:6;8708:30;8705:117;;;8741:79;;:::i;:::-;8705:117;8846:78;8916:7;8907:6;8896:9;8892:22;8846:78;:::i;:::-;8836:88;;8632:302;8402:539;;;;:::o;8947:::-;9031:6;9080:2;9068:9;9059:7;9055:23;9051:32;9048:119;;;9086:79;;:::i;:::-;9048:119;9234:1;9223:9;9219:17;9206:31;9264:18;9256:6;9253:30;9250:117;;;9286:79;;:::i;:::-;9250:117;9391:78;9461:7;9452:6;9441:9;9437:22;9391:78;:::i;:::-;9381:88;;9177:302;8947:539;;;;:::o;9492:894::-;9610:6;9618;9667:2;9655:9;9646:7;9642:23;9638:32;9635:119;;;9673:79;;:::i;:::-;9635:119;9821:1;9810:9;9806:17;9793:31;9851:18;9843:6;9840:30;9837:117;;;9873:79;;:::i;:::-;9837:117;9978:78;10048:7;10039:6;10028:9;10024:22;9978:78;:::i;:::-;9968:88;;9764:302;10133:2;10122:9;10118:18;10105:32;10164:18;10156:6;10153:30;10150:117;;;10186:79;;:::i;:::-;10150:117;10291:78;10361:7;10352:6;10341:9;10337:22;10291:78;:::i;:::-;10281:88;;10076:303;9492:894;;;;;:::o;10392:1039::-;10519:6;10527;10535;10584:2;10572:9;10563:7;10559:23;10555:32;10552:119;;;10590:79;;:::i;:::-;10552:119;10738:1;10727:9;10723:17;10710:31;10768:18;10760:6;10757:30;10754:117;;;10790:79;;:::i;:::-;10754:117;10895:78;10965:7;10956:6;10945:9;10941:22;10895:78;:::i;:::-;10885:88;;10681:302;11050:2;11039:9;11035:18;11022:32;11081:18;11073:6;11070:30;11067:117;;;11103:79;;:::i;:::-;11067:117;11208:78;11278:7;11269:6;11258:9;11254:22;11208:78;:::i;:::-;11198:88;;10993:303;11335:2;11361:53;11406:7;11397:6;11386:9;11382:22;11361:53;:::i;:::-;11351:63;;11306:118;10392:1039;;;;;:::o;11437:327::-;11495:6;11544:2;11532:9;11523:7;11519:23;11515:32;11512:119;;;11550:79;;:::i;:::-;11512:119;11670:1;11695:52;11739:7;11730:6;11719:9;11715:22;11695:52;:::i;:::-;11685:62;;11641:116;11437:327;;;;:::o;11770:349::-;11839:6;11888:2;11876:9;11867:7;11863:23;11859:32;11856:119;;;11894:79;;:::i;:::-;11856:119;12014:1;12039:63;12094:7;12085:6;12074:9;12070:22;12039:63;:::i;:::-;12029:73;;11985:127;11770:349;;;;:::o;12125:509::-;12194:6;12243:2;12231:9;12222:7;12218:23;12214:32;12211:119;;;12249:79;;:::i;:::-;12211:119;12397:1;12386:9;12382:17;12369:31;12427:18;12419:6;12416:30;12413:117;;;12449:79;;:::i;:::-;12413:117;12554:63;12609:7;12600:6;12589:9;12585:22;12554:63;:::i;:::-;12544:73;;12340:287;12125:509;;;;:::o;12640:329::-;12699:6;12748:2;12736:9;12727:7;12723:23;12719:32;12716:119;;;12754:79;;:::i;:::-;12716:119;12874:1;12899:53;12944:7;12935:6;12924:9;12920:22;12899:53;:::i;:::-;12889:63;;12845:117;12640:329;;;;:::o;12975:195::-;13052:10;13073:54;13123:3;13115:6;13073:54;:::i;:::-;13159:4;13154:3;13150:14;13136:28;;12975:195;;;;:::o;13176:179::-;13245:10;13266:46;13308:3;13300:6;13266:46;:::i;:::-;13344:4;13339:3;13335:14;13321:28;;13176:179;;;;:::o;13361:118::-;13448:24;13466:5;13448:24;:::i;:::-;13443:3;13436:37;13361:118;;:::o;13485:116::-;13570:24;13588:5;13570:24;:::i;:::-;13565:3;13558:37;13485:116;;:::o;13637:776::-;13774:3;13803:54;13851:5;13803:54;:::i;:::-;13873:104;13970:6;13965:3;13873:104;:::i;:::-;13866:111;;14001:56;14051:5;14001:56;:::i;:::-;14080:7;14111:1;14096:292;14121:6;14118:1;14115:13;14096:292;;;14197:6;14191:13;14224:71;14291:3;14276:13;14224:71;:::i;:::-;14217:78;;14318:60;14371:6;14318:60;:::i;:::-;14308:70;;14156:232;14143:1;14140;14136:9;14131:14;;14096:292;;;14100:14;14404:3;14397:10;;13779:634;;;13637:776;;;;:::o;14449:732::-;14568:3;14597:54;14645:5;14597:54;:::i;:::-;14667:86;14746:6;14741:3;14667:86;:::i;:::-;14660:93;;14777:56;14827:5;14777:56;:::i;:::-;14856:7;14887:1;14872:284;14897:6;14894:1;14891:13;14872:284;;;14973:6;14967:13;15000:63;15059:3;15044:13;15000:63;:::i;:::-;14993:70;;15086:60;15139:6;15086:60;:::i;:::-;15076:70;;14932:224;14919:1;14916;14912:9;14907:14;;14872:284;;;14876:14;15172:3;15165:10;;14573:608;;;14449:732;;;;:::o;15187:109::-;15268:21;15283:5;15268:21;:::i;:::-;15263:3;15256:34;15187:109;;:::o;15302:360::-;15388:3;15416:38;15448:5;15416:38;:::i;:::-;15470:70;15533:6;15528:3;15470:70;:::i;:::-;15463:77;;15549:52;15594:6;15589:3;15582:4;15575:5;15571:16;15549:52;:::i;:::-;15626:29;15648:6;15626:29;:::i;:::-;15621:3;15617:39;15610:46;;15392:270;15302:360;;;;:::o;15668:364::-;15756:3;15784:39;15817:5;15784:39;:::i;:::-;15839:71;15903:6;15898:3;15839:71;:::i;:::-;15832:78;;15919:52;15964:6;15959:3;15952:4;15945:5;15941:16;15919:52;:::i;:::-;15996:29;16018:6;15996:29;:::i;:::-;15991:3;15987:39;15980:46;;15760:272;15668:364;;;;:::o;16038:377::-;16144:3;16172:39;16205:5;16172:39;:::i;:::-;16227:89;16309:6;16304:3;16227:89;:::i;:::-;16220:96;;16325:52;16370:6;16365:3;16358:4;16351:5;16347:16;16325:52;:::i;:::-;16402:6;16397:3;16393:16;16386:23;;16148:267;16038:377;;;;:::o;16421:366::-;16563:3;16584:67;16648:2;16643:3;16584:67;:::i;:::-;16577:74;;16660:93;16749:3;16660:93;:::i;:::-;16778:2;16773:3;16769:12;16762:19;;16421:366;;;:::o;16793:::-;16935:3;16956:67;17020:2;17015:3;16956:67;:::i;:::-;16949:74;;17032:93;17121:3;17032:93;:::i;:::-;17150:2;17145:3;17141:12;17134:19;;16793:366;;;:::o;17165:::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17165:366;;;:::o;17537:::-;17679:3;17700:67;17764:2;17759:3;17700:67;:::i;:::-;17693:74;;17776:93;17865:3;17776:93;:::i;:::-;17894:2;17889:3;17885:12;17878:19;;17537:366;;;:::o;17909:::-;18051:3;18072:67;18136:2;18131:3;18072:67;:::i;:::-;18065:74;;18148:93;18237:3;18148:93;:::i;:::-;18266:2;18261:3;18257:12;18250:19;;17909:366;;;:::o;18281:::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18281:366;;;:::o;18653:::-;18795:3;18816:67;18880:2;18875:3;18816:67;:::i;:::-;18809:74;;18892:93;18981:3;18892:93;:::i;:::-;19010:2;19005:3;19001:12;18994:19;;18653:366;;;:::o;19025:::-;19167:3;19188:67;19252:2;19247:3;19188:67;:::i;:::-;19181:74;;19264:93;19353:3;19264:93;:::i;:::-;19382:2;19377:3;19373:12;19366:19;;19025:366;;;:::o;19397:::-;19539:3;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19636:93;19725:3;19636:93;:::i;:::-;19754:2;19749:3;19745:12;19738:19;;19397:366;;;:::o;19769:::-;19911:3;19932:67;19996:2;19991:3;19932:67;:::i;:::-;19925:74;;20008:93;20097:3;20008:93;:::i;:::-;20126:2;20121:3;20117:12;20110:19;;19769:366;;;:::o;20141:::-;20283:3;20304:67;20368:2;20363:3;20304:67;:::i;:::-;20297:74;;20380:93;20469:3;20380:93;:::i;:::-;20498:2;20493:3;20489:12;20482:19;;20141:366;;;:::o;20513:::-;20655:3;20676:67;20740:2;20735:3;20676:67;:::i;:::-;20669:74;;20752:93;20841:3;20752:93;:::i;:::-;20870:2;20865:3;20861:12;20854:19;;20513:366;;;:::o;20885:365::-;21027:3;21048:66;21112:1;21107:3;21048:66;:::i;:::-;21041:73;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;20885:365;;;:::o;21256:366::-;21398:3;21419:67;21483:2;21478:3;21419:67;:::i;:::-;21412:74;;21495:93;21584:3;21495:93;:::i;:::-;21613:2;21608:3;21604:12;21597:19;;21256:366;;;:::o;21628:::-;21770:3;21791:67;21855:2;21850:3;21791:67;:::i;:::-;21784:74;;21867:93;21956:3;21867:93;:::i;:::-;21985:2;21980:3;21976:12;21969:19;;21628:366;;;:::o;22000:::-;22142:3;22163:67;22227:2;22222:3;22163:67;:::i;:::-;22156:74;;22239:93;22328:3;22239:93;:::i;:::-;22357:2;22352:3;22348:12;22341:19;;22000:366;;;:::o;22372:::-;22514:3;22535:67;22599:2;22594:3;22535:67;:::i;:::-;22528:74;;22611:93;22700:3;22611:93;:::i;:::-;22729:2;22724:3;22720:12;22713:19;;22372:366;;;:::o;22744:::-;22886:3;22907:67;22971:2;22966:3;22907:67;:::i;:::-;22900:74;;22983:93;23072:3;22983:93;:::i;:::-;23101:2;23096:3;23092:12;23085:19;;22744:366;;;:::o;23116:::-;23258:3;23279:67;23343:2;23338:3;23279:67;:::i;:::-;23272:74;;23355:93;23444:3;23355:93;:::i;:::-;23473:2;23468:3;23464:12;23457:19;;23116:366;;;:::o;23488:::-;23630:3;23651:67;23715:2;23710:3;23651:67;:::i;:::-;23644:74;;23727:93;23816:3;23727:93;:::i;:::-;23845:2;23840:3;23836:12;23829:19;;23488:366;;;:::o;23860:::-;24002:3;24023:67;24087:2;24082:3;24023:67;:::i;:::-;24016:74;;24099:93;24188:3;24099:93;:::i;:::-;24217:2;24212:3;24208:12;24201:19;;23860:366;;;:::o;24232:::-;24374:3;24395:67;24459:2;24454:3;24395:67;:::i;:::-;24388:74;;24471:93;24560:3;24471:93;:::i;:::-;24589:2;24584:3;24580:12;24573:19;;24232:366;;;:::o;24604:::-;24746:3;24767:67;24831:2;24826:3;24767:67;:::i;:::-;24760:74;;24843:93;24932:3;24843:93;:::i;:::-;24961:2;24956:3;24952:12;24945:19;;24604:366;;;:::o;24976:::-;25118:3;25139:67;25203:2;25198:3;25139:67;:::i;:::-;25132:74;;25215:93;25304:3;25215:93;:::i;:::-;25333:2;25328:3;25324:12;25317:19;;24976:366;;;:::o;25348:::-;25490:3;25511:67;25575:2;25570:3;25511:67;:::i;:::-;25504:74;;25587:93;25676:3;25587:93;:::i;:::-;25705:2;25700:3;25696:12;25689:19;;25348:366;;;:::o;25720:::-;25862:3;25883:67;25947:2;25942:3;25883:67;:::i;:::-;25876:74;;25959:93;26048:3;25959:93;:::i;:::-;26077:2;26072:3;26068:12;26061:19;;25720:366;;;:::o;26092:::-;26234:3;26255:67;26319:2;26314:3;26255:67;:::i;:::-;26248:74;;26331:93;26420:3;26331:93;:::i;:::-;26449:2;26444:3;26440:12;26433:19;;26092:366;;;:::o;26464:::-;26606:3;26627:67;26691:2;26686:3;26627:67;:::i;:::-;26620:74;;26703:93;26792:3;26703:93;:::i;:::-;26821:2;26816:3;26812:12;26805:19;;26464:366;;;:::o;26836:::-;26978:3;26999:67;27063:2;27058:3;26999:67;:::i;:::-;26992:74;;27075:93;27164:3;27075:93;:::i;:::-;27193:2;27188:3;27184:12;27177:19;;26836:366;;;:::o;27208:::-;27350:3;27371:67;27435:2;27430:3;27371:67;:::i;:::-;27364:74;;27447:93;27536:3;27447:93;:::i;:::-;27565:2;27560:3;27556:12;27549:19;;27208:366;;;:::o;27580:108::-;27657:24;27675:5;27657:24;:::i;:::-;27652:3;27645:37;27580:108;;:::o;27694:118::-;27781:24;27799:5;27781:24;:::i;:::-;27776:3;27769:37;27694:118;;:::o;27818:335::-;27980:3;28002:125;28123:3;28114:6;28002:125;:::i;:::-;27995:132;;28144:3;28137:10;;27818:335;;;;:::o;28159:435::-;28339:3;28361:95;28452:3;28443:6;28361:95;:::i;:::-;28354:102;;28473:95;28564:3;28555:6;28473:95;:::i;:::-;28466:102;;28585:3;28578:10;;28159:435;;;;;:::o;28600:222::-;28693:4;28731:2;28720:9;28716:18;28708:26;;28744:71;28812:1;28801:9;28797:17;28788:6;28744:71;:::i;:::-;28600:222;;;;:::o;28828:442::-;28977:4;29015:2;29004:9;29000:18;28992:26;;29028:71;29096:1;29085:9;29081:17;29072:6;29028:71;:::i;:::-;29109:72;29177:2;29166:9;29162:18;29153:6;29109:72;:::i;:::-;29191;29259:2;29248:9;29244:18;29235:6;29191:72;:::i;:::-;28828:442;;;;;;:::o;29276:640::-;29471:4;29509:3;29498:9;29494:19;29486:27;;29523:71;29591:1;29580:9;29576:17;29567:6;29523:71;:::i;:::-;29604:72;29672:2;29661:9;29657:18;29648:6;29604:72;:::i;:::-;29686;29754:2;29743:9;29739:18;29730:6;29686:72;:::i;:::-;29805:9;29799:4;29795:20;29790:2;29779:9;29775:18;29768:48;29833:76;29904:4;29895:6;29833:76;:::i;:::-;29825:84;;29276:640;;;;;;;:::o;29922:744::-;30171:4;30209:2;30198:9;30194:18;30186:26;;30258:9;30252:4;30248:20;30244:1;30233:9;30229:17;30222:47;30286:108;30389:4;30380:6;30286:108;:::i;:::-;30278:116;;30441:9;30435:4;30431:20;30426:2;30415:9;30411:18;30404:48;30469:108;30572:4;30563:6;30469:108;:::i;:::-;30461:116;;30587:72;30655:2;30644:9;30640:18;30631:6;30587:72;:::i;:::-;29922:744;;;;;;:::o;30672:210::-;30759:4;30797:2;30786:9;30782:18;30774:26;;30810:65;30872:1;30861:9;30857:17;30848:6;30810:65;:::i;:::-;30672:210;;;;:::o;30888:313::-;31001:4;31039:2;31028:9;31024:18;31016:26;;31088:9;31082:4;31078:20;31074:1;31063:9;31059:17;31052:47;31116:78;31189:4;31180:6;31116:78;:::i;:::-;31108:86;;30888:313;;;;:::o;31207:419::-;31373:4;31411:2;31400:9;31396:18;31388:26;;31460:9;31454:4;31450:20;31446:1;31435:9;31431:17;31424:47;31488:131;31614:4;31488:131;:::i;:::-;31480:139;;31207:419;;;:::o;31632:::-;31798:4;31836:2;31825:9;31821:18;31813:26;;31885:9;31879:4;31875:20;31871:1;31860:9;31856:17;31849:47;31913:131;32039:4;31913:131;:::i;:::-;31905:139;;31632:419;;;:::o;32057:::-;32223:4;32261:2;32250:9;32246:18;32238:26;;32310:9;32304:4;32300:20;32296:1;32285:9;32281:17;32274:47;32338:131;32464:4;32338:131;:::i;:::-;32330:139;;32057:419;;;:::o;32482:::-;32648:4;32686:2;32675:9;32671:18;32663:26;;32735:9;32729:4;32725:20;32721:1;32710:9;32706:17;32699:47;32763:131;32889:4;32763:131;:::i;:::-;32755:139;;32482:419;;;:::o;32907:::-;33073:4;33111:2;33100:9;33096:18;33088:26;;33160:9;33154:4;33150:20;33146:1;33135:9;33131:17;33124:47;33188:131;33314:4;33188:131;:::i;:::-;33180:139;;32907:419;;;:::o;33332:::-;33498:4;33536:2;33525:9;33521:18;33513:26;;33585:9;33579:4;33575:20;33571:1;33560:9;33556:17;33549:47;33613:131;33739:4;33613:131;:::i;:::-;33605:139;;33332:419;;;:::o;33757:::-;33923:4;33961:2;33950:9;33946:18;33938:26;;34010:9;34004:4;34000:20;33996:1;33985:9;33981:17;33974:47;34038:131;34164:4;34038:131;:::i;:::-;34030:139;;33757:419;;;:::o;34182:::-;34348:4;34386:2;34375:9;34371:18;34363:26;;34435:9;34429:4;34425:20;34421:1;34410:9;34406:17;34399:47;34463:131;34589:4;34463:131;:::i;:::-;34455:139;;34182:419;;;:::o;34607:::-;34773:4;34811:2;34800:9;34796:18;34788:26;;34860:9;34854:4;34850:20;34846:1;34835:9;34831:17;34824:47;34888:131;35014:4;34888:131;:::i;:::-;34880:139;;34607:419;;;:::o;35032:::-;35198:4;35236:2;35225:9;35221:18;35213:26;;35285:9;35279:4;35275:20;35271:1;35260:9;35256:17;35249:47;35313:131;35439:4;35313:131;:::i;:::-;35305:139;;35032:419;;;:::o;35457:::-;35623:4;35661:2;35650:9;35646:18;35638:26;;35710:9;35704:4;35700:20;35696:1;35685:9;35681:17;35674:47;35738:131;35864:4;35738:131;:::i;:::-;35730:139;;35457:419;;;:::o;35882:::-;36048:4;36086:2;36075:9;36071:18;36063:26;;36135:9;36129:4;36125:20;36121:1;36110:9;36106:17;36099:47;36163:131;36289:4;36163:131;:::i;:::-;36155:139;;35882:419;;;:::o;36307:::-;36473:4;36511:2;36500:9;36496:18;36488:26;;36560:9;36554:4;36550:20;36546:1;36535:9;36531:17;36524:47;36588:131;36714:4;36588:131;:::i;:::-;36580:139;;36307:419;;;:::o;36732:::-;36898:4;36936:2;36925:9;36921:18;36913:26;;36985:9;36979:4;36975:20;36971:1;36960:9;36956:17;36949:47;37013:131;37139:4;37013:131;:::i;:::-;37005:139;;36732:419;;;:::o;37157:::-;37323:4;37361:2;37350:9;37346:18;37338:26;;37410:9;37404:4;37400:20;37396:1;37385:9;37381:17;37374:47;37438:131;37564:4;37438:131;:::i;:::-;37430:139;;37157:419;;;:::o;37582:::-;37748:4;37786:2;37775:9;37771:18;37763:26;;37835:9;37829:4;37825:20;37821:1;37810:9;37806:17;37799:47;37863:131;37989:4;37863:131;:::i;:::-;37855:139;;37582:419;;;:::o;38007:::-;38173:4;38211:2;38200:9;38196:18;38188:26;;38260:9;38254:4;38250:20;38246:1;38235:9;38231:17;38224:47;38288:131;38414:4;38288:131;:::i;:::-;38280:139;;38007:419;;;:::o;38432:::-;38598:4;38636:2;38625:9;38621:18;38613:26;;38685:9;38679:4;38675:20;38671:1;38660:9;38656:17;38649:47;38713:131;38839:4;38713:131;:::i;:::-;38705:139;;38432:419;;;:::o;38857:::-;39023:4;39061:2;39050:9;39046:18;39038:26;;39110:9;39104:4;39100:20;39096:1;39085:9;39081:17;39074:47;39138:131;39264:4;39138:131;:::i;:::-;39130:139;;38857:419;;;:::o;39282:::-;39448:4;39486:2;39475:9;39471:18;39463:26;;39535:9;39529:4;39525:20;39521:1;39510:9;39506:17;39499:47;39563:131;39689:4;39563:131;:::i;:::-;39555:139;;39282:419;;;:::o;39707:::-;39873:4;39911:2;39900:9;39896:18;39888:26;;39960:9;39954:4;39950:20;39946:1;39935:9;39931:17;39924:47;39988:131;40114:4;39988:131;:::i;:::-;39980:139;;39707:419;;;:::o;40132:::-;40298:4;40336:2;40325:9;40321:18;40313:26;;40385:9;40379:4;40375:20;40371:1;40360:9;40356:17;40349:47;40413:131;40539:4;40413:131;:::i;:::-;40405:139;;40132:419;;;:::o;40557:::-;40723:4;40761:2;40750:9;40746:18;40738:26;;40810:9;40804:4;40800:20;40796:1;40785:9;40781:17;40774:47;40838:131;40964:4;40838:131;:::i;:::-;40830:139;;40557:419;;;:::o;40982:::-;41148:4;41186:2;41175:9;41171:18;41163:26;;41235:9;41229:4;41225:20;41221:1;41210:9;41206:17;41199:47;41263:131;41389:4;41263:131;:::i;:::-;41255:139;;40982:419;;;:::o;41407:::-;41573:4;41611:2;41600:9;41596:18;41588:26;;41660:9;41654:4;41650:20;41646:1;41635:9;41631:17;41624:47;41688:131;41814:4;41688:131;:::i;:::-;41680:139;;41407:419;;;:::o;41832:::-;41998:4;42036:2;42025:9;42021:18;42013:26;;42085:9;42079:4;42075:20;42071:1;42060:9;42056:17;42049:47;42113:131;42239:4;42113:131;:::i;:::-;42105:139;;41832:419;;;:::o;42257:::-;42423:4;42461:2;42450:9;42446:18;42438:26;;42510:9;42504:4;42500:20;42496:1;42485:9;42481:17;42474:47;42538:131;42664:4;42538:131;:::i;:::-;42530:139;;42257:419;;;:::o;42682:::-;42848:4;42886:2;42875:9;42871:18;42863:26;;42935:9;42929:4;42925:20;42921:1;42910:9;42906:17;42899:47;42963:131;43089:4;42963:131;:::i;:::-;42955:139;;42682:419;;;:::o;43107:::-;43273:4;43311:2;43300:9;43296:18;43288:26;;43360:9;43354:4;43350:20;43346:1;43335:9;43331:17;43324:47;43388:131;43514:4;43388:131;:::i;:::-;43380:139;;43107:419;;;:::o;43532:::-;43698:4;43736:2;43725:9;43721:18;43713:26;;43785:9;43779:4;43775:20;43771:1;43760:9;43756:17;43749:47;43813:131;43939:4;43813:131;:::i;:::-;43805:139;;43532:419;;;:::o;43957:222::-;44050:4;44088:2;44077:9;44073:18;44065:26;;44101:71;44169:1;44158:9;44154:17;44145:6;44101:71;:::i;:::-;43957:222;;;;:::o;44185:129::-;44219:6;44246:20;;:::i;:::-;44236:30;;44275:33;44303:4;44295:6;44275:33;:::i;:::-;44185:129;;;:::o;44320:75::-;44353:6;44386:2;44380:9;44370:19;;44320:75;:::o;44401:311::-;44478:4;44568:18;44560:6;44557:30;44554:56;;;44590:18;;:::i;:::-;44554:56;44640:4;44632:6;44628:17;44620:25;;44700:4;44694;44690:15;44682:23;;44401:311;;;:::o;44718:::-;44795:4;44885:18;44877:6;44874:30;44871:56;;;44907:18;;:::i;:::-;44871:56;44957:4;44949:6;44945:17;44937:25;;45017:4;45011;45007:15;44999:23;;44718:311;;;:::o;45035:307::-;45096:4;45186:18;45178:6;45175:30;45172:56;;;45208:18;;:::i;:::-;45172:56;45246:29;45268:6;45246:29;:::i;:::-;45238:37;;45330:4;45324;45320:15;45312:23;;45035:307;;;:::o;45348:308::-;45410:4;45500:18;45492:6;45489:30;45486:56;;;45522:18;;:::i;:::-;45486:56;45560:29;45582:6;45560:29;:::i;:::-;45552:37;;45644:4;45638;45634:15;45626:23;;45348:308;;;:::o;45662:132::-;45729:4;45752:3;45744:11;;45782:4;45777:3;45773:14;45765:22;;45662:132;;;:::o;45800:::-;45867:4;45890:3;45882:11;;45920:4;45915:3;45911:14;45903:22;;45800:132;;;:::o;45938:114::-;46005:6;46039:5;46033:12;46023:22;;45938:114;;;:::o;46058:::-;46125:6;46159:5;46153:12;46143:22;;46058:114;;;:::o;46178:98::-;46229:6;46263:5;46257:12;46247:22;;46178:98;;;:::o;46282:99::-;46334:6;46368:5;46362:12;46352:22;;46282:99;;;:::o;46387:113::-;46457:4;46489;46484:3;46480:14;46472:22;;46387:113;;;:::o;46506:::-;46576:4;46608;46603:3;46599:14;46591:22;;46506:113;;;:::o;46625:163::-;46742:11;46779:3;46764:18;;46625:163;;;;:::o;46794:184::-;46893:11;46927:6;46922:3;46915:19;46967:4;46962:3;46958:14;46943:29;;46794:184;;;;:::o;46984:168::-;47067:11;47101:6;47096:3;47089:19;47141:4;47136:3;47132:14;47117:29;;46984:168;;;;:::o;47158:169::-;47242:11;47276:6;47271:3;47264:19;47316:4;47311:3;47307:14;47292:29;;47158:169;;;;:::o;47333:148::-;47435:11;47472:3;47457:18;;47333:148;;;;:::o;47487:305::-;47527:3;47546:20;47564:1;47546:20;:::i;:::-;47541:25;;47580:20;47598:1;47580:20;:::i;:::-;47575:25;;47734:1;47666:66;47662:74;47659:1;47656:81;47653:107;;;47740:18;;:::i;:::-;47653:107;47784:1;47781;47777:9;47770:16;;47487:305;;;;:::o;47798:185::-;47838:1;47855:20;47873:1;47855:20;:::i;:::-;47850:25;;47889:20;47907:1;47889:20;:::i;:::-;47884:25;;47928:1;47918:35;;47933:18;;:::i;:::-;47918:35;47975:1;47972;47968:9;47963:14;;47798:185;;;;:::o;47989:348::-;48029:7;48052:20;48070:1;48052:20;:::i;:::-;48047:25;;48086:20;48104:1;48086:20;:::i;:::-;48081:25;;48274:1;48206:66;48202:74;48199:1;48196:81;48191:1;48184:9;48177:17;48173:105;48170:131;;;48281:18;;:::i;:::-;48170:131;48329:1;48326;48322:9;48311:20;;47989:348;;;;:::o;48343:191::-;48383:4;48403:20;48421:1;48403:20;:::i;:::-;48398:25;;48437:20;48455:1;48437:20;:::i;:::-;48432:25;;48476:1;48473;48470:8;48467:34;;;48481:18;;:::i;:::-;48467:34;48526:1;48523;48519:9;48511:17;;48343:191;;;;:::o;48540:96::-;48577:7;48606:24;48624:5;48606:24;:::i;:::-;48595:35;;48540:96;;;:::o;48642:90::-;48676:7;48719:5;48712:13;48705:21;48694:32;;48642:90;;;:::o;48738:149::-;48774:7;48814:66;48807:5;48803:78;48792:89;;48738:149;;;:::o;48893:126::-;48930:7;48970:42;48963:5;48959:54;48948:65;;48893:126;;;:::o;49025:77::-;49062:7;49091:5;49080:16;;49025:77;;;:::o;49108:154::-;49192:6;49187:3;49182;49169:30;49254:1;49245:6;49240:3;49236:16;49229:27;49108:154;;;:::o;49268:307::-;49336:1;49346:113;49360:6;49357:1;49354:13;49346:113;;;49445:1;49440:3;49436:11;49430:18;49426:1;49421:3;49417:11;49410:39;49382:2;49379:1;49375:10;49370:15;;49346:113;;;49477:6;49474:1;49471:13;49468:101;;;49557:1;49548:6;49543:3;49539:16;49532:27;49468:101;49317:258;49268:307;;;:::o;49581:320::-;49625:6;49662:1;49656:4;49652:12;49642:22;;49709:1;49703:4;49699:12;49730:18;49720:81;;49786:4;49778:6;49774:17;49764:27;;49720:81;49848:2;49840:6;49837:14;49817:18;49814:38;49811:84;;;49867:18;;:::i;:::-;49811:84;49632:269;49581:320;;;:::o;49907:281::-;49990:27;50012:4;49990:27;:::i;:::-;49982:6;49978:40;50120:6;50108:10;50105:22;50084:18;50072:10;50069:34;50066:62;50063:88;;;50131:18;;:::i;:::-;50063:88;50171:10;50167:2;50160:22;49950:238;49907:281;;:::o;50194:233::-;50233:3;50256:24;50274:5;50256:24;:::i;:::-;50247:33;;50302:66;50295:5;50292:77;50289:103;;;50372:18;;:::i;:::-;50289:103;50419:1;50412:5;50408:13;50401:20;;50194:233;;;:::o;50433:176::-;50465:1;50482:20;50500:1;50482:20;:::i;:::-;50477:25;;50516:20;50534:1;50516:20;:::i;:::-;50511:25;;50555:1;50545:35;;50560:18;;:::i;:::-;50545:35;50601:1;50598;50594:9;50589:14;;50433:176;;;;:::o;50615:180::-;50663:77;50660:1;50653:88;50760:4;50757:1;50750:15;50784:4;50781:1;50774:15;50801:180;50849:77;50846:1;50839:88;50946:4;50943:1;50936:15;50970:4;50967:1;50960:15;50987:180;51035:77;51032:1;51025:88;51132:4;51129:1;51122:15;51156:4;51153:1;51146:15;51173:180;51221:77;51218:1;51211:88;51318:4;51315:1;51308:15;51342:4;51339:1;51332:15;51359:180;51407:77;51404:1;51397:88;51504:4;51501:1;51494:15;51528:4;51525:1;51518:15;51545:180;51593:77;51590:1;51583:88;51690:4;51687:1;51680:15;51714:4;51711:1;51704:15;51731:117;51840:1;51837;51830:12;51854:117;51963:1;51960;51953:12;51977:117;52086:1;52083;52076:12;52100:117;52209:1;52206;52199:12;52223:117;52332:1;52329;52322:12;52346:102;52387:6;52438:2;52434:7;52429:2;52422:5;52418:14;52414:28;52404:38;;52346:102;;;:::o;52454:170::-;52594:22;52590:1;52582:6;52578:14;52571:46;52454:170;:::o;52630:230::-;52770:34;52766:1;52758:6;52754:14;52747:58;52839:13;52834:2;52826:6;52822:15;52815:38;52630:230;:::o;52866:237::-;53006:34;53002:1;52994:6;52990:14;52983:58;53075:20;53070:2;53062:6;53058:15;53051:45;52866:237;:::o;53109:225::-;53249:34;53245:1;53237:6;53233:14;53226:58;53318:8;53313:2;53305:6;53301:15;53294:33;53109:225;:::o;53340:224::-;53480:34;53476:1;53468:6;53464:14;53457:58;53549:7;53544:2;53536:6;53532:15;53525:32;53340:224;:::o;53570:178::-;53710:30;53706:1;53698:6;53694:14;53687:54;53570:178;:::o;53754:223::-;53894:34;53890:1;53882:6;53878:14;53871:58;53963:6;53958:2;53950:6;53946:15;53939:31;53754:223;:::o;53983:175::-;54123:27;54119:1;54111:6;54107:14;54100:51;53983:175;:::o;54164:224::-;54304:34;54300:1;54292:6;54288:14;54281:58;54373:7;54368:2;54360:6;54356:15;54349:32;54164:224;:::o;54394:220::-;54534:34;54530:1;54522:6;54518:14;54511:58;54603:3;54598:2;54590:6;54586:15;54579:28;54394:220;:::o;54620:223::-;54760:34;54756:1;54748:6;54744:14;54737:58;54829:6;54824:2;54816:6;54812:15;54805:31;54620:223;:::o;54849:231::-;54989:34;54985:1;54977:6;54973:14;54966:58;55058:14;55053:2;55045:6;55041:15;55034:39;54849:231;:::o;55086:158::-;55226:10;55222:1;55214:6;55210:14;55203:34;55086:158;:::o;55250:166::-;55390:18;55386:1;55378:6;55374:14;55367:42;55250:166;:::o;55422:172::-;55562:24;55558:1;55550:6;55546:14;55539:48;55422:172;:::o;55600:243::-;55740:34;55736:1;55728:6;55724:14;55717:58;55809:26;55804:2;55796:6;55792:15;55785:51;55600:243;:::o;55849:178::-;55989:30;55985:1;55977:6;55973:14;55966:54;55849:178;:::o;56033:229::-;56173:34;56169:1;56161:6;56157:14;56150:58;56242:12;56237:2;56229:6;56225:15;56218:37;56033:229;:::o;56268:228::-;56408:34;56404:1;56396:6;56392:14;56385:58;56477:11;56472:2;56464:6;56460:15;56453:36;56268:228;:::o;56502:173::-;56642:25;56638:1;56630:6;56626:14;56619:49;56502:173;:::o;56681:169::-;56821:21;56817:1;56809:6;56805:14;56798:45;56681:169;:::o;56856:182::-;56996:34;56992:1;56984:6;56980:14;56973:58;56856:182;:::o;57044:220::-;57184:34;57180:1;57172:6;57168:14;57161:58;57253:3;57248:2;57240:6;57236:15;57229:28;57044:220;:::o;57270:231::-;57410:34;57406:1;57398:6;57394:14;57387:58;57479:14;57474:2;57466:6;57462:15;57455:39;57270:231;:::o;57507:182::-;57647:34;57643:1;57635:6;57631:14;57624:58;57507:182;:::o;57695:234::-;57835:34;57831:1;57823:6;57819:14;57812:58;57904:17;57899:2;57891:6;57887:15;57880:42;57695:234;:::o;57935:297::-;58075:34;58071:1;58063:6;58059:14;58052:58;58144:34;58139:2;58131:6;58127:15;58120:59;58213:11;58208:2;58200:6;58196:15;58189:36;57935:297;:::o;58238:220::-;58378:34;58374:1;58366:6;58362:14;58355:58;58447:3;58442:2;58434:6;58430:15;58423:28;58238:220;:::o;58464:236::-;58604:34;58600:1;58592:6;58588:14;58581:58;58673:19;58668:2;58660:6;58656:15;58649:44;58464:236;:::o;58706:231::-;58846:34;58842:1;58834:6;58830:14;58823:58;58915:14;58910:2;58902:6;58898:15;58891:39;58706:231;:::o;58943:122::-;59016:24;59034:5;59016:24;:::i;:::-;59009:5;59006:35;58996:63;;59055:1;59052;59045:12;58996:63;58943:122;:::o;59071:116::-;59141:21;59156:5;59141:21;:::i;:::-;59134:5;59131:32;59121:60;;59177:1;59174;59167:12;59121:60;59071:116;:::o;59193:120::-;59265:23;59282:5;59265:23;:::i;:::-;59258:5;59255:34;59245:62;;59303:1;59300;59293:12;59245:62;59193:120;:::o;59319:122::-;59392:24;59410:5;59392:24;:::i;:::-;59385:5;59382:35;59372:63;;59431:1;59428;59421:12;59372:63;59319:122;:::o
Swarm Source
ipfs://501ca311e488af314c324b01e3d23f8bfeea8e341248fd55c06dc412c55297bc
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.