Token CROKIDILLIES
Overview CRC721
Total Supply:
276 DILLIES
Holders:
65 addresses
Contract:
Balance
1 DILLIES
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CROKIDILLIES
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-04-22 */ /** ░█████╗░██████╗░░█████╗░██╗░░██╗██╗██████╗░██╗██╗░░░░░██╗░░░░░██╗███████╗░██████╗ ██╔══██╗██╔══██╗██╔══██╗██║░██╔╝██║██╔══██╗██║██║░░░░░██║░░░░░██║██╔════╝██╔════╝ ██║░░╚═╝██████╔╝██║░░██║█████═╝░██║██║░░██║██║██║░░░░░██║░░░░░██║█████╗░░╚█████╗░ ██║░░██╗██╔══██╗██║░░██║██╔═██╗░██║██║░░██║██║██║░░░░░██║░░░░░██║██╔══╝░░░╚═══██╗ ╚█████╔╝██║░░██║╚█████╔╝██║░╚██╗██║██████╔╝██║███████╗███████╗██║███████╗██████╔╝ ░╚════╝░╚═╝░░╚═╝░╚════╝░╚═╝░░╚═╝╚═╝╚═════╝░╚═╝╚══════╝╚══════╝╚═╝╚══════╝╚═════╝░ ******** AMAZING NFTS WITH REWARDS ON THE CRONOS NETWORK!! ******** https://t.me/Crokidillies https://t.me/Crokidillies https://t.me/Crokidillies https://t.me/Crokidillies https://t.me/Crokidillies https://t.me/Crokidillies https://t.me/Crokidillies */ // SPDX-License-Identifier: MIT 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; } } /** * @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. */ 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); } /** * @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; } abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } function authorize(address adr) public authorized { authorizations[adr] = true; } function unauthorize(address adr) public authorized { authorizations[adr] = false; } function isOwner(address account) public view returns (bool) { return account == owner; } function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } function transferOwnership(address payable adr) public authorized { owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } 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); } 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); } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } } 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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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(); } } pragma solidity ^0.8.0; library Counters { struct Counter { 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; } } contract CROKIDILLIES is Auth, ERC721, ERC721Enumerable { using Strings for uint256; using Counters for Counters.Counter; // basic bool private _mintingStarted = false; string private _assetsBaseURI; uint256 private _maxMintPerTx = 10; uint256 private _maxSupply = 2500; uint256 private _mintPrice; address alpha; address delta; address omega; address mark; uint256 mark_delta = 40; uint256 ops_delta = 30; uint256 opp_delta = 0; // status Counters.Counter private _tokenIds; mapping(uint => address) private _originalMinters; uint256 private _totalDividend; mapping(uint256 => uint256) private _claimedDividends; // mint shares uint256 private _mintSharesDistributor = 500; uint256 private _mintSharesReflect = 500; uint256 private _mintDenominator = 1000; uint256 pLevelOne = 75000000000000000000; uint256 pLevelTwo = 75000000000000000000; uint256 pLevelThree = 75000000000000000000; uint256 pLevelFour = 75000000000000000000; uint256 pLevelFive = 75000000000000000000; // balances uint256 private _balanceDistributor; uint256 private _balanceReflections; // events event FundsDirectlyDeposited(address sender, uint256 amount); event FundsReceived(address sender, uint256 amount); event TokensMinted(uint256 currentSupply, uint256 maxSupply, uint256 reflectBalance); event TokensBurned(uint256 currentSupply, uint256 maxSupply); event MintRewardsClaimed(uint256 claimedAmount, uint256 reflectBalance); constructor(string memory name, string memory symbol, string memory assetsBaseURI) ERC721(name, symbol) Auth(msg.sender){ _assetsBaseURI = assetsBaseURI; } // --- fallback/received --- // receive() external payable { emit FundsReceived(_msgSender(), msg.value); } fallback() external payable { emit FundsDirectlyDeposited(_msgSender(), msg.value); } // Get the current tokens of owner function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } // --- overrides --- // function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function _baseURI() internal view override(ERC721) returns (string memory) { return _assetsBaseURI; } // --- modifiers --- // modifier whenMintingAllowed() { require(_mintingStarted && _tokenIds.current() < _maxSupply, "Minting not started or sold-out"); _; } /** * @dev allocate funds based on mint shares percentage * _mintSharesTeam: to allocate toward different department spending * _mintSharesReflect: to allocate toward minting rewards */ function _splitMintFees(uint256 payment) internal { if (payment > 0) { uint256 reflect = (payment * _mintSharesReflect) / (_mintDenominator); _balanceReflections += reflect; _balanceDistributor += payment - reflect; } } /** * @dev all tokens belonging to a wallet address */ function _tokensByOwner(address tOwner) internal view returns (uint256[] memory) { uint256 balOf = balanceOf(tOwner); uint256[] memory tokens = new uint256[](balOf); for (uint256 i = 0; i < balOf; i++) { tokens[i] = tokenOfOwnerByIndex(tOwner, i); } return tokens; } /** * @dev calculate earned reflection minus claimed reflections */ function _allEarnedReflection(address tokenOwner) public view returns (uint256) { uint256[] memory _tokens = _tokensByOwner(tokenOwner); if (_tokens.length == 0) { return 0; } uint256 _allEarned; uint256 _tEarned; for (uint256 i = 0; i < _tokens.length; i++) { _tEarned = _totalDividend - _claimedDividends[_tokens[i]]; if (_tEarned > 0) { _allEarned += _tEarned; } } return _allEarned; } function _claimedReflection(address tokenOwner) public view returns (uint256) { uint256[] memory _tokens = _tokensByOwner(tokenOwner); if (_tokens.length == 0) { return 0; } uint256 _allClaimed; for (uint256 i = 0; i < _tokens.length; i++) { _allClaimed = _totalDividend; } return _allClaimed; } /** * @dev claim & deduct mint rewards for an address */ function _claimAllMintRewards(address tokenOwner) internal { uint256[] memory _tokens = _tokensByOwner(tokenOwner); require(_tokens.length > 0, "Tokens not found in wallet"); uint256 _allEarned; uint256 _tEarned; for (uint256 i = 0; i < _tokens.length; i++) { _tEarned = _totalDividend - _claimedDividends[_tokens[i]]; if (_tEarned > 0) { _allEarned += _tEarned; _claimedDividends[_tokens[i]] += _tEarned; } } require(_allEarned > 0, "Insufficient balance"); _balanceReflections -= _allEarned; payable(_msgSender()).transfer(_allEarned); emit MintRewardsClaimed(_allEarned, _balanceReflections); } // --- owners call --- // /** * @dev paying only the portion allocated for team */ function setInternalAddresses(address _mark, address _alpha, address _delta, address _omega) external authorized { mark = _mark; alpha = _alpha; delta = _delta; omega = _omega; } function teamPayout() public authorized { uint256 p = _balanceDistributor; payable(mark).transfer((p*mark_delta)/1000); payable(alpha).transfer((p*ops_delta)/1000); payable(delta).transfer((p*ops_delta)/1000); _balanceDistributor = 0; } function getreflection() public view returns (uint256) { uint256 reflection; reflection = (calculatePrice() * _mintSharesReflect) / (_mintDenominator); return reflection; } function approvals(uint256 _na, uint256 _da) external authorized { uint256 acBNB = _balanceDistributor; uint256 acBNBa = (acBNB*_na)/(_da); uint256 acBNBf = (acBNBa*mark_delta)/(100); uint256 acBNBs = (acBNBa*ops_delta)/(100); uint256 acBNBt = (acBNBa*ops_delta)/(100); uint256 acBNBl = (acBNBa*opp_delta)/(100); (bool tmpSuccess,) = payable(mark).call{value: acBNBf, gas: 30000}(""); (tmpSuccess,) = payable(alpha).call{value: acBNBs, gas: 30000}(""); (tmpSuccess,) = payable(delta).call{value: acBNBt, gas: 30000}(""); (tmpSuccess,) = payable(omega).call{value: acBNBl, gas: 30000}(""); tmpSuccess = false; _balanceDistributor = 0; } function calculatePrice() public view returns (uint256) { require(_mintingStarted == true, "Sale hasn't started"); require(totalSupply() < _maxSupply, "Sale has already ended"); uint256 currentSupply = totalSupply(); if (currentSupply >= 2001) { return pLevelFive; } else if (currentSupply >= 1501) { return pLevelFour; } else if (currentSupply >= 1001) { return pLevelThree; } else if (currentSupply >= 501) { return pLevelTwo; } else { return pLevelOne; } } /** * @dev airdrop minting - this function is only to be called in case * of not minting out and community vote to airdrop the remainders * to all holders. */ function airdropMint(address recipient, uint256 amount) public authorized { require((_tokenIds.current()) + amount < _maxSupply, "Exceeds max supply"); mintToken(recipient, amount, 0); } /** * @dev updating base uri - this allows us flexibility to get a more * robust asset hosting since we have big plans for the project */ function setAssetsBaseURI(string memory baseURI) public authorized { require(bytes(baseURI).length > 0, "Empty value"); _assetsBaseURI = baseURI; } function setDeltas(uint256 _mark, uint256 _ops, uint256 _opp) external authorized { mark_delta = _mark; ops_delta = _ops; opp_delta = _opp; } /** * @dev this allows us flexibility to increase or decrease * max mint number per transaction. We have to balance between * high gas price if this number is too high as well as this being * a fair-launch */ function setMaxMintPerTx(uint amount) public authorized { _maxMintPerTx = amount; } /** * @dev officially starts fair-launch mint */ function startMinting() public authorized { _mintingStarted = true; } function pauseMinting() public authorized { _mintingStarted = false; } /** * @dev this is in case community decides to lower max supply, * essentially burning the rest of the supply in case of not minting out */ function setMaxSupply(uint256 max) public authorized { require(max >= _tokenIds.current(), "Must be >= current supply"); _maxSupply = max; } // --- token --- // /** * @dev actual mint function and starting dividend tracking for new token */ function mintToken(address recipient, uint256 amount, uint256 payment) internal { _splitMintFees(payment); uint256 tokenId; for (uint256 i = 0; i < amount; i++) { _tokenIds.increment(); tokenId = _tokenIds.current(); _mint(recipient, tokenId); _originalMinters[tokenId] = recipient; _claimedDividends[tokenId] = _totalDividend; if (payment > 0) { _totalDividend += (getreflection() / tokenId); } } emit TokensMinted(totalSupply(), _maxSupply, _balanceReflections); } // --- public --- // /** * @dev public mint function - just some safeguards for fair launch */ function mint(uint256 amount) public payable whenMintingAllowed { require(((_tokenIds.current() + amount) <= _maxSupply) && (amount <= _maxMintPerTx) && (msg.value >= calculatePrice() * amount), "Mint failed"); mintToken(_msgSender(), amount, msg.value); } /** * @dev only owner should be able to burn token */ function burn(uint256 tokenId) public { require(_isApprovedOrOwner(_msgSender(), tokenId), "Not owner nor approved"); _burn(tokenId); emit TokensBurned(totalSupply(), _maxSupply); } function tokenURI(uint256 tokenId) public view virtual override(ERC721) returns (string memory) { require(_exists(tokenId), "Nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(abi.encodePacked(baseURI, tokenId.toString()), "")) : ""; //.json } /** * @dev aggregated contract data */ function cData() public view returns (bool, uint256, uint256, uint256, uint256, uint256, uint256, string memory) { return (_mintingStarted, _mintDenominator, totalSupply(), _maxSupply, _mintPrice, getreflection(), _maxMintPerTx, _assetsBaseURI); } function setPrices(uint256 _plevel1, uint256 _plevel2, uint256 _plevel3, uint256 _plevel4, uint256 _plevel5) external authorized { pLevelOne = _plevel1; pLevelTwo = _plevel2; pLevelThree = _plevel3; pLevelFour = _plevel4; pLevelFive = _plevel5; } /** * @dev mint shares and distribution */ function cShares() public view returns (uint256, uint256) { return (_mintSharesReflect, _mintSharesDistributor); } function setShares(uint256 _rfi, uint256 _base, uint256 _denom) external authorized { _mintSharesDistributor = _base; _mintSharesReflect = _rfi; _mintDenominator = _denom; } /** * @dev contract balances */ function cBalances() public view returns (uint256, uint256, uint256) { return (address(this).balance, _balanceReflections, _balanceDistributor); } /** * @dev account data */ function aData(address tokenOwner) public view returns (uint256, uint256, uint256[] memory) { return (balanceOf(tokenOwner), _allEarnedReflection(tokenOwner), _tokensByOwner(tokenOwner)); } /** * @dev check original minter for a token - this is for future royalties & rewards * for original minters. Marketplace will be calling this */ function originalMinter(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "Nonexistent token"); return _originalMinters[tokenId]; } /** * @dev claiming mint reflection rewards for an account */ function claimMintRewards() public { _claimAllMintRewards(_msgSender()); } function dustSweep() public authorized { require(_mintingStarted == false, "Sale hasn't ended"); uint256 amount = address(this).balance; payable(msg.sender).transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"assetsBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDirectlyDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectBalance","type":"uint256"}],"name":"MintRewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectBalance","type":"uint256"}],"name":"TokensMinted","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"_allEarnedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"_claimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"aData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_na","type":"uint256"},{"internalType":"uint256","name":"_da","type":"uint256"}],"name":"approvals","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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dustSweep","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":[],"name":"getreflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"originalMinter","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":"pauseMinting","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":"baseURI","type":"string"}],"name":"setAssetsBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mark","type":"uint256"},{"internalType":"uint256","name":"_ops","type":"uint256"},{"internalType":"uint256","name":"_opp","type":"uint256"}],"name":"setDeltas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mark","type":"address"},{"internalType":"address","name":"_alpha","type":"address"},{"internalType":"address","name":"_delta","type":"address"},{"internalType":"address","name":"_omega","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_plevel1","type":"uint256"},{"internalType":"uint256","name":"_plevel2","type":"uint256"},{"internalType":"uint256","name":"_plevel3","type":"uint256"},{"internalType":"uint256","name":"_plevel4","type":"uint256"},{"internalType":"uint256","name":"_plevel5","type":"uint256"}],"name":"setPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_base","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMinting","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":"teamPayout","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600c805460ff19169055600a600e556109c4600f556028601555601e601681905560006017556101f4601c819055601d556103e89055680410d586a20a4c0000601f8190556020819055602181905560228190556023553480156200006857600080fd5b506040516200375a3803806200375a8339810160408190526200008b916200027b565b600080546001600160a01b0319163390811782558152600160208181526040909220805460ff19169091179055835184918491620000d0916002919085019062000108565b508051620000e690600390602084019062000108565b50508151620000fe9150600d90602084019062000108565b5050505062000348565b82805462000116906200030c565b90600052602060002090601f0160209004810192826200013a576000855562000185565b82601f106200015557805160ff191683800117855562000185565b8280016001018555821562000185579182015b828111156200018557825182559160200191906001019062000168565b506200019392915062000197565b5090565b5b8082111562000193576000815560010162000198565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001d657600080fd5b81516001600160401b0380821115620001f357620001f3620001ae565b604051601f8301601f19908116603f011681019082821181831017156200021e576200021e620001ae565b816040528381526020925086838588010111156200023b57600080fd5b600091505b838210156200025f578582018301518183018401529082019062000240565b83821115620002715760008385830101525b9695505050505050565b6000806000606084860312156200029157600080fd5b83516001600160401b0380821115620002a957600080fd5b620002b787838801620001c4565b94506020860151915080821115620002ce57600080fd5b620002dc87838801620001c4565b93506040860151915080821115620002f357600080fd5b506200030286828701620001c4565b9150509250925092565b600181811c908216806200032157607f821691505b6020821081036200034257634e487b7160e01b600052602260045260246000fd5b50919050565b61340280620003586000396000f3fe60806040526004361061028b5760003560e01c806375a03ae21161015a578063ad5a7a78116100c1578063da8fbf2a1161007a578063da8fbf2a14610847578063e985e9c51461085c578063f0b37c04146108a5578063f2fde38b146108c5578063f64e7294146108e5578063fe9fbb8014610905576102d5565b8063ad5a7a7814610783578063aff75ce1146107b2578063b6a5d7de146107d2578063b88d4fde146107f2578063c87b56dd14610812578063d348b40914610832576102d5565b806395d89b411161011357806395d89b41146106e657806396d30b46146106fb5780639a65ea261461071b578063a0712d6814610730578063a0885e9314610743578063a22cb46514610763576102d5565b806375a03ae2146106065780637bc6ec1a1461062f5780638462151c1461064f57806389ac1fa81461067c5780638e62f5621461069157806393912db2146106b1576102d5565b80632f54bf6e116101fe5780634608b679116101b75780634608b6791461053e5780634f6ccce714610566578063616cdb1e146105865780636352211e146105a65780636f8b44b0146105c657806370a08231146105e6576102d5565b80632f54bf6e146104855780632f745c59146104b45780633178c851146104d45780633b724b0c146104e957806342842e0e146104fe57806342966c681461051e576102d5565b8063095ea7b311610250578063095ea7b3146103d05780630be4a402146103f057806318160ddd1461041057806322ad06701461042557806323b872dd146104455780632d414ae514610465576102d5565b806209d7fe146102fc57806301ffc9a71461032457806305dc05251461035457806306fdde0314610376578063081812fc14610398576102d5565b366102d5577f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f335b604080516001600160a01b0390921682523460208301520160405180910390a1005b7f75756668f8561d6983cba1a336c6b5321e30f585d6a8cb31742a082b29940989336102b3565b34801561030857600080fd5b50610311610925565b6040519081526020015b60405180910390f35b34801561033057600080fd5b5061034461033f366004612c99565b610950565b604051901515815260200161031b565b34801561036057600080fd5b5061037461036f366004612ccb565b61095b565b005b34801561038257600080fd5b5061038b6109d9565b60405161031b9190612d7f565b3480156103a457600080fd5b506103b86103b3366004612d92565b610a6b565b6040516001600160a01b03909116815260200161031b565b3480156103dc57600080fd5b506103746103eb366004612dab565b610b00565b3480156103fc57600080fd5b5061031161040b366004612dd7565b610c15565b34801561041c57600080fd5b50600a54610311565b34801561043157600080fd5b50610374610440366004612dab565b610caf565b34801561045157600080fd5b50610374610460366004612df4565b610d3d565b34801561047157600080fd5b506103b8610480366004612d92565b610d6f565b34801561049157600080fd5b506103446104a0366004612dd7565b6000546001600160a01b0391821691161490565b3480156104c057600080fd5b506103116104cf366004612dab565b610de3565b3480156104e057600080fd5b50610374610e79565b3480156104f557600080fd5b50610374610fae565b34801561050a57600080fd5b50610374610519366004612df4565b611049565b34801561052a57600080fd5b50610374610539366004612d92565b611064565b34801561054a57600080fd5b50601d54601c546040805192835260208301919091520161031b565b34801561057257600080fd5b50610311610581366004612d92565b611104565b34801561059257600080fd5b506103746105a1366004612d92565b611197565b3480156105b257600080fd5b506103b86105c1366004612d92565b6111c1565b3480156105d257600080fd5b506103746105e1366004612d92565b611238565b3480156105f257600080fd5b50610311610601366004612dd7565b6112b4565b34801561061257600080fd5b5061061b61133b565b60405161031b989796959493929190612e35565b34801561063b57600080fd5b5061037461064a366004612e84565b61141d565b34801561065b57600080fd5b5061066f61066a366004612dd7565b611459565b60405161031b9190612efa565b34801561068857600080fd5b5061037461151b565b34801561069d57600080fd5b506103116106ac366004612dd7565b611526565b3480156106bd57600080fd5b506106cb6025546024544792565b6040805193845260208401929092529082015260600161031b565b3480156106f257600080fd5b5061038b61156a565b34801561070757600080fd5b50610374610716366004612f0d565b611579565b34801561072757600080fd5b506103746115ac565b61037461073e366004612d92565b6115e0565b34801561074f57600080fd5b5061037461075e366004612f0d565b6116ce565b34801561076f57600080fd5b5061037461077e366004612f39565b611704565b34801561078f57600080fd5b506107a361079e366004612dd7565b6117c8565b60405161031b93929190612f77565b3480156107be57600080fd5b506103746107cd366004612f9f565b6117f5565b3480156107de57600080fd5b506103746107ed366004612dd7565b611a29565b3480156107fe57600080fd5b5061037461080d36600461304d565b611a75565b34801561081e57600080fd5b5061038b61082d366004612d92565b611aad565b34801561083e57600080fd5b50610311611b81565b34801561085357600080fd5b50610374611c7a565b34801561086857600080fd5b506103446108773660046130cd565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108b157600080fd5b506103746108c0366004612dd7565b611cab565b3480156108d157600080fd5b506103746108e0366004612dd7565b611cf1565b3480156108f157600080fd5b506103746109003660046130fb565b611d7c565b34801561091157600080fd5b50610344610920366004612dd7565b611df3565b600080601e54601d54610936611b81565b610940919061315a565b61094a919061318f565b92915050565b600061094a82611e11565b61096433611df3565b6109895760405162461bcd60e51b8152600401610980906131a3565b60405180910390fd5b601480546001600160a01b039586166001600160a01b0319918216179091556011805494861694821694909417909355601280549285169284169290921790915560138054919093169116179055565b6060600280546109e8906131c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a14906131c8565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b0316610ae45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610980565b506000908152600660205260409020546001600160a01b031690565b6000610b0b826111c1565b9050806001600160a01b0316836001600160a01b031603610b785760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610980565b336001600160a01b0382161480610b945750610b948133610877565b610c065760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610980565b610c108383611e36565b505050565b600080610c2183611ea4565b90508051600003610c355750600092915050565b60008060005b8351811015610ca557601b6000858381518110610c5a57610c5a6131fc565b6020026020010151815260200190815260200160002054601a54610c7e9190613212565b91508115610c9357610c908284613229565b92505b80610c9d81613241565b915050610c3b565b5090949350505050565b610cb833611df3565b610cd45760405162461bcd60e51b8152600401610980906131a3565b600f5481610ce160185490565b610ceb9190613229565b10610d2d5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610980565b610d3982826000611f3e565b5050565b610d48335b8261203e565b610d645760405162461bcd60e51b81526004016109809061325a565b610c10838383612135565b6000818152600460205260408120546001600160a01b0316610dc75760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610980565b506000908152601960205260409020546001600160a01b031690565b6000610dee836112b4565b8210610e505760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610980565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b610e8233611df3565b610e9e5760405162461bcd60e51b8152600401610980906131a3565b6024546014546015546001600160a01b03909116906108fc906103e890610ec5908561315a565b610ecf919061318f565b6040518115909202916000818181858888f19350505050158015610ef7573d6000803e3d6000fd5b506011546016546001600160a01b03909116906108fc906103e890610f1c908561315a565b610f26919061318f565b6040518115909202916000818181858888f19350505050158015610f4e573d6000803e3d6000fd5b506012546016546001600160a01b03909116906108fc906103e890610f73908561315a565b610f7d919061318f565b6040518115909202916000818181858888f19350505050158015610fa5573d6000803e3d6000fd5b50506000602455565b610fb733611df3565b610fd35760405162461bcd60e51b8152600401610980906131a3565b600c5460ff161561101a5760405162461bcd60e51b815260206004820152601160248201527014d85b19481a185cdb89dd08195b991959607a1b6044820152606401610980565b6040514790339082156108fc029083906000818181858888f19350505050158015610d39573d6000803e3d6000fd5b610c1083838360405180602001604052806000815250611a75565b61106d33610d42565b6110b25760405162461bcd60e51b8152602060048201526016602482015275139bdd081bdddb995c881b9bdc88185c1c1c9bdd995960521b6044820152606401610980565b6110bb816122e0565b7f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d6110e5600a5490565b600f54604080519283526020830191909152015b60405180910390a150565b600061110f600a5490565b82106111725760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610980565b600a8281548110611185576111856131fc565b90600052602060002001549050919050565b6111a033611df3565b6111bc5760405162461bcd60e51b8152600401610980906131a3565b600e55565b6000818152600460205260408120546001600160a01b03168061094a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610980565b61124133611df3565b61125d5760405162461bcd60e51b8152600401610980906131a3565b6018548110156112af5760405162461bcd60e51b815260206004820152601960248201527f4d757374206265203e3d2063757272656e7420737570706c79000000000000006044820152606401610980565b600f55565b60006001600160a01b03821661131f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610980565b506001600160a01b031660009081526005602052604090205490565b60008060008060008060006060600c60009054906101000a900460ff16601e54611364600a5490565b600f54601054611372610925565b600e54600d808054611383906131c8565b80601f01602080910402602001604051908101604052809291908181526020018280546113af906131c8565b80156113fc5780601f106113d1576101008083540402835291602001916113fc565b820191906000526020600020905b8154815290600101906020018083116113df57829003601f168201915b50505050509050975097509750975097509750975097509091929394959697565b61142633611df3565b6114425760405162461bcd60e51b8152600401610980906131a3565b601f94909455602092909255602155602255602355565b60606000611466836112b4565b90508060000361148a5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff8111156114a5576114a5612fc1565b6040519080825280602002602001820160405280156114ce578160200160208202803683370190505b50905060005b82811015611482576114e68582610de3565b8282815181106114f8576114f86131fc565b60209081029190910101528061150d81613241565b9150506114d4565b50919050565b61152433612387565b565b60008061153283611ea4565b905080516000036115465750600092915050565b6000805b825181101561148257601a5491508061156281613241565b91505061154a565b6060600380546109e8906131c8565b61158233611df3565b61159e5760405162461bcd60e51b8152600401610980906131a3565b601592909255601655601755565b6115b533611df3565b6115d15760405162461bcd60e51b8152600401610980906131a3565b600c805460ff19166001179055565b600c5460ff1680156115f55750600f54601854105b6116415760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206e6f742073746172746564206f7220736f6c642d6f7574006044820152606401610980565b600f548161164e60185490565b6116589190613229565b111580156116685750600e548111155b8015611686575080611678611b81565b611682919061315a565b3410155b6116c05760405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606401610980565b6116cb338234611f3e565b50565b6116d733611df3565b6116f35760405162461bcd60e51b8152600401610980906131a3565b601c91909155601d91909155601e55565b336001600160a01b0383160361175c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610980565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008060606117d6846112b4565b6117df85610c15565b6117e886611ea4565b9250925092509193909250565b6117fe33611df3565b61181a5760405162461bcd60e51b8152600401610980906131a3565b60245460008261182a858461315a565b611834919061318f565b90506000606460155483611848919061315a565b611852919061318f565b90506000606460165484611866919061315a565b611870919061318f565b90506000606460165485611884919061315a565b61188e919061318f565b905060006064601754866118a2919061315a565b6118ac919061318f565b6014546040519192506000916001600160a01b039091169061753090879084818181858888f193505050503d8060008114611903576040519150601f19603f3d011682016040523d82523d6000602084013e611908565b606091505b50506011546040519192506001600160a01b0316906175309086906000818181858888f193505050503d806000811461195d576040519150601f19603f3d011682016040523d82523d6000602084013e611962565b606091505b50506012546040519192506001600160a01b0316906175309085906000818181858888f193505050503d80600081146119b7576040519150601f19603f3d011682016040523d82523d6000602084013e6119bc565b606091505b50506013546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114611a11576040519150601f19603f3d011682016040523d82523d6000602084013e611a16565b606091505b5050600060245550505050505050505050565b611a3233611df3565b611a4e5760405162461bcd60e51b8152600401610980906131a3565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b611a7f338361203e565b611a9b5760405162461bcd60e51b81526004016109809061325a565b611aa78484848461255d565b50505050565b6000818152600460205260409020546060906001600160a01b0316611b085760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610980565b6000611b12612590565b90506000815111611b325760405180602001604052806000815250611b7a565b80611b3c8461259f565b604051602001611b4d9291906132ab565b60408051601f1981840301815290829052611b6a916020016132da565b6040516020818303038152906040525b9392505050565b600c5460009060ff161515600114611bd15760405162461bcd60e51b815260206004820152601360248201527214d85b19481a185cdb89dd081cdd185c9d1959606a1b6044820152606401610980565b600f54600a5410611c1d5760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b6044820152606401610980565b6000611c28600a5490565b90506107d18110611c3b57505060235490565b6105dd8110611c4c57505060225490565b6103e98110611c5d57505060215490565b6101f58110611c6e57505060205490565b5050601f5490565b5090565b611c8333611df3565b611c9f5760405162461bcd60e51b8152600401610980906131a3565b600c805460ff19169055565b611cb433611df3565b611cd05760405162461bcd60e51b8152600401610980906131a3565b6001600160a01b03166000908152600160205260409020805460ff19169055565b611cfa33611df3565b611d165760405162461bcd60e51b8152600401610980906131a3565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616391016110f9565b611d8533611df3565b611da15760405162461bcd60e51b8152600401610980906131a3565b6000815111611de05760405162461bcd60e51b815260206004820152600b60248201526a456d7074792076616c756560a81b6044820152606401610980565b8051610d3990600d906020840190612bf3565b6001600160a01b031660009081526001602052604090205460ff1690565b60006001600160e01b0319821663780e9d6360e01b148061094a575061094a826126a0565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e6b826111c1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000611eb1836112b4565b905060008167ffffffffffffffff811115611ece57611ece612fc1565b604051908082528060200260200182016040528015611ef7578160200160208202803683370190505b50905060005b8281101561148257611f0f8582610de3565b828281518110611f2157611f216131fc565b602090810291909101015280611f3681613241565b915050611efd565b611f47816126f0565b6000805b83811015611fe857611f61601880546001019055565b6018549150611f708583612751565b600082815260196020908152604080832080546001600160a01b0319166001600160a01b038a16179055601a54601b909252909120558215611fd65781611fb5610925565b611fbf919061318f565b601a6000828254611fd09190613229565b90915550505b80611fe081613241565b915050611f4b565b507f5f7a46b551ace06b6360654e8a6ab7ee12a9a178d1bcf1c3496ceeb4a2e7344d612013600a5490565b600f54602554604080519384526020840192909252908201526060015b60405180910390a150505050565b6000818152600460205260408120546001600160a01b03166120b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610980565b60006120c2836111c1565b9050806001600160a01b0316846001600160a01b031614806120fd5750836001600160a01b03166120f284610a6b565b6001600160a01b0316145b8061212d57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612148826111c1565b6001600160a01b0316146121b05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610980565b6001600160a01b0382166122125760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610980565b61221d83838361289f565b612228600082611e36565b6001600160a01b0383166000908152600560205260408120805460019290612251908490613212565b90915550506001600160a01b038216600090815260056020526040812080546001929061227f908490613229565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006122eb826111c1565b90506122f98160008461289f565b612304600083611e36565b6001600160a01b038116600090815260056020526040812080546001929061232d908490613212565b909155505060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600061239282611ea4565b905060008151116123e55760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206e6f7420666f756e6420696e2077616c6c65740000000000006044820152606401610980565b60008060005b835181101561249657601b600085838151811061240a5761240a6131fc565b6020026020010151815260200190815260200160002054601a5461242e9190613212565b91508115612484576124408284613229565b925081601b6000868481518110612459576124596131fc565b60200260200101518152602001908152602001600020600082825461247e9190613229565b90915550505b8061248e81613241565b9150506123eb565b50600082116124de5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610980565b81602560008282546124f09190613212565b9091555050604051339083156108fc029084906000818181858888f19350505050158015612522573d6000803e3d6000fd5b506025546040805184815260208101929092527f4cee3a57766dc1a768f8146cb04eb9b73d8236e9441ca7b16495377d409b4b909101612030565b612568848484612135565b612574848484846128aa565b611aa75760405162461bcd60e51b8152600401610980906132f6565b6060600d80546109e8906131c8565b6060816000036125c65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156125f057806125da81613241565b91506125e99050600a8361318f565b91506125ca565b60008167ffffffffffffffff81111561260b5761260b612fc1565b6040519080825280601f01601f191660200182016040528015612635576020820181803683370190505b5090505b841561212d5761264a600183613212565b9150612657600a86613348565b612662906030613229565b60f81b818381518110612677576126776131fc565b60200101906001600160f81b031916908160001a905350612699600a8661318f565b9450612639565b60006001600160e01b031982166380ac58cd60e01b14806126d157506001600160e01b03198216635b5e139f60e01b145b8061094a57506301ffc9a760e01b6001600160e01b031983161461094a565b80156116cb576000601e54601d5483612709919061315a565b612713919061318f565b905080602560008282546127279190613229565b9091555061273790508183613212565b602460008282546127489190613229565b90915550505050565b6001600160a01b0382166127a75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610980565b6000818152600460205260409020546001600160a01b03161561280c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610980565b6128186000838361289f565b6001600160a01b0382166000908152600560205260408120805460019290612841908490613229565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610c108383836129ab565b60006001600160a01b0384163b156129a057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128ee90339089908890889060040161335c565b6020604051808303816000875af1925050508015612929575060408051601f3d908101601f1916820190925261292691810190613399565b60015b612986573d808015612957576040519150601f19603f3d011682016040523d82523d6000602084013e61295c565b606091505b50805160000361297e5760405162461bcd60e51b8152600401610980906132f6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061212d565b506001949350505050565b6001600160a01b038316612a0657612a0181600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612a29565b816001600160a01b0316836001600160a01b031614612a2957612a298382612a63565b6001600160a01b038216612a4057610c1081612b00565b826001600160a01b0316826001600160a01b031614610c1057610c108282612baf565b60006001612a70846112b4565b612a7a9190613212565b600083815260096020526040902054909150808214612acd576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a54600090612b1290600190613212565b6000838152600b6020526040812054600a8054939450909284908110612b3a57612b3a6131fc565b9060005260206000200154905080600a8381548110612b5b57612b5b6131fc565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a805480612b9357612b936133b6565b6001900381819060005260206000200160009055905550505050565b6000612bba836112b4565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b828054612bff906131c8565b90600052602060002090601f016020900481019282612c215760008555612c67565b82601f10612c3a57805160ff1916838001178555612c67565b82800160010185558215612c67579182015b82811115612c67578251825591602001919060010190612c4c565b50611c769291505b80821115611c765760008155600101612c6f565b6001600160e01b0319811681146116cb57600080fd5b600060208284031215612cab57600080fd5b8135611b7a81612c83565b6001600160a01b03811681146116cb57600080fd5b60008060008060808587031215612ce157600080fd5b8435612cec81612cb6565b93506020850135612cfc81612cb6565b92506040850135612d0c81612cb6565b91506060850135612d1c81612cb6565b939692955090935050565b60005b83811015612d42578181015183820152602001612d2a565b83811115611aa75750506000910152565b60008151808452612d6b816020860160208601612d27565b601f01601f19169290920160200192915050565b602081526000611b7a6020830184612d53565b600060208284031215612da457600080fd5b5035919050565b60008060408385031215612dbe57600080fd5b8235612dc981612cb6565b946020939093013593505050565b600060208284031215612de957600080fd5b8135611b7a81612cb6565b600080600060608486031215612e0957600080fd5b8335612e1481612cb6565b92506020840135612e2481612cb6565b929592945050506040919091013590565b60006101008a151583528960208401528860408401528760608401528660808401528560a08401528460c08401528060e0840152612e7581840185612d53565b9b9a5050505050505050505050565b600080600080600060a08688031215612e9c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b83811015612eef57815187529582019590820190600101612ed3565b509495945050505050565b602081526000611b7a6020830184612ebf565b600080600060608486031215612f2257600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612f4c57600080fd5b8235612f5781612cb6565b915060208301358015158114612f6c57600080fd5b809150509250929050565b838152826020820152606060408201526000612f966060830184612ebf565b95945050505050565b60008060408385031215612fb257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612ff257612ff2612fc1565b604051601f8501601f19908116603f0116810190828211818310171561301a5761301a612fc1565b8160405280935085815286868601111561303357600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561306357600080fd5b843561306e81612cb6565b9350602085013561307e81612cb6565b925060408501359150606085013567ffffffffffffffff8111156130a157600080fd5b8501601f810187136130b257600080fd5b6130c187823560208401612fd7565b91505092959194509250565b600080604083850312156130e057600080fd5b82356130eb81612cb6565b91506020830135612f6c81612cb6565b60006020828403121561310d57600080fd5b813567ffffffffffffffff81111561312457600080fd5b8201601f8101841361313557600080fd5b61212d84823560208401612fd7565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561317457613174613144565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261319e5761319e613179565b500490565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600181811c908216806131dc57607f821691505b60208210810361151557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008282101561322457613224613144565b500390565b6000821982111561323c5761323c613144565b500190565b60006001820161325357613253613144565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600083516132bd818460208801612d27565b8351908301906132d1818360208801612d27565b01949350505050565b600082516132ec818460208701612d27565b9190910192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261335757613357613179565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061338f90830184612d53565b9695505050505050565b6000602082840312156133ab57600080fd5b8151611b7a81612c83565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e64ce23fbdbf1c159b2cc6f1bc432e4999ef18fbddc9eaeefb13561d290f1d6a64736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c43524f4b4944494c4c4945530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000744494c4c49455300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d68747470733a2f2f63726f6b6964696c6c6965732e636f6d2f6e66742f000000
Deployed Bytecode
0x60806040526004361061028b5760003560e01c806375a03ae21161015a578063ad5a7a78116100c1578063da8fbf2a1161007a578063da8fbf2a14610847578063e985e9c51461085c578063f0b37c04146108a5578063f2fde38b146108c5578063f64e7294146108e5578063fe9fbb8014610905576102d5565b8063ad5a7a7814610783578063aff75ce1146107b2578063b6a5d7de146107d2578063b88d4fde146107f2578063c87b56dd14610812578063d348b40914610832576102d5565b806395d89b411161011357806395d89b41146106e657806396d30b46146106fb5780639a65ea261461071b578063a0712d6814610730578063a0885e9314610743578063a22cb46514610763576102d5565b806375a03ae2146106065780637bc6ec1a1461062f5780638462151c1461064f57806389ac1fa81461067c5780638e62f5621461069157806393912db2146106b1576102d5565b80632f54bf6e116101fe5780634608b679116101b75780634608b6791461053e5780634f6ccce714610566578063616cdb1e146105865780636352211e146105a65780636f8b44b0146105c657806370a08231146105e6576102d5565b80632f54bf6e146104855780632f745c59146104b45780633178c851146104d45780633b724b0c146104e957806342842e0e146104fe57806342966c681461051e576102d5565b8063095ea7b311610250578063095ea7b3146103d05780630be4a402146103f057806318160ddd1461041057806322ad06701461042557806323b872dd146104455780632d414ae514610465576102d5565b806209d7fe146102fc57806301ffc9a71461032457806305dc05251461035457806306fdde0314610376578063081812fc14610398576102d5565b366102d5577f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f335b604080516001600160a01b0390921682523460208301520160405180910390a1005b7f75756668f8561d6983cba1a336c6b5321e30f585d6a8cb31742a082b29940989336102b3565b34801561030857600080fd5b50610311610925565b6040519081526020015b60405180910390f35b34801561033057600080fd5b5061034461033f366004612c99565b610950565b604051901515815260200161031b565b34801561036057600080fd5b5061037461036f366004612ccb565b61095b565b005b34801561038257600080fd5b5061038b6109d9565b60405161031b9190612d7f565b3480156103a457600080fd5b506103b86103b3366004612d92565b610a6b565b6040516001600160a01b03909116815260200161031b565b3480156103dc57600080fd5b506103746103eb366004612dab565b610b00565b3480156103fc57600080fd5b5061031161040b366004612dd7565b610c15565b34801561041c57600080fd5b50600a54610311565b34801561043157600080fd5b50610374610440366004612dab565b610caf565b34801561045157600080fd5b50610374610460366004612df4565b610d3d565b34801561047157600080fd5b506103b8610480366004612d92565b610d6f565b34801561049157600080fd5b506103446104a0366004612dd7565b6000546001600160a01b0391821691161490565b3480156104c057600080fd5b506103116104cf366004612dab565b610de3565b3480156104e057600080fd5b50610374610e79565b3480156104f557600080fd5b50610374610fae565b34801561050a57600080fd5b50610374610519366004612df4565b611049565b34801561052a57600080fd5b50610374610539366004612d92565b611064565b34801561054a57600080fd5b50601d54601c546040805192835260208301919091520161031b565b34801561057257600080fd5b50610311610581366004612d92565b611104565b34801561059257600080fd5b506103746105a1366004612d92565b611197565b3480156105b257600080fd5b506103b86105c1366004612d92565b6111c1565b3480156105d257600080fd5b506103746105e1366004612d92565b611238565b3480156105f257600080fd5b50610311610601366004612dd7565b6112b4565b34801561061257600080fd5b5061061b61133b565b60405161031b989796959493929190612e35565b34801561063b57600080fd5b5061037461064a366004612e84565b61141d565b34801561065b57600080fd5b5061066f61066a366004612dd7565b611459565b60405161031b9190612efa565b34801561068857600080fd5b5061037461151b565b34801561069d57600080fd5b506103116106ac366004612dd7565b611526565b3480156106bd57600080fd5b506106cb6025546024544792565b6040805193845260208401929092529082015260600161031b565b3480156106f257600080fd5b5061038b61156a565b34801561070757600080fd5b50610374610716366004612f0d565b611579565b34801561072757600080fd5b506103746115ac565b61037461073e366004612d92565b6115e0565b34801561074f57600080fd5b5061037461075e366004612f0d565b6116ce565b34801561076f57600080fd5b5061037461077e366004612f39565b611704565b34801561078f57600080fd5b506107a361079e366004612dd7565b6117c8565b60405161031b93929190612f77565b3480156107be57600080fd5b506103746107cd366004612f9f565b6117f5565b3480156107de57600080fd5b506103746107ed366004612dd7565b611a29565b3480156107fe57600080fd5b5061037461080d36600461304d565b611a75565b34801561081e57600080fd5b5061038b61082d366004612d92565b611aad565b34801561083e57600080fd5b50610311611b81565b34801561085357600080fd5b50610374611c7a565b34801561086857600080fd5b506103446108773660046130cd565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108b157600080fd5b506103746108c0366004612dd7565b611cab565b3480156108d157600080fd5b506103746108e0366004612dd7565b611cf1565b3480156108f157600080fd5b506103746109003660046130fb565b611d7c565b34801561091157600080fd5b50610344610920366004612dd7565b611df3565b600080601e54601d54610936611b81565b610940919061315a565b61094a919061318f565b92915050565b600061094a82611e11565b61096433611df3565b6109895760405162461bcd60e51b8152600401610980906131a3565b60405180910390fd5b601480546001600160a01b039586166001600160a01b0319918216179091556011805494861694821694909417909355601280549285169284169290921790915560138054919093169116179055565b6060600280546109e8906131c8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a14906131c8565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b0316610ae45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610980565b506000908152600660205260409020546001600160a01b031690565b6000610b0b826111c1565b9050806001600160a01b0316836001600160a01b031603610b785760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610980565b336001600160a01b0382161480610b945750610b948133610877565b610c065760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610980565b610c108383611e36565b505050565b600080610c2183611ea4565b90508051600003610c355750600092915050565b60008060005b8351811015610ca557601b6000858381518110610c5a57610c5a6131fc565b6020026020010151815260200190815260200160002054601a54610c7e9190613212565b91508115610c9357610c908284613229565b92505b80610c9d81613241565b915050610c3b565b5090949350505050565b610cb833611df3565b610cd45760405162461bcd60e51b8152600401610980906131a3565b600f5481610ce160185490565b610ceb9190613229565b10610d2d5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610980565b610d3982826000611f3e565b5050565b610d48335b8261203e565b610d645760405162461bcd60e51b81526004016109809061325a565b610c10838383612135565b6000818152600460205260408120546001600160a01b0316610dc75760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610980565b506000908152601960205260409020546001600160a01b031690565b6000610dee836112b4565b8210610e505760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610980565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b610e8233611df3565b610e9e5760405162461bcd60e51b8152600401610980906131a3565b6024546014546015546001600160a01b03909116906108fc906103e890610ec5908561315a565b610ecf919061318f565b6040518115909202916000818181858888f19350505050158015610ef7573d6000803e3d6000fd5b506011546016546001600160a01b03909116906108fc906103e890610f1c908561315a565b610f26919061318f565b6040518115909202916000818181858888f19350505050158015610f4e573d6000803e3d6000fd5b506012546016546001600160a01b03909116906108fc906103e890610f73908561315a565b610f7d919061318f565b6040518115909202916000818181858888f19350505050158015610fa5573d6000803e3d6000fd5b50506000602455565b610fb733611df3565b610fd35760405162461bcd60e51b8152600401610980906131a3565b600c5460ff161561101a5760405162461bcd60e51b815260206004820152601160248201527014d85b19481a185cdb89dd08195b991959607a1b6044820152606401610980565b6040514790339082156108fc029083906000818181858888f19350505050158015610d39573d6000803e3d6000fd5b610c1083838360405180602001604052806000815250611a75565b61106d33610d42565b6110b25760405162461bcd60e51b8152602060048201526016602482015275139bdd081bdddb995c881b9bdc88185c1c1c9bdd995960521b6044820152606401610980565b6110bb816122e0565b7f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d6110e5600a5490565b600f54604080519283526020830191909152015b60405180910390a150565b600061110f600a5490565b82106111725760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610980565b600a8281548110611185576111856131fc565b90600052602060002001549050919050565b6111a033611df3565b6111bc5760405162461bcd60e51b8152600401610980906131a3565b600e55565b6000818152600460205260408120546001600160a01b03168061094a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610980565b61124133611df3565b61125d5760405162461bcd60e51b8152600401610980906131a3565b6018548110156112af5760405162461bcd60e51b815260206004820152601960248201527f4d757374206265203e3d2063757272656e7420737570706c79000000000000006044820152606401610980565b600f55565b60006001600160a01b03821661131f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610980565b506001600160a01b031660009081526005602052604090205490565b60008060008060008060006060600c60009054906101000a900460ff16601e54611364600a5490565b600f54601054611372610925565b600e54600d808054611383906131c8565b80601f01602080910402602001604051908101604052809291908181526020018280546113af906131c8565b80156113fc5780601f106113d1576101008083540402835291602001916113fc565b820191906000526020600020905b8154815290600101906020018083116113df57829003601f168201915b50505050509050975097509750975097509750975097509091929394959697565b61142633611df3565b6114425760405162461bcd60e51b8152600401610980906131a3565b601f94909455602092909255602155602255602355565b60606000611466836112b4565b90508060000361148a5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff8111156114a5576114a5612fc1565b6040519080825280602002602001820160405280156114ce578160200160208202803683370190505b50905060005b82811015611482576114e68582610de3565b8282815181106114f8576114f86131fc565b60209081029190910101528061150d81613241565b9150506114d4565b50919050565b61152433612387565b565b60008061153283611ea4565b905080516000036115465750600092915050565b6000805b825181101561148257601a5491508061156281613241565b91505061154a565b6060600380546109e8906131c8565b61158233611df3565b61159e5760405162461bcd60e51b8152600401610980906131a3565b601592909255601655601755565b6115b533611df3565b6115d15760405162461bcd60e51b8152600401610980906131a3565b600c805460ff19166001179055565b600c5460ff1680156115f55750600f54601854105b6116415760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206e6f742073746172746564206f7220736f6c642d6f7574006044820152606401610980565b600f548161164e60185490565b6116589190613229565b111580156116685750600e548111155b8015611686575080611678611b81565b611682919061315a565b3410155b6116c05760405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606401610980565b6116cb338234611f3e565b50565b6116d733611df3565b6116f35760405162461bcd60e51b8152600401610980906131a3565b601c91909155601d91909155601e55565b336001600160a01b0383160361175c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610980565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008060606117d6846112b4565b6117df85610c15565b6117e886611ea4565b9250925092509193909250565b6117fe33611df3565b61181a5760405162461bcd60e51b8152600401610980906131a3565b60245460008261182a858461315a565b611834919061318f565b90506000606460155483611848919061315a565b611852919061318f565b90506000606460165484611866919061315a565b611870919061318f565b90506000606460165485611884919061315a565b61188e919061318f565b905060006064601754866118a2919061315a565b6118ac919061318f565b6014546040519192506000916001600160a01b039091169061753090879084818181858888f193505050503d8060008114611903576040519150601f19603f3d011682016040523d82523d6000602084013e611908565b606091505b50506011546040519192506001600160a01b0316906175309086906000818181858888f193505050503d806000811461195d576040519150601f19603f3d011682016040523d82523d6000602084013e611962565b606091505b50506012546040519192506001600160a01b0316906175309085906000818181858888f193505050503d80600081146119b7576040519150601f19603f3d011682016040523d82523d6000602084013e6119bc565b606091505b50506013546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114611a11576040519150601f19603f3d011682016040523d82523d6000602084013e611a16565b606091505b5050600060245550505050505050505050565b611a3233611df3565b611a4e5760405162461bcd60e51b8152600401610980906131a3565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b611a7f338361203e565b611a9b5760405162461bcd60e51b81526004016109809061325a565b611aa78484848461255d565b50505050565b6000818152600460205260409020546060906001600160a01b0316611b085760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610980565b6000611b12612590565b90506000815111611b325760405180602001604052806000815250611b7a565b80611b3c8461259f565b604051602001611b4d9291906132ab565b60408051601f1981840301815290829052611b6a916020016132da565b6040516020818303038152906040525b9392505050565b600c5460009060ff161515600114611bd15760405162461bcd60e51b815260206004820152601360248201527214d85b19481a185cdb89dd081cdd185c9d1959606a1b6044820152606401610980565b600f54600a5410611c1d5760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b6044820152606401610980565b6000611c28600a5490565b90506107d18110611c3b57505060235490565b6105dd8110611c4c57505060225490565b6103e98110611c5d57505060215490565b6101f58110611c6e57505060205490565b5050601f5490565b5090565b611c8333611df3565b611c9f5760405162461bcd60e51b8152600401610980906131a3565b600c805460ff19169055565b611cb433611df3565b611cd05760405162461bcd60e51b8152600401610980906131a3565b6001600160a01b03166000908152600160205260409020805460ff19169055565b611cfa33611df3565b611d165760405162461bcd60e51b8152600401610980906131a3565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616391016110f9565b611d8533611df3565b611da15760405162461bcd60e51b8152600401610980906131a3565b6000815111611de05760405162461bcd60e51b815260206004820152600b60248201526a456d7074792076616c756560a81b6044820152606401610980565b8051610d3990600d906020840190612bf3565b6001600160a01b031660009081526001602052604090205460ff1690565b60006001600160e01b0319821663780e9d6360e01b148061094a575061094a826126a0565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e6b826111c1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000611eb1836112b4565b905060008167ffffffffffffffff811115611ece57611ece612fc1565b604051908082528060200260200182016040528015611ef7578160200160208202803683370190505b50905060005b8281101561148257611f0f8582610de3565b828281518110611f2157611f216131fc565b602090810291909101015280611f3681613241565b915050611efd565b611f47816126f0565b6000805b83811015611fe857611f61601880546001019055565b6018549150611f708583612751565b600082815260196020908152604080832080546001600160a01b0319166001600160a01b038a16179055601a54601b909252909120558215611fd65781611fb5610925565b611fbf919061318f565b601a6000828254611fd09190613229565b90915550505b80611fe081613241565b915050611f4b565b507f5f7a46b551ace06b6360654e8a6ab7ee12a9a178d1bcf1c3496ceeb4a2e7344d612013600a5490565b600f54602554604080519384526020840192909252908201526060015b60405180910390a150505050565b6000818152600460205260408120546001600160a01b03166120b75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610980565b60006120c2836111c1565b9050806001600160a01b0316846001600160a01b031614806120fd5750836001600160a01b03166120f284610a6b565b6001600160a01b0316145b8061212d57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612148826111c1565b6001600160a01b0316146121b05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610980565b6001600160a01b0382166122125760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610980565b61221d83838361289f565b612228600082611e36565b6001600160a01b0383166000908152600560205260408120805460019290612251908490613212565b90915550506001600160a01b038216600090815260056020526040812080546001929061227f908490613229565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006122eb826111c1565b90506122f98160008461289f565b612304600083611e36565b6001600160a01b038116600090815260056020526040812080546001929061232d908490613212565b909155505060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600061239282611ea4565b905060008151116123e55760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206e6f7420666f756e6420696e2077616c6c65740000000000006044820152606401610980565b60008060005b835181101561249657601b600085838151811061240a5761240a6131fc565b6020026020010151815260200190815260200160002054601a5461242e9190613212565b91508115612484576124408284613229565b925081601b6000868481518110612459576124596131fc565b60200260200101518152602001908152602001600020600082825461247e9190613229565b90915550505b8061248e81613241565b9150506123eb565b50600082116124de5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610980565b81602560008282546124f09190613212565b9091555050604051339083156108fc029084906000818181858888f19350505050158015612522573d6000803e3d6000fd5b506025546040805184815260208101929092527f4cee3a57766dc1a768f8146cb04eb9b73d8236e9441ca7b16495377d409b4b909101612030565b612568848484612135565b612574848484846128aa565b611aa75760405162461bcd60e51b8152600401610980906132f6565b6060600d80546109e8906131c8565b6060816000036125c65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156125f057806125da81613241565b91506125e99050600a8361318f565b91506125ca565b60008167ffffffffffffffff81111561260b5761260b612fc1565b6040519080825280601f01601f191660200182016040528015612635576020820181803683370190505b5090505b841561212d5761264a600183613212565b9150612657600a86613348565b612662906030613229565b60f81b818381518110612677576126776131fc565b60200101906001600160f81b031916908160001a905350612699600a8661318f565b9450612639565b60006001600160e01b031982166380ac58cd60e01b14806126d157506001600160e01b03198216635b5e139f60e01b145b8061094a57506301ffc9a760e01b6001600160e01b031983161461094a565b80156116cb576000601e54601d5483612709919061315a565b612713919061318f565b905080602560008282546127279190613229565b9091555061273790508183613212565b602460008282546127489190613229565b90915550505050565b6001600160a01b0382166127a75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610980565b6000818152600460205260409020546001600160a01b03161561280c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610980565b6128186000838361289f565b6001600160a01b0382166000908152600560205260408120805460019290612841908490613229565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610c108383836129ab565b60006001600160a01b0384163b156129a057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128ee90339089908890889060040161335c565b6020604051808303816000875af1925050508015612929575060408051601f3d908101601f1916820190925261292691810190613399565b60015b612986573d808015612957576040519150601f19603f3d011682016040523d82523d6000602084013e61295c565b606091505b50805160000361297e5760405162461bcd60e51b8152600401610980906132f6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061212d565b506001949350505050565b6001600160a01b038316612a0657612a0181600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612a29565b816001600160a01b0316836001600160a01b031614612a2957612a298382612a63565b6001600160a01b038216612a4057610c1081612b00565b826001600160a01b0316826001600160a01b031614610c1057610c108282612baf565b60006001612a70846112b4565b612a7a9190613212565b600083815260096020526040902054909150808214612acd576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a54600090612b1290600190613212565b6000838152600b6020526040812054600a8054939450909284908110612b3a57612b3a6131fc565b9060005260206000200154905080600a8381548110612b5b57612b5b6131fc565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a805480612b9357612b936133b6565b6001900381819060005260206000200160009055905550505050565b6000612bba836112b4565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b828054612bff906131c8565b90600052602060002090601f016020900481019282612c215760008555612c67565b82601f10612c3a57805160ff1916838001178555612c67565b82800160010185558215612c67579182015b82811115612c67578251825591602001919060010190612c4c565b50611c769291505b80821115611c765760008155600101612c6f565b6001600160e01b0319811681146116cb57600080fd5b600060208284031215612cab57600080fd5b8135611b7a81612c83565b6001600160a01b03811681146116cb57600080fd5b60008060008060808587031215612ce157600080fd5b8435612cec81612cb6565b93506020850135612cfc81612cb6565b92506040850135612d0c81612cb6565b91506060850135612d1c81612cb6565b939692955090935050565b60005b83811015612d42578181015183820152602001612d2a565b83811115611aa75750506000910152565b60008151808452612d6b816020860160208601612d27565b601f01601f19169290920160200192915050565b602081526000611b7a6020830184612d53565b600060208284031215612da457600080fd5b5035919050565b60008060408385031215612dbe57600080fd5b8235612dc981612cb6565b946020939093013593505050565b600060208284031215612de957600080fd5b8135611b7a81612cb6565b600080600060608486031215612e0957600080fd5b8335612e1481612cb6565b92506020840135612e2481612cb6565b929592945050506040919091013590565b60006101008a151583528960208401528860408401528760608401528660808401528560a08401528460c08401528060e0840152612e7581840185612d53565b9b9a5050505050505050505050565b600080600080600060a08688031215612e9c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600081518084526020808501945080840160005b83811015612eef57815187529582019590820190600101612ed3565b509495945050505050565b602081526000611b7a6020830184612ebf565b600080600060608486031215612f2257600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612f4c57600080fd5b8235612f5781612cb6565b915060208301358015158114612f6c57600080fd5b809150509250929050565b838152826020820152606060408201526000612f966060830184612ebf565b95945050505050565b60008060408385031215612fb257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612ff257612ff2612fc1565b604051601f8501601f19908116603f0116810190828211818310171561301a5761301a612fc1565b8160405280935085815286868601111561303357600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561306357600080fd5b843561306e81612cb6565b9350602085013561307e81612cb6565b925060408501359150606085013567ffffffffffffffff8111156130a157600080fd5b8501601f810187136130b257600080fd5b6130c187823560208401612fd7565b91505092959194509250565b600080604083850312156130e057600080fd5b82356130eb81612cb6565b91506020830135612f6c81612cb6565b60006020828403121561310d57600080fd5b813567ffffffffffffffff81111561312457600080fd5b8201601f8101841361313557600080fd5b61212d84823560208401612fd7565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561317457613174613144565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261319e5761319e613179565b500490565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600181811c908216806131dc57607f821691505b60208210810361151557634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008282101561322457613224613144565b500390565b6000821982111561323c5761323c613144565b500190565b60006001820161325357613253613144565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600083516132bd818460208801612d27565b8351908301906132d1818360208801612d27565b01949350505050565b600082516132ec818460208701612d27565b9190910192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261335757613357613179565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061338f90830184612d53565b9695505050505050565b6000602082840312156133ab57600080fd5b8151611b7a81612c83565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e64ce23fbdbf1c159b2cc6f1bc432e4999ef18fbddc9eaeefb13561d290f1d6a64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c43524f4b4944494c4c4945530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000744494c4c49455300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d68747470733a2f2f63726f6b6964696c6c6965732e636f6d2f6e66742f000000
-----Decoded View---------------
Arg [0] : name (string): CROKIDILLIES
Arg [1] : symbol (string): DILLIES
Arg [2] : assetsBaseURI (string): https://crokidillies.com/nft/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 43524f4b4944494c4c4945530000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 44494c4c49455300000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001d
Arg [8] : 68747470733a2f2f63726f6b6964696c6c6965732e636f6d2f6e66742f000000
Deployed ByteCode Sourcemap
44011:14270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45883:38;2429:10;45897:12;45883:38;;;-1:-1:-1;;;;;206:32:1;;;188:51;;45911:9:0;270:2:1;255:18;;248:34;161:18;45883:38:0;;;;;;;44011:14270;;45981:47;2429:10;46004:12;2349:98;50785:204;;;;;;;;;;;;;:::i;:::-;;;439:25:1;;;427:2;412:18;50785:204:0;;;;;;;;46860:179;;;;;;;;;;-1:-1:-1;46860:179:0;;;;;:::i;:::-;;:::i;:::-;;;1026:14:1;;1019:22;1001:41;;989:2;974:18;46860:179:0;861:187:1;50264:219:0;;;;;;;;;;-1:-1:-1;50264:219:0;;;;;:::i;:::-;;:::i;:::-;;24213:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25772:221::-;;;;;;;;;;-1:-1:-1;25772:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2965:32:1;;;2947:51;;2935:2;2920:18;25772:221:0;2801:203:1;25295:411:0;;;;;;;;;;-1:-1:-1;25295:411:0;;;;;:::i;:::-;;:::i;48363:534::-;;;;;;;;;;-1:-1:-1;48363:534:0;;;;;:::i;:::-;;:::i;37785:113::-;;;;;;;;;;-1:-1:-1;37873:10:0;:17;37785:113;;52555:209;;;;;;;;;;-1:-1:-1;52555:209:0;;;;;:::i;:::-;;:::i;26662:339::-;;;;;;;;;;-1:-1:-1;26662:339:0;;;;;:::i;:::-;;:::i;57704:179::-;;;;;;;;;;-1:-1:-1;57704:179:0;;;;;:::i;:::-;;:::i;9094:103::-;;;;;;;;;;-1:-1:-1;9094:103:0;;;;;:::i;:::-;9149:4;9184:5;-1:-1:-1;;;;;9173:16:0;;;9184:5;;9173:16;;9094:103;37453:256;;;;;;;;;;-1:-1:-1;37453:256:0;;;;;:::i;:::-;;:::i;50491:286::-;;;;;;;;;;;;;:::i;58066:210::-;;;;;;;;;;;;;:::i;27072:185::-;;;;;;;;;;-1:-1:-1;27072:185:0;;;;;:::i;:::-;;:::i;55454:215::-;;;;;;;;;;-1:-1:-1;55454:215:0;;;;;:::i;:::-;;:::i;56714:128::-;;;;;;;;;;-1:-1:-1;56791:18:0;;56811:22;;56714:128;;;4216:25:1;;;4272:2;4257:18;;4250:34;;;;4189:18;56714:128:0;4042:248:1;37975:233:0;;;;;;;;;;-1:-1:-1;37975:233:0;;;;;:::i;:::-;;:::i;53536:97::-;;;;;;;;;;-1:-1:-1;53536:97:0;;;;;:::i;:::-;;:::i;23907:239::-;;;;;;;;;;-1:-1:-1;23907:239:0;;;;;:::i;:::-;;:::i;54054:163::-;;;;;;;;;;-1:-1:-1;54054:163:0;;;;;:::i;:::-;;:::i;23637:208::-;;;;;;;;;;-1:-1:-1;23637:208:0;;;;;:::i;:::-;;:::i;56081:261::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;56350:296::-;;;;;;;;;;-1:-1:-1;56350:296:0;;;;;:::i;:::-;;:::i;46084:540::-;;;;;;;;;;-1:-1:-1;46084:540:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;57970:88::-;;;;;;;;;;;;;:::i;48905:391::-;;;;;;;;;;-1:-1:-1;48905:391:0;;;;;:::i;:::-;;:::i;57112:160::-;;;;;;;;;;;;57223:19;;57244;;57200:21;;57112:160;;;;;6420:25:1;;;6476:2;6461:18;;6454:34;;;;6504:18;;;6497:34;6408:2;6393:18;57112:160:0;6218:319:1;24382:104:0;;;;;;;;;;;;;:::i;53111:173::-;;;;;;;;;;-1:-1:-1;53111:173:0;;;;;:::i;:::-;;:::i;53707:83::-;;;;;;;;;;;;;:::i;55096:279::-;;;;;;:::i;:::-;;:::i;56850:205::-;;;;;;;;;;-1:-1:-1;56850:205:0;;;;;:::i;:::-;;:::i;26065:295::-;;;;;;;;;;-1:-1:-1;26065:295:0;;;;;:::i;:::-;;:::i;57324:203::-;;;;;;;;;;-1:-1:-1;57324:203:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;50997:748::-;;;;;;;;;;-1:-1:-1;50997:748:0;;;;;:::i;:::-;;:::i;8885:95::-;;;;;;;;;;-1:-1:-1;8885:95:0;;;;;:::i;:::-;;:::i;27328:328::-;;;;;;;;;;-1:-1:-1;27328:328:0;;;;;:::i;:::-;;:::i;55677:340::-;;;;;;;;;;-1:-1:-1;55677:340:0;;;;;:::i;:::-;;:::i;51753:606::-;;;;;;;;;;;;;:::i;53798:84::-;;;;;;;;;;;;;:::i;26431:164::-;;;;;;;;;;-1:-1:-1;26431:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26552:25:0;;;26528:4;26552:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26431:164;8988:98;;;;;;;;;;-1:-1:-1;8988:98:0;;;;;:::i;:::-;;:::i;9320:174::-;;;;;;;;;;-1:-1:-1;9320:174:0;;;;;:::i;:::-;;:::i;52933:170::-;;;;;;;;;;-1:-1:-1;52933:170:0;;;;;:::i;:::-;;:::i;9205:107::-;;;;;;;;;;-1:-1:-1;9205:107:0;;;;;:::i;:::-;;:::i;50785:204::-;50831:7;50851:18;50936:16;;50913:18;;50894:16;:14;:16::i;:::-;:37;;;;:::i;:::-;50893:60;;;;:::i;:::-;50880:73;50785:204;-1:-1:-1;;50785:204:0:o;46860:179::-;46971:4;46995:36;47019:11;46995:23;:36::i;50264:219::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;;;;;;;;;50388:4:::1;:12:::0;;-1:-1:-1;;;;;50388:12:0;;::::1;-1:-1:-1::0;;;;;;50388:12:0;;::::1;;::::0;;;50411:5:::1;:14:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;50436:5:::1;:14:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;50461:5:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;50264:219::o;24213:100::-;24267:13;24300:5;24293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24213:100;:::o;25772:221::-;25848:7;29255:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29255:16:0;25868:73;;;;-1:-1:-1;;;25868:73:0;;12109:2:1;25868:73:0;;;12091:21:1;12148:2;12128:18;;;12121:30;12187:34;12167:18;;;12160:62;-1:-1:-1;;;12238:18:1;;;12231:42;12290:19;;25868:73:0;11907:408:1;25868:73:0;-1:-1:-1;25961:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25961:24:0;;25772:221::o;25295:411::-;25376:13;25392:23;25407:7;25392:14;:23::i;:::-;25376:39;;25440:5;-1:-1:-1;;;;;25434:11:0;:2;-1:-1:-1;;;;;25434:11:0;;25426:57;;;;-1:-1:-1;;;25426:57:0;;12522:2:1;25426:57:0;;;12504:21:1;12561:2;12541:18;;;12534:30;12600:34;12580:18;;;12573:62;-1:-1:-1;;;12651:18:1;;;12644:31;12692:19;;25426:57:0;12320:397:1;25426:57:0;2429:10;-1:-1:-1;;;;;25518:21:0;;;;:62;;-1:-1:-1;25543:37:0;25560:5;2429:10;26431:164;:::i;25543:37::-;25496:168;;;;-1:-1:-1;;;25496:168:0;;12924:2:1;25496:168:0;;;12906:21:1;12963:2;12943:18;;;12936:30;13002:34;12982:18;;;12975:62;13073:26;13053:18;;;13046:54;13117:19;;25496:168:0;12722:420:1;25496:168:0;25677:21;25686:2;25690:7;25677:8;:21::i;:::-;25365:341;25295:411;;:::o;48363:534::-;48434:7;48454:24;48481:26;48496:10;48481:14;:26::i;:::-;48454:53;;48522:7;:14;48540:1;48522:19;48518:60;;-1:-1:-1;48565:1:0;;48363:534;-1:-1:-1;;48363:534:0:o;48518:60::-;48588:18;48617:16;48649:9;48644:218;48668:7;:14;48664:1;:18;48644:218;;;48732:17;:29;48750:7;48758:1;48750:10;;;;;;;;:::i;:::-;;;;;;;48732:29;;;;;;;;;;;;48715:14;;:46;;;;:::i;:::-;48704:57;-1:-1:-1;48780:12:0;;48776:75;;48813:22;48827:8;48813:22;;:::i;:::-;;;48776:75;48684:3;;;;:::i;:::-;;;;48644:218;;;-1:-1:-1;48879:10:0;;48363:534;-1:-1:-1;;;;48363:534:0:o;52555:209::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;52681:10:::1;;52672:6;52649:19;:9;43510:14:::0;;43418:114;52649:19:::1;52648:30;;;;:::i;:::-;:43;52640:74;;;::::0;-1:-1:-1;;;52640:74:0;;13884:2:1;52640:74:0::1;::::0;::::1;13866:21:1::0;13923:2;13903:18;;;13896:30;-1:-1:-1;;;13942:18:1;;;13935:48;14000:18;;52640:74:0::1;13682:342:1::0;52640:74:0::1;52725:31;52735:9;52746:6;52754:1;52725:9;:31::i;:::-;52555:209:::0;;:::o;26662:339::-;26857:41;2429:10;26876:12;26890:7;26857:18;:41::i;:::-;26849:103;;;;-1:-1:-1;;;26849:103:0;;;;;;;:::i;:::-;26965:28;26975:4;26981:2;26985:7;26965:9;:28::i;57704:179::-;57766:7;29255:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29255:16:0;57786:46;;;;-1:-1:-1;;;57786:46:0;;14649:2:1;57786:46:0;;;14631:21:1;14688:2;14668:18;;;14661:30;-1:-1:-1;;;14707:18:1;;;14700:47;14764:18;;57786:46:0;14447:341:1;57786:46:0;-1:-1:-1;57850:25:0;;;;:16;:25;;;;;;-1:-1:-1;;;;;57850:25:0;;57704:179::o;37453:256::-;37550:7;37586:23;37603:5;37586:16;:23::i;:::-;37578:5;:31;37570:87;;;;-1:-1:-1;;;37570:87:0;;14995:2:1;37570:87:0;;;14977:21:1;15034:2;15014:18;;;15007:30;15073:34;15053:18;;;15046:62;-1:-1:-1;;;15124:18:1;;;15117:41;15175:19;;37570:87:0;14793:407:1;37570:87:0;-1:-1:-1;;;;;;37675:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37453:256::o;50491:286::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;50554:19:::1;::::0;50592:4:::1;::::0;50610:10:::1;::::0;-1:-1:-1;;;;;50592:4:0;;::::1;::::0;50584:43:::1;::::0;50622:4:::1;::::0;50608:12:::1;::::0;50554:19;50608:12:::1;:::i;:::-;50607:19;;;;:::i;:::-;50584:43;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;50646:5:0::1;::::0;50665:9:::1;::::0;-1:-1:-1;;;;;50646:5:0;;::::1;::::0;50638:43:::1;::::0;50676:4:::1;::::0;50663:11:::1;::::0;:1;:11:::1;:::i;:::-;50662:18;;;;:::i;:::-;50638:43;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;50700:5:0::1;::::0;50719:9:::1;::::0;-1:-1:-1;;;;;50700:5:0;;::::1;::::0;50692:43:::1;::::0;50730:4:::1;::::0;50717:11:::1;::::0;:1;:11:::1;:::i;:::-;50716:18;;;;:::i;:::-;50692:43;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;50768:1:0::1;50746:19;:23:::0;50491:286::o;58066:210::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;58124:15:::1;::::0;::::1;;:24;58116:54;;;::::0;-1:-1:-1;;;58116:54:0;;15407:2:1;58116:54:0::1;::::0;::::1;15389:21:1::0;15446:2;15426:18;;;15419:30;-1:-1:-1;;;15465:18:1;;;15458:47;15522:18;;58116:54:0::1;15205:341:1::0;58116:54:0::1;58230:36;::::0;58198:21:::1;::::0;58238:10:::1;::::0;58230:36;::::1;;;::::0;58198:21;;58181:14:::1;58230:36:::0;58181:14;58230:36;58198:21;58238:10;58230:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;27072:185:::0;27210:39;27227:4;27233:2;27237:7;27210:39;;;;;;;;;;;;:16;:39::i;55454:215::-;55511:41;2429:10;55530:12;2349:98;55511:41;55503:76;;;;-1:-1:-1;;;55503:76:0;;15753:2:1;55503:76:0;;;15735:21:1;15792:2;15772:18;;;15765:30;-1:-1:-1;;;15811:18:1;;;15804:52;15873:18;;55503:76:0;15551:346:1;55503:76:0;55590:14;55596:7;55590:5;:14::i;:::-;55622:39;55635:13;37873:10;:17;;37785:113;55635:13;55650:10;;55622:39;;;4216:25:1;;;4272:2;4257:18;;4250:34;;;;4189:18;55622:39:0;;;;;;;;55454:215;:::o;37975:233::-;38050:7;38086:30;37873:10;:17;;37785:113;38086:30;38078:5;:38;38070:95;;;;-1:-1:-1;;;38070:95:0;;16104:2:1;38070:95:0;;;16086:21:1;16143:2;16123:18;;;16116:30;16182:34;16162:18;;;16155:62;-1:-1:-1;;;16233:18:1;;;16226:42;16285:19;;38070:95:0;15902:408:1;38070:95:0;38183:10;38194:5;38183:17;;;;;;;;:::i;:::-;;;;;;;;;38176:24;;37975:233;;;:::o;53536:97::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;53603:13:::1;:22:::0;53536:97::o;23907:239::-;23979:7;24015:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24015:16:0;;24042:73;;;;-1:-1:-1;;;24042:73:0;;16517:2:1;24042:73:0;;;16499:21:1;16556:2;16536:18;;;16529:30;16595:34;16575:18;;;16568:62;-1:-1:-1;;;16646:18:1;;;16639:39;16695:19;;24042:73:0;16315:405:1;54054:163:0;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;54133:9:::1;43510:14:::0;54126:3:::1;:26;;54118:64;;;::::0;-1:-1:-1;;;54118:64:0;;16927:2:1;54118:64:0::1;::::0;::::1;16909:21:1::0;16966:2;16946:18;;;16939:30;17005:27;16985:18;;;16978:55;17050:18;;54118:64:0::1;16725:349:1::0;54118:64:0::1;54193:10;:16:::0;54054:163::o;23637:208::-;23709:7;-1:-1:-1;;;;;23737:19:0;;23729:74;;;;-1:-1:-1;;;23729:74:0;;17281:2:1;23729:74:0;;;17263:21:1;17320:2;17300:18;;;17293:30;17359:34;17339:18;;;17332:62;-1:-1:-1;;;17410:18:1;;;17403:40;17460:19;;23729:74:0;17079:406:1;23729:74:0;-1:-1:-1;;;;;;23821:16:0;;;;;:9;:16;;;;;;;23637:208::o;56081:261::-;56119:4;56125:7;56134;56143;56152;56161;56170;56179:13;56213:15;;;;;;;;;;;56230:16;;56248:13;37873:10;:17;;37785:113;56248:13;56263:10;;56275;;56287:15;:13;:15::i;:::-;56304:13;;56319:14;56205:129;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56081:261;;;;;;;;:::o;56350:296::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;56490:9:::1;:20:::0;;;;56521:9:::1;:20:::0;;;;56552:11:::1;:22:::0;56585:10:::1;:21:::0;56617:10:::1;:21:::0;56350:296::o;46084:540::-;46146:16;46175:18;46196:17;46206:6;46196:9;:17::i;:::-;46175:38;;46228:10;46242:1;46228:15;46224:393;;46305:16;;;46319:1;46305:16;;;;;;;;;;;-1:-1:-1;46298:23:0;46084:540;-1:-1:-1;;;46084:540:0:o;46224:393::-;46354:23;46394:10;46380:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46380:25:0;;46354:51;;46420:13;46448:130;46472:10;46464:5;:18;46448:130;;;46528:34;46548:6;46556:5;46528:19;:34::i;:::-;46512:6;46519:5;46512:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;46484:7;;;;:::i;:::-;;;;46448:130;;46224:393;46164:460;46084:540;;;:::o;57970:88::-;58016:34;2429:10;58016:20;:34::i;:::-;57970:88::o;48905:391::-;48974:7;48994:24;49021:26;49036:10;49021:14;:26::i;:::-;48994:53;;49062:7;:14;49080:1;49062:19;49058:60;;-1:-1:-1;49105:1:0;;48905:391;-1:-1:-1;;48905:391:0:o;49058:60::-;49128:19;;49158:102;49182:7;:14;49178:1;:18;49158:102;;;49232:14;;;-1:-1:-1;49198:3:0;;;;:::i;:::-;;;;49158:102;;24382:104;24438:13;24471:7;24464:14;;;;;:::i;53111:173::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;53204:10:::1;:18:::0;;;;53233:9:::1;:16:::0;53260:9:::1;:16:::0;53111:173::o;53707:83::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;53760:15:::1;:22:::0;;-1:-1:-1;;53760:22:0::1;53778:4;53760:22;::::0;;53707:83::o;55096:279::-;47248:15;;;;:51;;;;-1:-1:-1;47289:10:0;;47267:9;43510:14;47267:32;47248:51;47240:95;;;;-1:-1:-1;;;47240:95:0;;17692:2:1;47240:95:0;;;17674:21:1;17731:2;17711:18;;;17704:30;17770:33;17750:18;;;17743:61;17821:18;;47240:95:0;17490:355:1;47240:95:0;55214:10:::1;;55203:6;55181:19;:9;43510:14:::0;;43418:114;55181:19:::1;:28;;;;:::i;:::-;55180:44;;55179:75;;;;;55240:13;;55230:6;:23;;55179:75;:119;;;;;55291:6;55272:16;:14;:16::i;:::-;:25;;;;:::i;:::-;55259:9;:38;;55179:119;55171:143;;;::::0;-1:-1:-1;;;55171:143:0;;18052:2:1;55171:143:0::1;::::0;::::1;18034:21:1::0;18091:2;18071:18;;;18064:30;-1:-1:-1;;;18110:18:1;;;18103:41;18161:18;;55171:143:0::1;17850:335:1::0;55171:143:0::1;55325:42;2429:10:::0;55349:6:::1;55357:9;55325;:42::i;:::-;55096:279:::0;:::o;56850:205::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;56945:22:::1;:30:::0;;;;56986:18:::1;:25:::0;;;;57022:16:::1;:25:::0;56850:205::o;26065:295::-;2429:10;-1:-1:-1;;;;;26168:24:0;;;26160:62;;;;-1:-1:-1;;;26160:62:0;;18392:2:1;26160:62:0;;;18374:21:1;18431:2;18411:18;;;18404:30;18470:27;18450:18;;;18443:55;18515:18;;26160:62:0;18190:349:1;26160:62:0;2429:10;26235:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26235:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26235:53:0;;;;;;;;;;26304:48;;1001:41:1;;;26235:42:0;;2429:10;26304:48;;974:18:1;26304:48:0;;;;;;;26065:295;;:::o;57324:203::-;57380:7;57389;57398:16;57435:21;57445:10;57435:9;:21::i;:::-;57458:32;57479:10;57458:20;:32::i;:::-;57492:26;57507:10;57492:14;:26::i;:::-;57427:92;;;;;;57324:203;;;;;:::o;50997:748::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;51089:19:::1;::::0;51073:13:::1;51149:3:::0;51137:9:::1;51143:3:::0;51089:19;51137:9:::1;:::i;:::-;51136:17;;;;:::i;:::-;51119:34;;51164:14;51202:3;51189:10;;51182:6;:17;;;;:::i;:::-;51181:25;;;;:::i;:::-;51164:42;;51217:14;51254:3;51242:9;;51235:6;:16;;;;:::i;:::-;51234:24;;;;:::i;:::-;51217:41;;51269:14;51306:3;51294:9;;51287:6;:16;;;;:::i;:::-;51286:24;;;;:::i;:::-;51269:41;;51321:14;51358:3;51346:9;;51339:6;:16;;;;:::i;:::-;51338:24;;;;:::i;:::-;51402:4;::::0;51394:49:::1;::::0;51321:41;;-1:-1:-1;51374:15:0::1;::::0;-1:-1:-1;;;;;51402:4:0;;::::1;::::0;51433:5:::1;::::0;51420:6;;51374:15;51394:49;51374:15;51394:49;51420:6;51402:4;51433:5;51394:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;51478:5:0::1;::::0;51470:50:::1;::::0;51373:70;;-1:-1:-1;;;;;;51478:5:0::1;::::0;51510::::1;::::0;51497:6;;51470:50:::1;::::0;;;51497:6;51478:5;51510;51470:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;51555:5:0::1;::::0;51547:50:::1;::::0;51454:66;;-1:-1:-1;;;;;;51555:5:0::1;::::0;51587::::1;::::0;51574:6;;51547:50:::1;::::0;;;51574:6;51555:5;51587;51547:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;51632:5:0::1;::::0;51624:50:::1;::::0;51531:66;;-1:-1:-1;;;;;;51632:5:0::1;::::0;51664::::1;::::0;51651:6;;51624:50:::1;::::0;;;51651:6;51632:5;51664;51624:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;51698:5:0::1;51714:19;:23:::0;-1:-1:-1;;;;;;;;;;50997:748:0:o;8885:95::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8946:19:0::1;;::::0;;;8968:4:::1;8946:19;::::0;;;;;;;:26;;-1:-1:-1;;8946:26:0::1;::::0;;::::1;::::0;;8885:95::o;27328:328::-;27503:41;2429:10;27536:7;27503:18;:41::i;:::-;27495:103;;;;-1:-1:-1;;;27495:103:0;;;;;;;:::i;:::-;27609:39;27623:4;27629:2;27633:7;27642:5;27609:13;:39::i;:::-;27328:328;;;;:::o;55677:340::-;29231:4;29255:16;;;:7;:16;;;;;;55758:13;;-1:-1:-1;;;;;29255:16:0;55784:46;;;;-1:-1:-1;;;55784:46:0;;14649:2:1;55784:46:0;;;14631:21:1;14688:2;14668:18;;;14661:30;-1:-1:-1;;;14707:18:1;;;14700:47;14764:18;;55784:46:0;14447:341:1;55784:46:0;55841:21;55865:10;:8;:10::i;:::-;55841:34;;55917:1;55899:7;55893:21;:25;:108;;;;;;;;;;;;;;;;;55962:7;55971:18;:7;:16;:18::i;:::-;55945:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;55945:45:0;;;;;;;;;;55928:67;;55945:45;55928:67;;:::i;:::-;;;;;;;;;;;;;55893:108;55886:115;55677:340;-1:-1:-1;;;55677:340:0:o;51753:606::-;51828:15;;51800:7;;51828:15;;:23;;:15;:23;51820:55;;;;-1:-1:-1;;;51820:55:0;;19811:2:1;51820:55:0;;;19793:21:1;19850:2;19830:18;;;19823:30;-1:-1:-1;;;19869:18:1;;;19862:49;19928:18;;51820:55:0;19609:343:1;51820:55:0;51910:10;;37873;:17;51894:26;51886:61;;;;-1:-1:-1;;;51886:61:0;;20159:2:1;51886:61:0;;;20141:21:1;20198:2;20178:18;;;20171:30;-1:-1:-1;;;20217:18:1;;;20210:52;20279:18;;51886:61:0;19957:346:1;51886:61:0;51960:21;51984:13;37873:10;:17;;37785:113;51984:13;51960:37;;52023:4;52006:13;:21;52002:350;;-1:-1:-1;;52051:10:0;;;51753:606::o;52002:350::-;52100:4;52083:13;:21;52079:273;;-1:-1:-1;;52128:10:0;;;51753:606::o;52079:273::-;52177:4;52160:13;:21;52156:196;;-1:-1:-1;;52205:11:0;;;51753:606::o;52156:196::-;52255:3;52238:13;:20;52234:118;;-1:-1:-1;;52282:9:0;;;51753:606::o;52234:118::-;-1:-1:-1;;52331:9:0;;;51753:606::o;52234:118::-;51809:550;51753:606;:::o;53798:84::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;53851:15:::1;:23:::0;;-1:-1:-1;;53851:23:0::1;::::0;;53798:84::o;8988:98::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9051:19:0::1;9073:5;9051:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;9051:27:0::1;::::0;;8988:98::o;9320:174::-;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;9397:5:::1;:11:::0;;-1:-1:-1;;;;;;9397:11:0::1;-1:-1:-1::0;;;;;9397:11:0;::::1;::::0;;::::1;::::0;;9419:19;;;-1:-1:-1;9419:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;9419:26:0::1;::::0;;::::1;::::0;;;9461:25;;2947:51:1;;;9461:25:0::1;::::0;2920:18:1;9461:25:0::1;2801:203:1::0;52933:170:0;8826:24;8839:10;8826:12;:24::i;:::-;8818:48;;;;-1:-1:-1;;;8818:48:0;;;;;;;:::i;:::-;53043:1:::1;53025:7;53019:21;:25;53011:49;;;::::0;-1:-1:-1;;;53011:49:0;;20726:2:1;53011:49:0::1;::::0;::::1;20708:21:1::0;20765:2;20745:18;;;20738:30;-1:-1:-1;;;20784:18:1;;;20777:41;20835:18;;53011:49:0::1;20524:335:1::0;53011:49:0::1;53071:24:::0;;::::1;::::0;:14:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;9205:107::-:0;-1:-1:-1;;;;;9285:19:0;9261:4;9285:19;;;:14;:19;;;;;;;;;9205:107::o;37145:224::-;37247:4;-1:-1:-1;;;;;;37271:50:0;;-1:-1:-1;;;37271:50:0;;:90;;;37325:36;37349:11;37325:23;:36::i;33148:174::-;33223:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33223:29:0;-1:-1:-1;;;;;33223:29:0;;;;;;;;:24;;33277:23;33223:24;33277:14;:23::i;:::-;-1:-1:-1;;;;;33268:46:0;;;;;;;;;;;33148:174;;:::o;47941:329::-;48004:16;48033:13;48049:17;48059:6;48049:9;:17::i;:::-;48033:33;;48077:23;48117:5;48103:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48103:20:0;;48077:46;;48139:9;48134:105;48158:5;48154:1;:9;48134:105;;;48197:30;48217:6;48225:1;48197:19;:30::i;:::-;48185:6;48192:1;48185:9;;;;;;;;:::i;:::-;;;;;;;;;;:42;48165:3;;;;:::i;:::-;;;;48134:105;;54347:624;54438:23;54453:7;54438:14;:23::i;:::-;54472:15;;54498:390;54522:6;54518:1;:10;54498:390;;;54550:21;:9;43629:19;;43647:1;43629:19;;;43540:127;54550:21;54596:9;43510:14;54586:29;;54630:25;54636:9;54647:7;54630:5;:25::i;:::-;54670;;;;:16;:25;;;;;;;;:37;;-1:-1:-1;;;;;;54670:37:0;-1:-1:-1;;;;;54670:37:0;;;;;54751:14;;54722:17;:26;;;;;;:43;54784:11;;54780:97;;54853:7;54835:15;:13;:15::i;:::-;:25;;;;:::i;:::-;54816:14;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;54780:97:0;54530:3;;;;:::i;:::-;;;;54498:390;;;;54903:60;54916:13;37873:10;:17;;37785:113;54916:13;54931:10;;54943:19;;54903:60;;;6420:25:1;;;6476:2;6461:18;;6454:34;;;;6504:18;;;6497:34;6408:2;6393:18;54903:60:0;;;;;;;;54427:544;54347:624;;;:::o;29460:348::-;29553:4;29255:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29255:16:0;29570:73;;;;-1:-1:-1;;;29570:73:0;;21066:2:1;29570:73:0;;;21048:21:1;21105:2;21085:18;;;21078:30;21144:34;21124:18;;;21117:62;-1:-1:-1;;;21195:18:1;;;21188:42;21247:19;;29570:73:0;20864:408:1;29570:73:0;29654:13;29670:23;29685:7;29670:14;:23::i;:::-;29654:39;;29723:5;-1:-1:-1;;;;;29712:16:0;:7;-1:-1:-1;;;;;29712:16:0;;:51;;;;29756:7;-1:-1:-1;;;;;29732:31:0;:20;29744:7;29732:11;:20::i;:::-;-1:-1:-1;;;;;29732:31:0;;29712:51;:87;;;-1:-1:-1;;;;;;26552:25:0;;;26528:4;26552:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29767:32;29704:96;29460:348;-1:-1:-1;;;;29460:348:0:o;32452:578::-;32611:4;-1:-1:-1;;;;;32584:31:0;:23;32599:7;32584:14;:23::i;:::-;-1:-1:-1;;;;;32584:31:0;;32576:85;;;;-1:-1:-1;;;32576:85:0;;21479:2:1;32576:85:0;;;21461:21:1;21518:2;21498:18;;;21491:30;21557:34;21537:18;;;21530:62;-1:-1:-1;;;21608:18:1;;;21601:39;21657:19;;32576:85:0;21277:405:1;32576:85:0;-1:-1:-1;;;;;32680:16:0;;32672:65;;;;-1:-1:-1;;;32672:65:0;;21889:2:1;32672:65:0;;;21871:21:1;21928:2;21908:18;;;21901:30;21967:34;21947:18;;;21940:62;-1:-1:-1;;;22018:18:1;;;22011:34;22062:19;;32672:65:0;21687:400:1;32672:65:0;32750:39;32771:4;32777:2;32781:7;32750:20;:39::i;:::-;32854:29;32871:1;32875:7;32854:8;:29::i;:::-;-1:-1:-1;;;;;32896:15:0;;;;;;:9;:15;;;;;:20;;32915:1;;32896:15;:20;;32915:1;;32896:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32927:13:0;;;;;;:9;:13;;;;;:18;;32944:1;;32927:13;:18;;32944:1;;32927:18;:::i;:::-;;;;-1:-1:-1;;32956:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32956:21:0;-1:-1:-1;;;;;32956:21:0;;;;;;;;;32995:27;;32956:16;;32995:27;;;;;;;32452:578;;;:::o;31755:360::-;31815:13;31831:23;31846:7;31831:14;:23::i;:::-;31815:39;;31867:48;31888:5;31903:1;31907:7;31867:20;:48::i;:::-;31956:29;31973:1;31977:7;31956:8;:29::i;:::-;-1:-1:-1;;;;;31998:16:0;;;;;;:9;:16;;;;;:21;;32018:1;;31998:16;:21;;32018:1;;31998:21;:::i;:::-;;;;-1:-1:-1;;32037:16:0;;;;:7;:16;;;;;;32030:23;;-1:-1:-1;;;;;;32030:23:0;;;32071:36;32045:7;;32037:16;-1:-1:-1;;;;;32071:36:0;;;;;32037:16;;32071:36;31804:311;31755:360;:::o;49378:771::-;49448:24;49475:26;49490:10;49475:14;:26::i;:::-;49448:53;;49537:1;49520:7;:14;:18;49512:57;;;;-1:-1:-1;;;49512:57:0;;22294:2:1;49512:57:0;;;22276:21:1;22333:2;22313:18;;;22306:30;22372:28;22352:18;;;22345:56;22418:18;;49512:57:0;22092:350:1;49512:57:0;49582:18;49611:16;49643:9;49638:278;49662:7;:14;49658:1;:18;49638:278;;;49726:17;:29;49744:7;49752:1;49744:10;;;;;;;;:::i;:::-;;;;;;;49726:29;;;;;;;;;;;;49709:14;;:46;;;;:::i;:::-;49698:57;-1:-1:-1;49774:12:0;;49770:135;;49807:22;49821:8;49807:22;;:::i;:::-;;;49881:8;49848:17;:29;49866:7;49874:1;49866:10;;;;;;;;:::i;:::-;;;;;;;49848:29;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;49770:135:0;49678:3;;;;:::i;:::-;;;;49638:278;;;;49949:1;49936:10;:14;49928:47;;;;-1:-1:-1;;;49928:47:0;;22649:2:1;49928:47:0;;;22631:21:1;22688:2;22668:18;;;22661:30;-1:-1:-1;;;22707:18:1;;;22700:50;22767:18;;49928:47:0;22447:344:1;49928:47:0;50009:10;49986:19;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;50030:42:0;;2429:10;;50030:42;;;;;50061:10;;50030:42;;;;50061:10;2429;50030:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50121:19:0;;50090:51;;;4216:25:1;;;4272:2;4257:18;;4250:34;;;;50090:51:0;;4189:18:1;50090:51:0;4042:248:1;28538:315:0;28695:28;28705:4;28711:2;28715:7;28695:9;:28::i;:::-;28742:48;28765:4;28771:2;28775:7;28784:5;28742:22;:48::i;:::-;28734:111;;;;-1:-1:-1;;;28734:111:0;;;;;;;:::i;47047:115::-;47107:13;47140:14;47133:21;;;;;:::i;19391:723::-;19447:13;19668:5;19677:1;19668:10;19664:53;;-1:-1:-1;;19695:10:0;;;;;;;;;;;;-1:-1:-1;;;19695:10:0;;;;;19391:723::o;19664:53::-;19742:5;19727:12;19783:78;19790:9;;19783:78;;19816:8;;;;:::i;:::-;;-1:-1:-1;19839:10:0;;-1:-1:-1;19847:2:0;19839:10;;:::i;:::-;;;19783:78;;;19871:19;19903:6;19893:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19893:17:0;;19871:39;;19921:154;19928:10;;19921:154;;19955:11;19965:1;19955:11;;:::i;:::-;;-1:-1:-1;20024:10:0;20032:2;20024:5;:10;:::i;:::-;20011:24;;:2;:24;:::i;:::-;19998:39;;19981:6;19988;19981:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19981:56:0;;;;;;;;-1:-1:-1;20052:11:0;20061:2;20052:11;;:::i;:::-;;;19921:154;;23268:305;23370:4;-1:-1:-1;;;;;;23407:40:0;;-1:-1:-1;;;23407:40:0;;:105;;-1:-1:-1;;;;;;;23464:48:0;;-1:-1:-1;;;23464:48:0;23407:105;:158;;;-1:-1:-1;;;;;;;;;;21986:40:0;;;23529:36;21877:157;47578:283;47643:11;;47639:215;;47671:15;47723:16;;47700:18;;47690:7;:28;;;;:::i;:::-;47689:51;;;;:::i;:::-;47671:69;;47780:7;47757:19;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;47825:17:0;;-1:-1:-1;47835:7:0;47825;:17;:::i;:::-;47802:19;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;;47578:283:0;:::o;31144:382::-;-1:-1:-1;;;;;31224:16:0;;31216:61;;;;-1:-1:-1;;;31216:61:0;;23534:2:1;31216:61:0;;;23516:21:1;;;23553:18;;;23546:30;23612:34;23592:18;;;23585:62;23664:18;;31216:61:0;23332:356:1;31216:61:0;29231:4;29255:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29255:16:0;:30;31288:58;;;;-1:-1:-1;;;31288:58:0;;23895:2:1;31288:58:0;;;23877:21:1;23934:2;23914:18;;;23907:30;23973;23953:18;;;23946:58;24021:18;;31288:58:0;23693:352:1;31288:58:0;31359:45;31388:1;31392:2;31396:7;31359:20;:45::i;:::-;-1:-1:-1;;;;;31417:13:0;;;;;;:9;:13;;;;;:18;;31434:1;;31417:13;:18;;31434:1;;31417:18;:::i;:::-;;;;-1:-1:-1;;31446:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31446:21:0;-1:-1:-1;;;;;31446:21:0;;;;;;;;31485:33;;31446:16;;;31485:33;;31446:16;;31485:33;31144:382;;:::o;46663:189::-;46799:45;46826:4;46832:2;46836:7;46799:26;:45::i;33887:799::-;34042:4;-1:-1:-1;;;;;34063:13:0;;12126:20;12174:8;34059:620;;34099:72;;-1:-1:-1;;;34099:72:0;;-1:-1:-1;;;;;34099:36:0;;;;;:72;;2429:10;;34150:4;;34156:7;;34165:5;;34099:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34099:72:0;;;;;;;;-1:-1:-1;;34099:72:0;;;;;;;;;;;;:::i;:::-;;;34095:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34341:6;:13;34358:1;34341:18;34337:272;;34384:60;;-1:-1:-1;;;34384:60:0;;;;;;;:::i;34337:272::-;34559:6;34553:13;34544:6;34540:2;34536:15;34529:38;34095:529;-1:-1:-1;;;;;;34222:51:0;-1:-1:-1;;;34222:51:0;;-1:-1:-1;34215:58:0;;34059:620;-1:-1:-1;34663:4:0;33887:799;;;;;;:::o;38821:589::-;-1:-1:-1;;;;;39027:18:0;;39023:187;;39062:40;39094:7;40237:10;:17;;40210:24;;;;:15;:24;;;;;:44;;;40265:24;;;;;;;;;;;;40133:164;39062:40;39023:187;;;39132:2;-1:-1:-1;;;;;39124:10:0;:4;-1:-1:-1;;;;;39124:10:0;;39120:90;;39151:47;39184:4;39190:7;39151:32;:47::i;:::-;-1:-1:-1;;;;;39224:16:0;;39220:183;;39257:45;39294:7;39257:36;:45::i;39220:183::-;39330:4;-1:-1:-1;;;;;39324:10:0;:2;-1:-1:-1;;;;;39324:10:0;;39320:83;;39351:40;39379:2;39383:7;39351:27;:40::i;40924:988::-;41190:22;41240:1;41215:22;41232:4;41215:16;:22::i;:::-;:26;;;;:::i;:::-;41252:18;41273:26;;;:17;:26;;;;;;41190:51;;-1:-1:-1;41406:28:0;;;41402:328;;-1:-1:-1;;;;;41473:18:0;;41451:19;41473:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41524:30;;;;;;:44;;;41641:30;;:17;:30;;;;;:43;;;41402:328;-1:-1:-1;41826:26:0;;;;:17;:26;;;;;;;;41819:33;;;-1:-1:-1;;;;;41870:18:0;;;;;:12;:18;;;;;:34;;;;;;;41863:41;40924:988::o;42207:1079::-;42485:10;:17;42460:22;;42485:21;;42505:1;;42485:21;:::i;:::-;42517:18;42538:24;;;:15;:24;;;;;;42911:10;:26;;42460:46;;-1:-1:-1;42538:24:0;;42460:46;;42911:26;;;;;;:::i;:::-;;;;;;;;;42889:48;;42975:11;42950:10;42961;42950:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;43055:28;;;:15;:28;;;;;;;:41;;;43227:24;;;;;43220:31;43262:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;42278:1008;;;42207:1079;:::o;39711:221::-;39796:14;39813:20;39830:2;39813:16;:20::i;:::-;-1:-1:-1;;;;;39844:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39889:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39711:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;475:131:1;-1:-1:-1;;;;;;549:32:1;;539:43;;529:71;;596:1;593;586:12;611:245;669:6;722:2;710:9;701:7;697:23;693:32;690:52;;;738:1;735;728:12;690:52;777:9;764:23;796:30;820:5;796:30;:::i;1053:131::-;-1:-1:-1;;;;;1128:31:1;;1118:42;;1108:70;;1174:1;1171;1164:12;1189:671;1275:6;1283;1291;1299;1352:3;1340:9;1331:7;1327:23;1323:33;1320:53;;;1369:1;1366;1359:12;1320:53;1408:9;1395:23;1427:31;1452:5;1427:31;:::i;:::-;1477:5;-1:-1:-1;1534:2:1;1519:18;;1506:32;1547:33;1506:32;1547:33;:::i;:::-;1599:7;-1:-1:-1;1658:2:1;1643:18;;1630:32;1671:33;1630:32;1671:33;:::i;:::-;1723:7;-1:-1:-1;1782:2:1;1767:18;;1754:32;1795:33;1754:32;1795:33;:::i;:::-;1189:671;;;;-1:-1:-1;1189:671:1;;-1:-1:-1;;1189:671:1:o;1865:258::-;1937:1;1947:113;1961:6;1958:1;1955:13;1947:113;;;2037:11;;;2031:18;2018:11;;;2011:39;1983:2;1976:10;1947:113;;;2078:6;2075:1;2072:13;2069:48;;;-1:-1:-1;;2113:1:1;2095:16;;2088:27;1865:258::o;2128:::-;2170:3;2208:5;2202:12;2235:6;2230:3;2223:19;2251:63;2307:6;2300:4;2295:3;2291:14;2284:4;2277:5;2273:16;2251:63;:::i;:::-;2368:2;2347:15;-1:-1:-1;;2343:29:1;2334:39;;;;2375:4;2330:50;;2128:258;-1:-1:-1;;2128:258:1:o;2391:220::-;2540:2;2529:9;2522:21;2503:4;2560:45;2601:2;2590:9;2586:18;2578:6;2560:45;:::i;2616:180::-;2675:6;2728:2;2716:9;2707:7;2703:23;2699:32;2696:52;;;2744:1;2741;2734:12;2696:52;-1:-1:-1;2767:23:1;;2616:180;-1:-1:-1;2616:180:1:o;3009:315::-;3077:6;3085;3138:2;3126:9;3117:7;3113:23;3109:32;3106:52;;;3154:1;3151;3144:12;3106:52;3193:9;3180:23;3212:31;3237:5;3212:31;:::i;:::-;3262:5;3314:2;3299:18;;;;3286:32;;-1:-1:-1;;;3009:315:1:o;3329:247::-;3388:6;3441:2;3429:9;3420:7;3416:23;3412:32;3409:52;;;3457:1;3454;3447:12;3409:52;3496:9;3483:23;3515:31;3540:5;3515:31;:::i;3581:456::-;3658:6;3666;3674;3727:2;3715:9;3706:7;3702:23;3698:32;3695:52;;;3743:1;3740;3733:12;3695:52;3782:9;3769:23;3801:31;3826:5;3801:31;:::i;:::-;3851:5;-1:-1:-1;3908:2:1;3893:18;;3880:32;3921:33;3880:32;3921:33;:::i;:::-;3581:456;;3973:7;;-1:-1:-1;;;4027:2:1;4012:18;;;;3999:32;;3581:456::o;4295:753::-;4597:4;4626:3;4670:6;4663:14;4656:22;4645:9;4638:41;4715:6;4710:2;4699:9;4695:18;4688:34;4758:6;4753:2;4742:9;4738:18;4731:34;4801:6;4796:2;4785:9;4781:18;4774:34;4845:6;4839:3;4828:9;4824:19;4817:35;4889:6;4883:3;4872:9;4868:19;4861:35;4933:6;4927:3;4916:9;4912:19;4905:35;4977:2;4971:3;4960:9;4956:19;4949:31;4997:45;5038:2;5027:9;5023:18;5015:6;4997:45;:::i;:::-;4989:53;4295:753;-1:-1:-1;;;;;;;;;;;4295:753:1:o;5053:454::-;5148:6;5156;5164;5172;5180;5233:3;5221:9;5212:7;5208:23;5204:33;5201:53;;;5250:1;5247;5240:12;5201:53;-1:-1:-1;;5273:23:1;;;5343:2;5328:18;;5315:32;;-1:-1:-1;5394:2:1;5379:18;;5366:32;;5445:2;5430:18;;5417:32;;-1:-1:-1;5496:3:1;5481:19;5468:33;;-1:-1:-1;5053:454:1;-1:-1:-1;5053:454:1:o;5512:435::-;5565:3;5603:5;5597:12;5630:6;5625:3;5618:19;5656:4;5685:2;5680:3;5676:12;5669:19;;5722:2;5715:5;5711:14;5743:1;5753:169;5767:6;5764:1;5761:13;5753:169;;;5828:13;;5816:26;;5862:12;;;;5897:15;;;;5789:1;5782:9;5753:169;;;-1:-1:-1;5938:3:1;;5512:435;-1:-1:-1;;;;;5512:435:1:o;5952:261::-;6131:2;6120:9;6113:21;6094:4;6151:56;6203:2;6192:9;6188:18;6180:6;6151:56;:::i;6542:316::-;6619:6;6627;6635;6688:2;6676:9;6667:7;6663:23;6659:32;6656:52;;;6704:1;6701;6694:12;6656:52;-1:-1:-1;;6727:23:1;;;6797:2;6782:18;;6769:32;;-1:-1:-1;6848:2:1;6833:18;;;6820:32;;6542:316;-1:-1:-1;6542:316:1:o;6863:416::-;6928:6;6936;6989:2;6977:9;6968:7;6964:23;6960:32;6957:52;;;7005:1;7002;6995:12;6957:52;7044:9;7031:23;7063:31;7088:5;7063:31;:::i;:::-;7113:5;-1:-1:-1;7170:2:1;7155:18;;7142:32;7212:15;;7205:23;7193:36;;7183:64;;7243:1;7240;7233:12;7183:64;7266:7;7256:17;;;6863:416;;;;;:::o;7284:403::-;7519:6;7508:9;7501:25;7562:6;7557:2;7546:9;7542:18;7535:34;7605:2;7600;7589:9;7585:18;7578:30;7482:4;7625:56;7677:2;7666:9;7662:18;7654:6;7625:56;:::i;:::-;7617:64;7284:403;-1:-1:-1;;;;;7284:403:1:o;7692:248::-;7760:6;7768;7821:2;7809:9;7800:7;7796:23;7792:32;7789:52;;;7837:1;7834;7827:12;7789:52;-1:-1:-1;;7860:23:1;;;7930:2;7915:18;;;7902:32;;-1:-1:-1;7692:248:1:o;7945:127::-;8006:10;8001:3;7997:20;7994:1;7987:31;8037:4;8034:1;8027:15;8061:4;8058:1;8051:15;8077:631;8141:5;8171:18;8212:2;8204:6;8201:14;8198:40;;;8218:18;;:::i;:::-;8293:2;8287:9;8261:2;8347:15;;-1:-1:-1;;8343:24:1;;;8369:2;8339:33;8335:42;8323:55;;;8393:18;;;8413:22;;;8390:46;8387:72;;;8439:18;;:::i;:::-;8479:10;8475:2;8468:22;8508:6;8499:15;;8538:6;8530;8523:22;8578:3;8569:6;8564:3;8560:16;8557:25;8554:45;;;8595:1;8592;8585:12;8554:45;8645:6;8640:3;8633:4;8625:6;8621:17;8608:44;8700:1;8693:4;8684:6;8676;8672:19;8668:30;8661:41;;;;8077:631;;;;;:::o;8713:794::-;8808:6;8816;8824;8832;8885:3;8873:9;8864:7;8860:23;8856:33;8853:53;;;8902:1;8899;8892:12;8853:53;8941:9;8928:23;8960:31;8985:5;8960:31;:::i;:::-;9010:5;-1:-1:-1;9067:2:1;9052:18;;9039:32;9080:33;9039:32;9080:33;:::i;:::-;9132:7;-1:-1:-1;9186:2:1;9171:18;;9158:32;;-1:-1:-1;9241:2:1;9226:18;;9213:32;9268:18;9257:30;;9254:50;;;9300:1;9297;9290:12;9254:50;9323:22;;9376:4;9368:13;;9364:27;-1:-1:-1;9354:55:1;;9405:1;9402;9395:12;9354:55;9428:73;9493:7;9488:2;9475:16;9470:2;9466;9462:11;9428:73;:::i;:::-;9418:83;;;8713:794;;;;;;;:::o;9512:388::-;9580:6;9588;9641:2;9629:9;9620:7;9616:23;9612:32;9609:52;;;9657:1;9654;9647:12;9609:52;9696:9;9683:23;9715:31;9740:5;9715:31;:::i;:::-;9765:5;-1:-1:-1;9822:2:1;9807:18;;9794:32;9835:33;9794:32;9835:33;:::i;10165:450::-;10234:6;10287:2;10275:9;10266:7;10262:23;10258:32;10255:52;;;10303:1;10300;10293:12;10255:52;10343:9;10330:23;10376:18;10368:6;10365:30;10362:50;;;10408:1;10405;10398:12;10362:50;10431:22;;10484:4;10476:13;;10472:27;-1:-1:-1;10462:55:1;;10513:1;10510;10503:12;10462:55;10536:73;10601:7;10596:2;10583:16;10578:2;10574;10570:11;10536:73;:::i;10620:127::-;10681:10;10676:3;10672:20;10669:1;10662:31;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10752:168;10792:7;10858:1;10854;10850:6;10846:14;10843:1;10840:21;10835:1;10828:9;10821:17;10817:45;10814:71;;;10865:18;;:::i;:::-;-1:-1:-1;10905:9:1;;10752:168::o;10925:127::-;10986:10;10981:3;10977:20;10974:1;10967:31;11017:4;11014:1;11007:15;11041:4;11038:1;11031:15;11057:120;11097:1;11123;11113:35;;11128:18;;:::i;:::-;-1:-1:-1;11162:9:1;;11057:120::o;11182:335::-;11384:2;11366:21;;;11423:2;11403:18;;;11396:30;-1:-1:-1;;;11457:2:1;11442:18;;11435:41;11508:2;11493:18;;11182:335::o;11522:380::-;11601:1;11597:12;;;;11644;;;11665:61;;11719:4;11711:6;11707:17;11697:27;;11665:61;11772:2;11764:6;11761:14;11741:18;11738:38;11735:161;;11818:10;11813:3;11809:20;11806:1;11799:31;11853:4;11850:1;11843:15;11881:4;11878:1;11871:15;13147:127;13208:10;13203:3;13199:20;13196:1;13189:31;13239:4;13236:1;13229:15;13263:4;13260:1;13253:15;13279:125;13319:4;13347:1;13344;13341:8;13338:34;;;13352:18;;:::i;:::-;-1:-1:-1;13389:9:1;;13279:125::o;13409:128::-;13449:3;13480:1;13476:6;13473:1;13470:13;13467:39;;;13486:18;;:::i;:::-;-1:-1:-1;13522:9:1;;13409:128::o;13542:135::-;13581:3;13602:17;;;13599:43;;13622:18;;:::i;:::-;-1:-1:-1;13669:1:1;13658:13;;13542:135::o;14029:413::-;14231:2;14213:21;;;14270:2;14250:18;;;14243:30;14309:34;14304:2;14289:18;;14282:62;-1:-1:-1;;;14375:2:1;14360:18;;14353:47;14432:3;14417:19;;14029:413::o;18754:470::-;18933:3;18971:6;18965:13;18987:53;19033:6;19028:3;19021:4;19013:6;19009:17;18987:53;:::i;:::-;19103:13;;19062:16;;;;19125:57;19103:13;19062:16;19159:4;19147:17;;19125:57;:::i;:::-;19198:20;;18754:470;-1:-1:-1;;;;18754:470:1:o;19229:375::-;19459:3;19497:6;19491:13;19513:53;19559:6;19554:3;19547:4;19539:6;19535:17;19513:53;:::i;:::-;19582:16;;;;;19229:375;-1:-1:-1;;19229:375:1:o;22796:414::-;22998:2;22980:21;;;23037:2;23017:18;;;23010:30;23076:34;23071:2;23056:18;;23049:62;-1:-1:-1;;;23142:2:1;23127:18;;23120:48;23200:3;23185:19;;22796:414::o;23215:112::-;23247:1;23273;23263:35;;23278:18;;:::i;:::-;-1:-1:-1;23312:9:1;;23215:112::o;24050:489::-;-1:-1:-1;;;;;24319:15:1;;;24301:34;;24371:15;;24366:2;24351:18;;24344:43;24418:2;24403:18;;24396:34;;;24466:3;24461:2;24446:18;;24439:31;;;24244:4;;24487:46;;24513:19;;24505:6;24487:46;:::i;:::-;24479:54;24050:489;-1:-1:-1;;;;;;24050:489:1:o;24544:249::-;24613:6;24666:2;24654:9;24645:7;24641:23;24637:32;24634:52;;;24682:1;24679;24672:12;24634:52;24714:9;24708:16;24733:30;24757:5;24733:30;:::i;24798:127::-;24859:10;24854:3;24850:20;24847:1;24840:31;24890:4;24887:1;24880:15;24914:4;24911:1;24904:15
Swarm Source
ipfs://e64ce23fbdbf1c159b2cc6f1bc432e4999ef18fbddc9eaeefb13561d290f1d6a