ERC-721
Overview
Max Total Supply
112 SSEGGS
Holders
31
Market
Fully Diluted Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
0 SSEGGSLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
SassySnakeEggs
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "./ERC721.sol"; import "./ERC721Enumerable.sol"; import "./ERC721Burnable.sol"; import "./Ownable.sol"; import "./Counters.sol"; import "./SafeMath.sol"; import "./Pausable.sol"; contract SassySnakeEggs is ERC721, ERC721Enumerable, ERC721Burnable, Ownable, Pausable { using Counters for Counters.Counter; using SafeMath for uint256; uint256 public MAX_SUPPLY; address public SKIN_ERC20_CONTRACT; string public baseUri; Counters.Counter private _eggMintCounter; mapping(address => bool) private _approvedMinters; mapping(address => uint256) public huntRewards; constructor( string memory _name, string memory _symbol, uint256 _maxSupply, address _snakeskinErc20 ) ERC721(_name, _symbol) { MAX_SUPPLY = _maxSupply; SKIN_ERC20_CONTRACT = _snakeskinErc20; } function mintEgg(address recipient, uint256 numEggs) public whenNotPaused { require(_approvedMinters[msg.sender], "You must be approved to call this function"); for (uint256 i = 0; i < numEggs; i++) { _eggMintCounter.increment(); _safeMint(recipient, _eggMintCounter.current()); } } function claimHuntRewards() public whenNotPaused { require(huntRewards[msg.sender] > 0, "No eggs to claim for function caller"); for (uint256 i = 0; i < huntRewards[msg.sender]; i++) { _eggMintCounter.increment(); _safeMint(msg.sender, _eggMintCounter.current()); } huntRewards[msg.sender] = 0; } function assignRewards(address[] memory winners, uint256[] memory amounts) public { require(_approvedMinters[msg.sender], "Sender is not approved to call this function"); for (uint256 i = 0; i < winners.length; i++) { huntRewards[winners[i]] = amounts[i]; } } function setBaseUri(string memory uri) public onlyOwner { baseUri = uri; } function approveMinter(address entity) public onlyOwner { _approvedMinters[entity] = true; } function supplyMinted() public view returns (uint256) { return _eggMintCounter.current(); } // Override requirements function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Context.sol"; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"address","name":"_snakeskinErc20","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SKIN_ERC20_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"}],"name":"approveMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"winners","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"assignRewards","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":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimHuntRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"huntRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"numEggs","type":"uint256"}],"name":"mintEgg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004897380380620048978339818101604052810190620000379190620004b5565b8383816000908051906020019062000051929190620001c8565b5080600190805190602001906200006a929190620001c8565b5050506200008d62000081620000fa60201b60201c565b6200010260201b60201c565b6000600a60146101000a81548160ff02191690831515021790555081600b8190555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620005ca565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d69062000594565b90600052602060002090601f016020900481019282620001fa576000855562000246565b82601f106200021557805160ff191683800117855562000246565b8280016001018555821562000246579182015b828111156200024557825182559160200191906001019062000228565b5b50905062000255919062000259565b5090565b5b80821115620002745760008160009055506001016200025a565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002e18262000296565b810181811067ffffffffffffffff82111715620003035762000302620002a7565b5b80604052505050565b60006200031862000278565b9050620003268282620002d6565b919050565b600067ffffffffffffffff821115620003495762000348620002a7565b5b620003548262000296565b9050602081019050919050565b60005b838110156200038157808201518184015260208101905062000364565b8381111562000391576000848401525b50505050565b6000620003ae620003a8846200032b565b6200030c565b905082815260208101848484011115620003cd57620003cc62000291565b5b620003da84828562000361565b509392505050565b600082601f830112620003fa57620003f96200028c565b5b81516200040c84826020860162000397565b91505092915050565b6000819050919050565b6200042a8162000415565b81146200043657600080fd5b50565b6000815190506200044a816200041f565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200047d8262000450565b9050919050565b6200048f8162000470565b81146200049b57600080fd5b50565b600081519050620004af8162000484565b92915050565b60008060008060808587031215620004d257620004d162000282565b5b600085015167ffffffffffffffff811115620004f357620004f262000287565b5b6200050187828801620003e2565b945050602085015167ffffffffffffffff81111562000525576200052462000287565b5b6200053387828801620003e2565b9350506040620005468782880162000439565b925050606062000559878288016200049e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005ad57607f821691505b60208210811415620005c457620005c362000565565b5b50919050565b6142bd80620005da6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806370a082311161010f5780639abc8320116100a2578063c87b56dd11610071578063c87b56dd14610544578063e985e9c514610574578063f2fde38b146105a4578063fd8b58e9146105c0576101e5565b80639abc8320146104d2578063a0bcfc7f146104f0578063a22cb4651461050c578063b88d4fde14610528576101e5565b806375ca27d7116100de57806375ca27d71461045c5780637e9845f5146104785780638da5cb5b1461049657806395d89b41146104b4576101e5565b806370a08231146103e8578063715018a61461041857806375752291146104225780637581e6db1461043e576101e5565b806332cb6b0c116101875780634d197a9b116101565780634d197a9b1461034e5780634f6ccce71461036a5780635c975abb1461039a5780636352211e146103b8576101e5565b806332cb6b0c146102ee57806342842e0e1461030c57806342966c68146103285780634b4170bc14610344576101e5565b8063095ea7b3116101c3578063095ea7b31461026857806318160ddd1461028457806323b872dd146102a25780632f745c59146102be576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612a4e565b6105f0565b6040516102119190612a96565b60405180910390f35b610222610602565b60405161022f9190612b4a565b60405180910390f35b610252600480360381019061024d9190612ba2565b610694565b60405161025f9190612c10565b60405180910390f35b610282600480360381019061027d9190612c57565b610719565b005b61028c610831565b6040516102999190612ca6565b60405180910390f35b6102bc60048036038101906102b79190612cc1565b61083e565b005b6102d860048036038101906102d39190612c57565b61089e565b6040516102e59190612ca6565b60405180910390f35b6102f6610943565b6040516103039190612ca6565b60405180910390f35b61032660048036038101906103219190612cc1565b610949565b005b610342600480360381019061033d9190612ba2565b610969565b005b61034c6109c5565b005b61036860048036038101906103639190612d14565b610b51565b005b610384600480360381019061037f9190612ba2565b610c28565b6040516103919190612ca6565b60405180910390f35b6103a2610c99565b6040516103af9190612a96565b60405180910390f35b6103d260048036038101906103cd9190612ba2565b610cb0565b6040516103df9190612c10565b60405180910390f35b61040260048036038101906103fd9190612d14565b610d62565b60405161040f9190612ca6565b60405180910390f35b610420610e1a565b005b61043c60048036038101906104379190612c57565b610ea2565b005b610446610fb6565b6040516104539190612c10565b60405180910390f35b61047660048036038101906104719190612f4c565b610fdc565b005b610480611104565b60405161048d9190612ca6565b60405180910390f35b61049e611115565b6040516104ab9190612c10565b60405180910390f35b6104bc61113f565b6040516104c99190612b4a565b60405180910390f35b6104da6111d1565b6040516104e79190612b4a565b60405180910390f35b61050a60048036038101906105059190613079565b61125f565b005b610526600480360381019061052191906130ee565b6112f5565b005b610542600480360381019061053d91906131cf565b611476565b005b61055e60048036038101906105599190612ba2565b6114d8565b60405161056b9190612b4a565b60405180910390f35b61058e60048036038101906105899190613252565b61157f565b60405161059b9190612a96565b60405180910390f35b6105be60048036038101906105b99190612d14565b611613565b005b6105da60048036038101906105d59190612d14565b61170b565b6040516105e79190612ca6565b60405180910390f35b60006105fb82611723565b9050919050565b606060008054610611906132c1565b80601f016020809104026020016040519081016040528092919081815260200182805461063d906132c1565b801561068a5780601f1061065f5761010080835404028352916020019161068a565b820191906000526020600020905b81548152906001019060200180831161066d57829003601f168201915b5050505050905090565b600061069f8261179d565b6106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d590613365565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072482610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c906133f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107b4611809565b73ffffffffffffffffffffffffffffffffffffffff1614806107e357506107e2816107dd611809565b61157f565b5b610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081990613489565b60405180910390fd5b61082c8383611811565b505050565b6000600880549050905090565b61084f610849611809565b826118ca565b61088e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108859061351b565b60405180910390fd5b6108998383836119a8565b505050565b60006108a983610d62565b82106108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e1906135ad565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b61096483838360405180602001604052806000815250611476565b505050565b61097a610974611809565b826118ca565b6109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061363f565b60405180910390fd5b6109c281611c04565b50565b6109cd610c99565b15610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a04906136ab565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a869061373d565b60405180910390fd5b60005b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811015610b0957610ae3600e611d15565b610af633610af1600e611d2b565b611d39565b8080610b019061378c565b915050610a92565b506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610b59611809565b73ffffffffffffffffffffffffffffffffffffffff16610b77611115565b73ffffffffffffffffffffffffffffffffffffffff1614610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613821565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610c32610831565b8210610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906138b3565b60405180910390fd5b60088281548110610c8757610c866138d3565b5b90600052602060002001549050919050565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613974565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca90613a06565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e22611809565b73ffffffffffffffffffffffffffffffffffffffff16610e40611115565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90613821565b60405180910390fd5b610ea06000611d57565b565b610eaa610c99565b15610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee1906136ab565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90613a98565b60405180910390fd5b60005b81811015610fb157610f8b600e611d15565b610f9e83610f99600e611d2b565b611d39565b8080610fa99061378c565b915050610f79565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613b2a565b60405180910390fd5b60005b82518110156110ff57818181518110611087576110866138d3565b5b6020026020010151601060008584815181106110a6576110a56138d3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110f79061378c565b91505061106b565b505050565b6000611110600e611d2b565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114e906132c1565b80601f016020809104026020016040519081016040528092919081815260200182805461117a906132c1565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b5050505050905090565b600d80546111de906132c1565b80601f016020809104026020016040519081016040528092919081815260200182805461120a906132c1565b80156112575780601f1061122c57610100808354040283529160200191611257565b820191906000526020600020905b81548152906001019060200180831161123a57829003601f168201915b505050505081565b611267611809565b73ffffffffffffffffffffffffffffffffffffffff16611285611115565b73ffffffffffffffffffffffffffffffffffffffff16146112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290613821565b60405180910390fd5b80600d90805190602001906112f192919061293f565b5050565b6112fd611809565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290613b96565b60405180910390fd5b8060056000611378611809565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611425611809565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161146a9190612a96565b60405180910390a35050565b611487611481611809565b836118ca565b6114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd9061351b565b60405180910390fd5b6114d284848484611e1d565b50505050565b60606114e38261179d565b611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613c28565b60405180910390fd5b600061152c611e79565b9050600081511161154c5760405180602001604052806000815250611577565b8061155684611e90565b604051602001611567929190613c84565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61161b611809565b73ffffffffffffffffffffffffffffffffffffffff16611639611115565b73ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690613821565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613d1a565b60405180910390fd5b61170881611d57565b50565b60106020528060005260406000206000915090505481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611796575061179582611ff1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661188483610cb0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118d58261179d565b611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90613dac565b60405180910390fd5b600061191f83610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061198e57508373ffffffffffffffffffffffffffffffffffffffff1661197684610694565b73ffffffffffffffffffffffffffffffffffffffff16145b8061199f575061199e818561157f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c882610cb0565b73ffffffffffffffffffffffffffffffffffffffff1614611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590613e3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590613ed0565b60405180910390fd5b611a998383836120d3565b611aa4600082611811565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af49190613ef0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4b9190613f24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611c0f82610cb0565b9050611c1d816000846120d3565b611c28600083611811565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c789190613ef0565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611d538282604051806020016040528060008152506120e3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e288484846119a8565b611e348484848461213e565b611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a90613fec565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415611ed8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fec565b600082905060005b60008214611f0a578080611ef39061378c565b915050600a82611f03919061403b565b9150611ee0565b60008167ffffffffffffffff811115611f2657611f25612d46565b5b6040519080825280601f01601f191660200182016040528015611f585781602001600182028036833780820191505090505b5090505b60008514611fe557600182611f719190613ef0565b9150600a85611f80919061406c565b6030611f8c9190613f24565b60f81b818381518110611fa257611fa16138d3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fde919061403b565b9450611f5c565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120bc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120cc57506120cb826122d5565b5b9050919050565b6120de83838361233f565b505050565b6120ed8383612453565b6120fa600084848461213e565b612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613fec565b60405180910390fd5b505050565b600061215f8473ffffffffffffffffffffffffffffffffffffffff16612621565b156122c8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612188611809565b8786866040518563ffffffff1660e01b81526004016121aa94939291906140f2565b602060405180830381600087803b1580156121c457600080fd5b505af19250505080156121f557506040513d601f19601f820116820180604052508101906121f29190614153565b60015b612278573d8060008114612225576040519150601f19603f3d011682016040523d82523d6000602084013e61222a565b606091505b50600081511415612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790613fec565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506122cd565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61234a838383612634565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561238d5761238881612639565b6123cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123cb576123ca8382612682565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240f5761240a816127ef565b61244e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461244d5761244c82826128c0565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ba906141cc565b60405180910390fd5b6124cc8161179d565b1561250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250390614238565b60405180910390fd5b612518600083836120d3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125689190613f24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268f84610d62565b6126999190613ef0565b905060006007600084815260200190815260200160002054905081811461277e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128039190613ef0565b9050600060096000848152602001908152602001600020549050600060088381548110612833576128326138d3565b5b906000526020600020015490508060088381548110612855576128546138d3565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128a4576128a3614258565b5b6001900381819060005260206000200160009055905550505050565b60006128cb83610d62565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461294b906132c1565b90600052602060002090601f01602090048101928261296d57600085556129b4565b82601f1061298657805160ff19168380011785556129b4565b828001600101855582156129b4579182015b828111156129b3578251825591602001919060010190612998565b5b5090506129c191906129c5565b5090565b5b808211156129de5760008160009055506001016129c6565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a2b816129f6565b8114612a3657600080fd5b50565b600081359050612a4881612a22565b92915050565b600060208284031215612a6457612a636129ec565b5b6000612a7284828501612a39565b91505092915050565b60008115159050919050565b612a9081612a7b565b82525050565b6000602082019050612aab6000830184612a87565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aeb578082015181840152602081019050612ad0565b83811115612afa576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b1c82612ab1565b612b268185612abc565b9350612b36818560208601612acd565b612b3f81612b00565b840191505092915050565b60006020820190508181036000830152612b648184612b11565b905092915050565b6000819050919050565b612b7f81612b6c565b8114612b8a57600080fd5b50565b600081359050612b9c81612b76565b92915050565b600060208284031215612bb857612bb76129ec565b5b6000612bc684828501612b8d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bfa82612bcf565b9050919050565b612c0a81612bef565b82525050565b6000602082019050612c256000830184612c01565b92915050565b612c3481612bef565b8114612c3f57600080fd5b50565b600081359050612c5181612c2b565b92915050565b60008060408385031215612c6e57612c6d6129ec565b5b6000612c7c85828601612c42565b9250506020612c8d85828601612b8d565b9150509250929050565b612ca081612b6c565b82525050565b6000602082019050612cbb6000830184612c97565b92915050565b600080600060608486031215612cda57612cd96129ec565b5b6000612ce886828701612c42565b9350506020612cf986828701612c42565b9250506040612d0a86828701612b8d565b9150509250925092565b600060208284031215612d2a57612d296129ec565b5b6000612d3884828501612c42565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d7e82612b00565b810181811067ffffffffffffffff82111715612d9d57612d9c612d46565b5b80604052505050565b6000612db06129e2565b9050612dbc8282612d75565b919050565b600067ffffffffffffffff821115612ddc57612ddb612d46565b5b602082029050602081019050919050565b600080fd5b6000612e05612e0084612dc1565b612da6565b90508083825260208201905060208402830185811115612e2857612e27612ded565b5b835b81811015612e515780612e3d8882612c42565b845260208401935050602081019050612e2a565b5050509392505050565b600082601f830112612e7057612e6f612d41565b5b8135612e80848260208601612df2565b91505092915050565b600067ffffffffffffffff821115612ea457612ea3612d46565b5b602082029050602081019050919050565b6000612ec8612ec384612e89565b612da6565b90508083825260208201905060208402830185811115612eeb57612eea612ded565b5b835b81811015612f145780612f008882612b8d565b845260208401935050602081019050612eed565b5050509392505050565b600082601f830112612f3357612f32612d41565b5b8135612f43848260208601612eb5565b91505092915050565b60008060408385031215612f6357612f626129ec565b5b600083013567ffffffffffffffff811115612f8157612f806129f1565b5b612f8d85828601612e5b565b925050602083013567ffffffffffffffff811115612fae57612fad6129f1565b5b612fba85828601612f1e565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612fe457612fe3612d46565b5b612fed82612b00565b9050602081019050919050565b82818337600083830152505050565b600061301c61301784612fc9565b612da6565b90508281526020810184848401111561303857613037612fc4565b5b613043848285612ffa565b509392505050565b600082601f8301126130605761305f612d41565b5b8135613070848260208601613009565b91505092915050565b60006020828403121561308f5761308e6129ec565b5b600082013567ffffffffffffffff8111156130ad576130ac6129f1565b5b6130b98482850161304b565b91505092915050565b6130cb81612a7b565b81146130d657600080fd5b50565b6000813590506130e8816130c2565b92915050565b60008060408385031215613105576131046129ec565b5b600061311385828601612c42565b9250506020613124858286016130d9565b9150509250929050565b600067ffffffffffffffff82111561314957613148612d46565b5b61315282612b00565b9050602081019050919050565b600061317261316d8461312e565b612da6565b90508281526020810184848401111561318e5761318d612fc4565b5b613199848285612ffa565b509392505050565b600082601f8301126131b6576131b5612d41565b5b81356131c684826020860161315f565b91505092915050565b600080600080608085870312156131e9576131e86129ec565b5b60006131f787828801612c42565b945050602061320887828801612c42565b935050604061321987828801612b8d565b925050606085013567ffffffffffffffff81111561323a576132396129f1565b5b613246878288016131a1565b91505092959194509250565b60008060408385031215613269576132686129ec565b5b600061327785828601612c42565b925050602061328885828601612c42565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132d957607f821691505b602082108114156132ed576132ec613292565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061334f602c83612abc565b915061335a826132f3565b604082019050919050565b6000602082019050818103600083015261337e81613342565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133e1602183612abc565b91506133ec82613385565b604082019050919050565b60006020820190508181036000830152613410816133d4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613473603883612abc565b915061347e82613417565b604082019050919050565b600060208201905081810360008301526134a281613466565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613505603183612abc565b9150613510826134a9565b604082019050919050565b60006020820190508181036000830152613534816134f8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613597602b83612abc565b91506135a28261353b565b604082019050919050565b600060208201905081810360008301526135c68161358a565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6000613629603083612abc565b9150613634826135cd565b604082019050919050565b600060208201905081810360008301526136588161361c565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613695601083612abc565b91506136a08261365f565b602082019050919050565b600060208201905081810360008301526136c481613688565b9050919050565b7f4e6f206567677320746f20636c61696d20666f722066756e6374696f6e20636160008201527f6c6c657200000000000000000000000000000000000000000000000000000000602082015250565b6000613727602483612abc565b9150613732826136cb565b604082019050919050565b600060208201905081810360008301526137568161371a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061379782612b6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137ca576137c961375d565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061380b602083612abc565b9150613816826137d5565b602082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061389d602c83612abc565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061395e602983612abc565b915061396982613902565b604082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006139f0602a83612abc565b91506139fb82613994565b604082019050919050565b60006020820190508181036000830152613a1f816139e3565b9050919050565b7f596f75206d75737420626520617070726f76656420746f2063616c6c2074686960008201527f732066756e6374696f6e00000000000000000000000000000000000000000000602082015250565b6000613a82602a83612abc565b9150613a8d82613a26565b604082019050919050565b60006020820190508181036000830152613ab181613a75565b9050919050565b7f53656e646572206973206e6f7420617070726f76656420746f2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613b14602c83612abc565b9150613b1f82613ab8565b604082019050919050565b60006020820190508181036000830152613b4381613b07565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b80601983612abc565b9150613b8b82613b4a565b602082019050919050565b60006020820190508181036000830152613baf81613b73565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c12602f83612abc565b9150613c1d82613bb6565b604082019050919050565b60006020820190508181036000830152613c4181613c05565b9050919050565b600081905092915050565b6000613c5e82612ab1565b613c688185613c48565b9350613c78818560208601612acd565b80840191505092915050565b6000613c908285613c53565b9150613c9c8284613c53565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d04602683612abc565b9150613d0f82613ca8565b604082019050919050565b60006020820190508181036000830152613d3381613cf7565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d96602c83612abc565b9150613da182613d3a565b604082019050919050565b60006020820190508181036000830152613dc581613d89565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613e28602983612abc565b9150613e3382613dcc565b604082019050919050565b60006020820190508181036000830152613e5781613e1b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613eba602483612abc565b9150613ec582613e5e565b604082019050919050565b60006020820190508181036000830152613ee981613ead565b9050919050565b6000613efb82612b6c565b9150613f0683612b6c565b925082821015613f1957613f1861375d565b5b828203905092915050565b6000613f2f82612b6c565b9150613f3a83612b6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6f57613f6e61375d565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fd6603283612abc565b9150613fe182613f7a565b604082019050919050565b6000602082019050818103600083015261400581613fc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404682612b6c565b915061405183612b6c565b9250826140615761406061400c565b5b828204905092915050565b600061407782612b6c565b915061408283612b6c565b9250826140925761409161400c565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140c48261409d565b6140ce81856140a8565b93506140de818560208601612acd565b6140e781612b00565b840191505092915050565b60006080820190506141076000830187612c01565b6141146020830186612c01565b6141216040830185612c97565b818103606083015261413381846140b9565b905095945050505050565b60008151905061414d81612a22565b92915050565b600060208284031215614169576141686129ec565b5b60006141778482850161413e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006141b6602083612abc565b91506141c182614180565b602082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614222601c83612abc565b915061422d826141ec565b602082019050919050565b6000602082019050818103600083015261425181614215565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201d8797059e2d926aee66855ab267e1605f7ffa0787a0fcc44176c80c40c745a464736f6c63430008090033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000001046000000000000000000000000309b46aec90200d35e200fede598dd6d1181d3c5000000000000000000000000000000000000000000000000000000000000000e5361737379536e616b654567677300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065353454747530000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806370a082311161010f5780639abc8320116100a2578063c87b56dd11610071578063c87b56dd14610544578063e985e9c514610574578063f2fde38b146105a4578063fd8b58e9146105c0576101e5565b80639abc8320146104d2578063a0bcfc7f146104f0578063a22cb4651461050c578063b88d4fde14610528576101e5565b806375ca27d7116100de57806375ca27d71461045c5780637e9845f5146104785780638da5cb5b1461049657806395d89b41146104b4576101e5565b806370a08231146103e8578063715018a61461041857806375752291146104225780637581e6db1461043e576101e5565b806332cb6b0c116101875780634d197a9b116101565780634d197a9b1461034e5780634f6ccce71461036a5780635c975abb1461039a5780636352211e146103b8576101e5565b806332cb6b0c146102ee57806342842e0e1461030c57806342966c68146103285780634b4170bc14610344576101e5565b8063095ea7b3116101c3578063095ea7b31461026857806318160ddd1461028457806323b872dd146102a25780632f745c59146102be576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190612a4e565b6105f0565b6040516102119190612a96565b60405180910390f35b610222610602565b60405161022f9190612b4a565b60405180910390f35b610252600480360381019061024d9190612ba2565b610694565b60405161025f9190612c10565b60405180910390f35b610282600480360381019061027d9190612c57565b610719565b005b61028c610831565b6040516102999190612ca6565b60405180910390f35b6102bc60048036038101906102b79190612cc1565b61083e565b005b6102d860048036038101906102d39190612c57565b61089e565b6040516102e59190612ca6565b60405180910390f35b6102f6610943565b6040516103039190612ca6565b60405180910390f35b61032660048036038101906103219190612cc1565b610949565b005b610342600480360381019061033d9190612ba2565b610969565b005b61034c6109c5565b005b61036860048036038101906103639190612d14565b610b51565b005b610384600480360381019061037f9190612ba2565b610c28565b6040516103919190612ca6565b60405180910390f35b6103a2610c99565b6040516103af9190612a96565b60405180910390f35b6103d260048036038101906103cd9190612ba2565b610cb0565b6040516103df9190612c10565b60405180910390f35b61040260048036038101906103fd9190612d14565b610d62565b60405161040f9190612ca6565b60405180910390f35b610420610e1a565b005b61043c60048036038101906104379190612c57565b610ea2565b005b610446610fb6565b6040516104539190612c10565b60405180910390f35b61047660048036038101906104719190612f4c565b610fdc565b005b610480611104565b60405161048d9190612ca6565b60405180910390f35b61049e611115565b6040516104ab9190612c10565b60405180910390f35b6104bc61113f565b6040516104c99190612b4a565b60405180910390f35b6104da6111d1565b6040516104e79190612b4a565b60405180910390f35b61050a60048036038101906105059190613079565b61125f565b005b610526600480360381019061052191906130ee565b6112f5565b005b610542600480360381019061053d91906131cf565b611476565b005b61055e60048036038101906105599190612ba2565b6114d8565b60405161056b9190612b4a565b60405180910390f35b61058e60048036038101906105899190613252565b61157f565b60405161059b9190612a96565b60405180910390f35b6105be60048036038101906105b99190612d14565b611613565b005b6105da60048036038101906105d59190612d14565b61170b565b6040516105e79190612ca6565b60405180910390f35b60006105fb82611723565b9050919050565b606060008054610611906132c1565b80601f016020809104026020016040519081016040528092919081815260200182805461063d906132c1565b801561068a5780601f1061065f5761010080835404028352916020019161068a565b820191906000526020600020905b81548152906001019060200180831161066d57829003601f168201915b5050505050905090565b600061069f8261179d565b6106de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d590613365565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072482610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c906133f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107b4611809565b73ffffffffffffffffffffffffffffffffffffffff1614806107e357506107e2816107dd611809565b61157f565b5b610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081990613489565b60405180910390fd5b61082c8383611811565b505050565b6000600880549050905090565b61084f610849611809565b826118ca565b61088e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108859061351b565b60405180910390fd5b6108998383836119a8565b505050565b60006108a983610d62565b82106108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e1906135ad565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b5481565b61096483838360405180602001604052806000815250611476565b505050565b61097a610974611809565b826118ca565b6109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061363f565b60405180910390fd5b6109c281611c04565b50565b6109cd610c99565b15610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a04906136ab565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a869061373d565b60405180910390fd5b60005b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811015610b0957610ae3600e611d15565b610af633610af1600e611d2b565b611d39565b8080610b019061378c565b915050610a92565b506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b610b59611809565b73ffffffffffffffffffffffffffffffffffffffff16610b77611115565b73ffffffffffffffffffffffffffffffffffffffff1614610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490613821565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610c32610831565b8210610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906138b3565b60405180910390fd5b60088281548110610c8757610c866138d3565b5b90600052602060002001549050919050565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090613974565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca90613a06565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e22611809565b73ffffffffffffffffffffffffffffffffffffffff16610e40611115565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90613821565b60405180910390fd5b610ea06000611d57565b565b610eaa610c99565b15610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee1906136ab565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90613a98565b60405180910390fd5b60005b81811015610fb157610f8b600e611d15565b610f9e83610f99600e611d2b565b611d39565b8080610fa99061378c565b915050610f79565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613b2a565b60405180910390fd5b60005b82518110156110ff57818181518110611087576110866138d3565b5b6020026020010151601060008584815181106110a6576110a56138d3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110f79061378c565b91505061106b565b505050565b6000611110600e611d2b565b905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114e906132c1565b80601f016020809104026020016040519081016040528092919081815260200182805461117a906132c1565b80156111c75780601f1061119c576101008083540402835291602001916111c7565b820191906000526020600020905b8154815290600101906020018083116111aa57829003601f168201915b5050505050905090565b600d80546111de906132c1565b80601f016020809104026020016040519081016040528092919081815260200182805461120a906132c1565b80156112575780601f1061122c57610100808354040283529160200191611257565b820191906000526020600020905b81548152906001019060200180831161123a57829003601f168201915b505050505081565b611267611809565b73ffffffffffffffffffffffffffffffffffffffff16611285611115565b73ffffffffffffffffffffffffffffffffffffffff16146112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290613821565b60405180910390fd5b80600d90805190602001906112f192919061293f565b5050565b6112fd611809565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136290613b96565b60405180910390fd5b8060056000611378611809565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611425611809565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161146a9190612a96565b60405180910390a35050565b611487611481611809565b836118ca565b6114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd9061351b565b60405180910390fd5b6114d284848484611e1d565b50505050565b60606114e38261179d565b611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613c28565b60405180910390fd5b600061152c611e79565b9050600081511161154c5760405180602001604052806000815250611577565b8061155684611e90565b604051602001611567929190613c84565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61161b611809565b73ffffffffffffffffffffffffffffffffffffffff16611639611115565b73ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690613821565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f690613d1a565b60405180910390fd5b61170881611d57565b50565b60106020528060005260406000206000915090505481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611796575061179582611ff1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661188483610cb0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118d58261179d565b611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90613dac565b60405180910390fd5b600061191f83610cb0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061198e57508373ffffffffffffffffffffffffffffffffffffffff1661197684610694565b73ffffffffffffffffffffffffffffffffffffffff16145b8061199f575061199e818561157f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119c882610cb0565b73ffffffffffffffffffffffffffffffffffffffff1614611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1590613e3e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590613ed0565b60405180910390fd5b611a998383836120d3565b611aa4600082611811565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af49190613ef0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b4b9190613f24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611c0f82610cb0565b9050611c1d816000846120d3565b611c28600083611811565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c789190613ef0565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611d538282604051806020016040528060008152506120e3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e288484846119a8565b611e348484848461213e565b611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a90613fec565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415611ed8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fec565b600082905060005b60008214611f0a578080611ef39061378c565b915050600a82611f03919061403b565b9150611ee0565b60008167ffffffffffffffff811115611f2657611f25612d46565b5b6040519080825280601f01601f191660200182016040528015611f585781602001600182028036833780820191505090505b5090505b60008514611fe557600182611f719190613ef0565b9150600a85611f80919061406c565b6030611f8c9190613f24565b60f81b818381518110611fa257611fa16138d3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fde919061403b565b9450611f5c565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120bc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120cc57506120cb826122d5565b5b9050919050565b6120de83838361233f565b505050565b6120ed8383612453565b6120fa600084848461213e565b612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090613fec565b60405180910390fd5b505050565b600061215f8473ffffffffffffffffffffffffffffffffffffffff16612621565b156122c8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612188611809565b8786866040518563ffffffff1660e01b81526004016121aa94939291906140f2565b602060405180830381600087803b1580156121c457600080fd5b505af19250505080156121f557506040513d601f19601f820116820180604052508101906121f29190614153565b60015b612278573d8060008114612225576040519150601f19603f3d011682016040523d82523d6000602084013e61222a565b606091505b50600081511415612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790613fec565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506122cd565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61234a838383612634565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561238d5761238881612639565b6123cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123cb576123ca8382612682565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240f5761240a816127ef565b61244e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461244d5761244c82826128c0565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ba906141cc565b60405180910390fd5b6124cc8161179d565b1561250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250390614238565b60405180910390fd5b612518600083836120d3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125689190613f24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268f84610d62565b6126999190613ef0565b905060006007600084815260200190815260200160002054905081811461277e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128039190613ef0565b9050600060096000848152602001908152602001600020549050600060088381548110612833576128326138d3565b5b906000526020600020015490508060088381548110612855576128546138d3565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128a4576128a3614258565b5b6001900381819060005260206000200160009055905550505050565b60006128cb83610d62565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461294b906132c1565b90600052602060002090601f01602090048101928261296d57600085556129b4565b82601f1061298657805160ff19168380011785556129b4565b828001600101855582156129b4579182015b828111156129b3578251825591602001919060010190612998565b5b5090506129c191906129c5565b5090565b5b808211156129de5760008160009055506001016129c6565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a2b816129f6565b8114612a3657600080fd5b50565b600081359050612a4881612a22565b92915050565b600060208284031215612a6457612a636129ec565b5b6000612a7284828501612a39565b91505092915050565b60008115159050919050565b612a9081612a7b565b82525050565b6000602082019050612aab6000830184612a87565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aeb578082015181840152602081019050612ad0565b83811115612afa576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b1c82612ab1565b612b268185612abc565b9350612b36818560208601612acd565b612b3f81612b00565b840191505092915050565b60006020820190508181036000830152612b648184612b11565b905092915050565b6000819050919050565b612b7f81612b6c565b8114612b8a57600080fd5b50565b600081359050612b9c81612b76565b92915050565b600060208284031215612bb857612bb76129ec565b5b6000612bc684828501612b8d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612bfa82612bcf565b9050919050565b612c0a81612bef565b82525050565b6000602082019050612c256000830184612c01565b92915050565b612c3481612bef565b8114612c3f57600080fd5b50565b600081359050612c5181612c2b565b92915050565b60008060408385031215612c6e57612c6d6129ec565b5b6000612c7c85828601612c42565b9250506020612c8d85828601612b8d565b9150509250929050565b612ca081612b6c565b82525050565b6000602082019050612cbb6000830184612c97565b92915050565b600080600060608486031215612cda57612cd96129ec565b5b6000612ce886828701612c42565b9350506020612cf986828701612c42565b9250506040612d0a86828701612b8d565b9150509250925092565b600060208284031215612d2a57612d296129ec565b5b6000612d3884828501612c42565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d7e82612b00565b810181811067ffffffffffffffff82111715612d9d57612d9c612d46565b5b80604052505050565b6000612db06129e2565b9050612dbc8282612d75565b919050565b600067ffffffffffffffff821115612ddc57612ddb612d46565b5b602082029050602081019050919050565b600080fd5b6000612e05612e0084612dc1565b612da6565b90508083825260208201905060208402830185811115612e2857612e27612ded565b5b835b81811015612e515780612e3d8882612c42565b845260208401935050602081019050612e2a565b5050509392505050565b600082601f830112612e7057612e6f612d41565b5b8135612e80848260208601612df2565b91505092915050565b600067ffffffffffffffff821115612ea457612ea3612d46565b5b602082029050602081019050919050565b6000612ec8612ec384612e89565b612da6565b90508083825260208201905060208402830185811115612eeb57612eea612ded565b5b835b81811015612f145780612f008882612b8d565b845260208401935050602081019050612eed565b5050509392505050565b600082601f830112612f3357612f32612d41565b5b8135612f43848260208601612eb5565b91505092915050565b60008060408385031215612f6357612f626129ec565b5b600083013567ffffffffffffffff811115612f8157612f806129f1565b5b612f8d85828601612e5b565b925050602083013567ffffffffffffffff811115612fae57612fad6129f1565b5b612fba85828601612f1e565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612fe457612fe3612d46565b5b612fed82612b00565b9050602081019050919050565b82818337600083830152505050565b600061301c61301784612fc9565b612da6565b90508281526020810184848401111561303857613037612fc4565b5b613043848285612ffa565b509392505050565b600082601f8301126130605761305f612d41565b5b8135613070848260208601613009565b91505092915050565b60006020828403121561308f5761308e6129ec565b5b600082013567ffffffffffffffff8111156130ad576130ac6129f1565b5b6130b98482850161304b565b91505092915050565b6130cb81612a7b565b81146130d657600080fd5b50565b6000813590506130e8816130c2565b92915050565b60008060408385031215613105576131046129ec565b5b600061311385828601612c42565b9250506020613124858286016130d9565b9150509250929050565b600067ffffffffffffffff82111561314957613148612d46565b5b61315282612b00565b9050602081019050919050565b600061317261316d8461312e565b612da6565b90508281526020810184848401111561318e5761318d612fc4565b5b613199848285612ffa565b509392505050565b600082601f8301126131b6576131b5612d41565b5b81356131c684826020860161315f565b91505092915050565b600080600080608085870312156131e9576131e86129ec565b5b60006131f787828801612c42565b945050602061320887828801612c42565b935050604061321987828801612b8d565b925050606085013567ffffffffffffffff81111561323a576132396129f1565b5b613246878288016131a1565b91505092959194509250565b60008060408385031215613269576132686129ec565b5b600061327785828601612c42565b925050602061328885828601612c42565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132d957607f821691505b602082108114156132ed576132ec613292565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061334f602c83612abc565b915061335a826132f3565b604082019050919050565b6000602082019050818103600083015261337e81613342565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133e1602183612abc565b91506133ec82613385565b604082019050919050565b60006020820190508181036000830152613410816133d4565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613473603883612abc565b915061347e82613417565b604082019050919050565b600060208201905081810360008301526134a281613466565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613505603183612abc565b9150613510826134a9565b604082019050919050565b60006020820190508181036000830152613534816134f8565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613597602b83612abc565b91506135a28261353b565b604082019050919050565b600060208201905081810360008301526135c68161358a565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6000613629603083612abc565b9150613634826135cd565b604082019050919050565b600060208201905081810360008301526136588161361c565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613695601083612abc565b91506136a08261365f565b602082019050919050565b600060208201905081810360008301526136c481613688565b9050919050565b7f4e6f206567677320746f20636c61696d20666f722066756e6374696f6e20636160008201527f6c6c657200000000000000000000000000000000000000000000000000000000602082015250565b6000613727602483612abc565b9150613732826136cb565b604082019050919050565b600060208201905081810360008301526137568161371a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061379782612b6c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137ca576137c961375d565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061380b602083612abc565b9150613816826137d5565b602082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061389d602c83612abc565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061395e602983612abc565b915061396982613902565b604082019050919050565b6000602082019050818103600083015261398d81613951565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006139f0602a83612abc565b91506139fb82613994565b604082019050919050565b60006020820190508181036000830152613a1f816139e3565b9050919050565b7f596f75206d75737420626520617070726f76656420746f2063616c6c2074686960008201527f732066756e6374696f6e00000000000000000000000000000000000000000000602082015250565b6000613a82602a83612abc565b9150613a8d82613a26565b604082019050919050565b60006020820190508181036000830152613ab181613a75565b9050919050565b7f53656e646572206973206e6f7420617070726f76656420746f2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613b14602c83612abc565b9150613b1f82613ab8565b604082019050919050565b60006020820190508181036000830152613b4381613b07565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613b80601983612abc565b9150613b8b82613b4a565b602082019050919050565b60006020820190508181036000830152613baf81613b73565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613c12602f83612abc565b9150613c1d82613bb6565b604082019050919050565b60006020820190508181036000830152613c4181613c05565b9050919050565b600081905092915050565b6000613c5e82612ab1565b613c688185613c48565b9350613c78818560208601612acd565b80840191505092915050565b6000613c908285613c53565b9150613c9c8284613c53565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d04602683612abc565b9150613d0f82613ca8565b604082019050919050565b60006020820190508181036000830152613d3381613cf7565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d96602c83612abc565b9150613da182613d3a565b604082019050919050565b60006020820190508181036000830152613dc581613d89565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613e28602983612abc565b9150613e3382613dcc565b604082019050919050565b60006020820190508181036000830152613e5781613e1b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613eba602483612abc565b9150613ec582613e5e565b604082019050919050565b60006020820190508181036000830152613ee981613ead565b9050919050565b6000613efb82612b6c565b9150613f0683612b6c565b925082821015613f1957613f1861375d565b5b828203905092915050565b6000613f2f82612b6c565b9150613f3a83612b6c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6f57613f6e61375d565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613fd6603283612abc565b9150613fe182613f7a565b604082019050919050565b6000602082019050818103600083015261400581613fc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404682612b6c565b915061405183612b6c565b9250826140615761406061400c565b5b828204905092915050565b600061407782612b6c565b915061408283612b6c565b9250826140925761409161400c565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006140c48261409d565b6140ce81856140a8565b93506140de818560208601612acd565b6140e781612b00565b840191505092915050565b60006080820190506141076000830187612c01565b6141146020830186612c01565b6141216040830185612c97565b818103606083015261413381846140b9565b905095945050505050565b60008151905061414d81612a22565b92915050565b600060208284031215614169576141686129ec565b5b60006141778482850161413e565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006141b6602083612abc565b91506141c182614180565b602082019050919050565b600060208201905081810360008301526141e5816141a9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614222601c83612abc565b915061422d826141ec565b602082019050919050565b6000602082019050818103600083015261425181614215565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201d8797059e2d926aee66855ab267e1605f7ffa0787a0fcc44176c80c40c745a464736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000001046000000000000000000000000309b46aec90200d35e200fede598dd6d1181d3c5000000000000000000000000000000000000000000000000000000000000000e5361737379536e616b654567677300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065353454747530000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): SassySnakeEggs
Arg [1] : _symbol (string): SSEGGS
Arg [2] : _maxSupply (uint256): 4166
Arg [3] : _snakeskinErc20 (address): 0x309b46AEC90200d35e200fEdE598DD6d1181d3c5
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001046
Arg [3] : 000000000000000000000000309b46aec90200d35e200fede598dd6d1181d3c5
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 5361737379536e616b6545676773000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 5353454747530000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
244:2446:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2482:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1534:111:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1210:253:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;411:25:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:179:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;437:241:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1263:358:15;;;:::i;:::-;;2025:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:230:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1034:84:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2052:235:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:12;;;:::i;:::-;;924:333:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;442:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1627:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2135:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:12;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;482:21:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1933:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4144:290:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2679:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4500:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;611:46:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2482:205;2617:4;2644:36;2668:11;2644:23;:36::i;:::-;2637:43;;2482:205;;;:::o;2349:98:4:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;1534:111:6:-;1595:7;1621:10;:17;;;;1614:24;;1534:111;:::o;4724:330:4:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1210:253:6:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:12;:19;1443:5;1430:19;;;;;;;;;;;;;;;:26;1450:5;1430:26;;;;;;;;;;;;1423:33;;1210:253;;;;:::o;411:25:15:-;;;;:::o;5120:179:4:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;437:241:5:-;553:41;572:12;:10;:12::i;:::-;586:7;553:18;:41::i;:::-;545:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;657:14;663:7;657:5;:14::i;:::-;437:241;:::o;1263:358:15:-;1348:8:13;:6;:8::i;:::-;1347:9;1339:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1356:1:15::1;1330:11;:23;1342:10;1330:23;;;;;;;;;;;;;;;;:27;1322:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1414:9;1409:168;1433:11;:23;1445:10;1433:23;;;;;;;;;;;;;;;;1429:1;:27;1409:168;;;1477:27;:15;:25;:27::i;:::-;1518:48;1528:10;1540:25;:15;:23;:25::i;:::-;1518:9;:48::i;:::-;1458:3;;;;;:::i;:::-;;;;1409:168;;;;1613:1;1587:11;:23;1599:10;1587:23;;;;;;;;;;;;;;;:27;;;;1263:358::o:0;2025:104::-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2118:4:15::1;2091:16;:24;2108:6;2091:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;2025:104:::0;:::o;1717:230:6:-;1792:7;1827:30;:28;:30::i;:::-;1819:5;:38;1811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;;1916:24;;1717:230;;;:::o;1034:84:13:-;1081:4;1104:7;;;;;;;;;;;1097:14;;1034:84;:::o;2052:235:4:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1790:205::-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:12:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;924:333:15:-;1348:8:13;:6;:8::i;:::-;1347:9;1339:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1016:16:15::1;:28;1033:10;1016:28;;;;;;;;;;;;;;;;;;;;;;;;;1008:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;1107:9;1102:149;1126:7;1122:1;:11;1102:149;;;1151:27;:15;:25;:27::i;:::-;1192:47;1202:9;1213:25;:15;:23;:25::i;:::-;1192:9;:47::i;:::-;1135:3;;;;;:::i;:::-;;;;1102:149;;;;924:333:::0;;:::o;442:34::-;;;;;;;;;;;;;:::o;1627:300::-;1727:16;:28;1744:10;1727:28;;;;;;;;;;;;;;;;;;;;;;;;;1719:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;1820:9;1815:106;1839:7;:14;1835:1;:18;1815:106;;;1900:7;1908:1;1900:10;;;;;;;;:::i;:::-;;;;;;;;1874:11;:23;1886:7;1894:1;1886:10;;;;;;;;:::i;:::-;;;;;;;;1874:23;;;;;;;;;;;;;;;:36;;;;1855:3;;;;;:::i;:::-;;;;1815:106;;;;1627:300;;:::o;2135:103::-;2180:7;2206:25;:15;:23;:25::i;:::-;2199:32;;2135:103;:::o;966:85:12:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2511:102:4:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;482:21:15:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1933:86::-;1189:12:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2009:3:15::1;1999:7;:13;;;;;;;;;;;;:::i;:::-;;1933:86:::0;:::o;4144:290:4:-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;2679:329::-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;4500:162::-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;1839:189:12:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;611:46:15:-;;;;;;;;;;;;;;;;;:::o;909:222:6:-;1011:4;1049:35;1034:50;;;:11;:50;;;;:90;;;;1088:36;1112:11;1088:23;:36::i;:::-;1034:90;1027:97;;909:222;;;:::o;7157:125:4:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11008:171:4:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;9665:348::-;9724:13;9740:23;9755:7;9740:14;:23::i;:::-;9724:39;;9774:48;9795:5;9810:1;9814:7;9774:20;:48::i;:::-;9860:29;9877:1;9881:7;9860:8;:29::i;:::-;9920:1;9900:9;:16;9910:5;9900:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;9938:7;:16;9946:7;9938:16;;;;;;;;;;;;9931:23;;;;;;;;;;;9998:7;9994:1;9970:36;;9979:5;9970:36;;;;;;;;;;;;9714:299;9665:348;:::o;891:123:2:-;996:1;978:7;:14;;;:19;;;;;;;;;;;891:123;:::o;773:112::-;838:7;864;:14;;;857:21;;773:112;;;:::o;8114:108:4:-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;2034:169:12:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;6547:307:4:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;3249:92::-;3300:13;3325:9;;;;;;;;;;;;;;3249:92;:::o;275:703:16:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;1431:300:4:-;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;2277:199:15:-;2424:45;2451:4;2457:2;2461:7;2424:26;:45::i;:::-;2277:199;;;:::o;8443:311:4:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;11732:778::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;763:155:3:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;2543:572:6:-;2682:45;2709:4;2715:2;2719:7;2682:26;:45::i;:::-;2758:1;2742:18;;:4;:18;;;2738:183;;;2776:40;2808:7;2776:31;:40::i;:::-;2738:183;;;2845:2;2837:10;;:4;:10;;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;2833:88;2738:183;2948:1;2934:16;;:2;:16;;;2930:179;;;2966:45;3003:7;2966:36;:45::i;:::-;2930:179;;;3038:4;3032:10;;:2;:10;;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;:::-;3028:81;2930:179;2543:572;;;:::o;9076:372:4:-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;13066:122:4:-;;;;:::o;3821:161:6:-;3924:10;:17;;;;3897:15;:24;3913:7;3897:24;;;;;;;;;;;:44;;;;3951:10;3967:7;3951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:161;:::o;4599:970::-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4861:51;;4922:18;4943:17;:26;4961:7;4943:26;;;;;;;;;;;;4922:47;;5087:14;5073:10;:28;5069:323;;5117:19;5139:12;:18;5152:4;5139:18;;;;;;;;;;;;;;;:34;5158:14;5139:34;;;;;;;;;;;;5117:56;;5221:11;5188:12;:18;5201:4;5188:18;;;;;;;;;;;;;;;:30;5207:10;5188:30;;;;;;;;;;;:44;;;;5337:10;5304:17;:30;5322:11;5304:30;;;;;;;;;;;:43;;;;5103:289;5069:323;5485:17;:26;5503:7;5485:26;;;;;;;;;;;5478:33;;;5528:12;:18;5541:4;5528:18;;;;;;;;;;;;;;;:34;5547:14;5528:34;;;;;;;;;;;5521:41;;;4680:889;;4599:970;;:::o;5857:1061::-;6106:22;6151:1;6131:10;:17;;;;:21;;;;:::i;:::-;6106:46;;6162:18;6183:15;:24;6199:7;6183:24;;;;;;;;;;;;6162:45;;6529:19;6551:10;6562:14;6551:26;;;;;;;;:::i;:::-;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6723:10;6692:15;:28;6708:11;6692:28;;;;;;;;;;;:41;;;;6861:15;:24;6877:7;6861:24;;;;;;;;;;;6854:31;;;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;3493:37;;3567:7;3540:12;:16;3553:2;3540:16;;;;;;;;;;;;;;;:24;3557:6;3540:24;;;;;;;;;;;:34;;;;3613:6;3584:17;:26;3602:7;3584:26;;;;;;;;;;;:35;;;;3483:143;3409:217;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:17:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:180;6421:77;6418:1;6411:88;6518:4;6515:1;6508:15;6542:4;6539:1;6532:15;6559:281;6642:27;6664:4;6642:27;:::i;:::-;6634:6;6630:40;6772:6;6760:10;6757:22;6736:18;6724:10;6721:34;6718:62;6715:88;;;6783:18;;:::i;:::-;6715:88;6823:10;6819:2;6812:22;6602:238;6559:281;;:::o;6846:129::-;6880:6;6907:20;;:::i;:::-;6897:30;;6936:33;6964:4;6956:6;6936:33;:::i;:::-;6846:129;;;:::o;6981:311::-;7058:4;7148:18;7140:6;7137:30;7134:56;;;7170:18;;:::i;:::-;7134:56;7220:4;7212:6;7208:17;7200:25;;7280:4;7274;7270:15;7262:23;;6981:311;;;:::o;7298:117::-;7407:1;7404;7397:12;7438:710;7534:5;7559:81;7575:64;7632:6;7575:64;:::i;:::-;7559:81;:::i;:::-;7550:90;;7660:5;7689:6;7682:5;7675:21;7723:4;7716:5;7712:16;7705:23;;7776:4;7768:6;7764:17;7756:6;7752:30;7805:3;7797:6;7794:15;7791:122;;;7824:79;;:::i;:::-;7791:122;7939:6;7922:220;7956:6;7951:3;7948:15;7922:220;;;8031:3;8060:37;8093:3;8081:10;8060:37;:::i;:::-;8055:3;8048:50;8127:4;8122:3;8118:14;8111:21;;7998:144;7982:4;7977:3;7973:14;7966:21;;7922:220;;;7926:21;7540:608;;7438:710;;;;;:::o;8171:370::-;8242:5;8291:3;8284:4;8276:6;8272:17;8268:27;8258:122;;8299:79;;:::i;:::-;8258:122;8416:6;8403:20;8441:94;8531:3;8523:6;8516:4;8508:6;8504:17;8441:94;:::i;:::-;8432:103;;8248:293;8171:370;;;;:::o;8547:311::-;8624:4;8714:18;8706:6;8703:30;8700:56;;;8736:18;;:::i;:::-;8700:56;8786:4;8778:6;8774:17;8766:25;;8846:4;8840;8836:15;8828:23;;8547:311;;;:::o;8881:710::-;8977:5;9002:81;9018:64;9075:6;9018:64;:::i;:::-;9002:81;:::i;:::-;8993:90;;9103:5;9132:6;9125:5;9118:21;9166:4;9159:5;9155:16;9148:23;;9219:4;9211:6;9207:17;9199:6;9195:30;9248:3;9240:6;9237:15;9234:122;;;9267:79;;:::i;:::-;9234:122;9382:6;9365:220;9399:6;9394:3;9391:15;9365:220;;;9474:3;9503:37;9536:3;9524:10;9503:37;:::i;:::-;9498:3;9491:50;9570:4;9565:3;9561:14;9554:21;;9441:144;9425:4;9420:3;9416:14;9409:21;;9365:220;;;9369:21;8983:608;;8881:710;;;;;:::o;9614:370::-;9685:5;9734:3;9727:4;9719:6;9715:17;9711:27;9701:122;;9742:79;;:::i;:::-;9701:122;9859:6;9846:20;9884:94;9974:3;9966:6;9959:4;9951:6;9947:17;9884:94;:::i;:::-;9875:103;;9691:293;9614:370;;;;:::o;9990:894::-;10108:6;10116;10165:2;10153:9;10144:7;10140:23;10136:32;10133:119;;;10171:79;;:::i;:::-;10133:119;10319:1;10308:9;10304:17;10291:31;10349:18;10341:6;10338:30;10335:117;;;10371:79;;:::i;:::-;10335:117;10476:78;10546:7;10537:6;10526:9;10522:22;10476:78;:::i;:::-;10466:88;;10262:302;10631:2;10620:9;10616:18;10603:32;10662:18;10654:6;10651:30;10648:117;;;10684:79;;:::i;:::-;10648:117;10789:78;10859:7;10850:6;10839:9;10835:22;10789:78;:::i;:::-;10779:88;;10574:303;9990:894;;;;;:::o;10890:117::-;10999:1;10996;10989:12;11013:308;11075:4;11165:18;11157:6;11154:30;11151:56;;;11187:18;;:::i;:::-;11151:56;11225:29;11247:6;11225:29;:::i;:::-;11217:37;;11309:4;11303;11299:15;11291:23;;11013:308;;;:::o;11327:154::-;11411:6;11406:3;11401;11388:30;11473:1;11464:6;11459:3;11455:16;11448:27;11327:154;;;:::o;11487:412::-;11565:5;11590:66;11606:49;11648:6;11606:49;:::i;:::-;11590:66;:::i;:::-;11581:75;;11679:6;11672:5;11665:21;11717:4;11710:5;11706:16;11755:3;11746:6;11741:3;11737:16;11734:25;11731:112;;;11762:79;;:::i;:::-;11731:112;11852:41;11886:6;11881:3;11876;11852:41;:::i;:::-;11571:328;11487:412;;;;;:::o;11919:340::-;11975:5;12024:3;12017:4;12009:6;12005:17;12001:27;11991:122;;12032:79;;:::i;:::-;11991:122;12149:6;12136:20;12174:79;12249:3;12241:6;12234:4;12226:6;12222:17;12174:79;:::i;:::-;12165:88;;11981:278;11919:340;;;;:::o;12265:509::-;12334:6;12383:2;12371:9;12362:7;12358:23;12354:32;12351:119;;;12389:79;;:::i;:::-;12351:119;12537:1;12526:9;12522:17;12509:31;12567:18;12559:6;12556:30;12553:117;;;12589:79;;:::i;:::-;12553:117;12694:63;12749:7;12740:6;12729:9;12725:22;12694:63;:::i;:::-;12684:73;;12480:287;12265:509;;;;:::o;12780:116::-;12850:21;12865:5;12850:21;:::i;:::-;12843:5;12840:32;12830:60;;12886:1;12883;12876:12;12830:60;12780:116;:::o;12902:133::-;12945:5;12983:6;12970:20;12961:29;;12999:30;13023:5;12999:30;:::i;:::-;12902:133;;;;:::o;13041:468::-;13106:6;13114;13163:2;13151:9;13142:7;13138:23;13134:32;13131:119;;;13169:79;;:::i;:::-;13131:119;13289:1;13314:53;13359:7;13350:6;13339:9;13335:22;13314:53;:::i;:::-;13304:63;;13260:117;13416:2;13442:50;13484:7;13475:6;13464:9;13460:22;13442:50;:::i;:::-;13432:60;;13387:115;13041:468;;;;;:::o;13515:307::-;13576:4;13666:18;13658:6;13655:30;13652:56;;;13688:18;;:::i;:::-;13652:56;13726:29;13748:6;13726:29;:::i;:::-;13718:37;;13810:4;13804;13800:15;13792:23;;13515:307;;;:::o;13828:410::-;13905:5;13930:65;13946:48;13987:6;13946:48;:::i;:::-;13930:65;:::i;:::-;13921:74;;14018:6;14011:5;14004:21;14056:4;14049:5;14045:16;14094:3;14085:6;14080:3;14076:16;14073:25;14070:112;;;14101:79;;:::i;:::-;14070:112;14191:41;14225:6;14220:3;14215;14191:41;:::i;:::-;13911:327;13828:410;;;;;:::o;14257:338::-;14312:5;14361:3;14354:4;14346:6;14342:17;14338:27;14328:122;;14369:79;;:::i;:::-;14328:122;14486:6;14473:20;14511:78;14585:3;14577:6;14570:4;14562:6;14558:17;14511:78;:::i;:::-;14502:87;;14318:277;14257:338;;;;:::o;14601:943::-;14696:6;14704;14712;14720;14769:3;14757:9;14748:7;14744:23;14740:33;14737:120;;;14776:79;;:::i;:::-;14737:120;14896:1;14921:53;14966:7;14957:6;14946:9;14942:22;14921:53;:::i;:::-;14911:63;;14867:117;15023:2;15049:53;15094:7;15085:6;15074:9;15070:22;15049:53;:::i;:::-;15039:63;;14994:118;15151:2;15177:53;15222:7;15213:6;15202:9;15198:22;15177:53;:::i;:::-;15167:63;;15122:118;15307:2;15296:9;15292:18;15279:32;15338:18;15330:6;15327:30;15324:117;;;15360:79;;:::i;:::-;15324:117;15465:62;15519:7;15510:6;15499:9;15495:22;15465:62;:::i;:::-;15455:72;;15250:287;14601:943;;;;;;;:::o;15550:474::-;15618:6;15626;15675:2;15663:9;15654:7;15650:23;15646:32;15643:119;;;15681:79;;:::i;:::-;15643:119;15801:1;15826:53;15871:7;15862:6;15851:9;15847:22;15826:53;:::i;:::-;15816:63;;15772:117;15928:2;15954:53;15999:7;15990:6;15979:9;15975:22;15954:53;:::i;:::-;15944:63;;15899:118;15550:474;;;;;:::o;16030:180::-;16078:77;16075:1;16068:88;16175:4;16172:1;16165:15;16199:4;16196:1;16189:15;16216:320;16260:6;16297:1;16291:4;16287:12;16277:22;;16344:1;16338:4;16334:12;16365:18;16355:81;;16421:4;16413:6;16409:17;16399:27;;16355:81;16483:2;16475:6;16472:14;16452:18;16449:38;16446:84;;;16502:18;;:::i;:::-;16446:84;16267:269;16216:320;;;:::o;16542:231::-;16682:34;16678:1;16670:6;16666:14;16659:58;16751:14;16746:2;16738:6;16734:15;16727:39;16542:231;:::o;16779:366::-;16921:3;16942:67;17006:2;17001:3;16942:67;:::i;:::-;16935:74;;17018:93;17107:3;17018:93;:::i;:::-;17136:2;17131:3;17127:12;17120:19;;16779:366;;;:::o;17151:419::-;17317:4;17355:2;17344:9;17340:18;17332:26;;17404:9;17398:4;17394:20;17390:1;17379:9;17375:17;17368:47;17432:131;17558:4;17432:131;:::i;:::-;17424:139;;17151:419;;;:::o;17576:220::-;17716:34;17712:1;17704:6;17700:14;17693:58;17785:3;17780:2;17772:6;17768:15;17761:28;17576:220;:::o;17802:366::-;17944:3;17965:67;18029:2;18024:3;17965:67;:::i;:::-;17958:74;;18041:93;18130:3;18041:93;:::i;:::-;18159:2;18154:3;18150:12;18143:19;;17802:366;;;:::o;18174:419::-;18340:4;18378:2;18367:9;18363:18;18355:26;;18427:9;18421:4;18417:20;18413:1;18402:9;18398:17;18391:47;18455:131;18581:4;18455:131;:::i;:::-;18447:139;;18174:419;;;:::o;18599:243::-;18739:34;18735:1;18727:6;18723:14;18716:58;18808:26;18803:2;18795:6;18791:15;18784:51;18599:243;:::o;18848:366::-;18990:3;19011:67;19075:2;19070:3;19011:67;:::i;:::-;19004:74;;19087:93;19176:3;19087:93;:::i;:::-;19205:2;19200:3;19196:12;19189:19;;18848:366;;;:::o;19220:419::-;19386:4;19424:2;19413:9;19409:18;19401:26;;19473:9;19467:4;19463:20;19459:1;19448:9;19444:17;19437:47;19501:131;19627:4;19501:131;:::i;:::-;19493:139;;19220:419;;;:::o;19645:236::-;19785:34;19781:1;19773:6;19769:14;19762:58;19854:19;19849:2;19841:6;19837:15;19830:44;19645:236;:::o;19887:366::-;20029:3;20050:67;20114:2;20109:3;20050:67;:::i;:::-;20043:74;;20126:93;20215:3;20126:93;:::i;:::-;20244:2;20239:3;20235:12;20228:19;;19887:366;;;:::o;20259:419::-;20425:4;20463:2;20452:9;20448:18;20440:26;;20512:9;20506:4;20502:20;20498:1;20487:9;20483:17;20476:47;20540:131;20666:4;20540:131;:::i;:::-;20532:139;;20259:419;;;:::o;20684:230::-;20824:34;20820:1;20812:6;20808:14;20801:58;20893:13;20888:2;20880:6;20876:15;20869:38;20684:230;:::o;20920:366::-;21062:3;21083:67;21147:2;21142:3;21083:67;:::i;:::-;21076:74;;21159:93;21248:3;21159:93;:::i;:::-;21277:2;21272:3;21268:12;21261:19;;20920:366;;;:::o;21292:419::-;21458:4;21496:2;21485:9;21481:18;21473:26;;21545:9;21539:4;21535:20;21531:1;21520:9;21516:17;21509:47;21573:131;21699:4;21573:131;:::i;:::-;21565:139;;21292:419;;;:::o;21717:235::-;21857:34;21853:1;21845:6;21841:14;21834:58;21926:18;21921:2;21913:6;21909:15;21902:43;21717:235;:::o;21958:366::-;22100:3;22121:67;22185:2;22180:3;22121:67;:::i;:::-;22114:74;;22197:93;22286:3;22197:93;:::i;:::-;22315:2;22310:3;22306:12;22299:19;;21958:366;;;:::o;22330:419::-;22496:4;22534:2;22523:9;22519:18;22511:26;;22583:9;22577:4;22573:20;22569:1;22558:9;22554:17;22547:47;22611:131;22737:4;22611:131;:::i;:::-;22603:139;;22330:419;;;:::o;22755:166::-;22895:18;22891:1;22883:6;22879:14;22872:42;22755:166;:::o;22927:366::-;23069:3;23090:67;23154:2;23149:3;23090:67;:::i;:::-;23083:74;;23166:93;23255:3;23166:93;:::i;:::-;23284:2;23279:3;23275:12;23268:19;;22927:366;;;:::o;23299:419::-;23465:4;23503:2;23492:9;23488:18;23480:26;;23552:9;23546:4;23542:20;23538:1;23527:9;23523:17;23516:47;23580:131;23706:4;23580:131;:::i;:::-;23572:139;;23299:419;;;:::o;23724:223::-;23864:34;23860:1;23852:6;23848:14;23841:58;23933:6;23928:2;23920:6;23916:15;23909:31;23724:223;:::o;23953:366::-;24095:3;24116:67;24180:2;24175:3;24116:67;:::i;:::-;24109:74;;24192:93;24281:3;24192:93;:::i;:::-;24310:2;24305:3;24301:12;24294:19;;23953:366;;;:::o;24325:419::-;24491:4;24529:2;24518:9;24514:18;24506:26;;24578:9;24572:4;24568:20;24564:1;24553:9;24549:17;24542:47;24606:131;24732:4;24606:131;:::i;:::-;24598:139;;24325:419;;;:::o;24750:180::-;24798:77;24795:1;24788:88;24895:4;24892:1;24885:15;24919:4;24916:1;24909:15;24936:233;24975:3;24998:24;25016:5;24998:24;:::i;:::-;24989:33;;25044:66;25037:5;25034:77;25031:103;;;25114:18;;:::i;:::-;25031:103;25161:1;25154:5;25150:13;25143:20;;24936:233;;;:::o;25175:182::-;25315:34;25311:1;25303:6;25299:14;25292:58;25175:182;:::o;25363:366::-;25505:3;25526:67;25590:2;25585:3;25526:67;:::i;:::-;25519:74;;25602:93;25691:3;25602:93;:::i;:::-;25720:2;25715:3;25711:12;25704:19;;25363:366;;;:::o;25735:419::-;25901:4;25939:2;25928:9;25924:18;25916:26;;25988:9;25982:4;25978:20;25974:1;25963:9;25959:17;25952:47;26016:131;26142:4;26016:131;:::i;:::-;26008:139;;25735:419;;;:::o;26160:231::-;26300:34;26296:1;26288:6;26284:14;26277:58;26369:14;26364:2;26356:6;26352:15;26345:39;26160:231;:::o;26397:366::-;26539:3;26560:67;26624:2;26619:3;26560:67;:::i;:::-;26553:74;;26636:93;26725:3;26636:93;:::i;:::-;26754:2;26749:3;26745:12;26738:19;;26397:366;;;:::o;26769:419::-;26935:4;26973:2;26962:9;26958:18;26950:26;;27022:9;27016:4;27012:20;27008:1;26997:9;26993:17;26986:47;27050:131;27176:4;27050:131;:::i;:::-;27042:139;;26769:419;;;:::o;27194:180::-;27242:77;27239:1;27232:88;27339:4;27336:1;27329:15;27363:4;27360:1;27353:15;27380:228;27520:34;27516:1;27508:6;27504:14;27497:58;27589:11;27584:2;27576:6;27572:15;27565:36;27380:228;:::o;27614:366::-;27756:3;27777:67;27841:2;27836:3;27777:67;:::i;:::-;27770:74;;27853:93;27942:3;27853:93;:::i;:::-;27971:2;27966:3;27962:12;27955:19;;27614:366;;;:::o;27986:419::-;28152:4;28190:2;28179:9;28175:18;28167:26;;28239:9;28233:4;28229:20;28225:1;28214:9;28210:17;28203:47;28267:131;28393:4;28267:131;:::i;:::-;28259:139;;27986:419;;;:::o;28411:229::-;28551:34;28547:1;28539:6;28535:14;28528:58;28620:12;28615:2;28607:6;28603:15;28596:37;28411:229;:::o;28646:366::-;28788:3;28809:67;28873:2;28868:3;28809:67;:::i;:::-;28802:74;;28885:93;28974:3;28885:93;:::i;:::-;29003:2;28998:3;28994:12;28987:19;;28646:366;;;:::o;29018:419::-;29184:4;29222:2;29211:9;29207:18;29199:26;;29271:9;29265:4;29261:20;29257:1;29246:9;29242:17;29235:47;29299:131;29425:4;29299:131;:::i;:::-;29291:139;;29018:419;;;:::o;29443:229::-;29583:34;29579:1;29571:6;29567:14;29560:58;29652:12;29647:2;29639:6;29635:15;29628:37;29443:229;:::o;29678:366::-;29820:3;29841:67;29905:2;29900:3;29841:67;:::i;:::-;29834:74;;29917:93;30006:3;29917:93;:::i;:::-;30035:2;30030:3;30026:12;30019:19;;29678:366;;;:::o;30050:419::-;30216:4;30254:2;30243:9;30239:18;30231:26;;30303:9;30297:4;30293:20;30289:1;30278:9;30274:17;30267:47;30331:131;30457:4;30331:131;:::i;:::-;30323:139;;30050:419;;;:::o;30475:231::-;30615:34;30611:1;30603:6;30599:14;30592:58;30684:14;30679:2;30671:6;30667:15;30660:39;30475:231;:::o;30712:366::-;30854:3;30875:67;30939:2;30934:3;30875:67;:::i;:::-;30868:74;;30951:93;31040:3;30951:93;:::i;:::-;31069:2;31064:3;31060:12;31053:19;;30712:366;;;:::o;31084:419::-;31250:4;31288:2;31277:9;31273:18;31265:26;;31337:9;31331:4;31327:20;31323:1;31312:9;31308:17;31301:47;31365:131;31491:4;31365:131;:::i;:::-;31357:139;;31084:419;;;:::o;31509:175::-;31649:27;31645:1;31637:6;31633:14;31626:51;31509:175;:::o;31690:366::-;31832:3;31853:67;31917:2;31912:3;31853:67;:::i;:::-;31846:74;;31929:93;32018:3;31929:93;:::i;:::-;32047:2;32042:3;32038:12;32031:19;;31690:366;;;:::o;32062:419::-;32228:4;32266:2;32255:9;32251:18;32243:26;;32315:9;32309:4;32305:20;32301:1;32290:9;32286:17;32279:47;32343:131;32469:4;32343:131;:::i;:::-;32335:139;;32062:419;;;:::o;32487:234::-;32627:34;32623:1;32615:6;32611:14;32604:58;32696:17;32691:2;32683:6;32679:15;32672:42;32487:234;:::o;32727:366::-;32869:3;32890:67;32954:2;32949:3;32890:67;:::i;:::-;32883:74;;32966:93;33055:3;32966:93;:::i;:::-;33084:2;33079:3;33075:12;33068:19;;32727:366;;;:::o;33099:419::-;33265:4;33303:2;33292:9;33288:18;33280:26;;33352:9;33346:4;33342:20;33338:1;33327:9;33323:17;33316:47;33380:131;33506:4;33380:131;:::i;:::-;33372:139;;33099:419;;;:::o;33524:148::-;33626:11;33663:3;33648:18;;33524:148;;;;:::o;33678:377::-;33784:3;33812:39;33845:5;33812:39;:::i;:::-;33867:89;33949:6;33944:3;33867:89;:::i;:::-;33860:96;;33965:52;34010:6;34005:3;33998:4;33991:5;33987:16;33965:52;:::i;:::-;34042:6;34037:3;34033:16;34026:23;;33788:267;33678:377;;;;:::o;34061:435::-;34241:3;34263:95;34354:3;34345:6;34263:95;:::i;:::-;34256:102;;34375:95;34466:3;34457:6;34375:95;:::i;:::-;34368:102;;34487:3;34480:10;;34061:435;;;;;:::o;34502:225::-;34642:34;34638:1;34630:6;34626:14;34619:58;34711:8;34706:2;34698:6;34694:15;34687:33;34502:225;:::o;34733:366::-;34875:3;34896:67;34960:2;34955:3;34896:67;:::i;:::-;34889:74;;34972:93;35061:3;34972:93;:::i;:::-;35090:2;35085:3;35081:12;35074:19;;34733:366;;;:::o;35105:419::-;35271:4;35309:2;35298:9;35294:18;35286:26;;35358:9;35352:4;35348:20;35344:1;35333:9;35329:17;35322:47;35386:131;35512:4;35386:131;:::i;:::-;35378:139;;35105:419;;;:::o;35530:231::-;35670:34;35666:1;35658:6;35654:14;35647:58;35739:14;35734:2;35726:6;35722:15;35715:39;35530:231;:::o;35767:366::-;35909:3;35930:67;35994:2;35989:3;35930:67;:::i;:::-;35923:74;;36006:93;36095:3;36006:93;:::i;:::-;36124:2;36119:3;36115:12;36108:19;;35767:366;;;:::o;36139:419::-;36305:4;36343:2;36332:9;36328:18;36320:26;;36392:9;36386:4;36382:20;36378:1;36367:9;36363:17;36356:47;36420:131;36546:4;36420:131;:::i;:::-;36412:139;;36139:419;;;:::o;36564:228::-;36704:34;36700:1;36692:6;36688:14;36681:58;36773:11;36768:2;36760:6;36756:15;36749:36;36564:228;:::o;36798:366::-;36940:3;36961:67;37025:2;37020:3;36961:67;:::i;:::-;36954:74;;37037:93;37126:3;37037:93;:::i;:::-;37155:2;37150:3;37146:12;37139:19;;36798:366;;;:::o;37170:419::-;37336:4;37374:2;37363:9;37359:18;37351:26;;37423:9;37417:4;37413:20;37409:1;37398:9;37394:17;37387:47;37451:131;37577:4;37451:131;:::i;:::-;37443:139;;37170:419;;;:::o;37595:223::-;37735:34;37731:1;37723:6;37719:14;37712:58;37804:6;37799:2;37791:6;37787:15;37780:31;37595:223;:::o;37824:366::-;37966:3;37987:67;38051:2;38046:3;37987:67;:::i;:::-;37980:74;;38063:93;38152:3;38063:93;:::i;:::-;38181:2;38176:3;38172:12;38165:19;;37824:366;;;:::o;38196:419::-;38362:4;38400:2;38389:9;38385:18;38377:26;;38449:9;38443:4;38439:20;38435:1;38424:9;38420:17;38413:47;38477:131;38603:4;38477:131;:::i;:::-;38469:139;;38196:419;;;:::o;38621:191::-;38661:4;38681:20;38699:1;38681:20;:::i;:::-;38676:25;;38715:20;38733:1;38715:20;:::i;:::-;38710:25;;38754:1;38751;38748:8;38745:34;;;38759:18;;:::i;:::-;38745:34;38804:1;38801;38797:9;38789:17;;38621:191;;;;:::o;38818:305::-;38858:3;38877:20;38895:1;38877:20;:::i;:::-;38872:25;;38911:20;38929:1;38911:20;:::i;:::-;38906:25;;39065:1;38997:66;38993:74;38990:1;38987:81;38984:107;;;39071:18;;:::i;:::-;38984:107;39115:1;39112;39108:9;39101:16;;38818:305;;;;:::o;39129:237::-;39269:34;39265:1;39257:6;39253:14;39246:58;39338:20;39333:2;39325:6;39321:15;39314:45;39129:237;:::o;39372:366::-;39514:3;39535:67;39599:2;39594:3;39535:67;:::i;:::-;39528:74;;39611:93;39700:3;39611:93;:::i;:::-;39729:2;39724:3;39720:12;39713:19;;39372:366;;;:::o;39744:419::-;39910:4;39948:2;39937:9;39933:18;39925:26;;39997:9;39991:4;39987:20;39983:1;39972:9;39968:17;39961:47;40025:131;40151:4;40025:131;:::i;:::-;40017:139;;39744:419;;;:::o;40169:180::-;40217:77;40214:1;40207:88;40314:4;40311:1;40304:15;40338:4;40335:1;40328:15;40355:185;40395:1;40412:20;40430:1;40412:20;:::i;:::-;40407:25;;40446:20;40464:1;40446:20;:::i;:::-;40441:25;;40485:1;40475:35;;40490:18;;:::i;:::-;40475:35;40532:1;40529;40525:9;40520:14;;40355:185;;;;:::o;40546:176::-;40578:1;40595:20;40613:1;40595:20;:::i;:::-;40590:25;;40629:20;40647:1;40629:20;:::i;:::-;40624:25;;40668:1;40658:35;;40673:18;;:::i;:::-;40658:35;40714:1;40711;40707:9;40702:14;;40546:176;;;;:::o;40728:98::-;40779:6;40813:5;40807:12;40797:22;;40728:98;;;:::o;40832:168::-;40915:11;40949:6;40944:3;40937:19;40989:4;40984:3;40980:14;40965:29;;40832:168;;;;:::o;41006:360::-;41092:3;41120:38;41152:5;41120:38;:::i;:::-;41174:70;41237:6;41232:3;41174:70;:::i;:::-;41167:77;;41253:52;41298:6;41293:3;41286:4;41279:5;41275:16;41253:52;:::i;:::-;41330:29;41352:6;41330:29;:::i;:::-;41325:3;41321:39;41314:46;;41096:270;41006:360;;;;:::o;41372:640::-;41567:4;41605:3;41594:9;41590:19;41582:27;;41619:71;41687:1;41676:9;41672:17;41663:6;41619:71;:::i;:::-;41700:72;41768:2;41757:9;41753:18;41744:6;41700:72;:::i;:::-;41782;41850:2;41839:9;41835:18;41826:6;41782:72;:::i;:::-;41901:9;41895:4;41891:20;41886:2;41875:9;41871:18;41864:48;41929:76;42000:4;41991:6;41929:76;:::i;:::-;41921:84;;41372:640;;;;;;;:::o;42018:141::-;42074:5;42105:6;42099:13;42090:22;;42121:32;42147:5;42121:32;:::i;:::-;42018:141;;;;:::o;42165:349::-;42234:6;42283:2;42271:9;42262:7;42258:23;42254:32;42251:119;;;42289:79;;:::i;:::-;42251:119;42409:1;42434:63;42489:7;42480:6;42469:9;42465:22;42434:63;:::i;:::-;42424:73;;42380:127;42165:349;;;;:::o;42520:182::-;42660:34;42656:1;42648:6;42644:14;42637:58;42520:182;:::o;42708:366::-;42850:3;42871:67;42935:2;42930:3;42871:67;:::i;:::-;42864:74;;42947:93;43036:3;42947:93;:::i;:::-;43065:2;43060:3;43056:12;43049:19;;42708:366;;;:::o;43080:419::-;43246:4;43284:2;43273:9;43269:18;43261:26;;43333:9;43327:4;43323:20;43319:1;43308:9;43304:17;43297:47;43361:131;43487:4;43361:131;:::i;:::-;43353:139;;43080:419;;;:::o;43505:178::-;43645:30;43641:1;43633:6;43629:14;43622:54;43505:178;:::o;43689:366::-;43831:3;43852:67;43916:2;43911:3;43852:67;:::i;:::-;43845:74;;43928:93;44017:3;43928:93;:::i;:::-;44046:2;44041:3;44037:12;44030:19;;43689:366;;;:::o;44061:419::-;44227:4;44265:2;44254:9;44250:18;44242:26;;44314:9;44308:4;44304:20;44300:1;44289:9;44285:17;44278:47;44342:131;44468:4;44342:131;:::i;:::-;44334:139;;44061:419;;;:::o;44486:180::-;44534:77;44531:1;44524:88;44631:4;44628:1;44621:15;44655:4;44652:1;44645:15
Swarm Source
ipfs://1d8797059e2d926aee66855ab267e1605f7ffa0787a0fcc44176c80c40c745a4
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.