More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 880 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 10394814 | 63 days ago | IN | 0 MOVR | 0.00007117 | ||||
Transfer From | 5646673 | 509 days ago | IN | 0 MOVR | 0.00046701 | ||||
Transfer From | 5646575 | 509 days ago | IN | 0 MOVR | 0.00037787 | ||||
Transfer From | 5646570 | 509 days ago | IN | 0 MOVR | 0.00046701 | ||||
Transfer From | 5646565 | 509 days ago | IN | 0 MOVR | 0.00058377 | ||||
Set Approval For... | 4974890 | 606 days ago | IN | 0 MOVR | 0.00016658 | ||||
Set Approval For... | 4974888 | 606 days ago | IN | 0 MOVR | 0.00016658 | ||||
Set Approval For... | 4798678 | 630 days ago | IN | 0 MOVR | 0.00016914 | ||||
Set Approval For... | 4332741 | 696 days ago | IN | 0 MOVR | 0.0001271 | ||||
Set Approval For... | 3794186 | 774 days ago | IN | 0 MOVR | 0.00004622 | ||||
Set Approval For... | 3794057 | 774 days ago | IN | 0 MOVR | 0.00011555 | ||||
Set Approval For... | 3791068 | 774 days ago | IN | 0 MOVR | 0.00004622 | ||||
Set Approval For... | 2560463 | 952 days ago | IN | 0 MOVR | 0.00012017 | ||||
Mint Butcher | 2413498 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413498 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413498 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413497 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413496 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413496 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413493 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413493 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413492 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413492 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413491 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 | ||||
Mint Butcher | 2413491 | 976 days ago | IN | 0.0049832 MOVR | 0.00045063 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
2413498 | 976 days ago | 0.0049832 MOVR | ||||
2413498 | 976 days ago | 0.0049832 MOVR | ||||
2413498 | 976 days ago | 0.0049832 MOVR | ||||
2413497 | 976 days ago | 0.0049832 MOVR | ||||
2413496 | 976 days ago | 0.0049832 MOVR | ||||
2413496 | 976 days ago | 0.0049832 MOVR | ||||
2413493 | 976 days ago | 0.0049832 MOVR | ||||
2413493 | 976 days ago | 0.0049832 MOVR | ||||
2413492 | 976 days ago | 0.0049832 MOVR | ||||
2413492 | 976 days ago | 0.0049832 MOVR | ||||
2413491 | 976 days ago | 0.0049832 MOVR | ||||
2413491 | 976 days ago | 0.0049832 MOVR | ||||
2413490 | 976 days ago | 0.0049832 MOVR | ||||
2413481 | 976 days ago | 0.0049832 MOVR | ||||
2413478 | 976 days ago | 0.0049832 MOVR | ||||
2413477 | 976 days ago | 0.0049832 MOVR | ||||
2075730 | 1035 days ago | 0.0049832 MOVR | ||||
1941635 | 1056 days ago | 0.0049832 MOVR | ||||
1941630 | 1056 days ago | 0.0049832 MOVR | ||||
1941627 | 1056 days ago | 0.0049832 MOVR | ||||
1941624 | 1056 days ago | 0.0049832 MOVR | ||||
1941620 | 1056 days ago | 0.0049832 MOVR | ||||
1941617 | 1056 days ago | 0.0049832 MOVR | ||||
1941609 | 1056 days ago | 0.0049832 MOVR | ||||
1941603 | 1056 days ago | 0.0049832 MOVR |
Loading...
Loading
Contract Name:
CryptoButchersFemale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2022-01-06 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom(address from, address to, uint256 tokenId) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { // Storage of map keys and values MapEntry[] _entries; // Position of the entry defined by a key in the `entries` array, plus 1 // because index 0 means a key is not in the map. mapping (bytes32 => uint256) _indexes; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); // The entry is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } /** * @dev Removes a key-value pair from a map. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function _remove(Map storage map, bytes32 key) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one // in the array, and then remove the last entry (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. MapEntry storage lastEntry = map._entries[lastIndex]; // Move the last entry to the index where the entry to delete is map._entries[toDeleteIndex] = lastEntry; // Update the index for the moved entry map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved entry was stored map._entries.pop(); // Delete the index for the deleted slot delete map._indexes[key]; return true; } else { return false; } } /** * @dev Returns true if the key is in the map. O(1). */ function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } /** * @dev Returns the number of key-value pairs in the map. O(1). */ function _length(Map storage map) private view returns (uint256) { return map._entries.length; } /** * @dev Returns the key-value pair stored at position `index` in the map. O(1). * * Note that there are no guarantees on the ordering of entries inside the * array, and it may change when more entries are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. */ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } /** * @dev Same as {_get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {_tryGet}. */ function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } // UintToAddressMap struct UintToAddressMap { Map _inner; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } /** * @dev Returns true if the key is in the map. O(1). */ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } /** * @dev Returns the number of elements in the map. O(1). */ function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. * * _Available since v3.4._ */ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } /** * @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); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens mapping (address => EnumerableSet.UintSet) private _holderTokens; // Mapping from owner to list of owned token IDs mapping (address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Enumerable mapping from token ids to their owners EnumerableMap.UintToAddressMap private _tokenOwners; // 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; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Base URI string private _baseURI; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } modifier canTransfer(uint256 _tokenId) { require(_isApprovedOrOwner(msg.sender, _tokenId)); _; } /** * @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 _holderTokens[owner].length(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); } /** * @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 _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } function totalSupplyString() public view virtual returns (string memory) { return _tokenOwners.length().toString(); } function addTokenTo(address _to, uint256 _tokenId) internal { uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].pop(); ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds return _tokenOwners.length(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } /** * @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 || ERC721.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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId); } function _safeTransfer(address from, address to, uint256 tokenId) internal virtual { _transfer(from, to, tokenId); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } 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 || ERC721.isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _mint(to, tokenId); } 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"); allTokensIndex[tokenId] = allTokens.length; allTokens.push(tokenId); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); removeTokenFrom(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); removeTokenFrom(from, tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @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()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } contract Ownable is Context { address public _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract CryptoButchersFemale is Ownable, ERC721 { using Strings for string; using Strings for uint256; using SafeMath for uint256; constructor () ERC721("CryptoButchersFemale" ,"FEMALEBUTCHER"){} struct ButcherNFT { string ipfsHash; address publisher; uint id; } uint256 public MAX_BUTCHERS = 11111; uint256 public priceMintButcher = 71000000000000000; uint256 public cutSale = 11; string public website = "cryptobutchers.com"; string public baseExtension = ".json"; bool public pauseMint = true; uint256 public inviteFee = 30; uint256 public marketingFee = 70; bool public enableInvite = true; address public marketingAddress; ButcherNFT[] public butchersNFTs; mapping (string => uint256) ipfsHashToTokenId; mapping (address => uint256) internal publishedTokensCount; mapping (address => uint256[]) internal publishedTokens; mapping(address => mapping (uint256 => uint256)) internal publishedTokensIndex; struct SellingButcher { address payable seller; uint256 price; string ipfsHash; uint256 id; } mapping (uint256 => SellingButcher) public tokenIdToSellingButcher; SellingButcher[] public sellingItems; function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function withdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function setEnableInvite(bool _value) public onlyOwner { enableInvite = _value; } function setInviteFee(uint256 _value) public onlyOwner { inviteFee = _value; } function setMarketingFee(uint256 _value) public onlyOwner { marketingFee = _value; } function setMarketingAddress(address _value) public onlyOwner { marketingAddress = _value; } function setWebsite(string memory _value) public onlyOwner { website = _value; } function setBaseExtension(string memory _value) public onlyOwner { baseExtension = _value; } function setPriceMint(uint256 _value) public onlyOwner { priceMintButcher = _value; } function setBaseURI(string memory _value) public onlyOwner { _setBaseURI(_value); } function setPauseMint(bool _value) public onlyOwner { pauseMint = _value; } function setCutSale(uint256 _value) public onlyOwner { cutSale = _value; } function getIpfsHashToTokenId(string memory _string) public view returns (uint256){ return ipfsHashToTokenId[_string]; } function getOwnedTokens(address _owner) public view returns (uint256[] memory) { return ownedTokens[_owner]; } function mintButcher(uint256 _amount, address _invite) public payable { require(pauseMint, "Mint paused."); require(totalSupply().add(_amount) < MAX_BUTCHERS, "Limit exceeded."); require(msg.value >= priceMintButcher.mul(_amount <= 0 ? 1 : _amount)); if(enableInvite){ payable(_invite).transfer(msg.value.mul(inviteFee).div(100)); payable(marketingAddress).transfer(msg.value.mul(marketingFee).div(100)); }else{ payable(marketingAddress).transfer(msg.value); } for(uint256 i = 0; i < _amount; i++){ ButcherNFT memory _butchersNFT = ButcherNFT({ ipfsHash: " ", publisher: msg.sender, id: 0 }); butchersNFTs.push(_butchersNFT); uint256 newButchersNFTId = butchersNFTs.length - 1; butchersNFTs[newButchersNFTId].id = newButchersNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newButchersNFTId.toString() , baseExtension)); butchersNFTs[newButchersNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newButchersNFTId; _mint(msg.sender, newButchersNFTId); publishedTokensCount[msg.sender]++; uint256 length = publishedTokens[msg.sender].length; publishedTokens[msg.sender].push(newButchersNFTId); publishedTokensIndex[msg.sender][newButchersNFTId] = length; } } function generateButchers(uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) < MAX_BUTCHERS, "Limit exceeded."); for(uint256 i = 0; i < _amount; i++){ ButcherNFT memory _butchersNFT = ButcherNFT({ ipfsHash: " ", publisher: msg.sender, id: 0 }); butchersNFTs.push(_butchersNFT); uint256 newButchersNFTId = butchersNFTs.length - 1; butchersNFTs[newButchersNFTId].id = newButchersNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newButchersNFTId.toString() , baseExtension)); butchersNFTs[newButchersNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newButchersNFTId; _mint(msg.sender, newButchersNFTId); publishedTokensCount[msg.sender]++; uint256 length = publishedTokens[msg.sender].length; publishedTokens[msg.sender].push(newButchersNFTId); publishedTokensIndex[msg.sender][newButchersNFTId] = length; } } function addButcherForSale(uint256 _tokenId, uint256 _price) public onlyOwnerOf(_tokenId) { require(tokenIdToSellingButcher[_tokenId].seller == address(0)); SellingButcher memory _sellingButcher = SellingButcher( payable(msg.sender), uint256(_price), butchersNFTs[_tokenId].ipfsHash, _tokenId ); tokenIdToSellingButcher[_tokenId] = _sellingButcher; approve(address(this), _tokenId); safeTransferFrom(msg.sender, address(this), _tokenId); } function cancelButcherForSale(uint256 _tokenId) public { require(tokenIdToSellingButcher[_tokenId].seller == msg.sender); this.safeTransferFrom(address(this), tokenIdToSellingButcher[_tokenId].seller, _tokenId); delete tokenIdToSellingButcher[_tokenId]; } function purchaseButcher(uint256 _tokenId) public payable{ uint256 priceItemEther = tokenIdToSellingButcher[_tokenId].price; address payable sellerAddress = tokenIdToSellingButcher[_tokenId].seller; require(sellerAddress != address(0)); require(sellerAddress != msg.sender); require(msg.value >= priceItemEther); uint256 priceItemResale = priceItemEther.sub(priceItemEther.mul(cutSale).div(100)); sellerAddress.transfer(priceItemResale); delete tokenIdToSellingButcher[_tokenId]; this.safeTransferFrom(address(this), msg.sender, _tokenId); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_BUTCHERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"addButcherForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"butchersNFTs","outputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"address","name":"publisher","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cancelButcherForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cutSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableInvite","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"generateButchers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_string","type":"string"}],"name":"getIpfsHashToTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inviteFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_invite","type":"address"}],"name":"mintButcher","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMintButcher","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"purchaseButcher","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellingItems","outputs":[{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","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":"_value","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setCutSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setEnableInvite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setInviteFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPriceMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setWebsite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToSellingButcher","outputs":[{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"website","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
612b67600f5566fc3e1fb30d8000601055600b60115560c0604052601260808190527163727970746f62757463686572732e636f6d60701b60a0908152620000499190816200025b565b5060408051808201909152600580825264173539b7b760d91b602090920191825262000078916013916200025b565b5060148054600160ff199182168117909255601e6015556046601655601780549091169091179055348015620000ad57600080fd5b506040518060400160405280601481526020017f43727970746f427574636865727346656d616c650000000000000000000000008152506040518060400160405280600d81526020016c2322a6a0a622a12aaa21a422a960991b81525060006200011c620001d060201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200017b9060099060208501906200025b565b5080516200019190600a9060208401906200025b565b50620001a46380ac58cd60e01b620001d4565b620001b6635b5e139f60e01b620001d4565b620001c863780e9d6360e01b620001d4565b50506200033e565b3390565b6001600160e01b03198082161415620002335760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054620002699062000301565b90600052602060002090601f0160209004810192826200028d5760008555620002d8565b82601f10620002a857805160ff1916838001178555620002d8565b82800160010185558215620002d8579182015b82811115620002d8578251825591602001919060010190620002bb565b50620002e6929150620002ea565b5090565b5b80821115620002e65760008155600101620002eb565b600181811c908216806200031657607f821691505b602082108114156200033857634e487b7160e01b600052602260045260246000fd5b50919050565b613474806200034e6000396000f3fe60806040526004361061031a5760003560e01c80636c0360eb116101ab578063beb0a416116100f7578063da6fa46c11610095578063f2fde38b1161006f578063f2fde38b14610940578063f59e26d014610960578063f87f44b914610980578063ff5257eb146109a057600080fd5b8063da6fa46c146108c2578063e450674c146108d7578063e985e9c5146108f757600080fd5b8063c87b56dd116100d1578063c87b56dd14610848578063cd85cdb514610868578063d9d6165514610882578063da3ef23f146108a257600080fd5b8063beb0a416146107fe578063c668286214610813578063c75098ea1461082857600080fd5b806395d89b4111610164578063b2bdfa7b1161013e578063b2bdfa7b1461079c578063b38a4360146107bc578063bcaf656c146107d2578063be1ce91d146107e857600080fd5b806395d89b4114610742578063a22cb46514610757578063a5ece9411461077757600080fd5b80636c0360eb1461069a57806370a08231146106af578063715018a6146106cf5780637be86a01146106e45780638da5cb5b14610704578063906e9dd01461072257600080fd5b80633ccfd60b1161026a57806355f804b311610223578063625e764c116101fd578063625e764c146106245780636352211e1461064457806365de3833146106645780636b67c4df1461068457600080fd5b806355f804b3146105ce5780635a284b3f146105ee578063604956771461060457600080fd5b80633ccfd60b1461050a57806342842e0e1461051f578063438b63001461053f5780634c9f48c61461056c5780634f6ccce71461057f57806355f506791461059f57600080fd5b8063164c6280116102d757806323b872dd116102b157806323b872dd1461049057806327ea2df0146104b05780632f745c59146104d0578063359a0b51146104f057600080fd5b8063164c62801461043a57806318160ddd1461045a578063237d322d1461047d57600080fd5b806301ffc9a71461031f57806306fdde031461036e578063081812fc14610390578063095ea7b3146103c85780630dee18e4146103ea57806310fcafab1461040a575b600080fd5b34801561032b57600080fd5b5061035961033a366004612f27565b6001600160e01b03191660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b506103836109c0565b60405161036591906131e8565b34801561039c57600080fd5b506103b06103ab366004613002565b610a52565b6040516001600160a01b039091168152602001610365565b3480156103d457600080fd5b506103e86103e3366004612ee2565b610adf565b005b3480156103f657600080fd5b506103e8610405366004613002565b610bf5565b34801561041657600080fd5b5061042a610425366004613002565b610c24565b604051610365949392919061316c565b34801561044657600080fd5b506103e8610455366004613002565b610cdf565b34801561046657600080fd5b5061046f610d0e565b604051908152602001610365565b6103e861048b36600461301b565b610d1f565b34801561049c57600080fd5b506103e86104ab366004612e7c565b6110f1565b3480156104bc57600080fd5b5061046f6104cb366004612f51565b611123565b3480156104dc57600080fd5b5061046f6104eb366004612ee2565b61114b565b3480156104fc57600080fd5b506017546103599060ff1681565b34801561051657600080fd5b506103e8611176565b34801561052b57600080fd5b506103e861053a366004612e7c565b6111cf565b34801561054b57600080fd5b5061055f61055a366004612e2e565b6111ff565b60405161036591906131a4565b6103e861057a366004613002565b6112a1565b34801561058b57600080fd5b5061046f61059a366004613002565b6113eb565b3480156105ab57600080fd5b506105bf6105ba366004613002565b6113f9565b604051610365939291906131fb565b3480156105da57600080fd5b506103e86105e9366004612f51565b6114c5565b3480156105fa57600080fd5b5061046f60115481565b34801561061057600080fd5b506103e861061f366004612f0c565b6114f8565b34801561063057600080fd5b506103e861063f366004613002565b611535565b34801561065057600080fd5b506103b061065f366004613002565b611564565b34801561067057600080fd5b506103e861067f366004613002565b61158c565b34801561069057600080fd5b5061046f60165481565b3480156106a657600080fd5b506103836115bb565b3480156106bb57600080fd5b5061046f6106ca366004612e2e565b6115ca565b3480156106db57600080fd5b506103e8611656565b3480156106f057600080fd5b506103e86106ff366004613002565b6116ca565b34801561071057600080fd5b506000546001600160a01b03166103b0565b34801561072e57600080fd5b506103e861073d366004612e2e565b61194f565b34801561074e57600080fd5b506103836119a1565b34801561076357600080fd5b506103e8610772366004612eb8565b6119b0565b34801561078357600080fd5b506017546103b09061010090046001600160a01b031681565b3480156107a857600080fd5b506000546103b0906001600160a01b031681565b3480156107c857600080fd5b5061046f60155481565b3480156107de57600080fd5b5061046f600f5481565b3480156107f457600080fd5b5061046f60105481565b34801561080a57600080fd5b50610383611a75565b34801561081f57600080fd5b50610383611b03565b34801561083457600080fd5b506103e861084336600461303e565b611b10565b34801561085457600080fd5b50610383610863366004613002565b611ca6565b34801561087457600080fd5b506014546103599060ff1681565b34801561088e57600080fd5b5061055f61089d366004612e2e565b611d74565b3480156108ae57600080fd5b506103e86108bd366004612f51565b611de0565b3480156108ce57600080fd5b50610383611e1d565b3480156108e357600080fd5b506103e86108f2366004613002565b611e31565b34801561090357600080fd5b50610359610912366004612e49565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561094c57600080fd5b506103e861095b366004612e2e565b611f09565b34801561096c57600080fd5b506103e861097b366004612f0c565b611ff3565b34801561098c57600080fd5b506103e861099b366004612f51565b612030565b3480156109ac57600080fd5b5061042a6109bb366004613002565b61206d565b6060600980546109cf9061333d565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb9061333d565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b6000610a5d826120b3565b610ac35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610aea82611564565b9050806001600160a01b0316836001600160a01b03161415610b585760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aba565b336001600160a01b0382161480610b745750610b748133610912565b610be65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aba565b610bf083836120c0565b505050565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b8152600401610aba90613229565b601055565b601d602052600090815260409020805460018201546002830180546001600160a01b03909316939192610c569061333d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c829061333d565b8015610ccf5780601f10610ca457610100808354040283529160200191610ccf565b820191906000526020600020905b815481529060010190602001808311610cb257829003601f168201915b5050505050908060030154905084565b6000546001600160a01b03163314610d095760405162461bcd60e51b8152600401610aba90613229565b601555565b6000610d1a600561212e565b905090565b60145460ff16610d605760405162461bcd60e51b815260206004820152600c60248201526b26b4b73a103830bab9b2b21760a11b6044820152606401610aba565b600f54610d7583610d6f610d0e565b90612138565b10610db45760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610aba565b610dcf8215610dc35782610dc6565b60015b60105490612197565b341015610ddb57600080fd5b60175460ff1615610ea657806001600160a01b03166108fc610e136064610e0d6015543461219790919063ffffffff16565b90612216565b6040518115909202916000818181858888f19350505050158015610e3b573d6000803e3d6000fd5b50601760019054906101000a90046001600160a01b03166001600160a01b03166108fc610e786064610e0d6016543461219790919063ffffffff16565b6040518115909202916000818181858888f19350505050158015610ea0573d6000803e3d6000fd5b50610ee8565b6017546040516001600160a01b0361010090920491909116903480156108fc02916000818181858888f19350505050158015610ee6573d6000803e3d6000fd5b505b60005b82811015610bf0576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052601880549283018155909352815180519293849360039093027fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0192610f6d9284920190612d33565b506020820151600182810180546001600160a01b0319166001600160a01b0390931692909217909155604090920151600290910155601854600091610fb1916132fa565b90508060188281548110610fc757610fc76133e9565b9060005260206000209060030201600201819055506000610fe66115bb565b9050600081610ff484612271565b6013604051602001611008939291906130a8565b6040516020818303038152906040529050806018848154811061102d5761102d6133e9565b90600052602060002090600302016000019080519060200190611051929190612d33565b5082601982604051611063919061308c565b9081526040519081900360200190205561107d3384612377565b336000908152601a6020526040812080549161109883613378565b9091555050336000818152601b6020908152604080832080546001810182559084528284208101889055938352601c82528083209683529590529390932092909255508291506110e9905081613378565b915050610eeb565b6110fc335b826124d9565b6111185760405162461bcd60e51b8152600401610aba9061325e565b610bf08383836125bf565b6000601982604051611135919061308c565b9081526020016040518091039020549050919050565b6001600160a01b038216600090815260026020526040812061116d9083612754565b90505b92915050565b6000546001600160a01b031633146111a05760405162461bcd60e51b8152600401610aba90613229565b60405133904780156108fc02916000818181858888f193505050501580156111cc573d6000803e3d6000fd5b50565b6111d8336110f6565b6111f45760405162461bcd60e51b8152600401610aba9061325e565b610bf0838383611118565b6060600061120c836115ca565b905060008167ffffffffffffffff811115611229576112296133ff565b604051908082528060200260200182016040528015611252578160200160208202803683370190505b50905060005b828110156112995761126a858261114b565b82828151811061127c5761127c6133e9565b60209081029190910101528061129181613378565b915050611258565b509392505050565b6000818152601d60205260409020600181015490546001600160a01b0316806112c957600080fd5b6001600160a01b0381163314156112df57600080fd5b813410156112ec57600080fd5b600061131261130b6064610e0d6011548761219790919063ffffffff16565b8490612760565b6040519091506001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561134b573d6000803e3d6000fd5b506000848152601d6020526040812080546001600160a01b0319168155600181018290559061137d6002830182612db7565b50600060039190910155604051632142170760e11b8152306004820181905233602483015260448201869052906342842e0e90606401600060405180830381600087803b1580156113cd57600080fd5b505af11580156113e1573d6000803e3d6000fd5b5050505050505050565b6000806112996005846127bc565b6018818154811061140957600080fd5b906000526020600020906003020160009150905080600001805461142c9061333d565b80601f01602080910402602001604051908101604052809291908181526020018280546114589061333d565b80156114a55780601f1061147a576101008083540402835291602001916114a5565b820191906000526020600020905b81548152906001019060200180831161148857829003601f168201915b50505050600183015460029093015491926001600160a01b031691905083565b6000546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610aba90613229565b6111cc816127d8565b6000546001600160a01b031633146115225760405162461bcd60e51b8152600401610aba90613229565b6017805460ff1916911515919091179055565b6000546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610aba90613229565b601655565b60006111708260405180606001604052806029815260200161341660299139600591906127eb565b6000546001600160a01b031633146115b65760405162461bcd60e51b8152600401610aba90613229565b601155565b6060600e80546109cf9061333d565b60006001600160a01b0382166116355760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aba565b6001600160a01b03821660009081526002602052604090206111709061212e565b6000546001600160a01b031633146116805760405162461bcd60e51b8152600401610aba90613229565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116f45760405162461bcd60e51b8152600401610aba90613229565b600f5461170382610d6f610d0e565b106117425760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610aba565b60005b8181101561194b576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052601880549283018155909352815180519293849360039093027fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e01926117c79284920190612d33565b506020820151600182810180546001600160a01b0319166001600160a01b039093169290921790915560409092015160029091015560185460009161180b916132fa565b90508060188281548110611821576118216133e9565b90600052602060002090600302016002018190555060006118406115bb565b905060008161184e84612271565b6013604051602001611862939291906130a8565b60405160208183030381529060405290508060188481548110611887576118876133e9565b906000526020600020906003020160000190805190602001906118ab929190612d33565b50826019826040516118bd919061308c565b908152604051908190036020019020556118d73384612377565b336000908152601a602052604081208054916118f283613378565b9091555050336000818152601b6020908152604080832080546001810182559084528284208101889055938352601c8252808320968352959052939093209290925550829150611943905081613378565b915050611745565b5050565b6000546001600160a01b031633146119795760405162461bcd60e51b8152600401610aba90613229565b601780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6060600a80546109cf9061333d565b6001600160a01b038216331415611a095760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aba565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60128054611a829061333d565b80601f0160208091040260200160405190810160405280929190818152602001828054611aae9061333d565b8015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b505050505081565b60138054611a829061333d565b8133611b1b82611564565b6001600160a01b031614611b2e57600080fd5b6000838152601d60205260409020546001600160a01b031615611b5057600080fd5b60006040518060800160405280336001600160a01b0316815260200184815260200160188681548110611b8557611b856133e9565b90600052602060002090600302016000018054611ba19061333d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd9061333d565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050918352505060209081018690526000868152601d8252604090819020835181546001600160a01b0319166001600160a01b0390911617815583830151600182015590830151805193945084939192611c7d92600285019290910190612d33565b5060608201518160030155905050611c953085610adf565b611ca03330866111cf565b50505050565b6060611cb1826120b3565b611d155760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aba565b6000611d1f6115bb565b90506000815111611d3f5760405180602001604052806000815250611d6d565b80611d4984612271565b6013604051602001611d5d939291906130a8565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015611dd457602002820191906000526020600020905b815481526020019060010190808311611dc0575b50505050509050919050565b6000546001600160a01b03163314611e0a5760405162461bcd60e51b8152600401610aba90613229565b805161194b906013906020840190612d33565b6060610d1a611e2c600561212e565b612271565b6000818152601d60205260409020546001600160a01b03163314611e5457600080fd5b6000818152601d602052604090819020549051632142170760e11b815230600482018190526001600160a01b039092166024820152604481018390526342842e0e90606401600060405180830381600087803b158015611eb357600080fd5b505af1158015611ec7573d6000803e3d6000fd5b5050506000828152601d6020526040812080546001600160a01b0319168155600181018290559150611efc6002830182612db7565b6003820160009055505050565b6000546001600160a01b03163314611f335760405162461bcd60e51b8152600401610aba90613229565b6001600160a01b038116611f985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461201d5760405162461bcd60e51b8152600401610aba90613229565b6014805460ff1916911515919091179055565b6000546001600160a01b0316331461205a5760405162461bcd60e51b8152600401610aba90613229565b805161194b906012906020840190612d33565b601e818154811061207d57600080fd5b60009182526020909120600490910201805460018201546002830180546001600160a01b039093169450909291610c569061333d565b60006111706005836127f8565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120f582611564565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611170825490565b60008061214583856132af565b90508381101561116d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aba565b6000826121a657506000611170565b60006121b283856132db565b9050826121bf85836132c7565b1461116d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aba565b60008082116122675760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610aba565b61116d82846132c7565b6060816122955750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122bf57806122a981613378565b91506122b89050600a836132c7565b9150612299565b60008167ffffffffffffffff8111156122da576122da6133ff565b6040519080825280601f01601f191660200182016040528015612304576020820181803683370190505b5090505b841561236f576123196001836132fa565b9150612326600a86613393565b6123319060306132af565b60f81b818381518110612346576123466133e9565b60200101906001600160f81b031916908160001a905350612368600a866132c7565b9450612308565b949350505050565b6001600160a01b0382166123cd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aba565b6123d6816120b3565b156124235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aba565b600c80546000838152600d60209081526040808320849055600184019094557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79092018490556001600160a01b03851681526002909152206124859082612810565b50612490828261281c565b61249c60058284612858565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006124e4826120b3565b6125455760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aba565b600061255083611564565b9050806001600160a01b0316846001600160a01b0316148061258b5750836001600160a01b031661258084610a52565b6001600160a01b0316145b8061236f57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff1661236f565b826001600160a01b03166125d282611564565b6001600160a01b03161461263a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aba565b6001600160a01b03821661269c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b6126a76000826120c0565b6001600160a01b03831660009081526002602052604090206126c9908261286e565b506001600160a01b03821660009081526002602052604090206126ec9082612810565b506126f7838261287a565b612701828261281c565b61270d60058284612858565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061116d83836129c4565b6000828211156127b25760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610aba565b61116d82846132fa565b60008080806127cb8686612a4a565b9097909650945050505050565b805161194b90600e906020840190612d33565b600061236f848484612ae7565b6000818152600183016020526040812054151561116d565b600061116d8383612b50565b6001600160a01b039091166000908152600360209081526040808320805460018101825590845282842081018590559383526004909152902055565b600061236f84846001600160a01b038516612b9f565b600061116d8383612c40565b6000818152600460209081526040808320546001600160a01b038616845260039092528220549091906128ae906001612760565b6001600160a01b038516600090815260036020526040812080549293509091839081106128dd576128dd6133e9565b906000526020600020015490508060036000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612921576129216133e9565b60009182526020808320909101929092556001600160a01b0387168152600390915260408120805484908110612959576129596133e9565b60009182526020808320909101929092556001600160a01b038716815260039091526040902080548061298e5761298e6133d3565b60008281526020808220830160001990810183905590920190925594815260049094526040808520859055908452909220555050565b81546000908210612a225760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610aba565b826000018281548110612a3757612a376133e9565b9060005260206000200154905092915050565b815460009081908310612aaa5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610aba565b6000846000018481548110612ac157612ac16133e9565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612b175760405162461bcd60e51b8152600401610aba91906131e8565b5084612b246001836132fa565b81548110612b3457612b346133e9565b9060005260206000209060020201600101549150509392505050565b6000818152600183016020526040812054612b9757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611170565b506000611170565b600082815260018401602052604081205480612c04575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611d6d565b8285612c116001846132fa565b81548110612c2157612c216133e9565b9060005260206000209060020201600101819055506000915050611d6d565b60008181526001830160205260408120548015612d29576000612c646001836132fa565b8554909150600090612c78906001906132fa565b90506000866000018281548110612c9157612c916133e9565b9060005260206000200154905080876000018481548110612cb457612cb46133e9565b600091825260209091200155612ccb8360016132af565b60008281526001890160205260409020558654879080612ced57612ced6133d3565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611170565b6000915050611170565b828054612d3f9061333d565b90600052602060002090601f016020900481019282612d615760008555612da7565b82601f10612d7a57805160ff1916838001178555612da7565b82800160010185558215612da7579182015b82811115612da7578251825591602001919060010190612d8c565b50612db3929150612ded565b5090565b508054612dc39061333d565b6000825580601f10612dd3575050565b601f0160209004906000526020600020908101906111cc91905b5b80821115612db35760008155600101612dee565b80356001600160a01b0381168114612e1957600080fd5b919050565b80358015158114612e1957600080fd5b600060208284031215612e4057600080fd5b61116d82612e02565b60008060408385031215612e5c57600080fd5b612e6583612e02565b9150612e7360208401612e02565b90509250929050565b600080600060608486031215612e9157600080fd5b612e9a84612e02565b9250612ea860208501612e02565b9150604084013590509250925092565b60008060408385031215612ecb57600080fd5b612ed483612e02565b9150612e7360208401612e1e565b60008060408385031215612ef557600080fd5b612efe83612e02565b946020939093013593505050565b600060208284031215612f1e57600080fd5b61116d82612e1e565b600060208284031215612f3957600080fd5b81356001600160e01b03198116811461116d57600080fd5b600060208284031215612f6357600080fd5b813567ffffffffffffffff80821115612f7b57600080fd5b818401915084601f830112612f8f57600080fd5b813581811115612fa157612fa16133ff565b604051601f8201601f19908116603f01168101908382118183101715612fc957612fc96133ff565b81604052828152876020848701011115612fe257600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561301457600080fd5b5035919050565b6000806040838503121561302e57600080fd5b82359150612e7360208401612e02565b6000806040838503121561305157600080fd5b50508035926020909101359150565b60008151808452613078816020860160208601613311565b601f01601f19169290920160200192915050565b6000825161309e818460208701613311565b9190910192915050565b6000845160206130bb8285838a01613311565b8551918401916130ce8184848a01613311565b8554920191600090600181811c90808316806130eb57607f831692505b85831081141561310957634e487b7160e01b85526022600452602485fd5b80801561311d576001811461312e5761315b565b60ff1985168852838801955061315b565b60008b81526020902060005b858110156131535781548a82015290840190880161313a565b505083880195505b50939b9a5050505050505050505050565b60018060a01b03851681528360208201526080604082015260006131936080830185613060565b905082606083015295945050505050565b6020808252825182820181905260009190848201906040850190845b818110156131dc578351835292840192918401916001016131c0565b50909695505050505050565b60208152600061116d6020830184613060565b60608152600061320e6060830186613060565b6001600160a01b039490941660208301525060400152919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156132c2576132c26133a7565b500190565b6000826132d6576132d66133bd565b500490565b60008160001904831182151516156132f5576132f56133a7565b500290565b60008282101561330c5761330c6133a7565b500390565b60005b8381101561332c578181015183820152602001613314565b83811115611ca05750506000910152565b600181811c9082168061335157607f821691505b6020821081141561337257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561338c5761338c6133a7565b5060010190565b6000826133a2576133a26133bd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212205711d3ff57f8a55510d7b64b4c64aa386e5d84be00a4d051a7e462efae72cb0d64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061031a5760003560e01c80636c0360eb116101ab578063beb0a416116100f7578063da6fa46c11610095578063f2fde38b1161006f578063f2fde38b14610940578063f59e26d014610960578063f87f44b914610980578063ff5257eb146109a057600080fd5b8063da6fa46c146108c2578063e450674c146108d7578063e985e9c5146108f757600080fd5b8063c87b56dd116100d1578063c87b56dd14610848578063cd85cdb514610868578063d9d6165514610882578063da3ef23f146108a257600080fd5b8063beb0a416146107fe578063c668286214610813578063c75098ea1461082857600080fd5b806395d89b4111610164578063b2bdfa7b1161013e578063b2bdfa7b1461079c578063b38a4360146107bc578063bcaf656c146107d2578063be1ce91d146107e857600080fd5b806395d89b4114610742578063a22cb46514610757578063a5ece9411461077757600080fd5b80636c0360eb1461069a57806370a08231146106af578063715018a6146106cf5780637be86a01146106e45780638da5cb5b14610704578063906e9dd01461072257600080fd5b80633ccfd60b1161026a57806355f804b311610223578063625e764c116101fd578063625e764c146106245780636352211e1461064457806365de3833146106645780636b67c4df1461068457600080fd5b806355f804b3146105ce5780635a284b3f146105ee578063604956771461060457600080fd5b80633ccfd60b1461050a57806342842e0e1461051f578063438b63001461053f5780634c9f48c61461056c5780634f6ccce71461057f57806355f506791461059f57600080fd5b8063164c6280116102d757806323b872dd116102b157806323b872dd1461049057806327ea2df0146104b05780632f745c59146104d0578063359a0b51146104f057600080fd5b8063164c62801461043a57806318160ddd1461045a578063237d322d1461047d57600080fd5b806301ffc9a71461031f57806306fdde031461036e578063081812fc14610390578063095ea7b3146103c85780630dee18e4146103ea57806310fcafab1461040a575b600080fd5b34801561032b57600080fd5b5061035961033a366004612f27565b6001600160e01b03191660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b506103836109c0565b60405161036591906131e8565b34801561039c57600080fd5b506103b06103ab366004613002565b610a52565b6040516001600160a01b039091168152602001610365565b3480156103d457600080fd5b506103e86103e3366004612ee2565b610adf565b005b3480156103f657600080fd5b506103e8610405366004613002565b610bf5565b34801561041657600080fd5b5061042a610425366004613002565b610c24565b604051610365949392919061316c565b34801561044657600080fd5b506103e8610455366004613002565b610cdf565b34801561046657600080fd5b5061046f610d0e565b604051908152602001610365565b6103e861048b36600461301b565b610d1f565b34801561049c57600080fd5b506103e86104ab366004612e7c565b6110f1565b3480156104bc57600080fd5b5061046f6104cb366004612f51565b611123565b3480156104dc57600080fd5b5061046f6104eb366004612ee2565b61114b565b3480156104fc57600080fd5b506017546103599060ff1681565b34801561051657600080fd5b506103e8611176565b34801561052b57600080fd5b506103e861053a366004612e7c565b6111cf565b34801561054b57600080fd5b5061055f61055a366004612e2e565b6111ff565b60405161036591906131a4565b6103e861057a366004613002565b6112a1565b34801561058b57600080fd5b5061046f61059a366004613002565b6113eb565b3480156105ab57600080fd5b506105bf6105ba366004613002565b6113f9565b604051610365939291906131fb565b3480156105da57600080fd5b506103e86105e9366004612f51565b6114c5565b3480156105fa57600080fd5b5061046f60115481565b34801561061057600080fd5b506103e861061f366004612f0c565b6114f8565b34801561063057600080fd5b506103e861063f366004613002565b611535565b34801561065057600080fd5b506103b061065f366004613002565b611564565b34801561067057600080fd5b506103e861067f366004613002565b61158c565b34801561069057600080fd5b5061046f60165481565b3480156106a657600080fd5b506103836115bb565b3480156106bb57600080fd5b5061046f6106ca366004612e2e565b6115ca565b3480156106db57600080fd5b506103e8611656565b3480156106f057600080fd5b506103e86106ff366004613002565b6116ca565b34801561071057600080fd5b506000546001600160a01b03166103b0565b34801561072e57600080fd5b506103e861073d366004612e2e565b61194f565b34801561074e57600080fd5b506103836119a1565b34801561076357600080fd5b506103e8610772366004612eb8565b6119b0565b34801561078357600080fd5b506017546103b09061010090046001600160a01b031681565b3480156107a857600080fd5b506000546103b0906001600160a01b031681565b3480156107c857600080fd5b5061046f60155481565b3480156107de57600080fd5b5061046f600f5481565b3480156107f457600080fd5b5061046f60105481565b34801561080a57600080fd5b50610383611a75565b34801561081f57600080fd5b50610383611b03565b34801561083457600080fd5b506103e861084336600461303e565b611b10565b34801561085457600080fd5b50610383610863366004613002565b611ca6565b34801561087457600080fd5b506014546103599060ff1681565b34801561088e57600080fd5b5061055f61089d366004612e2e565b611d74565b3480156108ae57600080fd5b506103e86108bd366004612f51565b611de0565b3480156108ce57600080fd5b50610383611e1d565b3480156108e357600080fd5b506103e86108f2366004613002565b611e31565b34801561090357600080fd5b50610359610912366004612e49565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561094c57600080fd5b506103e861095b366004612e2e565b611f09565b34801561096c57600080fd5b506103e861097b366004612f0c565b611ff3565b34801561098c57600080fd5b506103e861099b366004612f51565b612030565b3480156109ac57600080fd5b5061042a6109bb366004613002565b61206d565b6060600980546109cf9061333d565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb9061333d565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b6000610a5d826120b3565b610ac35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610aea82611564565b9050806001600160a01b0316836001600160a01b03161415610b585760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aba565b336001600160a01b0382161480610b745750610b748133610912565b610be65760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aba565b610bf083836120c0565b505050565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b8152600401610aba90613229565b601055565b601d602052600090815260409020805460018201546002830180546001600160a01b03909316939192610c569061333d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c829061333d565b8015610ccf5780601f10610ca457610100808354040283529160200191610ccf565b820191906000526020600020905b815481529060010190602001808311610cb257829003601f168201915b5050505050908060030154905084565b6000546001600160a01b03163314610d095760405162461bcd60e51b8152600401610aba90613229565b601555565b6000610d1a600561212e565b905090565b60145460ff16610d605760405162461bcd60e51b815260206004820152600c60248201526b26b4b73a103830bab9b2b21760a11b6044820152606401610aba565b600f54610d7583610d6f610d0e565b90612138565b10610db45760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610aba565b610dcf8215610dc35782610dc6565b60015b60105490612197565b341015610ddb57600080fd5b60175460ff1615610ea657806001600160a01b03166108fc610e136064610e0d6015543461219790919063ffffffff16565b90612216565b6040518115909202916000818181858888f19350505050158015610e3b573d6000803e3d6000fd5b50601760019054906101000a90046001600160a01b03166001600160a01b03166108fc610e786064610e0d6016543461219790919063ffffffff16565b6040518115909202916000818181858888f19350505050158015610ea0573d6000803e3d6000fd5b50610ee8565b6017546040516001600160a01b0361010090920491909116903480156108fc02916000818181858888f19350505050158015610ee6573d6000803e3d6000fd5b505b60005b82811015610bf0576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052601880549283018155909352815180519293849360039093027fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0192610f6d9284920190612d33565b506020820151600182810180546001600160a01b0319166001600160a01b0390931692909217909155604090920151600290910155601854600091610fb1916132fa565b90508060188281548110610fc757610fc76133e9565b9060005260206000209060030201600201819055506000610fe66115bb565b9050600081610ff484612271565b6013604051602001611008939291906130a8565b6040516020818303038152906040529050806018848154811061102d5761102d6133e9565b90600052602060002090600302016000019080519060200190611051929190612d33565b5082601982604051611063919061308c565b9081526040519081900360200190205561107d3384612377565b336000908152601a6020526040812080549161109883613378565b9091555050336000818152601b6020908152604080832080546001810182559084528284208101889055938352601c82528083209683529590529390932092909255508291506110e9905081613378565b915050610eeb565b6110fc335b826124d9565b6111185760405162461bcd60e51b8152600401610aba9061325e565b610bf08383836125bf565b6000601982604051611135919061308c565b9081526020016040518091039020549050919050565b6001600160a01b038216600090815260026020526040812061116d9083612754565b90505b92915050565b6000546001600160a01b031633146111a05760405162461bcd60e51b8152600401610aba90613229565b60405133904780156108fc02916000818181858888f193505050501580156111cc573d6000803e3d6000fd5b50565b6111d8336110f6565b6111f45760405162461bcd60e51b8152600401610aba9061325e565b610bf0838383611118565b6060600061120c836115ca565b905060008167ffffffffffffffff811115611229576112296133ff565b604051908082528060200260200182016040528015611252578160200160208202803683370190505b50905060005b828110156112995761126a858261114b565b82828151811061127c5761127c6133e9565b60209081029190910101528061129181613378565b915050611258565b509392505050565b6000818152601d60205260409020600181015490546001600160a01b0316806112c957600080fd5b6001600160a01b0381163314156112df57600080fd5b813410156112ec57600080fd5b600061131261130b6064610e0d6011548761219790919063ffffffff16565b8490612760565b6040519091506001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561134b573d6000803e3d6000fd5b506000848152601d6020526040812080546001600160a01b0319168155600181018290559061137d6002830182612db7565b50600060039190910155604051632142170760e11b8152306004820181905233602483015260448201869052906342842e0e90606401600060405180830381600087803b1580156113cd57600080fd5b505af11580156113e1573d6000803e3d6000fd5b5050505050505050565b6000806112996005846127bc565b6018818154811061140957600080fd5b906000526020600020906003020160009150905080600001805461142c9061333d565b80601f01602080910402602001604051908101604052809291908181526020018280546114589061333d565b80156114a55780601f1061147a576101008083540402835291602001916114a5565b820191906000526020600020905b81548152906001019060200180831161148857829003601f168201915b50505050600183015460029093015491926001600160a01b031691905083565b6000546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610aba90613229565b6111cc816127d8565b6000546001600160a01b031633146115225760405162461bcd60e51b8152600401610aba90613229565b6017805460ff1916911515919091179055565b6000546001600160a01b0316331461155f5760405162461bcd60e51b8152600401610aba90613229565b601655565b60006111708260405180606001604052806029815260200161341660299139600591906127eb565b6000546001600160a01b031633146115b65760405162461bcd60e51b8152600401610aba90613229565b601155565b6060600e80546109cf9061333d565b60006001600160a01b0382166116355760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aba565b6001600160a01b03821660009081526002602052604090206111709061212e565b6000546001600160a01b031633146116805760405162461bcd60e51b8152600401610aba90613229565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146116f45760405162461bcd60e51b8152600401610aba90613229565b600f5461170382610d6f610d0e565b106117425760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610aba565b60005b8181101561194b576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052601880549283018155909352815180519293849360039093027fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e01926117c79284920190612d33565b506020820151600182810180546001600160a01b0319166001600160a01b039093169290921790915560409092015160029091015560185460009161180b916132fa565b90508060188281548110611821576118216133e9565b90600052602060002090600302016002018190555060006118406115bb565b905060008161184e84612271565b6013604051602001611862939291906130a8565b60405160208183030381529060405290508060188481548110611887576118876133e9565b906000526020600020906003020160000190805190602001906118ab929190612d33565b50826019826040516118bd919061308c565b908152604051908190036020019020556118d73384612377565b336000908152601a602052604081208054916118f283613378565b9091555050336000818152601b6020908152604080832080546001810182559084528284208101889055938352601c8252808320968352959052939093209290925550829150611943905081613378565b915050611745565b5050565b6000546001600160a01b031633146119795760405162461bcd60e51b8152600401610aba90613229565b601780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6060600a80546109cf9061333d565b6001600160a01b038216331415611a095760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aba565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60128054611a829061333d565b80601f0160208091040260200160405190810160405280929190818152602001828054611aae9061333d565b8015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b505050505081565b60138054611a829061333d565b8133611b1b82611564565b6001600160a01b031614611b2e57600080fd5b6000838152601d60205260409020546001600160a01b031615611b5057600080fd5b60006040518060800160405280336001600160a01b0316815260200184815260200160188681548110611b8557611b856133e9565b90600052602060002090600302016000018054611ba19061333d565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd9061333d565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050918352505060209081018690526000868152601d8252604090819020835181546001600160a01b0319166001600160a01b0390911617815583830151600182015590830151805193945084939192611c7d92600285019290910190612d33565b5060608201518160030155905050611c953085610adf565b611ca03330866111cf565b50505050565b6060611cb1826120b3565b611d155760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aba565b6000611d1f6115bb565b90506000815111611d3f5760405180602001604052806000815250611d6d565b80611d4984612271565b6013604051602001611d5d939291906130a8565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015611dd457602002820191906000526020600020905b815481526020019060010190808311611dc0575b50505050509050919050565b6000546001600160a01b03163314611e0a5760405162461bcd60e51b8152600401610aba90613229565b805161194b906013906020840190612d33565b6060610d1a611e2c600561212e565b612271565b6000818152601d60205260409020546001600160a01b03163314611e5457600080fd5b6000818152601d602052604090819020549051632142170760e11b815230600482018190526001600160a01b039092166024820152604481018390526342842e0e90606401600060405180830381600087803b158015611eb357600080fd5b505af1158015611ec7573d6000803e3d6000fd5b5050506000828152601d6020526040812080546001600160a01b0319168155600181018290559150611efc6002830182612db7565b6003820160009055505050565b6000546001600160a01b03163314611f335760405162461bcd60e51b8152600401610aba90613229565b6001600160a01b038116611f985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461201d5760405162461bcd60e51b8152600401610aba90613229565b6014805460ff1916911515919091179055565b6000546001600160a01b0316331461205a5760405162461bcd60e51b8152600401610aba90613229565b805161194b906012906020840190612d33565b601e818154811061207d57600080fd5b60009182526020909120600490910201805460018201546002830180546001600160a01b039093169450909291610c569061333d565b60006111706005836127f8565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120f582611564565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611170825490565b60008061214583856132af565b90508381101561116d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aba565b6000826121a657506000611170565b60006121b283856132db565b9050826121bf85836132c7565b1461116d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aba565b60008082116122675760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610aba565b61116d82846132c7565b6060816122955750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122bf57806122a981613378565b91506122b89050600a836132c7565b9150612299565b60008167ffffffffffffffff8111156122da576122da6133ff565b6040519080825280601f01601f191660200182016040528015612304576020820181803683370190505b5090505b841561236f576123196001836132fa565b9150612326600a86613393565b6123319060306132af565b60f81b818381518110612346576123466133e9565b60200101906001600160f81b031916908160001a905350612368600a866132c7565b9450612308565b949350505050565b6001600160a01b0382166123cd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aba565b6123d6816120b3565b156124235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aba565b600c80546000838152600d60209081526040808320849055600184019094557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79092018490556001600160a01b03851681526002909152206124859082612810565b50612490828261281c565b61249c60058284612858565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006124e4826120b3565b6125455760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aba565b600061255083611564565b9050806001600160a01b0316846001600160a01b0316148061258b5750836001600160a01b031661258084610a52565b6001600160a01b0316145b8061236f57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff1661236f565b826001600160a01b03166125d282611564565b6001600160a01b03161461263a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610aba565b6001600160a01b03821661269c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b6126a76000826120c0565b6001600160a01b03831660009081526002602052604090206126c9908261286e565b506001600160a01b03821660009081526002602052604090206126ec9082612810565b506126f7838261287a565b612701828261281c565b61270d60058284612858565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061116d83836129c4565b6000828211156127b25760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610aba565b61116d82846132fa565b60008080806127cb8686612a4a565b9097909650945050505050565b805161194b90600e906020840190612d33565b600061236f848484612ae7565b6000818152600183016020526040812054151561116d565b600061116d8383612b50565b6001600160a01b039091166000908152600360209081526040808320805460018101825590845282842081018590559383526004909152902055565b600061236f84846001600160a01b038516612b9f565b600061116d8383612c40565b6000818152600460209081526040808320546001600160a01b038616845260039092528220549091906128ae906001612760565b6001600160a01b038516600090815260036020526040812080549293509091839081106128dd576128dd6133e9565b906000526020600020015490508060036000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612921576129216133e9565b60009182526020808320909101929092556001600160a01b0387168152600390915260408120805484908110612959576129596133e9565b60009182526020808320909101929092556001600160a01b038716815260039091526040902080548061298e5761298e6133d3565b60008281526020808220830160001990810183905590920190925594815260049094526040808520859055908452909220555050565b81546000908210612a225760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610aba565b826000018281548110612a3757612a376133e9565b9060005260206000200154905092915050565b815460009081908310612aaa5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610aba565b6000846000018481548110612ac157612ac16133e9565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612b175760405162461bcd60e51b8152600401610aba91906131e8565b5084612b246001836132fa565b81548110612b3457612b346133e9565b9060005260206000209060020201600101549150509392505050565b6000818152600183016020526040812054612b9757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611170565b506000611170565b600082815260018401602052604081205480612c04575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611d6d565b8285612c116001846132fa565b81548110612c2157612c216133e9565b9060005260206000209060020201600101819055506000915050611d6d565b60008181526001830160205260408120548015612d29576000612c646001836132fa565b8554909150600090612c78906001906132fa565b90506000866000018281548110612c9157612c916133e9565b9060005260206000200154905080876000018481548110612cb457612cb46133e9565b600091825260209091200155612ccb8360016132af565b60008281526001890160205260409020558654879080612ced57612ced6133d3565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611170565b6000915050611170565b828054612d3f9061333d565b90600052602060002090601f016020900481019282612d615760008555612da7565b82601f10612d7a57805160ff1916838001178555612da7565b82800160010185558215612da7579182015b82811115612da7578251825591602001919060010190612d8c565b50612db3929150612ded565b5090565b508054612dc39061333d565b6000825580601f10612dd3575050565b601f0160209004906000526020600020908101906111cc91905b5b80821115612db35760008155600101612dee565b80356001600160a01b0381168114612e1957600080fd5b919050565b80358015158114612e1957600080fd5b600060208284031215612e4057600080fd5b61116d82612e02565b60008060408385031215612e5c57600080fd5b612e6583612e02565b9150612e7360208401612e02565b90509250929050565b600080600060608486031215612e9157600080fd5b612e9a84612e02565b9250612ea860208501612e02565b9150604084013590509250925092565b60008060408385031215612ecb57600080fd5b612ed483612e02565b9150612e7360208401612e1e565b60008060408385031215612ef557600080fd5b612efe83612e02565b946020939093013593505050565b600060208284031215612f1e57600080fd5b61116d82612e1e565b600060208284031215612f3957600080fd5b81356001600160e01b03198116811461116d57600080fd5b600060208284031215612f6357600080fd5b813567ffffffffffffffff80821115612f7b57600080fd5b818401915084601f830112612f8f57600080fd5b813581811115612fa157612fa16133ff565b604051601f8201601f19908116603f01168101908382118183101715612fc957612fc96133ff565b81604052828152876020848701011115612fe257600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561301457600080fd5b5035919050565b6000806040838503121561302e57600080fd5b82359150612e7360208401612e02565b6000806040838503121561305157600080fd5b50508035926020909101359150565b60008151808452613078816020860160208601613311565b601f01601f19169290920160200192915050565b6000825161309e818460208701613311565b9190910192915050565b6000845160206130bb8285838a01613311565b8551918401916130ce8184848a01613311565b8554920191600090600181811c90808316806130eb57607f831692505b85831081141561310957634e487b7160e01b85526022600452602485fd5b80801561311d576001811461312e5761315b565b60ff1985168852838801955061315b565b60008b81526020902060005b858110156131535781548a82015290840190880161313a565b505083880195505b50939b9a5050505050505050505050565b60018060a01b03851681528360208201526080604082015260006131936080830185613060565b905082606083015295945050505050565b6020808252825182820181905260009190848201906040850190845b818110156131dc578351835292840192918401916001016131c0565b50909695505050505050565b60208152600061116d6020830184613060565b60608152600061320e6060830186613060565b6001600160a01b039490941660208301525060400152919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156132c2576132c26133a7565b500190565b6000826132d6576132d66133bd565b500490565b60008160001904831182151516156132f5576132f56133a7565b500290565b60008282101561330c5761330c6133a7565b500390565b60005b8381101561332c578181015183820152602001613314565b83811115611ca05750506000910152565b600181811c9082168061335157607f821691505b6020821081141561337257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561338c5761338c6133a7565b5060010190565b6000826133a2576133a26133bd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212205711d3ff57f8a55510d7b64b4c64aa386e5d84be00a4d051a7e462efae72cb0d64736f6c63430008070033
Deployed Bytecode Sourcemap
38106:7938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:150;;;;;;;;;;-1:-1:-1;2292:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;;2401:33:0;2377:4;2401:33;;;:20;:33;;;;;;;;;2292:150;;;;8100:14:1;;8093:22;8075:41;;8063:2;8048:18;2292:150:0;;;;;;;;27601:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31246:221::-;;;;;;;;;;-1:-1:-1;31246:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6004:32:1;;;5986:51;;5974:2;5959:18;31246:221:0;5840:203:1;30776:404:0;;;;;;;;;;-1:-1:-1;30776:404:0;;;;;:::i;:::-;;:::i;:::-;;40672:99;;;;;;;;;;-1:-1:-1;40672:99:0;;;;;:::i;:::-;;:::i;39310:66::-;;;;;;;;;;-1:-1:-1;39310:66:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;40136:92::-;;;;;;;;;;-1:-1:-1;40136:92:0;;;;;:::i;:::-;;:::i;30254:211::-;;;;;;;;;;;;;:::i;:::-;;;17407:25:1;;;17395:2;17380:18;30254:211:0;17261:177:1;41351:1607:0;;;;;;:::i;:::-;;:::i;32136:313::-;;;;;;;;;;-1:-1:-1;32136:313:0;;;;;:::i;:::-;;:::i;41077:134::-;;;;;;;;;;-1:-1:-1;41077:134:0;;;;;:::i;:::-;;:::i;30016:162::-;;;;;;;;;;-1:-1:-1;30016:162:0;;;;;:::i;:::-;;:::i;38779:31::-;;;;;;;;;;-1:-1:-1;38779:31:0;;;;;;;;39918:107;;;;;;;;;;;;;:::i;32520:258::-;;;;;;;;;;-1:-1:-1;32520:258:0;;;;;:::i;:::-;;:::i;45651:390::-;;;;;;;;;;-1:-1:-1;45651:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45007:636::-;;;;;;:::i;:::-;;:::i;30542:172::-;;;;;;;;;;-1:-1:-1;30542:172:0;;;;;:::i;:::-;;:::i;38859:32::-;;;;;;;;;;-1:-1:-1;38859:32:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;40779:97::-;;;;;;;;;;-1:-1:-1;40779:97:0;;;;;:::i;:::-;;:::i;38538:27::-;;;;;;;;;;;;;;;;40033:95;;;;;;;;;;-1:-1:-1;40033:95:0;;;;;:::i;:::-;;:::i;40236:98::-;;;;;;;;;;-1:-1:-1;40236:98:0;;;;;:::i;:::-;;:::i;27357:177::-;;;;;;;;;;-1:-1:-1;27357:177:0;;;;;:::i;:::-;;:::i;40981:88::-;;;;;;;;;;-1:-1:-1;40981:88:0;;;;;:::i;:::-;;:::i;38738:32::-;;;;;;;;;;;;;;;;28976:97;;;;;;;;;;;;;:::i;27074:221::-;;;;;;;;;;-1:-1:-1;27074:221:0;;;;;:::i;:::-;;:::i;37699:148::-;;;;;;;;;;;;;:::i;42966:1173::-;;;;;;;;;;-1:-1:-1;42966:1173:0;;;;;:::i;:::-;;:::i;37476:87::-;;;;;;;;;;-1:-1:-1;37522:7:0;37549:6;-1:-1:-1;;;;;37549:6:0;37476:87;;40342:106;;;;;;;;;;-1:-1:-1;40342:106:0;;;;;:::i;:::-;;:::i;27770:104::-;;;;;;;;;;;;;:::i;31539:295::-;;;;;;;;;;-1:-1:-1;31539:295:0;;;;;:::i;:::-;;:::i;38819:31::-;;;;;;;;;;-1:-1:-1;38819:31:0;;;;;;;-1:-1:-1;;;;;38819:31:0;;;37192:21;;;;;;;;;;-1:-1:-1;37192:21:0;;;;-1:-1:-1;;;;;37192:21:0;;;38702:29;;;;;;;;;;;;;;;;38438:35;;;;;;;;;;;;;;;;38480:51;;;;;;;;;;;;;;;;38572:44;;;;;;;;;;;;;:::i;38623:37::-;;;;;;;;;;;;;:::i;44147:557::-;;;;;;;;;;-1:-1:-1;44147:557:0;;;;;:::i;:::-;;:::i;39428:482::-;;;;;;;;;;-1:-1:-1;39428:482:0;;;;;:::i;:::-;;:::i;38667:28::-;;;;;;;;;;-1:-1:-1;38667:28:0;;;;;;;;41219:124;;;;;;;;;;-1:-1:-1;41219:124:0;;;;;:::i;:::-;;:::i;40558:106::-;;;;;;;;;;-1:-1:-1;40558:106:0;;;;;:::i;:::-;;:::i;29081:131::-;;;;;;;;;;;;;:::i;44712:287::-;;;;;;;;;;-1:-1:-1;44712:287:0;;;;;:::i;:::-;;:::i;31905:164::-;;;;;;;;;;-1:-1:-1;31905:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31905:164;37855:244;;;;;;;;;;-1:-1:-1;37855:244:0;;;;;:::i;:::-;;:::i;40884:89::-;;;;;;;;;;-1:-1:-1;40884:89:0;;;;;:::i;:::-;;:::i;40456:94::-;;;;;;;;;;-1:-1:-1;40456:94:0;;;;;:::i;:::-;;:::i;39383:36::-;;;;;;;;;;-1:-1:-1;39383:36:0;;;;;:::i;:::-;;:::i;27601:100::-;27655:13;27688:5;27681:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27601:100;:::o;31246:221::-;31322:7;31350:16;31358:7;31350;:16::i;:::-;31342:73;;;;-1:-1:-1;;;31342:73:0;;15043:2:1;31342:73:0;;;15025:21:1;15082:2;15062:18;;;15055:30;15121:34;15101:18;;;15094:62;-1:-1:-1;;;15172:18:1;;;15165:42;15224:19;;31342:73:0;;;;;;;;;-1:-1:-1;31435:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31435:24:0;;31246:221::o;30776:404::-;30857:13;30873:23;30888:7;30873:14;:23::i;:::-;30857:39;;30921:5;-1:-1:-1;;;;;30915:11:0;:2;-1:-1:-1;;;;;30915:11:0;;;30907:57;;;;-1:-1:-1;;;30907:57:0;;16643:2:1;30907:57:0;;;16625:21:1;16682:2;16662:18;;;16655:30;16721:34;16701:18;;;16694:62;-1:-1:-1;;;16772:18:1;;;16765:31;16813:19;;30907:57:0;16441:397:1;30907:57:0;191:10;-1:-1:-1;;;;;30985:21:0;;;;:69;;-1:-1:-1;31010:44:0;31034:5;191:10;31905:164;:::i;31010:44::-;30977:161;;;;-1:-1:-1;;;30977:161:0;;13041:2:1;30977:161:0;;;13023:21:1;13080:2;13060:18;;;13053:30;13119:34;13099:18;;;13092:62;13190:26;13170:18;;;13163:54;13234:19;;30977:161:0;12839:420:1;30977:161:0;31151:21;31160:2;31164:7;31151:8;:21::i;:::-;30846:334;30776:404;;:::o;40672:99::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40738:16:::1;:25:::0;40672:99::o;39310:66::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39310:66:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40136:92::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40202:9:::1;:18:::0;40136:92::o;30254:211::-;30315:7;30436:21;:12;:19;:21::i;:::-;30429:28;;30254:211;:::o;41351:1607::-;41440:9;;;;41432:34;;;;-1:-1:-1;;;41432:34:0;;9757:2:1;41432:34:0;;;9739:21:1;9796:2;9776:18;;;9769:30;-1:-1:-1;;;9815:18:1;;;9808:42;9867:18;;41432:34:0;9555:336:1;41432:34:0;41514:12;;41485:26;41503:7;41485:13;:11;:13::i;:::-;:17;;:26::i;:::-;:41;41477:69;;;;-1:-1:-1;;;41477:69:0;;11929:2:1;41477:69:0;;;11911:21:1;11968:2;11948:18;;;11941:30;-1:-1:-1;;;11987:18:1;;;11980:45;12042:18;;41477:69:0;11727:339:1;41477:69:0;41578:48;41599:12;;:26;;41618:7;41599:26;;;41614:1;41599:26;41578:16;;;:20;:48::i;:::-;41565:9;:61;;41557:70;;;;;;41643:12;;;;41640:278;;;41679:7;-1:-1:-1;;;;;41671:25:0;:60;41697:33;41726:3;41697:24;41711:9;;41697;:13;;:24;;;;:::i;:::-;:28;;:33::i;:::-;41671:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41754:16;;;;;;;;;-1:-1:-1;;;;;41754:16:0;-1:-1:-1;;;;;41746:34:0;:72;41781:36;41813:3;41781:27;41795:12;;41781:9;:13;;:27;;;;:::i;:36::-;41746:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41640:278;;;41857:16;;41849:45;;-1:-1:-1;;;;;41857:16:0;;;;;;;;;41884:9;41849:45;;;;;;;;;41884:9;41857:16;41849:45;;;;;;;;;;;;;;;;;;;;;41640:278;41942:9;41938:1013;41961:7;41957:1;:11;41938:1013;;;42022:125;;;;;;;;;;;;;;;-1:-1:-1;;;42022:125:0;;;;;;42096:10;42022:125;;;;;;;;41989:30;42022:125;;;;;;42164:12;:31;;;;;;;;;;;;;;42022:125;;;;42164:31;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;42164:31:0;;;;;;;;;;-1:-1:-1;;;;;;42164:31:0;-1:-1:-1;;;;;42164:31:0;;;;;;;;;;;;;;;;;;;;42239:12;:19;-1:-1:-1;;42239:23:0;;;:::i;:::-;42212:50;;42313:16;42277:12;42290:16;42277:30;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:52;;;;42344:21;42368:9;:7;:9::i;:::-;42344:33;;42392:26;42445:7;42454:27;:16;:25;:27::i;:::-;42484:13;42428:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42392:107;;42556:12;42514;42527:16;42514:30;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;:54;;;;;;;;;;;;:::i;:::-;;42617:16;42583:17;42601:12;42583:31;;;;;;:::i;:::-;;;;;;;;;;;;;;:50;42648:35;42654:10;42666:16;42648:5;:35::i;:::-;42721:10;42700:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;;42782:10:0;42749:14;42766:27;;;:15;:27;;;;;;;;:34;;42815:50;;;;;;;;;;;;;;;;42880:32;;;:20;:32;;;;;:50;;;;;;;;;;:59;;;;-1:-1:-1;41970:3:0;;-1:-1:-1;41970:3:0;;-1:-1:-1;41970:3:0;;:::i;:::-;;;;41938:1013;;32136:313;32297:41;191:10;32316:12;32330:7;32297:18;:41::i;:::-;32289:103;;;;-1:-1:-1;;;32289:103:0;;;;;;;:::i;:::-;32413:28;32423:4;32429:2;32433:7;32413:9;:28::i;41077:134::-;41151:7;41177:17;41195:7;41177:26;;;;;;:::i;:::-;;;;;;;;;;;;;;41170:33;;41077:134;;;:::o;30016:162::-;-1:-1:-1;;;;;30140:20:0;;30113:7;30140:20;;;:13;:20;;;;;:30;;30164:5;30140:23;:30::i;:::-;30133:37;;30016:162;;;;;:::o;39918:107::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;39966:51:::1;::::0;39974:10:::1;::::0;39995:21:::1;39966:51:::0;::::1;;;::::0;::::1;::::0;;;39995:21;39974:10;39966:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39918:107::o:0;32520:258::-;32632:41;191:10;32651:12;95:115;32632:41;32624:103;;;;-1:-1:-1;;;32624:103:0;;;;;;;:::i;:::-;32738:32;32752:4;32758:2;32762:7;32738:13;:32::i;45651:390::-;45738:16;45772:23;45798:17;45808:6;45798:9;:17::i;:::-;45772:43;;45826:25;45868:15;45854:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45854:30:0;;45826:58;;45900:9;45895:113;45915:15;45911:1;:19;45895:113;;;45966:30;45986:6;45994:1;45966:19;:30::i;:::-;45952:8;45961:1;45952:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;45932:3;;;;:::i;:::-;;;;45895:113;;;-1:-1:-1;46025:8:0;45651:390;-1:-1:-1;;;45651:390:0:o;45007:636::-;45075:22;45100:33;;;:23;:33;;;;;:39;;;;45182:40;;-1:-1:-1;;;;;45182:40:0;45243:27;45235:36;;;;;;-1:-1:-1;;;;;45290:27:0;;45307:10;45290:27;;45282:36;;;;;;45350:14;45337:9;:27;;45329:36;;;;;;45378:23;45404:56;45423:36;45455:3;45423:27;45442:7;;45423:14;:18;;:27;;;;:::i;:36::-;45404:14;;:18;:56::i;:::-;45471:39;;45378:82;;-1:-1:-1;;;;;;45471:22:0;;;:39;;;;;45378:82;;45471:39;;;;45378:82;45471:22;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45533:33:0;;;;:23;:33;;;;;45526:40;;-1:-1:-1;;;;;;45526:40:0;;;;;;;;;45533:33;45526:40;;;;45533:33;45526:40;:::i;:::-;-1:-1:-1;45526:40:0;;;;;;;45577:58;;-1:-1:-1;;;45577:58:0;;:4;:58;;;6778:34:1;;;45614:10:0;6828:18:1;;;6821:43;6880:18;;;6873:34;;;45577:4:0;:21;;6713:18:1;;45577:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45064:579;;;45007:636;:::o;30542:172::-;30617:7;;30659:22;:12;30675:5;30659:15;:22::i;38859:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;38859:32:0;;;;;;;;;;;-1:-1:-1;;;;;38859:32:0;;;-1:-1:-1;38859:32:0;:::o;40779:97::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40849:19:::1;40861:6;40849:11;:19::i;40033:95::-:0;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40099:12:::1;:21:::0;;-1:-1:-1;;40099:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40033:95::o;40236:98::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40305:12:::1;:21:::0;40236:98::o;27357:177::-;27429:7;27456:70;27473:7;27456:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;40981:88::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41045:7:::1;:16:::0;40981:88::o;28976:97::-;29024:13;29057:8;29050:15;;;;;:::i;27074:221::-;27146:7;-1:-1:-1;;;;;27174:19:0;;27166:74;;;;-1:-1:-1;;;27166:74:0;;13466:2:1;27166:74:0;;;13448:21:1;13505:2;13485:18;;;13478:30;13544:34;13524:18;;;13517:62;-1:-1:-1;;;13595:18:1;;;13588:40;13645:19;;27166:74:0;13264:406:1;27166:74:0;-1:-1:-1;;;;;27258:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;37699:148::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;37806:1:::1;37790:6:::0;;37769:40:::1;::::0;-1:-1:-1;;;;;37790:6:0;;::::1;::::0;37769:40:::1;::::0;37806:1;;37769:40:::1;37837:1;37820:19:::0;;-1:-1:-1;;;;;;37820:19:0::1;::::0;;37699:148::o;42966:1173::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;43074:12:::1;;43045:26;43063:7;43045:13;:11;:13::i;:26::-;:41;43037:69;;;::::0;-1:-1:-1;;;43037:69:0;;11929:2:1;43037:69:0::1;::::0;::::1;11911:21:1::0;11968:2;11948:18;;;11941:30;-1:-1:-1;;;11987:18:1;;;11980:45;12042:18;;43037:69:0::1;11727:339:1::0;43037:69:0::1;43123:9;43119:1013;43142:7;43138:1;:11;43119:1013;;;43203:125;::::0;;;;;;;::::1;;::::0;::::1;::::0;;;-1:-1:-1;;;43203:125:0;;;;;;43277:10:::1;43203:125;::::0;;::::1;::::0;;;;43170:30:::1;43203:125:::0;;;;;;43345:12:::1;:31:::0;;;;::::1;::::0;;;;;;;;;43203:125;;;;43345:31:::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;43345:31:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;43345:31:0::1;-1:-1:-1::0;;;;;43345:31:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;43420:12:::1;:19:::0;-1:-1:-1;;43420:23:0::1;::::0;::::1;:::i;:::-;43393:50;;43494:16;43458:12;43471:16;43458:30;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:52;;;;43525:21;43549:9;:7;:9::i;:::-;43525:33;;43573:26;43626:7;43635:27;:16;:25;:27::i;:::-;43665:13;43609:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43573:107;;43737:12;43695;43708:16;43695:30;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;:54;;;;;;;;;;;;:::i;:::-;;43798:16;43764:17;43782:12;43764:31;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:50;43829:35:::1;43835:10;43847:16:::0;43829:5:::1;:35::i;:::-;43902:10;43881:32;::::0;;;:20:::1;:32;::::0;;;;:34;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;43963:10:0::1;43930:14;43947:27:::0;;;:15:::1;:27;::::0;;;;;;;:34;;43996:50:::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;;44061:32;;;:20:::1;:32:::0;;;;;:50;;;;;;;;;;:59;;;;-1:-1:-1;43151:3:0;;-1:-1:-1;43151:3:0::1;::::0;-1:-1:-1;43151:3:0;::::1;:::i;:::-;;;;43119:1013;;;;42966:1173:::0;:::o;40342:106::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40415:16:::1;:25:::0;;-1:-1:-1;;;;;40415:25:0;;::::1;;;-1:-1:-1::0;;;;;;40415:25:0;;::::1;::::0;;;::::1;::::0;;40342:106::o;27770:104::-;27826:13;27859:7;27852:14;;;;;:::i;31539:295::-;-1:-1:-1;;;;;31642:24:0;;191:10;31642:24;;31634:62;;;;-1:-1:-1;;;31634:62:0;;11216:2:1;31634:62:0;;;11198:21:1;11255:2;11235:18;;;11228:30;11294:27;11274:18;;;11267:55;11339:18;;31634:62:0;11014:349:1;31634:62:0;191:10;31709:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31709:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31709:53:0;;;;;;;;;;31778:48;;8075:41:1;;;31709:42:0;;191:10;31778:48;;8048:18:1;31778:48:0;;;;;;;31539:295;;:::o;38572:44::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38623:37::-;;;;;;;:::i;44147:557::-;44227:8;26854:10;26833:17;44227:8;26833:7;:17::i;:::-;-1:-1:-1;;;;;26833:31:0;;26825:40;;;;;;44308:1:::1;44256:33:::0;;;:23:::1;:33;::::0;;;;:40;-1:-1:-1;;;;;44256:40:0::1;:54:::0;44248:63:::1;;;::::0;::::1;;44324:37;44364:161;;;;;;;;44401:10;-1:-1:-1::0;;;;;44364:161:0::1;;;;;44436:6;44364:161;;;;44459:12;44472:8;44459:22;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;44364:161;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;44364:161:0;;;-1:-1:-1;;44364:161:0::1;::::0;;::::1;::::0;;;-1:-1:-1;44538:33:0;;;:23:::1;:33:::0;;;;;;;:51;;;;-1:-1:-1;;;;;;44538:51:0::1;-1:-1:-1::0;;;;;44538:51:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;44538:51:0;::::1;::::0;;;::::1;::::0;;;;;-1:-1:-1;44538:51:0;;:33;;:51:::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;44600:32;44616:4;44623:8;44600:7;:32::i;:::-;44643:53;44660:10;44680:4;44687:8;44643:16;:53::i;:::-;44237:467;44147:557:::0;;;:::o;39428:482::-;39546:13;39595:16;39603:7;39595;:16::i;:::-;39577:105;;;;-1:-1:-1;;;39577:105:0;;16227:2:1;39577:105:0;;;16209:21:1;16266:2;16246:18;;;16239:30;16305:34;16285:18;;;16278:62;-1:-1:-1;;;16356:18:1;;;16349:45;16411:19;;39577:105:0;16025:411:1;39577:105:0;39703:28;39734:9;:7;:9::i;:::-;39703:40;;39792:1;39767:14;39761:28;:32;:141;;;;;;;;;;;;;;;;;39833:14;39849:18;:7;:16;:18::i;:::-;39869:13;39816:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39761:141;39754:148;39428:482;-1:-1:-1;;;39428:482:0:o;41219:124::-;-1:-1:-1;;;;;41316:19:0;;;;;;:11;:19;;;;;;;;;41309:26;;;;;;;;;;;;;;;;;41280:16;;41309:26;;;41316:19;41309:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41219:124;;;:::o;40558:106::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40634:22;;::::1;::::0;:13:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;29081:131::-:0;29139:13;29172:32;:21;:12;:19;:21::i;:::-;:30;:32::i;44712:287::-;44786:33;;;;:23;:33;;;;;:40;-1:-1:-1;;;;;44786:40:0;44830:10;44786:54;44778:63;;;;;;44889:33;;;;:23;:33;;;;;;;:40;44852:88;;-1:-1:-1;;;44852:88:0;;:4;:88;;;6778:34:1;;;-1:-1:-1;;;;;44889:40:0;;;6828:18:1;;;6821:43;6880:18;;;6873:34;;;44852:21:0;;6713:18:1;;44852:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;44958:33:0;;;;:23;:33;;;;;44951:40;;-1:-1:-1;;;;;;44951:40:0;;;;;;;;;44958:33;-1:-1:-1;44951:40:0;;;;44958:33;44951:40;:::i;:::-;;;;;;;;;44712:287;:::o;37855:244::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37944:22:0;::::1;37936:73;;;::::0;-1:-1:-1;;;37936:73:0;;9350:2:1;37936:73:0::1;::::0;::::1;9332:21:1::0;9389:2;9369:18;;;9362:30;9428:34;9408:18;;;9401:62;-1:-1:-1;;;9479:18:1;;;9472:36;9525:19;;37936:73:0::1;9148:402:1::0;37936:73:0::1;38046:6;::::0;;38025:38:::1;::::0;-1:-1:-1;;;;;38025:38:0;;::::1;::::0;38046:6;::::1;::::0;38025:38:::1;::::0;::::1;38074:6;:17:::0;;-1:-1:-1;;;;;;38074:17:0::1;-1:-1:-1::0;;;;;38074:17:0;;;::::1;::::0;;;::::1;::::0;;37855:244::o;40884:89::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40947:9:::1;:18:::0;;-1:-1:-1;;40947:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40884:89::o;40456:94::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40526:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;39383:36::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39383:36:0;;;;-1:-1:-1;39383:36:0;;;;;;:::i;32924:127::-;32989:4;33013:30;:12;33035:7;33013:21;:30::i;36866:183::-;36932:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36932:29:0;-1:-1:-1;;;;;36932:29:0;;;;;;;;:24;;36986:23;36932:24;36986:14;:23::i;:::-;-1:-1:-1;;;;;36977:46:0;;;;;;;;;;;36866:183;;:::o;21082:123::-;21151:7;21178:19;21186:3;17744:19;;17661:110;3590:179;3648:7;;3680:5;3684:1;3680;:5;:::i;:::-;3668:17;;3709:1;3704;:6;;3696:46;;;;-1:-1:-1;;;3696:46:0;;10455:2:1;3696:46:0;;;10437:21:1;10494:2;10474:18;;;10467:30;10533:29;10513:18;;;10506:57;10580:18;;3696:46:0;10253:351:1;3943:220:0;4001:7;4025:6;4021:20;;-1:-1:-1;4040:1:0;4033:8;;4021:20;4052:9;4064:5;4068:1;4064;:5;:::i;:::-;4052:17;-1:-1:-1;4097:1:0;4088:5;4092:1;4052:17;4088:5;:::i;:::-;:10;4080:56;;;;-1:-1:-1;;;4080:56:0;;14641:2:1;4080:56:0;;;14623:21:1;14680:2;14660:18;;;14653:30;14719:34;14699:18;;;14692:62;-1:-1:-1;;;14770:18:1;;;14763:31;14811:19;;4080:56:0;14439:397:1;4171:153:0;4229:7;4261:1;4257;:5;4249:44;;;;-1:-1:-1;;;4249:44:0;;12686:2:1;4249:44:0;;;12668:21:1;12725:2;12705:18;;;12698:30;12764:28;12744:18;;;12737:56;12810:18;;4249:44:0;12484:350:1;4249:44:0;4311:5;4315:1;4311;:5;:::i;22669:723::-;22725:13;22946:10;22942:53;;-1:-1:-1;;22973:10:0;;;;;;;;;;;;-1:-1:-1;;;22973:10:0;;;;;22669:723::o;22942:53::-;23020:5;23005:12;23061:78;23068:9;;23061:78;;23094:8;;;;:::i;:::-;;-1:-1:-1;23117:10:0;;-1:-1:-1;23125:2:0;23117:10;;:::i;:::-;;;23061:78;;;23149:19;23181:6;23171:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23171:17:0;;23149:39;;23199:154;23206:10;;23199:154;;23233:11;23243:1;23233:11;;:::i;:::-;;-1:-1:-1;23302:10:0;23310:2;23302:5;:10;:::i;:::-;23289:24;;:2;:24;:::i;:::-;23276:39;;23259:6;23266;23259:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;23259:56:0;;;;;;;;-1:-1:-1;23330:11:0;23339:2;23330:11;;:::i;:::-;;;23199:154;;;23377:6;22669:723;-1:-1:-1;;;;22669:723:0:o;33534:529::-;-1:-1:-1;;;;;33614:16:0;;33606:61;;;;-1:-1:-1;;;33606:61:0;;14280:2:1;33606:61:0;;;14262:21:1;;;14299:18;;;14292:30;14358:34;14338:18;;;14331:62;14410:18;;33606:61:0;14078:356:1;33606:61:0;33687:16;33695:7;33687;:16::i;:::-;33686:17;33678:58;;;;-1:-1:-1;;;33678:58:0;;10098:2:1;33678:58:0;;;10080:21:1;10137:2;10117:18;;;10110:30;10176;10156:18;;;10149:58;10224:18;;33678:58:0;9896:352:1;33678:58:0;33775:9;:16;;33749:23;;;;:14;:23;;;;;;;;:42;;;33802:23;;;;;;;;;;;;;-1:-1:-1;;;;;33896:17:0;;;;:13;:17;;;;:30;;33749:23;33896:21;:30::i;:::-;;33939:23;33950:2;33954:7;33939:10;:23::i;:::-;33975:29;:12;33992:7;34001:2;33975:16;:29::i;:::-;-1:-1:-1;34022:33:0;;34047:7;;-1:-1:-1;;;;;34022:33:0;;;34039:1;;34022:33;;34039:1;;34022:33;33534:529;;:::o;33061:355::-;33154:4;33179:16;33187:7;33179;:16::i;:::-;33171:73;;;;-1:-1:-1;;;33171:73:0;;12273:2:1;33171:73:0;;;12255:21:1;12312:2;12292:18;;;12285:30;12351:34;12331:18;;;12324:62;-1:-1:-1;;;12402:18:1;;;12395:42;12454:19;;33171:73:0;12071:408:1;33171:73:0;33255:13;33271:23;33286:7;33271:14;:23::i;:::-;33255:39;;33324:5;-1:-1:-1;;;;;33313:16:0;:7;-1:-1:-1;;;;;33313:16:0;;:51;;;;33357:7;-1:-1:-1;;;;;33333:31:0;:20;33345:7;33333:11;:20::i;:::-;-1:-1:-1;;;;;33333:31:0;;33313:51;:94;;;-1:-1:-1;;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33368:39;31905:164;34672:684;34797:4;-1:-1:-1;;;;;34770:31:0;:23;34785:7;34770:14;:23::i;:::-;-1:-1:-1;;;;;34770:31:0;;34762:85;;;;-1:-1:-1;;;34762:85:0;;15817:2:1;34762:85:0;;;15799:21:1;15856:2;15836:18;;;15829:30;15895:34;15875:18;;;15868:62;-1:-1:-1;;;15946:18:1;;;15939:39;15995:19;;34762:85:0;15615:405:1;34762:85:0;-1:-1:-1;;;;;34884:16:0;;34876:65;;;;-1:-1:-1;;;34876:65:0;;10811:2:1;34876:65:0;;;10793:21:1;10850:2;10830:18;;;10823:30;10889:34;10869:18;;;10862:62;-1:-1:-1;;;10940:18:1;;;10933:34;10984:19;;34876:65:0;10609:400:1;34876:65:0;35058:29;35075:1;35079:7;35058:8;:29::i;:::-;-1:-1:-1;;;;;35100:19:0;;;;;;:13;:19;;;;;:35;;35127:7;35100:26;:35::i;:::-;-1:-1:-1;;;;;;35146:17:0;;;;;;:13;:17;;;;;:30;;35168:7;35146:21;:30::i;:::-;;35189;35205:4;35211:7;35189:15;:30::i;:::-;35230:23;35241:2;35245:7;35230:10;:23::i;:::-;35274:29;:12;35291:7;35300:2;35274:16;:29::i;:::-;;35340:7;35336:2;-1:-1:-1;;;;;35321:27:0;35330:4;-1:-1:-1;;;;;35321:27:0;;;;;;;;;;;34672:684;;;:::o;14165:137::-;14236:7;14271:22;14275:3;14287:5;14271:3;:22::i;3777:158::-;3835:7;3868:1;3863;:6;;3855:49;;;;-1:-1:-1;;;3855:49:0;;11570:2:1;3855:49:0;;;11552:21:1;11609:2;11589:18;;;11582:30;11648:32;11628:18;;;11621:60;11698:18;;3855:49:0;11368:354:1;3855:49:0;3922:5;3926:1;3922;:5;:::i;21215:236::-;21295:7;;;;21355:22;21359:3;21371:5;21355:3;:22::i;:::-;21324:53;;;;-1:-1:-1;21215:236:0;-1:-1:-1;;;;;21215:236:0:o;35589:100::-;35662:19;;;;:8;;:19;;;;;:::i;22223:213::-;22330:7;22381:44;22386:3;22406;22412:12;22381:4;:44::i;20843:151::-;20927:4;17536:17;;;:12;;;:17;;;;;;:22;;20951:35;17441:125;13281:131;13348:4;13372:32;13377:3;13397:5;13372:4;:32::i;29220:207::-;-1:-1:-1;;;;;29308:16:0;;;29291:14;29308:16;;;:11;:16;;;;;;;;:23;;29342:31;;;;;;;;;;;;;;;;29384:26;;;:16;:26;;;;;:35;29220:207::o;20266:185::-;20355:4;20379:64;20384:3;20404;-1:-1:-1;;;;;20418:23:0;;20379:4;:64::i;13588:137::-;13658:4;13682:35;13690:3;13710:5;13682:7;:35::i;29435:499::-;29513:18;29534:26;;;:16;:26;;;;;;;;;-1:-1:-1;;;;;29596:18:0;;;;:11;:18;;;;;:25;29534:26;;29513:18;29596:32;;29626:1;29596:29;:32::i;:::-;-1:-1:-1;;;;;29659:18:0;;29639:17;29659:18;;;:11;:18;;;;;:34;;29571:57;;-1:-1:-1;29639:17:0;;29571:57;;29659:34;;;;;;:::i;:::-;;;;;;;;;29639:54;;29739:9;29706:11;:18;29718:5;-1:-1:-1;;;;;29706:18:0;-1:-1:-1;;;;;29706:18:0;;;;;;;;;;;;29725:10;29706:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:42;;;;-1:-1:-1;;;;;29759:18:0;;;;:11;:18;;;;;;:34;;29778:14;;29759:34;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;-1:-1:-1;;;;;29810:18:0;;;;:11;:18;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;29810:24:0;;;;;;;;;;;;29845:26;;;:16;:26;;;;;;;:30;;;29886:27;;;;;;:40;-1:-1:-1;;29435:499:0:o;10877:204::-;10972:18;;10944:7;;10972:26;-1:-1:-1;10964:73:0;;;;-1:-1:-1;;;10964:73:0;;8947:2:1;10964:73:0;;;8929:21:1;8986:2;8966:18;;;8959:30;9025:34;9005:18;;;8998:62;-1:-1:-1;;;9076:18:1;;;9069:32;9118:19;;10964:73:0;8745:398:1;10964:73:0;11055:3;:11;;11067:5;11055:18;;;;;;;;:::i;:::-;;;;;;;;;11048:25;;10877:204;;;;:::o;18126:279::-;18230:19;;18193:7;;;;18230:27;-1:-1:-1;18222:74:0;;;;-1:-1:-1;;;18222:74:0;;13877:2:1;18222:74:0;;;13859:21:1;13916:2;13896:18;;;13889:30;13955:34;13935:18;;;13928:62;-1:-1:-1;;;14006:18:1;;;13999:32;14048:19;;18222:74:0;13675:398:1;18222:74:0;18309:22;18334:3;:12;;18347:5;18334:19;;;;;;;;:::i;:::-;;;;;;;;;;;18309:44;;18372:5;:10;;;18384:5;:12;;;18364:33;;;;;18126:279;;;;;:::o;19623:319::-;19717:7;19756:17;;;:12;;;:17;;;;;;19807:12;19792:13;19784:36;;;;-1:-1:-1;;;19784:36:0;;;;;;;;:::i;:::-;-1:-1:-1;19874:3:0;19887:12;19898:1;19887:8;:12;:::i;:::-;19874:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;19867:40;;;19623:319;;;;;:::o;9165:414::-;9228:4;17536:17;;;:12;;;:17;;;;;;9245:327;;-1:-1:-1;9288:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;9471:18;;9449:19;;;:12;;;:19;;;;;;:40;;;;9504:11;;9245:327;-1:-1:-1;9555:5:0;9548:12;;14941:692;15017:4;15152:17;;;:12;;;:17;;;;;;15186:13;15182:444;;-1:-1:-1;;15271:38:0;;;;;;;;;;;;;;;;;;15253:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;15468:19;;15448:17;;;:12;;;:17;;;;;;;:39;15502:11;;15182:444;15582:5;15546:3;15559:12;15570:1;15559:8;:12;:::i;:::-;15546:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;15609:5;15602:12;;;;;9587:1026;9653:4;9792:19;;;:12;;;:19;;;;;;9828:15;;9824:782;;9900:21;9924:14;9937:1;9924:10;:14;:::i;:::-;9973:18;;9900:38;;-1:-1:-1;9953:17:0;;9973:22;;9994:1;;9973:22;:::i;:::-;9953:42;;10012:17;10032:3;:11;;10044:9;10032:22;;;;;;;;:::i;:::-;;;;;;;;;10012:42;;10178:9;10149:3;:11;;10161:13;10149:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;10281:17;:13;10297:1;10281:17;:::i;:::-;10255:23;;;;:12;;;:23;;;;;:43;10407:17;;10255:3;;10407:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10502:3;:12;;:19;10515:5;10502:19;;;;;;;;;;;10495:26;;;10545:4;10538:11;;;;;;;;9824:782;10589:5;10582:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:186;416:6;469:2;457:9;448:7;444:23;440:32;437:52;;;485:1;482;475:12;437:52;508:29;527:9;508:29;:::i;548:260::-;616:6;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;716:29;735:9;716:29;:::i;:::-;706:39;;764:38;798:2;787:9;783:18;764:38;:::i;:::-;754:48;;548:260;;;;;:::o;813:328::-;890:6;898;906;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;998:29;1017:9;998:29;:::i;:::-;988:39;;1046:38;1080:2;1069:9;1065:18;1046:38;:::i;:::-;1036:48;;1131:2;1120:9;1116:18;1103:32;1093:42;;813:328;;;;;:::o;1146:254::-;1211:6;1219;1272:2;1260:9;1251:7;1247:23;1243:32;1240:52;;;1288:1;1285;1278:12;1240:52;1311:29;1330:9;1311:29;:::i;:::-;1301:39;;1359:35;1390:2;1379:9;1375:18;1359:35;:::i;1405:254::-;1473:6;1481;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1573:29;1592:9;1573:29;:::i;:::-;1563:39;1649:2;1634:18;;;;1621:32;;-1:-1:-1;;;1405:254:1:o;1664:180::-;1720:6;1773:2;1761:9;1752:7;1748:23;1744:32;1741:52;;;1789:1;1786;1779:12;1741:52;1812:26;1828:9;1812:26;:::i;1849:286::-;1907:6;1960:2;1948:9;1939:7;1935:23;1931:32;1928:52;;;1976:1;1973;1966:12;1928:52;2002:23;;-1:-1:-1;;;;;;2054:32:1;;2044:43;;2034:71;;2101:1;2098;2091:12;2140:922;2209:6;2262:2;2250:9;2241:7;2237:23;2233:32;2230:52;;;2278:1;2275;2268:12;2230:52;2318:9;2305:23;2347:18;2388:2;2380:6;2377:14;2374:34;;;2404:1;2401;2394:12;2374:34;2442:6;2431:9;2427:22;2417:32;;2487:7;2480:4;2476:2;2472:13;2468:27;2458:55;;2509:1;2506;2499:12;2458:55;2545:2;2532:16;2567:2;2563;2560:10;2557:36;;;2573:18;;:::i;:::-;2648:2;2642:9;2616:2;2702:13;;-1:-1:-1;;2698:22:1;;;2722:2;2694:31;2690:40;2678:53;;;2746:18;;;2766:22;;;2743:46;2740:72;;;2792:18;;:::i;:::-;2832:10;2828:2;2821:22;2867:2;2859:6;2852:18;2907:7;2902:2;2897;2893;2889:11;2885:20;2882:33;2879:53;;;2928:1;2925;2918:12;2879:53;2984:2;2979;2975;2971:11;2966:2;2958:6;2954:15;2941:46;3029:1;3007:15;;;3024:2;3003:24;2996:35;;;;-1:-1:-1;3011:6:1;2140:922;-1:-1:-1;;;;;2140:922:1:o;3067:180::-;3126:6;3179:2;3167:9;3158:7;3154:23;3150:32;3147:52;;;3195:1;3192;3185:12;3147:52;-1:-1:-1;3218:23:1;;3067:180;-1:-1:-1;3067:180:1:o;3252:254::-;3320:6;3328;3381:2;3369:9;3360:7;3356:23;3352:32;3349:52;;;3397:1;3394;3387:12;3349:52;3433:9;3420:23;3410:33;;3462:38;3496:2;3485:9;3481:18;3462:38;:::i;3511:248::-;3579:6;3587;3640:2;3628:9;3619:7;3615:23;3611:32;3608:52;;;3656:1;3653;3646:12;3608:52;-1:-1:-1;;3679:23:1;;;3749:2;3734:18;;;3721:32;;-1:-1:-1;3511:248:1:o;3764:258::-;3806:3;3844:5;3838:12;3871:6;3866:3;3859:19;3887:63;3943:6;3936:4;3931:3;3927:14;3920:4;3913:5;3909:16;3887:63;:::i;:::-;4004:2;3983:15;-1:-1:-1;;3979:29:1;3970:39;;;;4011:4;3966:50;;3764:258;-1:-1:-1;;3764:258:1:o;4027:276::-;4158:3;4196:6;4190:13;4212:53;4258:6;4253:3;4246:4;4238:6;4234:17;4212:53;:::i;:::-;4281:16;;;;;4027:276;-1:-1:-1;;4027:276:1:o;4308:1527::-;4532:3;4570:6;4564:13;4596:4;4609:51;4653:6;4648:3;4643:2;4635:6;4631:15;4609:51;:::i;:::-;4723:13;;4682:16;;;;4745:55;4723:13;4682:16;4767:15;;;4745:55;:::i;:::-;4889:13;;4822:20;;;4862:1;;4949;4971:18;;;;5024;;;;5051:93;;5129:4;5119:8;5115:19;5103:31;;5051:93;5192:2;5182:8;5179:16;5159:18;5156:40;5153:167;;;-1:-1:-1;;;5219:33:1;;5275:4;5272:1;5265:15;5305:4;5226:3;5293:17;5153:167;5336:18;5363:110;;;;5487:1;5482:328;;;;5329:481;;5363:110;-1:-1:-1;;5398:24:1;;5384:39;;5443:20;;;;-1:-1:-1;5363:110:1;;5482:328;17516:1;17509:14;;;17553:4;17540:18;;5577:1;5591:169;5605:8;5602:1;5599:15;5591:169;;;5687:14;;5672:13;;;5665:37;5730:16;;;;5622:10;;5591:169;;;5595:3;;5791:8;5784:5;5780:20;5773:27;;5329:481;-1:-1:-1;5826:3:1;;4308:1527;-1:-1:-1;;;;;;;;;;;4308:1527:1:o;6048:477::-;6326:1;6322;6317:3;6313:11;6309:19;6301:6;6297:32;6286:9;6279:51;6366:6;6361:2;6350:9;6346:18;6339:34;6409:3;6404:2;6393:9;6389:18;6382:31;6260:4;6430:46;6471:3;6460:9;6456:19;6448:6;6430:46;:::i;:::-;6422:54;;6512:6;6507:2;6496:9;6492:18;6485:34;6048:477;;;;;;;:::o;7298:632::-;7469:2;7521:21;;;7591:13;;7494:18;;;7613:22;;;7440:4;;7469:2;7692:15;;;;7666:2;7651:18;;;7440:4;7735:169;7749:6;7746:1;7743:13;7735:169;;;7810:13;;7798:26;;7879:15;;;;7844:12;;;;7771:1;7764:9;7735:169;;;-1:-1:-1;7921:3:1;;7298:632;-1:-1:-1;;;;;;7298:632:1:o;8127:220::-;8276:2;8265:9;8258:21;8239:4;8296:45;8337:2;8326:9;8322:18;8314:6;8296:45;:::i;8352:388::-;8557:2;8546:9;8539:21;8520:4;8577:45;8618:2;8607:9;8603:18;8595:6;8577:45;:::i;:::-;-1:-1:-1;;;;;8658:32:1;;;;8653:2;8638:18;;8631:60;-1:-1:-1;8722:2:1;8707:18;8700:34;8569:53;8352:388;-1:-1:-1;8352:388:1:o;15254:356::-;15456:2;15438:21;;;15475:18;;;15468:30;15534:34;15529:2;15514:18;;15507:62;15601:2;15586:18;;15254:356::o;16843:413::-;17045:2;17027:21;;;17084:2;17064:18;;;17057:30;17123:34;17118:2;17103:18;;17096:62;-1:-1:-1;;;17189:2:1;17174:18;;17167:47;17246:3;17231:19;;16843:413::o;17569:128::-;17609:3;17640:1;17636:6;17633:1;17630:13;17627:39;;;17646:18;;:::i;:::-;-1:-1:-1;17682:9:1;;17569:128::o;17702:120::-;17742:1;17768;17758:35;;17773:18;;:::i;:::-;-1:-1:-1;17807:9:1;;17702:120::o;17827:168::-;17867:7;17933:1;17929;17925:6;17921:14;17918:1;17915:21;17910:1;17903:9;17896:17;17892:45;17889:71;;;17940:18;;:::i;:::-;-1:-1:-1;17980:9:1;;17827:168::o;18000:125::-;18040:4;18068:1;18065;18062:8;18059:34;;;18073:18;;:::i;:::-;-1:-1:-1;18110:9:1;;18000:125::o;18130:258::-;18202:1;18212:113;18226:6;18223:1;18220:13;18212:113;;;18302:11;;;18296:18;18283:11;;;18276:39;18248:2;18241:10;18212:113;;;18343:6;18340:1;18337:13;18334:48;;;-1:-1:-1;;18378:1:1;18360:16;;18353:27;18130:258::o;18393:380::-;18472:1;18468:12;;;;18515;;;18536:61;;18590:4;18582:6;18578:17;18568:27;;18536:61;18643:2;18635:6;18632:14;18612:18;18609:38;18606:161;;;18689:10;18684:3;18680:20;18677:1;18670:31;18724:4;18721:1;18714:15;18752:4;18749:1;18742:15;18606:161;;18393:380;;;:::o;18778:135::-;18817:3;-1:-1:-1;;18838:17:1;;18835:43;;;18858:18;;:::i;:::-;-1:-1:-1;18905:1:1;18894:13;;18778:135::o;18918:112::-;18950:1;18976;18966:35;;18981:18;;:::i;:::-;-1:-1:-1;19015:9:1;;18918:112::o;19035:127::-;19096:10;19091:3;19087:20;19084:1;19077:31;19127:4;19124:1;19117:15;19151:4;19148:1;19141:15;19167:127;19228:10;19223:3;19219:20;19216:1;19209:31;19259:4;19256:1;19249:15;19283:4;19280:1;19273:15;19299:127;19360:10;19355:3;19351:20;19348:1;19341:31;19391:4;19388:1;19381:15;19415:4;19412:1;19405:15;19431:127;19492:10;19487:3;19483:20;19480:1;19473:31;19523:4;19520:1;19513:15;19547:4;19544:1;19537:15;19563:127;19624:10;19619:3;19615:20;19612:1;19605:31;19655:4;19652:1;19645:15;19679:4;19676:1;19669:15
Swarm Source
ipfs://5711d3ff57f8a55510d7b64b4c64aa386e5d84be00a4d051a7e462efae72cb0d
Loading...
Loading
Loading...
Loading
OVERVIEW
Degenerative NFTs in the Moonriver network.Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.