Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
494 SKC
Holders
120
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SKCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SkellieCats
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-04 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/SkellieCat.sol pragma solidity ^0.8.0; interface IBones { function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); } interface ISkellies { function balanceOf(address _user) external view returns(uint256); function ownerOf(uint256 _tokenId) external view returns(address); function totalSupply() external view returns (uint256); } contract SkellieCats is ERC721,Ownable { struct SkellieCatData { string name; string bio; } IBones public Bones; ISkellies public Skellies; uint256 public SUMMON_PRICE = 600 ether; uint256 public NAME_PRICE = 100 ether; uint256 public BIO_PRICE = 100 ether; uint256 public constant MAX_SUPPLY = 6666; address constant public burnAddress = 0x0000000000000000000000000000000000000001; uint256 public totalSupply; string public baseURI; mapping(uint256 => SkellieCatData) public skellieCatData; event Summon(uint256 skellieCatId); event NameChanged(uint256 skellieCatId, string skellieCatName); event BioChanged(uint256 skellieCatId, string skellieCatBio); constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) { baseURI = baseURI_; } function setBones(address bonesAddress) external { Bones = IBones(bonesAddress); } function burnBones(uint256 burnAmount) internal{ Bones.transferFrom(msg.sender, burnAddress, burnAmount); } function summonSkellieCat() external{ require(ISkellies(Skellies).balanceOf(msg.sender) > 1, "Two Skellies are required to summon a SkellieCat"); //REQUIRE 2 Skelllies!! require(totalSupply <= MAX_SUPPLY, "All SkellieCats have been summoned."); burnBones(SUMMON_PRICE); uint256 skellieCatId = totalSupply; _safeMint(msg.sender, ++totalSupply); emit Summon(skellieCatId); } function changeBio(uint256 skellieCatId, string memory newBio) external{ require(ownerOf(skellieCatId) == msg.sender, "You must own this SkellieCat."); burnBones(BIO_PRICE); skellieCatData[skellieCatId].bio = newBio; emit BioChanged(skellieCatId, newBio); } function changeName(uint256 skellieCatId, string memory newName) external{ require(ownerOf(skellieCatId) == msg.sender, "You must own this SkellieCat."); bytes memory n = bytes(newName); require(n.length > 0 && n.length < 25, "Invalid name length"); burnBones(NAME_PRICE); skellieCatData[skellieCatId].name = newName; emit NameChanged(skellieCatId, newName); } function setBaseURI(string memory baseURI_) public onlyOwner { baseURI = baseURI_; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setSummonPrice(uint256 _newPrice) public onlyOwner { SUMMON_PRICE = _newPrice; } function setNamePrice(uint256 _newPrice) public onlyOwner { NAME_PRICE = _newPrice; } function setBioPrice(uint256 _newPrice) public onlyOwner { BIO_PRICE = _newPrice; } function setSkellies(address skelliesAddress) external onlyOwner { Skellies = ISkellies(skelliesAddress); } function ownerWithdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"skellieCatId","type":"uint256"},{"indexed":false,"internalType":"string","name":"skellieCatBio","type":"string"}],"name":"BioChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"skellieCatId","type":"uint256"},{"indexed":false,"internalType":"string","name":"skellieCatName","type":"string"}],"name":"NameChanged","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":"uint256","name":"skellieCatId","type":"uint256"}],"name":"Summon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BIO_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Bones","outputs":[{"internalType":"contract IBones","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUMMON_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Skellies","outputs":[{"internalType":"contract ISkellies","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":"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":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"skellieCatId","type":"uint256"},{"internalType":"string","name":"newBio","type":"string"}],"name":"changeBio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"skellieCatId","type":"uint256"},{"internalType":"string","name":"newName","type":"string"}],"name":"changeName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setBioPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bonesAddress","type":"address"}],"name":"setBones","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setNamePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"skelliesAddress","type":"address"}],"name":"setSkellies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setSummonPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"skellieCatData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"bio","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"summonSkellieCat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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
6080604052682086ac35105260000060095568056bc75e2d63100000600a5568056bc75e2d63100000600b553480156200003857600080fd5b50604051620044013803806200440183398181016040528101906200005e9190620002d2565b8282816000908051906020019062000078929190620001a4565b50806001908051906020019062000091929190620001a4565b505050620000b4620000a8620000d660201b60201c565b620000de60201b60201c565b80600d9080519060200190620000cc929190620001a4565b505050506200050f565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b29062000420565b90600052602060002090601f016020900481019282620001d6576000855562000222565b82601f10620001f157805160ff191683800117855562000222565b8280016001018555821562000222579182015b828111156200022157825182559160200191906001019062000204565b5b50905062000231919062000235565b5090565b5b808211156200025057600081600090555060010162000236565b5090565b60006200026b6200026584620003b4565b6200038b565b9050828152602081018484840111156200028a5762000289620004ef565b5b62000297848285620003ea565b509392505050565b600082601f830112620002b757620002b6620004ea565b5b8151620002c984826020860162000254565b91505092915050565b600080600060608486031215620002ee57620002ed620004f9565b5b600084015167ffffffffffffffff8111156200030f576200030e620004f4565b5b6200031d868287016200029f565b935050602084015167ffffffffffffffff811115620003415762000340620004f4565b5b6200034f868287016200029f565b925050604084015167ffffffffffffffff811115620003735762000372620004f4565b5b62000381868287016200029f565b9150509250925092565b600062000397620003aa565b9050620003a5828262000456565b919050565b6000604051905090565b600067ffffffffffffffff821115620003d257620003d1620004bb565b5b620003dd82620004fe565b9050602081019050919050565b60005b838110156200040a578082015181840152602081019050620003ed565b838111156200041a576000848401525b50505050565b600060028204905060018216806200043957607f821691505b6020821081141562000450576200044f6200048c565b5b50919050565b6200046182620004fe565b810181811067ffffffffffffffff82111715620004835762000482620004bb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613ee2806200051f6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063715018a611610125578063bbcebab6116100ad578063e03ce7371161007c578063e03ce737146105c9578063e902eb56146105e7578063e985e9c514610618578063f0c1d8e414610648578063f2fde38b146106645761021c565b8063bbcebab614610541578063c39cbef11461055f578063c87b56dd1461057b578063da95287e146105ab5761021c565b80638da5cb5b116100f45780638da5cb5b146104b157806395d89b41146104cf5780639f820675146104ed578063a22cb46514610509578063b88d4fde146105255761021c565b8063715018a6146104515780637186a73f1461045b57806381478f771461047757806384505746146104955761021c565b80634311de8f116101a8578063580879a111610177578063580879a1146103975780636352211e146103b55780636c0360eb146103e557806370a082311461040357806370d5ae05146104335761021c565b80634311de8f1461034b5780634d426528146103555780634fd0ce321461037157806355f804b31461037b5761021c565b806318160ddd116101ef57806318160ddd146102bb57806323b872dd146102d95780632626f4e0146102f557806332cb6b0c1461031157806342842e0e1461032f5761021c565b806301ffc9a71461022157806306fdde0314610251578063081812fc1461026f578063095ea7b31461029f575b600080fd5b61023b60048036038101906102369190612b5e565b610680565b6040516102489190613123565b60405180910390f35b610259610762565b6040516102669190613174565b60405180910390f35b61028960048036038101906102849190612c01565b6107f4565b6040516102969190613085565b60405180910390f35b6102b960048036038101906102b49190612af1565b610879565b005b6102c3610991565b6040516102d0919061344d565b60405180910390f35b6102f360048036038101906102ee91906129db565b610997565b005b61030f600480360381019061030a9190612c01565b6109f7565b005b610319610a7d565b604051610326919061344d565b60405180910390f35b610349600480360381019061034491906129db565b610a83565b005b610353610aa3565b005b61036f600480360381019061036a9190612c5b565b610b6e565b005b610379610c57565b005b61039560048036038101906103909190612bb8565b610df5565b005b61039f610e8b565b6040516103ac919061344d565b60405180910390f35b6103cf60048036038101906103ca9190612c01565b610e91565b6040516103dc9190613085565b60405180910390f35b6103ed610f43565b6040516103fa9190613174565b60405180910390f35b61041d6004803603810190610418919061296e565b610fd1565b60405161042a919061344d565b60405180910390f35b61043b611089565b6040516104489190613085565b60405180910390f35b61045961108e565b005b61047560048036038101906104709190612c01565b611116565b005b61047f61119c565b60405161048c919061344d565b60405180910390f35b6104af60048036038101906104aa9190612c01565b6111a2565b005b6104b9611228565b6040516104c69190613085565b60405180910390f35b6104d7611252565b6040516104e49190613174565b60405180910390f35b6105076004803603810190610502919061296e565b6112e4565b005b610523600480360381019061051e9190612ab1565b6113a4565b005b61053f600480360381019061053a9190612a2e565b6113ba565b005b61054961141c565b604051610556919061313e565b60405180910390f35b61057960048036038101906105749190612c5b565b611442565b005b61059560048036038101906105909190612c01565b611582565b6040516105a29190613174565b60405180910390f35b6105b3611629565b6040516105c09190613159565b60405180910390f35b6105d161164f565b6040516105de919061344d565b60405180910390f35b61060160048036038101906105fc9190612c01565b611655565b60405161060f929190613196565b60405180910390f35b610632600480360381019061062d919061299b565b611789565b60405161063f9190613123565b60405180910390f35b610662600480360381019061065d919061296e565b61181d565b005b61067e6004803603810190610679919061296e565b611861565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075b575061075a82611959565b5b9050919050565b6060600080546107719061371b565b80601f016020809104026020016040519081016040528092919081815260200182805461079d9061371b565b80156107ea5780601f106107bf576101008083540402835291602001916107ea565b820191906000526020600020905b8154815290600101906020018083116107cd57829003601f168201915b5050505050905090565b60006107ff826119c3565b61083e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108359061334d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088482610e91565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec906133cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610914611a2f565b73ffffffffffffffffffffffffffffffffffffffff16148061094357506109428161093d611a2f565b611789565b5b610982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610979906132ad565b60405180910390fd5b61098c8383611a37565b505050565b600c5481565b6109a86109a2611a2f565b82611af0565b6109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de9061340d565b60405180910390fd5b6109f2838383611bce565b505050565b6109ff611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610a1d611228565b73ffffffffffffffffffffffffffffffffffffffff1614610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a9061336d565b60405180910390fd5b80600a8190555050565b611a0a81565b610a9e838383604051806020016040528060008152506113ba565b505050565b610aab611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610ac9611228565b73ffffffffffffffffffffffffffffffffffffffff1614610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b169061336d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b6a573d6000803e3d6000fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610b8e83610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb9061330d565b60405180910390fd5b610bef600b54611e2a565b80600e60008481526020019081526020016000206001019080519060200190610c19929190612758565b507fb5d3e30019a90e2b35059d238ddbac8259a3d65d9a4f47395d713901d17cc1128282604051610c4b929190613468565b60405180910390a15050565b6001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610cb49190613085565b60206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190612c2e565b11610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b9061342d565b60405180910390fd5b611a0a600c541115610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d82906131cd565b60405180910390fd5b610d96600954611e2a565b6000600c549050610dbb33600c60008154610db09061377e565b919050819055611ee0565b7fec6fa41283bf7b2880d6b62a1b5d58715786782e21df1fbbff21174bbd818a1481604051610dea919061344d565b60405180910390a150565b610dfd611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610e1b611228565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e689061336d565b60405180910390fd5b80600d9080519060200190610e87929190612758565b5050565b60095481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f31906132ed565b60405180910390fd5b80915050919050565b600d8054610f509061371b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7c9061371b565b8015610fc95780601f10610f9e57610100808354040283529160200191610fc9565b820191906000526020600020905b815481529060010190602001808311610fac57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906132cd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600181565b611096611a2f565b73ffffffffffffffffffffffffffffffffffffffff166110b4611228565b73ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111019061336d565b60405180910390fd5b6111146000611efe565b565b61111e611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661113c611228565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111899061336d565b60405180910390fd5b80600b8190555050565b600a5481565b6111aa611a2f565b73ffffffffffffffffffffffffffffffffffffffff166111c8611228565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112159061336d565b60405180910390fd5b8060098190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112619061371b565b80601f016020809104026020016040519081016040528092919081815260200182805461128d9061371b565b80156112da5780601f106112af576101008083540402835291602001916112da565b820191906000526020600020905b8154815290600101906020018083116112bd57829003601f168201915b5050505050905090565b6112ec611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661130a611228565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061336d565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113b66113af611a2f565b8383611fc4565b5050565b6113cb6113c5611a2f565b83611af0565b61140a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114019061340d565b60405180910390fd5b61141684848484612131565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1661146283610e91565b73ffffffffffffffffffffffffffffffffffffffff16146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af9061330d565b60405180910390fd5b6000819050600081511180156114cf575060198151105b61150e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611505906133ed565b60405180910390fd5b611519600a54611e2a565b81600e60008581526020019081526020016000206000019080519060200190611543929190612758565b507f8edfa912e70e283a8ef6d6f52cd1faef9690ff989eff2f11a134e8478ba7b28b8383604051611575929190613468565b60405180910390a1505050565b606061158d826119c3565b6115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c3906133ad565b60405180910390fd5b60006115d661218d565b905060008151116115f65760405180602001604052806000815250611621565b806116008461221f565b604051602001611611929190613061565b6040516020818303038152906040525b915050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600e6020528060005260406000206000915090508060000180546116789061371b565b80601f01602080910402602001604051908101604052809291908181526020018280546116a49061371b565b80156116f15780601f106116c6576101008083540402835291602001916116f1565b820191906000526020600020905b8154815290600101906020018083116116d457829003601f168201915b5050505050908060010180546117069061371b565b80601f01602080910402602001604051908101604052809291908181526020018280546117329061371b565b801561177f5780601f106117545761010080835404028352916020019161177f565b820191906000526020600020905b81548152906001019060200180831161176257829003601f168201915b5050505050905082565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611869611a2f565b73ffffffffffffffffffffffffffffffffffffffff16611887611228565b73ffffffffffffffffffffffffffffffffffffffff16146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d49061336d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119449061320d565b60405180910390fd5b61195681611efe565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611aaa83610e91565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611afb826119c3565b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b319061328d565b60405180910390fd5b6000611b4583610e91565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bb457508373ffffffffffffffffffffffffffffffffffffffff16611b9c846107f4565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bc55750611bc48185611789565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bee82610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b9061338d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061324d565b60405180910390fd5b611cbf838383612380565b611cca600082611a37565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1a91906135e9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d719190613562565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd336001846040518463ffffffff1660e01b8152600401611e8a939291906130a0565b602060405180830381600087803b158015611ea457600080fd5b505af1158015611eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edc9190612b31565b5050565b611efa828260405180602001604052806000815250612385565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a9061326d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121249190613123565b60405180910390a3505050565b61213c848484611bce565b612148848484846123e0565b612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e906131ed565b60405180910390fd5b50505050565b6060600d805461219c9061371b565b80601f01602080910402602001604051908101604052809291908181526020018280546121c89061371b565b80156122155780601f106121ea57610100808354040283529160200191612215565b820191906000526020600020905b8154815290600101906020018083116121f857829003601f168201915b5050505050905090565b60606000821415612267576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061237b565b600082905060005b600082146122995780806122829061377e565b915050600a8261229291906135b8565b915061226f565b60008167ffffffffffffffff8111156122b5576122b46138b4565b5b6040519080825280601f01601f1916602001820160405280156122e75781602001600182028036833780820191505090505b5090505b600085146123745760018261230091906135e9565b9150600a8561230f91906137c7565b603061231b9190613562565b60f81b81838151811061233157612330613885565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561236d91906135b8565b94506122eb565b8093505050505b919050565b505050565b61238f8383612577565b61239c60008484846123e0565b6123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906131ed565b60405180910390fd5b505050565b60006124018473ffffffffffffffffffffffffffffffffffffffff16612745565b1561256a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261242a611a2f565b8786866040518563ffffffff1660e01b815260040161244c94939291906130d7565b602060405180830381600087803b15801561246657600080fd5b505af192505050801561249757506040513d601f19601f820116820180604052508101906124949190612b8b565b60015b61251a573d80600081146124c7576040519150601f19603f3d011682016040523d82523d6000602084013e6124cc565b606091505b50600081511415612512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612509906131ed565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061256f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de9061332d565b60405180910390fd5b6125f0816119c3565b15612630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126279061322d565b60405180910390fd5b61263c60008383612380565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268c9190613562565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546127649061371b565b90600052602060002090601f01602090048101928261278657600085556127cd565b82601f1061279f57805160ff19168380011785556127cd565b828001600101855582156127cd579182015b828111156127cc5782518255916020019190600101906127b1565b5b5090506127da91906127de565b5090565b5b808211156127f75760008160009055506001016127df565b5090565b600061280e612809846134bd565b613498565b90508281526020810184848401111561282a576128296138e8565b5b6128358482856136d9565b509392505050565b600061285061284b846134ee565b613498565b90508281526020810184848401111561286c5761286b6138e8565b5b6128778482856136d9565b509392505050565b60008135905061288e81613e50565b92915050565b6000813590506128a381613e67565b92915050565b6000815190506128b881613e67565b92915050565b6000813590506128cd81613e7e565b92915050565b6000815190506128e281613e7e565b92915050565b600082601f8301126128fd576128fc6138e3565b5b813561290d8482602086016127fb565b91505092915050565b600082601f83011261292b5761292a6138e3565b5b813561293b84826020860161283d565b91505092915050565b60008135905061295381613e95565b92915050565b60008151905061296881613e95565b92915050565b600060208284031215612984576129836138f2565b5b60006129928482850161287f565b91505092915050565b600080604083850312156129b2576129b16138f2565b5b60006129c08582860161287f565b92505060206129d18582860161287f565b9150509250929050565b6000806000606084860312156129f4576129f36138f2565b5b6000612a028682870161287f565b9350506020612a138682870161287f565b9250506040612a2486828701612944565b9150509250925092565b60008060008060808587031215612a4857612a476138f2565b5b6000612a568782880161287f565b9450506020612a678782880161287f565b9350506040612a7887828801612944565b925050606085013567ffffffffffffffff811115612a9957612a986138ed565b5b612aa5878288016128e8565b91505092959194509250565b60008060408385031215612ac857612ac76138f2565b5b6000612ad68582860161287f565b9250506020612ae785828601612894565b9150509250929050565b60008060408385031215612b0857612b076138f2565b5b6000612b168582860161287f565b9250506020612b2785828601612944565b9150509250929050565b600060208284031215612b4757612b466138f2565b5b6000612b55848285016128a9565b91505092915050565b600060208284031215612b7457612b736138f2565b5b6000612b82848285016128be565b91505092915050565b600060208284031215612ba157612ba06138f2565b5b6000612baf848285016128d3565b91505092915050565b600060208284031215612bce57612bcd6138f2565b5b600082013567ffffffffffffffff811115612bec57612beb6138ed565b5b612bf884828501612916565b91505092915050565b600060208284031215612c1757612c166138f2565b5b6000612c2584828501612944565b91505092915050565b600060208284031215612c4457612c436138f2565b5b6000612c5284828501612959565b91505092915050565b60008060408385031215612c7257612c716138f2565b5b6000612c8085828601612944565b925050602083013567ffffffffffffffff811115612ca157612ca06138ed565b5b612cad85828601612916565b9150509250929050565b612cc08161361d565b82525050565b612ccf8161362f565b82525050565b6000612ce08261351f565b612cea8185613535565b9350612cfa8185602086016136e8565b612d03816138f7565b840191505092915050565b612d1781613691565b82525050565b612d26816136a3565b82525050565b6000612d378261352a565b612d418185613546565b9350612d518185602086016136e8565b612d5a816138f7565b840191505092915050565b6000612d708261352a565b612d7a8185613557565b9350612d8a8185602086016136e8565b80840191505092915050565b6000612da3602383613546565b9150612dae82613908565b604082019050919050565b6000612dc6603283613546565b9150612dd182613957565b604082019050919050565b6000612de9602683613546565b9150612df4826139a6565b604082019050919050565b6000612e0c601c83613546565b9150612e17826139f5565b602082019050919050565b6000612e2f602483613546565b9150612e3a82613a1e565b604082019050919050565b6000612e52601983613546565b9150612e5d82613a6d565b602082019050919050565b6000612e75602c83613546565b9150612e8082613a96565b604082019050919050565b6000612e98603883613546565b9150612ea382613ae5565b604082019050919050565b6000612ebb602a83613546565b9150612ec682613b34565b604082019050919050565b6000612ede602983613546565b9150612ee982613b83565b604082019050919050565b6000612f01601d83613546565b9150612f0c82613bd2565b602082019050919050565b6000612f24602083613546565b9150612f2f82613bfb565b602082019050919050565b6000612f47602c83613546565b9150612f5282613c24565b604082019050919050565b6000612f6a602083613546565b9150612f7582613c73565b602082019050919050565b6000612f8d602983613546565b9150612f9882613c9c565b604082019050919050565b6000612fb0602f83613546565b9150612fbb82613ceb565b604082019050919050565b6000612fd3602183613546565b9150612fde82613d3a565b604082019050919050565b6000612ff6601383613546565b915061300182613d89565b602082019050919050565b6000613019603183613546565b915061302482613db2565b604082019050919050565b600061303c603083613546565b915061304782613e01565b604082019050919050565b61305b81613687565b82525050565b600061306d8285612d65565b91506130798284612d65565b91508190509392505050565b600060208201905061309a6000830184612cb7565b92915050565b60006060820190506130b56000830186612cb7565b6130c26020830185612cb7565b6130cf6040830184613052565b949350505050565b60006080820190506130ec6000830187612cb7565b6130f96020830186612cb7565b6131066040830185613052565b81810360608301526131188184612cd5565b905095945050505050565b60006020820190506131386000830184612cc6565b92915050565b60006020820190506131536000830184612d0e565b92915050565b600060208201905061316e6000830184612d1d565b92915050565b6000602082019050818103600083015261318e8184612d2c565b905092915050565b600060408201905081810360008301526131b08185612d2c565b905081810360208301526131c48184612d2c565b90509392505050565b600060208201905081810360008301526131e681612d96565b9050919050565b6000602082019050818103600083015261320681612db9565b9050919050565b6000602082019050818103600083015261322681612ddc565b9050919050565b6000602082019050818103600083015261324681612dff565b9050919050565b6000602082019050818103600083015261326681612e22565b9050919050565b6000602082019050818103600083015261328681612e45565b9050919050565b600060208201905081810360008301526132a681612e68565b9050919050565b600060208201905081810360008301526132c681612e8b565b9050919050565b600060208201905081810360008301526132e681612eae565b9050919050565b6000602082019050818103600083015261330681612ed1565b9050919050565b6000602082019050818103600083015261332681612ef4565b9050919050565b6000602082019050818103600083015261334681612f17565b9050919050565b6000602082019050818103600083015261336681612f3a565b9050919050565b6000602082019050818103600083015261338681612f5d565b9050919050565b600060208201905081810360008301526133a681612f80565b9050919050565b600060208201905081810360008301526133c681612fa3565b9050919050565b600060208201905081810360008301526133e681612fc6565b9050919050565b6000602082019050818103600083015261340681612fe9565b9050919050565b600060208201905081810360008301526134268161300c565b9050919050565b600060208201905081810360008301526134468161302f565b9050919050565b60006020820190506134626000830184613052565b92915050565b600060408201905061347d6000830185613052565b818103602083015261348f8184612d2c565b90509392505050565b60006134a26134b3565b90506134ae828261374d565b919050565b6000604051905090565b600067ffffffffffffffff8211156134d8576134d76138b4565b5b6134e1826138f7565b9050602081019050919050565b600067ffffffffffffffff821115613509576135086138b4565b5b613512826138f7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061356d82613687565b915061357883613687565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135ad576135ac6137f8565b5b828201905092915050565b60006135c382613687565b91506135ce83613687565b9250826135de576135dd613827565b5b828204905092915050565b60006135f482613687565b91506135ff83613687565b925082821015613612576136116137f8565b5b828203905092915050565b600061362882613667565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061369c826136b5565b9050919050565b60006136ae826136b5565b9050919050565b60006136c0826136c7565b9050919050565b60006136d282613667565b9050919050565b82818337600083830152505050565b60005b838110156137065780820151818401526020810190506136eb565b83811115613715576000848401525b50505050565b6000600282049050600182168061373357607f821691505b6020821081141561374757613746613856565b5b50919050565b613756826138f7565b810181811067ffffffffffffffff82111715613775576137746138b4565b5b80604052505050565b600061378982613687565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137bc576137bb6137f8565b5b600182019050919050565b60006137d282613687565b91506137dd83613687565b9250826137ed576137ec613827565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416c6c20536b656c6c6965436174732068617665206265656e2073756d6d6f6e60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f596f75206d757374206f776e207468697320536b656c6c69654361742e000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206e616d65206c656e67746800000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f54776f20536b656c6c6965732061726520726571756972656420746f2073756d60008201527f6d6f6e206120536b656c6c696543617400000000000000000000000000000000602082015250565b613e598161361d565b8114613e6457600080fd5b50565b613e708161362f565b8114613e7b57600080fd5b50565b613e878161363b565b8114613e9257600080fd5b50565b613e9e81613687565b8114613ea957600080fd5b5056fea264697066735822122072bcb14c6131bd018c6c23c754f1cb487d8316c5cc09255e85a77a4b0fe7d04764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b536b656c6c6965436174730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534b43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046e756c6c00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021c5760003560e01c8063715018a611610125578063bbcebab6116100ad578063e03ce7371161007c578063e03ce737146105c9578063e902eb56146105e7578063e985e9c514610618578063f0c1d8e414610648578063f2fde38b146106645761021c565b8063bbcebab614610541578063c39cbef11461055f578063c87b56dd1461057b578063da95287e146105ab5761021c565b80638da5cb5b116100f45780638da5cb5b146104b157806395d89b41146104cf5780639f820675146104ed578063a22cb46514610509578063b88d4fde146105255761021c565b8063715018a6146104515780637186a73f1461045b57806381478f771461047757806384505746146104955761021c565b80634311de8f116101a8578063580879a111610177578063580879a1146103975780636352211e146103b55780636c0360eb146103e557806370a082311461040357806370d5ae05146104335761021c565b80634311de8f1461034b5780634d426528146103555780634fd0ce321461037157806355f804b31461037b5761021c565b806318160ddd116101ef57806318160ddd146102bb57806323b872dd146102d95780632626f4e0146102f557806332cb6b0c1461031157806342842e0e1461032f5761021c565b806301ffc9a71461022157806306fdde0314610251578063081812fc1461026f578063095ea7b31461029f575b600080fd5b61023b60048036038101906102369190612b5e565b610680565b6040516102489190613123565b60405180910390f35b610259610762565b6040516102669190613174565b60405180910390f35b61028960048036038101906102849190612c01565b6107f4565b6040516102969190613085565b60405180910390f35b6102b960048036038101906102b49190612af1565b610879565b005b6102c3610991565b6040516102d0919061344d565b60405180910390f35b6102f360048036038101906102ee91906129db565b610997565b005b61030f600480360381019061030a9190612c01565b6109f7565b005b610319610a7d565b604051610326919061344d565b60405180910390f35b610349600480360381019061034491906129db565b610a83565b005b610353610aa3565b005b61036f600480360381019061036a9190612c5b565b610b6e565b005b610379610c57565b005b61039560048036038101906103909190612bb8565b610df5565b005b61039f610e8b565b6040516103ac919061344d565b60405180910390f35b6103cf60048036038101906103ca9190612c01565b610e91565b6040516103dc9190613085565b60405180910390f35b6103ed610f43565b6040516103fa9190613174565b60405180910390f35b61041d6004803603810190610418919061296e565b610fd1565b60405161042a919061344d565b60405180910390f35b61043b611089565b6040516104489190613085565b60405180910390f35b61045961108e565b005b61047560048036038101906104709190612c01565b611116565b005b61047f61119c565b60405161048c919061344d565b60405180910390f35b6104af60048036038101906104aa9190612c01565b6111a2565b005b6104b9611228565b6040516104c69190613085565b60405180910390f35b6104d7611252565b6040516104e49190613174565b60405180910390f35b6105076004803603810190610502919061296e565b6112e4565b005b610523600480360381019061051e9190612ab1565b6113a4565b005b61053f600480360381019061053a9190612a2e565b6113ba565b005b61054961141c565b604051610556919061313e565b60405180910390f35b61057960048036038101906105749190612c5b565b611442565b005b61059560048036038101906105909190612c01565b611582565b6040516105a29190613174565b60405180910390f35b6105b3611629565b6040516105c09190613159565b60405180910390f35b6105d161164f565b6040516105de919061344d565b60405180910390f35b61060160048036038101906105fc9190612c01565b611655565b60405161060f929190613196565b60405180910390f35b610632600480360381019061062d919061299b565b611789565b60405161063f9190613123565b60405180910390f35b610662600480360381019061065d919061296e565b61181d565b005b61067e6004803603810190610679919061296e565b611861565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075b575061075a82611959565b5b9050919050565b6060600080546107719061371b565b80601f016020809104026020016040519081016040528092919081815260200182805461079d9061371b565b80156107ea5780601f106107bf576101008083540402835291602001916107ea565b820191906000526020600020905b8154815290600101906020018083116107cd57829003601f168201915b5050505050905090565b60006107ff826119c3565b61083e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108359061334d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088482610e91565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec906133cd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610914611a2f565b73ffffffffffffffffffffffffffffffffffffffff16148061094357506109428161093d611a2f565b611789565b5b610982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610979906132ad565b60405180910390fd5b61098c8383611a37565b505050565b600c5481565b6109a86109a2611a2f565b82611af0565b6109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de9061340d565b60405180910390fd5b6109f2838383611bce565b505050565b6109ff611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610a1d611228565b73ffffffffffffffffffffffffffffffffffffffff1614610a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6a9061336d565b60405180910390fd5b80600a8190555050565b611a0a81565b610a9e838383604051806020016040528060008152506113ba565b505050565b610aab611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610ac9611228565b73ffffffffffffffffffffffffffffffffffffffff1614610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b169061336d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b6a573d6000803e3d6000fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610b8e83610e91565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb9061330d565b60405180910390fd5b610bef600b54611e2a565b80600e60008481526020019081526020016000206001019080519060200190610c19929190612758565b507fb5d3e30019a90e2b35059d238ddbac8259a3d65d9a4f47395d713901d17cc1128282604051610c4b929190613468565b60405180910390a15050565b6001600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610cb49190613085565b60206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190612c2e565b11610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b9061342d565b60405180910390fd5b611a0a600c541115610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d82906131cd565b60405180910390fd5b610d96600954611e2a565b6000600c549050610dbb33600c60008154610db09061377e565b919050819055611ee0565b7fec6fa41283bf7b2880d6b62a1b5d58715786782e21df1fbbff21174bbd818a1481604051610dea919061344d565b60405180910390a150565b610dfd611a2f565b73ffffffffffffffffffffffffffffffffffffffff16610e1b611228565b73ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e689061336d565b60405180910390fd5b80600d9080519060200190610e87929190612758565b5050565b60095481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f31906132ed565b60405180910390fd5b80915050919050565b600d8054610f509061371b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7c9061371b565b8015610fc95780601f10610f9e57610100808354040283529160200191610fc9565b820191906000526020600020905b815481529060010190602001808311610fac57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906132cd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600181565b611096611a2f565b73ffffffffffffffffffffffffffffffffffffffff166110b4611228565b73ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111019061336d565b60405180910390fd5b6111146000611efe565b565b61111e611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661113c611228565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111899061336d565b60405180910390fd5b80600b8190555050565b600a5481565b6111aa611a2f565b73ffffffffffffffffffffffffffffffffffffffff166111c8611228565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112159061336d565b60405180910390fd5b8060098190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112619061371b565b80601f016020809104026020016040519081016040528092919081815260200182805461128d9061371b565b80156112da5780601f106112af576101008083540402835291602001916112da565b820191906000526020600020905b8154815290600101906020018083116112bd57829003601f168201915b5050505050905090565b6112ec611a2f565b73ffffffffffffffffffffffffffffffffffffffff1661130a611228565b73ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113579061336d565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113b66113af611a2f565b8383611fc4565b5050565b6113cb6113c5611a2f565b83611af0565b61140a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114019061340d565b60405180910390fd5b61141684848484612131565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1661146283610e91565b73ffffffffffffffffffffffffffffffffffffffff16146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af9061330d565b60405180910390fd5b6000819050600081511180156114cf575060198151105b61150e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611505906133ed565b60405180910390fd5b611519600a54611e2a565b81600e60008581526020019081526020016000206000019080519060200190611543929190612758565b507f8edfa912e70e283a8ef6d6f52cd1faef9690ff989eff2f11a134e8478ba7b28b8383604051611575929190613468565b60405180910390a1505050565b606061158d826119c3565b6115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c3906133ad565b60405180910390fd5b60006115d661218d565b905060008151116115f65760405180602001604052806000815250611621565b806116008461221f565b604051602001611611929190613061565b6040516020818303038152906040525b915050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600e6020528060005260406000206000915090508060000180546116789061371b565b80601f01602080910402602001604051908101604052809291908181526020018280546116a49061371b565b80156116f15780601f106116c6576101008083540402835291602001916116f1565b820191906000526020600020905b8154815290600101906020018083116116d457829003601f168201915b5050505050908060010180546117069061371b565b80601f01602080910402602001604051908101604052809291908181526020018280546117329061371b565b801561177f5780601f106117545761010080835404028352916020019161177f565b820191906000526020600020905b81548152906001019060200180831161176257829003601f168201915b5050505050905082565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611869611a2f565b73ffffffffffffffffffffffffffffffffffffffff16611887611228565b73ffffffffffffffffffffffffffffffffffffffff16146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d49061336d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119449061320d565b60405180910390fd5b61195681611efe565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611aaa83610e91565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611afb826119c3565b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b319061328d565b60405180910390fd5b6000611b4583610e91565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bb457508373ffffffffffffffffffffffffffffffffffffffff16611b9c846107f4565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bc55750611bc48185611789565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bee82610e91565b73ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b9061338d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061324d565b60405180910390fd5b611cbf838383612380565b611cca600082611a37565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1a91906135e9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d719190613562565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd336001846040518463ffffffff1660e01b8152600401611e8a939291906130a0565b602060405180830381600087803b158015611ea457600080fd5b505af1158015611eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edc9190612b31565b5050565b611efa828260405180602001604052806000815250612385565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a9061326d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121249190613123565b60405180910390a3505050565b61213c848484611bce565b612148848484846123e0565b612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e906131ed565b60405180910390fd5b50505050565b6060600d805461219c9061371b565b80601f01602080910402602001604051908101604052809291908181526020018280546121c89061371b565b80156122155780601f106121ea57610100808354040283529160200191612215565b820191906000526020600020905b8154815290600101906020018083116121f857829003601f168201915b5050505050905090565b60606000821415612267576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061237b565b600082905060005b600082146122995780806122829061377e565b915050600a8261229291906135b8565b915061226f565b60008167ffffffffffffffff8111156122b5576122b46138b4565b5b6040519080825280601f01601f1916602001820160405280156122e75781602001600182028036833780820191505090505b5090505b600085146123745760018261230091906135e9565b9150600a8561230f91906137c7565b603061231b9190613562565b60f81b81838151811061233157612330613885565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561236d91906135b8565b94506122eb565b8093505050505b919050565b505050565b61238f8383612577565b61239c60008484846123e0565b6123db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d2906131ed565b60405180910390fd5b505050565b60006124018473ffffffffffffffffffffffffffffffffffffffff16612745565b1561256a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261242a611a2f565b8786866040518563ffffffff1660e01b815260040161244c94939291906130d7565b602060405180830381600087803b15801561246657600080fd5b505af192505050801561249757506040513d601f19601f820116820180604052508101906124949190612b8b565b60015b61251a573d80600081146124c7576040519150601f19603f3d011682016040523d82523d6000602084013e6124cc565b606091505b50600081511415612512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612509906131ed565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061256f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125de9061332d565b60405180910390fd5b6125f0816119c3565b15612630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126279061322d565b60405180910390fd5b61263c60008383612380565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268c9190613562565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546127649061371b565b90600052602060002090601f01602090048101928261278657600085556127cd565b82601f1061279f57805160ff19168380011785556127cd565b828001600101855582156127cd579182015b828111156127cc5782518255916020019190600101906127b1565b5b5090506127da91906127de565b5090565b5b808211156127f75760008160009055506001016127df565b5090565b600061280e612809846134bd565b613498565b90508281526020810184848401111561282a576128296138e8565b5b6128358482856136d9565b509392505050565b600061285061284b846134ee565b613498565b90508281526020810184848401111561286c5761286b6138e8565b5b6128778482856136d9565b509392505050565b60008135905061288e81613e50565b92915050565b6000813590506128a381613e67565b92915050565b6000815190506128b881613e67565b92915050565b6000813590506128cd81613e7e565b92915050565b6000815190506128e281613e7e565b92915050565b600082601f8301126128fd576128fc6138e3565b5b813561290d8482602086016127fb565b91505092915050565b600082601f83011261292b5761292a6138e3565b5b813561293b84826020860161283d565b91505092915050565b60008135905061295381613e95565b92915050565b60008151905061296881613e95565b92915050565b600060208284031215612984576129836138f2565b5b60006129928482850161287f565b91505092915050565b600080604083850312156129b2576129b16138f2565b5b60006129c08582860161287f565b92505060206129d18582860161287f565b9150509250929050565b6000806000606084860312156129f4576129f36138f2565b5b6000612a028682870161287f565b9350506020612a138682870161287f565b9250506040612a2486828701612944565b9150509250925092565b60008060008060808587031215612a4857612a476138f2565b5b6000612a568782880161287f565b9450506020612a678782880161287f565b9350506040612a7887828801612944565b925050606085013567ffffffffffffffff811115612a9957612a986138ed565b5b612aa5878288016128e8565b91505092959194509250565b60008060408385031215612ac857612ac76138f2565b5b6000612ad68582860161287f565b9250506020612ae785828601612894565b9150509250929050565b60008060408385031215612b0857612b076138f2565b5b6000612b168582860161287f565b9250506020612b2785828601612944565b9150509250929050565b600060208284031215612b4757612b466138f2565b5b6000612b55848285016128a9565b91505092915050565b600060208284031215612b7457612b736138f2565b5b6000612b82848285016128be565b91505092915050565b600060208284031215612ba157612ba06138f2565b5b6000612baf848285016128d3565b91505092915050565b600060208284031215612bce57612bcd6138f2565b5b600082013567ffffffffffffffff811115612bec57612beb6138ed565b5b612bf884828501612916565b91505092915050565b600060208284031215612c1757612c166138f2565b5b6000612c2584828501612944565b91505092915050565b600060208284031215612c4457612c436138f2565b5b6000612c5284828501612959565b91505092915050565b60008060408385031215612c7257612c716138f2565b5b6000612c8085828601612944565b925050602083013567ffffffffffffffff811115612ca157612ca06138ed565b5b612cad85828601612916565b9150509250929050565b612cc08161361d565b82525050565b612ccf8161362f565b82525050565b6000612ce08261351f565b612cea8185613535565b9350612cfa8185602086016136e8565b612d03816138f7565b840191505092915050565b612d1781613691565b82525050565b612d26816136a3565b82525050565b6000612d378261352a565b612d418185613546565b9350612d518185602086016136e8565b612d5a816138f7565b840191505092915050565b6000612d708261352a565b612d7a8185613557565b9350612d8a8185602086016136e8565b80840191505092915050565b6000612da3602383613546565b9150612dae82613908565b604082019050919050565b6000612dc6603283613546565b9150612dd182613957565b604082019050919050565b6000612de9602683613546565b9150612df4826139a6565b604082019050919050565b6000612e0c601c83613546565b9150612e17826139f5565b602082019050919050565b6000612e2f602483613546565b9150612e3a82613a1e565b604082019050919050565b6000612e52601983613546565b9150612e5d82613a6d565b602082019050919050565b6000612e75602c83613546565b9150612e8082613a96565b604082019050919050565b6000612e98603883613546565b9150612ea382613ae5565b604082019050919050565b6000612ebb602a83613546565b9150612ec682613b34565b604082019050919050565b6000612ede602983613546565b9150612ee982613b83565b604082019050919050565b6000612f01601d83613546565b9150612f0c82613bd2565b602082019050919050565b6000612f24602083613546565b9150612f2f82613bfb565b602082019050919050565b6000612f47602c83613546565b9150612f5282613c24565b604082019050919050565b6000612f6a602083613546565b9150612f7582613c73565b602082019050919050565b6000612f8d602983613546565b9150612f9882613c9c565b604082019050919050565b6000612fb0602f83613546565b9150612fbb82613ceb565b604082019050919050565b6000612fd3602183613546565b9150612fde82613d3a565b604082019050919050565b6000612ff6601383613546565b915061300182613d89565b602082019050919050565b6000613019603183613546565b915061302482613db2565b604082019050919050565b600061303c603083613546565b915061304782613e01565b604082019050919050565b61305b81613687565b82525050565b600061306d8285612d65565b91506130798284612d65565b91508190509392505050565b600060208201905061309a6000830184612cb7565b92915050565b60006060820190506130b56000830186612cb7565b6130c26020830185612cb7565b6130cf6040830184613052565b949350505050565b60006080820190506130ec6000830187612cb7565b6130f96020830186612cb7565b6131066040830185613052565b81810360608301526131188184612cd5565b905095945050505050565b60006020820190506131386000830184612cc6565b92915050565b60006020820190506131536000830184612d0e565b92915050565b600060208201905061316e6000830184612d1d565b92915050565b6000602082019050818103600083015261318e8184612d2c565b905092915050565b600060408201905081810360008301526131b08185612d2c565b905081810360208301526131c48184612d2c565b90509392505050565b600060208201905081810360008301526131e681612d96565b9050919050565b6000602082019050818103600083015261320681612db9565b9050919050565b6000602082019050818103600083015261322681612ddc565b9050919050565b6000602082019050818103600083015261324681612dff565b9050919050565b6000602082019050818103600083015261326681612e22565b9050919050565b6000602082019050818103600083015261328681612e45565b9050919050565b600060208201905081810360008301526132a681612e68565b9050919050565b600060208201905081810360008301526132c681612e8b565b9050919050565b600060208201905081810360008301526132e681612eae565b9050919050565b6000602082019050818103600083015261330681612ed1565b9050919050565b6000602082019050818103600083015261332681612ef4565b9050919050565b6000602082019050818103600083015261334681612f17565b9050919050565b6000602082019050818103600083015261336681612f3a565b9050919050565b6000602082019050818103600083015261338681612f5d565b9050919050565b600060208201905081810360008301526133a681612f80565b9050919050565b600060208201905081810360008301526133c681612fa3565b9050919050565b600060208201905081810360008301526133e681612fc6565b9050919050565b6000602082019050818103600083015261340681612fe9565b9050919050565b600060208201905081810360008301526134268161300c565b9050919050565b600060208201905081810360008301526134468161302f565b9050919050565b60006020820190506134626000830184613052565b92915050565b600060408201905061347d6000830185613052565b818103602083015261348f8184612d2c565b90509392505050565b60006134a26134b3565b90506134ae828261374d565b919050565b6000604051905090565b600067ffffffffffffffff8211156134d8576134d76138b4565b5b6134e1826138f7565b9050602081019050919050565b600067ffffffffffffffff821115613509576135086138b4565b5b613512826138f7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061356d82613687565b915061357883613687565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135ad576135ac6137f8565b5b828201905092915050565b60006135c382613687565b91506135ce83613687565b9250826135de576135dd613827565b5b828204905092915050565b60006135f482613687565b91506135ff83613687565b925082821015613612576136116137f8565b5b828203905092915050565b600061362882613667565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061369c826136b5565b9050919050565b60006136ae826136b5565b9050919050565b60006136c0826136c7565b9050919050565b60006136d282613667565b9050919050565b82818337600083830152505050565b60005b838110156137065780820151818401526020810190506136eb565b83811115613715576000848401525b50505050565b6000600282049050600182168061373357607f821691505b6020821081141561374757613746613856565b5b50919050565b613756826138f7565b810181811067ffffffffffffffff82111715613775576137746138b4565b5b80604052505050565b600061378982613687565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137bc576137bb6137f8565b5b600182019050919050565b60006137d282613687565b91506137dd83613687565b9250826137ed576137ec613827565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416c6c20536b656c6c6965436174732068617665206265656e2073756d6d6f6e60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f596f75206d757374206f776e207468697320536b656c6c69654361742e000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206e616d65206c656e67746800000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f54776f20536b656c6c6965732061726520726571756972656420746f2073756d60008201527f6d6f6e206120536b656c6c696543617400000000000000000000000000000000602082015250565b613e598161361d565b8114613e6457600080fd5b50565b613e708161362f565b8114613e7b57600080fd5b50565b613e878161363b565b8114613e9257600080fd5b50565b613e9e81613687565b8114613ea957600080fd5b5056fea264697066735822122072bcb14c6131bd018c6c23c754f1cb487d8316c5cc09255e85a77a4b0fe7d04764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b536b656c6c6965436174730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534b43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046e756c6c00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): SkellieCats
Arg [1] : symbol_ (string): SKC
Arg [2] : baseURI_ (string): null
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 536b656c6c696543617473000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 534b430000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 6e756c6c00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
36696:3215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23742:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24687:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26246:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25769:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37162:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26996:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39416:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37026:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27406:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39757:145;;;:::i;:::-;;38315:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37868:441;;;:::i;:::-;;39081:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36889:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24381:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37197:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24111:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37074:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;39521:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36935:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39305:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24856:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39624:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26539:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27662:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36829:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38621:454;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25031:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36855:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36979:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37227:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26765:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37621:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23742:305;23844:4;23896:25;23881:40;;;:11;:40;;;;:105;;;;23953:33;23938:48;;;:11;:48;;;;23881:105;:158;;;;24003:36;24027:11;24003:23;:36::i;:::-;23881:158;23861:178;;23742:305;;;:::o;24687:100::-;24741:13;24774:5;24767:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24687:100;:::o;26246:221::-;26322:7;26350:16;26358:7;26350;:16::i;:::-;26342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:15;:24;26451:7;26435:24;;;;;;;;;;;;;;;;;;;;;26428:31;;26246:221;;;:::o;25769:411::-;25850:13;25866:23;25881:7;25866:14;:23::i;:::-;25850:39;;25914:5;25908:11;;:2;:11;;;;25900:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26008:5;25992:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26017:37;26034:5;26041:12;:10;:12::i;:::-;26017:16;:37::i;:::-;25992:62;25970:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26151:21;26160:2;26164:7;26151:8;:21::i;:::-;25839:341;25769:411;;:::o;37162:26::-;;;;:::o;26996:339::-;27191:41;27210:12;:10;:12::i;:::-;27224:7;27191:18;:41::i;:::-;27183:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27299:28;27309:4;27315:2;27319:7;27299:9;:28::i;:::-;26996:339;;;:::o;39416:99::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39498:9:::1;39485:10;:22;;;;39416:99:::0;:::o;37026:41::-;37063:4;37026:41;:::o;27406:185::-;27544:39;27561:4;27567:2;27571:7;27544:39;;;;;;;;;;;;:16;:39::i;:::-;27406:185;;;:::o;39757:145::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39810:12:::1;39825:21;39810:36;;39865:10;39857:28;;:37;39886:7;39857:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39799:103;39757:145::o:0;38315:300::-;38430:10;38405:35;;:21;38413:12;38405:7;:21::i;:::-;:35;;;38397:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38487:20;38497:9;;38487;:20::i;:::-;38553:6;38518:14;:28;38533:12;38518:28;;;;;;;;;;;:32;;:41;;;;;;;;;;;;:::i;:::-;;38575:32;38586:12;38600:6;38575:32;;;;;;;:::i;:::-;;;;;;;;38315:300;;:::o;37868:441::-;37967:1;37933:8;;;;;;;;;;;37923:29;;;37953:10;37923:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;37915:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;37063:4;38064:11;;:25;;38056:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38150:23;38160:12;;38150:9;:23::i;:::-;38184:20;38207:11;;38184:34;;38229:36;38239:10;38253:11;;38251:13;;;;;:::i;:::-;;;;;;;38229:9;:36::i;:::-;38281:20;38288:12;38281:20;;;;;;:::i;:::-;;;;;;;;37904:405;37868:441::o;39081:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39163:8:::1;39153:7;:18;;;;;;;;;;;;:::i;:::-;;39081:98:::0;:::o;36889:39::-;;;;:::o;24381:239::-;24453:7;24473:13;24489:7;:16;24497:7;24489:16;;;;;;;;;;;;;;;;;;;;;24473:32;;24541:1;24524:19;;:5;:19;;;;24516:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24607:5;24600:12;;;24381:239;;;:::o;37197:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24111:208::-;24183:7;24228:1;24211:19;;:5;:19;;;;24203:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24295:9;:16;24305:5;24295:16;;;;;;;;;;;;;;;;24288:23;;24111:208;;;:::o;37074:81::-;37113:42;37074:81;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;39521:97::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39601:9:::1;39589;:21;;;;39521:97:::0;:::o;36935:37::-;;;;:::o;39305:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39391:9:::1;39376:12;:24;;;;39305:103:::0;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;24856:104::-;24912:13;24945:7;24938:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24856:104;:::o;39624:121::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39721:15:::1;39700:8;;:37;;;;;;;;;;;;;;;;;;39624:121:::0;:::o;26539:155::-;26634:52;26653:12;:10;:12::i;:::-;26667:8;26677;26634:18;:52::i;:::-;26539:155;;:::o;27662:328::-;27837:41;27856:12;:10;:12::i;:::-;27870:7;27837:18;:41::i;:::-;27829:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27943:39;27957:4;27963:2;27967:7;27976:5;27943:13;:39::i;:::-;27662:328;;;;:::o;36829:19::-;;;;;;;;;;;;;:::o;38621:454::-;38738:10;38713:35;;:21;38721:12;38713:7;:21::i;:::-;:35;;;38705:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38793:14;38816:7;38793:31;;38854:1;38843;:8;:12;:29;;;;;38870:2;38859:1;:8;:13;38843:29;38835:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;38942:21;38952:10;;38942:9;:21::i;:::-;39010:7;38974:14;:28;38989:12;38974:28;;;;;;;;;;;:33;;:43;;;;;;;;;;;;:::i;:::-;;39033:34;39045:12;39059:7;39033:34;;;;;;;:::i;:::-;;;;;;;;38694:381;38621:454;;:::o;25031:334::-;25104:13;25138:16;25146:7;25138;:16::i;:::-;25130:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25219:21;25243:10;:8;:10::i;:::-;25219:34;;25295:1;25277:7;25271:21;:25;:86;;;;;;;;;;;;;;;;;25323:7;25332:18;:7;:16;:18::i;:::-;25306:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25271:86;25264:93;;;25031:334;;;:::o;36855:25::-;;;;;;;;;;;;;:::o;36979:36::-;;;;:::o;37227:56::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26765:164::-;26862:4;26886:18;:25;26905:5;26886:25;;;;;;;;;;;;;;;:35;26912:8;26886:35;;;;;;;;;;;;;;;;;;;;;;;;;26879:42;;26765:164;;;;:::o;37621:102::-;37692:12;37677:5;;:28;;;;;;;;;;;;;;;;;;37621:102;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;29500:127::-;29565:4;29617:1;29589:30;;:7;:16;29597:7;29589:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29582:37;;29500:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;33482:174::-;33584:2;33557:15;:24;33573:7;33557:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33640:7;33636:2;33602:46;;33611:23;33626:7;33611:14;:23::i;:::-;33602:46;;;;;;;;;;;;33482:174;;:::o;29794:348::-;29887:4;29912:16;29920:7;29912;:16::i;:::-;29904:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29988:13;30004:23;30019:7;30004:14;:23::i;:::-;29988:39;;30057:5;30046:16;;:7;:16;;;:51;;;;30090:7;30066:31;;:20;30078:7;30066:11;:20::i;:::-;:31;;;30046:51;:87;;;;30101:32;30118:5;30125:7;30101:16;:32::i;:::-;30046:87;30038:96;;;29794:348;;;;:::o;32786:578::-;32945:4;32918:31;;:23;32933:7;32918:14;:23::i;:::-;:31;;;32910:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33028:1;33014:16;;:2;:16;;;;33006:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33084:39;33105:4;33111:2;33115:7;33084:20;:39::i;:::-;33188:29;33205:1;33209:7;33188:8;:29::i;:::-;33249:1;33230:9;:15;33240:4;33230:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33278:1;33261:9;:13;33271:2;33261:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33309:2;33290:7;:16;33298:7;33290:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33348:7;33344:2;33329:27;;33338:4;33329:27;;;;;;;;;;;;32786:578;;;:::o;37729:133::-;37797:5;;;;;;;;;;;:18;;;37816:10;37113:42;37841:10;37797:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37729:133;:::o;30484:110::-;30560:26;30570:2;30574:7;30560:26;;;;;;;;;;;;:9;:26::i;:::-;30484:110;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;33798:315::-;33953:8;33944:17;;:5;:17;;;;33936:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34040:8;34002:18;:25;34021:5;34002:25;;;;;;;;;;;;;;;:35;34028:8;34002:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34086:8;34064:41;;34079:5;34064:41;;;34096:8;34064:41;;;;;;:::i;:::-;;;;;;;;33798:315;;;:::o;28872:::-;29029:28;29039:4;29045:2;29049:7;29029:9;:28::i;:::-;29076:48;29099:4;29105:2;29109:7;29118:5;29076:22;:48::i;:::-;29068:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28872:315;;;;:::o;39187:108::-;39247:13;39280:7;39273:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39187:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;36049:126::-;;;;:::o;30821:321::-;30951:18;30957:2;30961:7;30951:5;:18::i;:::-;31002:54;31033:1;31037:2;31041:7;31050:5;31002:22;:54::i;:::-;30980:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30821:321;;;:::o;34678:799::-;34833:4;34854:15;:2;:13;;;:15::i;:::-;34850:620;;;34906:2;34890:36;;;34927:12;:10;:12::i;:::-;34941:4;34947:7;34956:5;34890:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34886:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35149:1;35132:6;:13;:18;35128:272;;;35175:60;;;;;;;;;;:::i;:::-;;;;;;;;35128:272;35350:6;35344:13;35335:6;35331:2;35327:15;35320:38;34886:529;35023:41;;;35013:51;;;:6;:51;;;;35006:58;;;;;34850:620;35454:4;35447:11;;34678:799;;;;;;;:::o;31478:382::-;31572:1;31558:16;;:2;:16;;;;31550:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31631:16;31639:7;31631;:16::i;:::-;31630:17;31622:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31693:45;31722:1;31726:2;31730:7;31693:20;:45::i;:::-;31768:1;31751:9;:13;31761:2;31751:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31799:2;31780:7;:16;31788:7;31780:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31844:7;31840:2;31819:33;;31836:1;31819:33;;;;;;;;;;;;31478:382;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:143::-;2477:5;2508:6;2502:13;2493:22;;2524:33;2551:5;2524:33;:::i;:::-;2420:143;;;;:::o;2569:329::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2569:329;;;;:::o;2904:474::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;2904:474;;;;;:::o;3384:619::-;3461:6;3469;3477;3526:2;3514:9;3505:7;3501:23;3497:32;3494:119;;;3532:79;;:::i;:::-;3494:119;3652:1;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3623:117;3779:2;3805:53;3850:7;3841:6;3830:9;3826:22;3805:53;:::i;:::-;3795:63;;3750:118;3907:2;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3878:118;3384:619;;;;;:::o;4009:943::-;4104:6;4112;4120;4128;4177:3;4165:9;4156:7;4152:23;4148:33;4145:120;;;4184:79;;:::i;:::-;4145:120;4304:1;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4275:117;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4559:2;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4530:118;4715:2;4704:9;4700:18;4687:32;4746:18;4738:6;4735:30;4732:117;;;4768:79;;:::i;:::-;4732:117;4873:62;4927:7;4918:6;4907:9;4903:22;4873:62;:::i;:::-;4863:72;;4658:287;4009:943;;;;;;;:::o;4958:468::-;5023:6;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:50;5401:7;5392:6;5381:9;5377:22;5359:50;:::i;:::-;5349:60;;5304:115;4958:468;;;;;:::o;5432:474::-;5500:6;5508;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5810:2;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5781:118;5432:474;;;;;:::o;5912:345::-;5979:6;6028:2;6016:9;6007:7;6003:23;5999:32;5996:119;;;6034:79;;:::i;:::-;5996:119;6154:1;6179:61;6232:7;6223:6;6212:9;6208:22;6179:61;:::i;:::-;6169:71;;6125:125;5912:345;;;;:::o;6263:327::-;6321:6;6370:2;6358:9;6349:7;6345:23;6341:32;6338:119;;;6376:79;;:::i;:::-;6338:119;6496:1;6521:52;6565:7;6556:6;6545:9;6541:22;6521:52;:::i;:::-;6511:62;;6467:116;6263:327;;;;:::o;6596:349::-;6665:6;6714:2;6702:9;6693:7;6689:23;6685:32;6682:119;;;6720:79;;:::i;:::-;6682:119;6840:1;6865:63;6920:7;6911:6;6900:9;6896:22;6865:63;:::i;:::-;6855:73;;6811:127;6596:349;;;;:::o;6951:509::-;7020:6;7069:2;7057:9;7048:7;7044:23;7040:32;7037:119;;;7075:79;;:::i;:::-;7037:119;7223:1;7212:9;7208:17;7195:31;7253:18;7245:6;7242:30;7239:117;;;7275:79;;:::i;:::-;7239:117;7380:63;7435:7;7426:6;7415:9;7411:22;7380:63;:::i;:::-;7370:73;;7166:287;6951:509;;;;:::o;7466:329::-;7525:6;7574:2;7562:9;7553:7;7549:23;7545:32;7542:119;;;7580:79;;:::i;:::-;7542:119;7700:1;7725:53;7770:7;7761:6;7750:9;7746:22;7725:53;:::i;:::-;7715:63;;7671:117;7466:329;;;;:::o;7801:351::-;7871:6;7920:2;7908:9;7899:7;7895:23;7891:32;7888:119;;;7926:79;;:::i;:::-;7888:119;8046:1;8071:64;8127:7;8118:6;8107:9;8103:22;8071:64;:::i;:::-;8061:74;;8017:128;7801:351;;;;:::o;8158:654::-;8236:6;8244;8293:2;8281:9;8272:7;8268:23;8264:32;8261:119;;;8299:79;;:::i;:::-;8261:119;8419:1;8444:53;8489:7;8480:6;8469:9;8465:22;8444:53;:::i;:::-;8434:63;;8390:117;8574:2;8563:9;8559:18;8546:32;8605:18;8597:6;8594:30;8591:117;;;8627:79;;:::i;:::-;8591:117;8732:63;8787:7;8778:6;8767:9;8763:22;8732:63;:::i;:::-;8722:73;;8517:288;8158:654;;;;;:::o;8818:118::-;8905:24;8923:5;8905:24;:::i;:::-;8900:3;8893:37;8818:118;;:::o;8942:109::-;9023:21;9038:5;9023:21;:::i;:::-;9018:3;9011:34;8942:109;;:::o;9057:360::-;9143:3;9171:38;9203:5;9171:38;:::i;:::-;9225:70;9288:6;9283:3;9225:70;:::i;:::-;9218:77;;9304:52;9349:6;9344:3;9337:4;9330:5;9326:16;9304:52;:::i;:::-;9381:29;9403:6;9381:29;:::i;:::-;9376:3;9372:39;9365:46;;9147:270;9057:360;;;;:::o;9423:161::-;9525:52;9571:5;9525:52;:::i;:::-;9520:3;9513:65;9423:161;;:::o;9590:167::-;9695:55;9744:5;9695:55;:::i;:::-;9690:3;9683:68;9590:167;;:::o;9763:364::-;9851:3;9879:39;9912:5;9879:39;:::i;:::-;9934:71;9998:6;9993:3;9934:71;:::i;:::-;9927:78;;10014:52;10059:6;10054:3;10047:4;10040:5;10036:16;10014:52;:::i;:::-;10091:29;10113:6;10091:29;:::i;:::-;10086:3;10082:39;10075:46;;9855:272;9763:364;;;;:::o;10133:377::-;10239:3;10267:39;10300:5;10267:39;:::i;:::-;10322:89;10404:6;10399:3;10322:89;:::i;:::-;10315:96;;10420:52;10465:6;10460:3;10453:4;10446:5;10442:16;10420:52;:::i;:::-;10497:6;10492:3;10488:16;10481:23;;10243:267;10133:377;;;;:::o;10516:366::-;10658:3;10679:67;10743:2;10738:3;10679:67;:::i;:::-;10672:74;;10755:93;10844:3;10755:93;:::i;:::-;10873:2;10868:3;10864:12;10857:19;;10516:366;;;:::o;10888:::-;11030:3;11051:67;11115:2;11110:3;11051:67;:::i;:::-;11044:74;;11127:93;11216:3;11127:93;:::i;:::-;11245:2;11240:3;11236:12;11229:19;;10888:366;;;:::o;11260:::-;11402:3;11423:67;11487:2;11482:3;11423:67;:::i;:::-;11416:74;;11499:93;11588:3;11499:93;:::i;:::-;11617:2;11612:3;11608:12;11601:19;;11260:366;;;:::o;11632:::-;11774:3;11795:67;11859:2;11854:3;11795:67;:::i;:::-;11788:74;;11871:93;11960:3;11871:93;:::i;:::-;11989:2;11984:3;11980:12;11973:19;;11632:366;;;:::o;12004:::-;12146:3;12167:67;12231:2;12226:3;12167:67;:::i;:::-;12160:74;;12243:93;12332:3;12243:93;:::i;:::-;12361:2;12356:3;12352:12;12345:19;;12004:366;;;:::o;12376:::-;12518:3;12539:67;12603:2;12598:3;12539:67;:::i;:::-;12532:74;;12615:93;12704:3;12615:93;:::i;:::-;12733:2;12728:3;12724:12;12717:19;;12376:366;;;:::o;12748:::-;12890:3;12911:67;12975:2;12970:3;12911:67;:::i;:::-;12904:74;;12987:93;13076:3;12987:93;:::i;:::-;13105:2;13100:3;13096:12;13089:19;;12748:366;;;:::o;13120:::-;13262:3;13283:67;13347:2;13342:3;13283:67;:::i;:::-;13276:74;;13359:93;13448:3;13359:93;:::i;:::-;13477:2;13472:3;13468:12;13461:19;;13120:366;;;:::o;13492:::-;13634:3;13655:67;13719:2;13714:3;13655:67;:::i;:::-;13648:74;;13731:93;13820:3;13731:93;:::i;:::-;13849:2;13844:3;13840:12;13833:19;;13492:366;;;:::o;13864:::-;14006:3;14027:67;14091:2;14086:3;14027:67;:::i;:::-;14020:74;;14103:93;14192:3;14103:93;:::i;:::-;14221:2;14216:3;14212:12;14205:19;;13864:366;;;:::o;14236:::-;14378:3;14399:67;14463:2;14458:3;14399:67;:::i;:::-;14392:74;;14475:93;14564:3;14475:93;:::i;:::-;14593:2;14588:3;14584:12;14577:19;;14236:366;;;:::o;14608:::-;14750:3;14771:67;14835:2;14830:3;14771:67;:::i;:::-;14764:74;;14847:93;14936:3;14847:93;:::i;:::-;14965:2;14960:3;14956:12;14949:19;;14608:366;;;:::o;14980:::-;15122:3;15143:67;15207:2;15202:3;15143:67;:::i;:::-;15136:74;;15219:93;15308:3;15219:93;:::i;:::-;15337:2;15332:3;15328:12;15321:19;;14980:366;;;:::o;15352:::-;15494:3;15515:67;15579:2;15574:3;15515:67;:::i;:::-;15508:74;;15591:93;15680:3;15591:93;:::i;:::-;15709:2;15704:3;15700:12;15693:19;;15352:366;;;:::o;15724:::-;15866:3;15887:67;15951:2;15946:3;15887:67;:::i;:::-;15880:74;;15963:93;16052:3;15963:93;:::i;:::-;16081:2;16076:3;16072:12;16065:19;;15724:366;;;:::o;16096:::-;16238:3;16259:67;16323:2;16318:3;16259:67;:::i;:::-;16252:74;;16335:93;16424:3;16335:93;:::i;:::-;16453:2;16448:3;16444:12;16437:19;;16096:366;;;:::o;16468:::-;16610:3;16631:67;16695:2;16690:3;16631:67;:::i;:::-;16624:74;;16707:93;16796:3;16707:93;:::i;:::-;16825:2;16820:3;16816:12;16809:19;;16468:366;;;:::o;16840:::-;16982:3;17003:67;17067:2;17062:3;17003:67;:::i;:::-;16996:74;;17079:93;17168:3;17079:93;:::i;:::-;17197:2;17192:3;17188:12;17181:19;;16840:366;;;:::o;17212:::-;17354:3;17375:67;17439:2;17434:3;17375:67;:::i;:::-;17368:74;;17451:93;17540:3;17451:93;:::i;:::-;17569:2;17564:3;17560:12;17553:19;;17212:366;;;:::o;17584:::-;17726:3;17747:67;17811:2;17806:3;17747:67;:::i;:::-;17740:74;;17823:93;17912:3;17823:93;:::i;:::-;17941:2;17936:3;17932:12;17925:19;;17584:366;;;:::o;17956:118::-;18043:24;18061:5;18043:24;:::i;:::-;18038:3;18031:37;17956:118;;:::o;18080:435::-;18260:3;18282:95;18373:3;18364:6;18282:95;:::i;:::-;18275:102;;18394:95;18485:3;18476:6;18394:95;:::i;:::-;18387:102;;18506:3;18499:10;;18080:435;;;;;:::o;18521:222::-;18614:4;18652:2;18641:9;18637:18;18629:26;;18665:71;18733:1;18722:9;18718:17;18709:6;18665:71;:::i;:::-;18521:222;;;;:::o;18749:442::-;18898:4;18936:2;18925:9;18921:18;18913:26;;18949:71;19017:1;19006:9;19002:17;18993:6;18949:71;:::i;:::-;19030:72;19098:2;19087:9;19083:18;19074:6;19030:72;:::i;:::-;19112;19180:2;19169:9;19165:18;19156:6;19112:72;:::i;:::-;18749:442;;;;;;:::o;19197:640::-;19392:4;19430:3;19419:9;19415:19;19407:27;;19444:71;19512:1;19501:9;19497:17;19488:6;19444:71;:::i;:::-;19525:72;19593:2;19582:9;19578:18;19569:6;19525:72;:::i;:::-;19607;19675:2;19664:9;19660:18;19651:6;19607:72;:::i;:::-;19726:9;19720:4;19716:20;19711:2;19700:9;19696:18;19689:48;19754:76;19825:4;19816:6;19754:76;:::i;:::-;19746:84;;19197:640;;;;;;;:::o;19843:210::-;19930:4;19968:2;19957:9;19953:18;19945:26;;19981:65;20043:1;20032:9;20028:17;20019:6;19981:65;:::i;:::-;19843:210;;;;:::o;20059:252::-;20167:4;20205:2;20194:9;20190:18;20182:26;;20218:86;20301:1;20290:9;20286:17;20277:6;20218:86;:::i;:::-;20059:252;;;;:::o;20317:258::-;20428:4;20466:2;20455:9;20451:18;20443:26;;20479:89;20565:1;20554:9;20550:17;20541:6;20479:89;:::i;:::-;20317:258;;;;:::o;20581:313::-;20694:4;20732:2;20721:9;20717:18;20709:26;;20781:9;20775:4;20771:20;20767:1;20756:9;20752:17;20745:47;20809:78;20882:4;20873:6;20809:78;:::i;:::-;20801:86;;20581:313;;;;:::o;20900:514::-;21061:4;21099:2;21088:9;21084:18;21076:26;;21148:9;21142:4;21138:20;21134:1;21123:9;21119:17;21112:47;21176:78;21249:4;21240:6;21176:78;:::i;:::-;21168:86;;21301:9;21295:4;21291:20;21286:2;21275:9;21271:18;21264:48;21329:78;21402:4;21393:6;21329:78;:::i;:::-;21321:86;;20900:514;;;;;:::o;21420:419::-;21586:4;21624:2;21613:9;21609:18;21601:26;;21673:9;21667:4;21663:20;21659:1;21648:9;21644:17;21637:47;21701:131;21827:4;21701:131;:::i;:::-;21693:139;;21420:419;;;:::o;21845:::-;22011:4;22049:2;22038:9;22034:18;22026:26;;22098:9;22092:4;22088:20;22084:1;22073:9;22069:17;22062:47;22126:131;22252:4;22126:131;:::i;:::-;22118:139;;21845:419;;;:::o;22270:::-;22436:4;22474:2;22463:9;22459:18;22451:26;;22523:9;22517:4;22513:20;22509:1;22498:9;22494:17;22487:47;22551:131;22677:4;22551:131;:::i;:::-;22543:139;;22270:419;;;:::o;22695:::-;22861:4;22899:2;22888:9;22884:18;22876:26;;22948:9;22942:4;22938:20;22934:1;22923:9;22919:17;22912:47;22976:131;23102:4;22976:131;:::i;:::-;22968:139;;22695:419;;;:::o;23120:::-;23286:4;23324:2;23313:9;23309:18;23301:26;;23373:9;23367:4;23363:20;23359:1;23348:9;23344:17;23337:47;23401:131;23527:4;23401:131;:::i;:::-;23393:139;;23120:419;;;:::o;23545:::-;23711:4;23749:2;23738:9;23734:18;23726:26;;23798:9;23792:4;23788:20;23784:1;23773:9;23769:17;23762:47;23826:131;23952:4;23826:131;:::i;:::-;23818:139;;23545:419;;;:::o;23970:::-;24136:4;24174:2;24163:9;24159:18;24151:26;;24223:9;24217:4;24213:20;24209:1;24198:9;24194:17;24187:47;24251:131;24377:4;24251:131;:::i;:::-;24243:139;;23970:419;;;:::o;24395:::-;24561:4;24599:2;24588:9;24584:18;24576:26;;24648:9;24642:4;24638:20;24634:1;24623:9;24619:17;24612:47;24676:131;24802:4;24676:131;:::i;:::-;24668:139;;24395:419;;;:::o;24820:::-;24986:4;25024:2;25013:9;25009:18;25001:26;;25073:9;25067:4;25063:20;25059:1;25048:9;25044:17;25037:47;25101:131;25227:4;25101:131;:::i;:::-;25093:139;;24820:419;;;:::o;25245:::-;25411:4;25449:2;25438:9;25434:18;25426:26;;25498:9;25492:4;25488:20;25484:1;25473:9;25469:17;25462:47;25526:131;25652:4;25526:131;:::i;:::-;25518:139;;25245:419;;;:::o;25670:::-;25836:4;25874:2;25863:9;25859:18;25851:26;;25923:9;25917:4;25913:20;25909:1;25898:9;25894:17;25887:47;25951:131;26077:4;25951:131;:::i;:::-;25943:139;;25670:419;;;:::o;26095:::-;26261:4;26299:2;26288:9;26284:18;26276:26;;26348:9;26342:4;26338:20;26334:1;26323:9;26319:17;26312:47;26376:131;26502:4;26376:131;:::i;:::-;26368:139;;26095:419;;;:::o;26520:::-;26686:4;26724:2;26713:9;26709:18;26701:26;;26773:9;26767:4;26763:20;26759:1;26748:9;26744:17;26737:47;26801:131;26927:4;26801:131;:::i;:::-;26793:139;;26520:419;;;:::o;26945:::-;27111:4;27149:2;27138:9;27134:18;27126:26;;27198:9;27192:4;27188:20;27184:1;27173:9;27169:17;27162:47;27226:131;27352:4;27226:131;:::i;:::-;27218:139;;26945:419;;;:::o;27370:::-;27536:4;27574:2;27563:9;27559:18;27551:26;;27623:9;27617:4;27613:20;27609:1;27598:9;27594:17;27587:47;27651:131;27777:4;27651:131;:::i;:::-;27643:139;;27370:419;;;:::o;27795:::-;27961:4;27999:2;27988:9;27984:18;27976:26;;28048:9;28042:4;28038:20;28034:1;28023:9;28019:17;28012:47;28076:131;28202:4;28076:131;:::i;:::-;28068:139;;27795:419;;;:::o;28220:::-;28386:4;28424:2;28413:9;28409:18;28401:26;;28473:9;28467:4;28463:20;28459:1;28448:9;28444:17;28437:47;28501:131;28627:4;28501:131;:::i;:::-;28493:139;;28220:419;;;:::o;28645:::-;28811:4;28849:2;28838:9;28834:18;28826:26;;28898:9;28892:4;28888:20;28884:1;28873:9;28869:17;28862:47;28926:131;29052:4;28926:131;:::i;:::-;28918:139;;28645:419;;;:::o;29070:::-;29236:4;29274:2;29263:9;29259:18;29251:26;;29323:9;29317:4;29313:20;29309:1;29298:9;29294:17;29287:47;29351:131;29477:4;29351:131;:::i;:::-;29343:139;;29070:419;;;:::o;29495:::-;29661:4;29699:2;29688:9;29684:18;29676:26;;29748:9;29742:4;29738:20;29734:1;29723:9;29719:17;29712:47;29776:131;29902:4;29776:131;:::i;:::-;29768:139;;29495:419;;;:::o;29920:222::-;30013:4;30051:2;30040:9;30036:18;30028:26;;30064:71;30132:1;30121:9;30117:17;30108:6;30064:71;:::i;:::-;29920:222;;;;:::o;30148:423::-;30289:4;30327:2;30316:9;30312:18;30304:26;;30340:71;30408:1;30397:9;30393:17;30384:6;30340:71;:::i;:::-;30458:9;30452:4;30448:20;30443:2;30432:9;30428:18;30421:48;30486:78;30559:4;30550:6;30486:78;:::i;:::-;30478:86;;30148:423;;;;;:::o;30577:129::-;30611:6;30638:20;;:::i;:::-;30628:30;;30667:33;30695:4;30687:6;30667:33;:::i;:::-;30577:129;;;:::o;30712:75::-;30745:6;30778:2;30772:9;30762:19;;30712:75;:::o;30793:307::-;30854:4;30944:18;30936:6;30933:30;30930:56;;;30966:18;;:::i;:::-;30930:56;31004:29;31026:6;31004:29;:::i;:::-;30996:37;;31088:4;31082;31078:15;31070:23;;30793:307;;;:::o;31106:308::-;31168:4;31258:18;31250:6;31247:30;31244:56;;;31280:18;;:::i;:::-;31244:56;31318:29;31340:6;31318:29;:::i;:::-;31310:37;;31402:4;31396;31392:15;31384:23;;31106:308;;;:::o;31420:98::-;31471:6;31505:5;31499:12;31489:22;;31420:98;;;:::o;31524:99::-;31576:6;31610:5;31604:12;31594:22;;31524:99;;;:::o;31629:168::-;31712:11;31746:6;31741:3;31734:19;31786:4;31781:3;31777:14;31762:29;;31629:168;;;;:::o;31803:169::-;31887:11;31921:6;31916:3;31909:19;31961:4;31956:3;31952:14;31937:29;;31803:169;;;;:::o;31978:148::-;32080:11;32117:3;32102:18;;31978:148;;;;:::o;32132:305::-;32172:3;32191:20;32209:1;32191:20;:::i;:::-;32186:25;;32225:20;32243:1;32225:20;:::i;:::-;32220:25;;32379:1;32311:66;32307:74;32304:1;32301:81;32298:107;;;32385:18;;:::i;:::-;32298:107;32429:1;32426;32422:9;32415:16;;32132:305;;;;:::o;32443:185::-;32483:1;32500:20;32518:1;32500:20;:::i;:::-;32495:25;;32534:20;32552:1;32534:20;:::i;:::-;32529:25;;32573:1;32563:35;;32578:18;;:::i;:::-;32563:35;32620:1;32617;32613:9;32608:14;;32443:185;;;;:::o;32634:191::-;32674:4;32694:20;32712:1;32694:20;:::i;:::-;32689:25;;32728:20;32746:1;32728:20;:::i;:::-;32723:25;;32767:1;32764;32761:8;32758:34;;;32772:18;;:::i;:::-;32758:34;32817:1;32814;32810:9;32802:17;;32634:191;;;;:::o;32831:96::-;32868:7;32897:24;32915:5;32897:24;:::i;:::-;32886:35;;32831:96;;;:::o;32933:90::-;32967:7;33010:5;33003:13;32996:21;32985:32;;32933:90;;;:::o;33029:149::-;33065:7;33105:66;33098:5;33094:78;33083:89;;33029:149;;;:::o;33184:126::-;33221:7;33261:42;33254:5;33250:54;33239:65;;33184:126;;;:::o;33316:77::-;33353:7;33382:5;33371:16;;33316:77;;;:::o;33399:141::-;33464:9;33497:37;33528:5;33497:37;:::i;:::-;33484:50;;33399:141;;;:::o;33546:144::-;33614:9;33647:37;33678:5;33647:37;:::i;:::-;33634:50;;33546:144;;;:::o;33696:126::-;33746:9;33779:37;33810:5;33779:37;:::i;:::-;33766:50;;33696:126;;;:::o;33828:113::-;33878:9;33911:24;33929:5;33911:24;:::i;:::-;33898:37;;33828:113;;;:::o;33947:154::-;34031:6;34026:3;34021;34008:30;34093:1;34084:6;34079:3;34075:16;34068:27;33947:154;;;:::o;34107:307::-;34175:1;34185:113;34199:6;34196:1;34193:13;34185:113;;;34284:1;34279:3;34275:11;34269:18;34265:1;34260:3;34256:11;34249:39;34221:2;34218:1;34214:10;34209:15;;34185:113;;;34316:6;34313:1;34310:13;34307:101;;;34396:1;34387:6;34382:3;34378:16;34371:27;34307:101;34156:258;34107:307;;;:::o;34420:320::-;34464:6;34501:1;34495:4;34491:12;34481:22;;34548:1;34542:4;34538:12;34569:18;34559:81;;34625:4;34617:6;34613:17;34603:27;;34559:81;34687:2;34679:6;34676:14;34656:18;34653:38;34650:84;;;34706:18;;:::i;:::-;34650:84;34471:269;34420:320;;;:::o;34746:281::-;34829:27;34851:4;34829:27;:::i;:::-;34821:6;34817:40;34959:6;34947:10;34944:22;34923:18;34911:10;34908:34;34905:62;34902:88;;;34970:18;;:::i;:::-;34902:88;35010:10;35006:2;34999:22;34789:238;34746:281;;:::o;35033:233::-;35072:3;35095:24;35113:5;35095:24;:::i;:::-;35086:33;;35141:66;35134:5;35131:77;35128:103;;;35211:18;;:::i;:::-;35128:103;35258:1;35251:5;35247:13;35240:20;;35033:233;;;:::o;35272:176::-;35304:1;35321:20;35339:1;35321:20;:::i;:::-;35316:25;;35355:20;35373:1;35355:20;:::i;:::-;35350:25;;35394:1;35384:35;;35399:18;;:::i;:::-;35384:35;35440:1;35437;35433:9;35428:14;;35272:176;;;;:::o;35454:180::-;35502:77;35499:1;35492:88;35599:4;35596:1;35589:15;35623:4;35620:1;35613:15;35640:180;35688:77;35685:1;35678:88;35785:4;35782:1;35775:15;35809:4;35806:1;35799:15;35826:180;35874:77;35871:1;35864:88;35971:4;35968:1;35961:15;35995:4;35992:1;35985:15;36012:180;36060:77;36057:1;36050:88;36157:4;36154:1;36147:15;36181:4;36178:1;36171:15;36198:180;36246:77;36243:1;36236:88;36343:4;36340:1;36333:15;36367:4;36364:1;36357:15;36384:117;36493:1;36490;36483:12;36507:117;36616:1;36613;36606:12;36630:117;36739:1;36736;36729:12;36753:117;36862:1;36859;36852:12;36876:102;36917:6;36968:2;36964:7;36959:2;36952:5;36948:14;36944:28;36934:38;;36876:102;;;:::o;36984:222::-;37124:34;37120:1;37112:6;37108:14;37101:58;37193:5;37188:2;37180:6;37176:15;37169:30;36984:222;:::o;37212:237::-;37352:34;37348:1;37340:6;37336:14;37329:58;37421:20;37416:2;37408:6;37404:15;37397:45;37212:237;:::o;37455:225::-;37595:34;37591:1;37583:6;37579:14;37572:58;37664:8;37659:2;37651:6;37647:15;37640:33;37455:225;:::o;37686:178::-;37826:30;37822:1;37814:6;37810:14;37803:54;37686:178;:::o;37870:223::-;38010:34;38006:1;37998:6;37994:14;37987:58;38079:6;38074:2;38066:6;38062:15;38055:31;37870:223;:::o;38099:175::-;38239:27;38235:1;38227:6;38223:14;38216:51;38099:175;:::o;38280:231::-;38420:34;38416:1;38408:6;38404:14;38397:58;38489:14;38484:2;38476:6;38472:15;38465:39;38280:231;:::o;38517:243::-;38657:34;38653:1;38645:6;38641:14;38634:58;38726:26;38721:2;38713:6;38709:15;38702:51;38517:243;:::o;38766:229::-;38906:34;38902:1;38894:6;38890:14;38883:58;38975:12;38970:2;38962:6;38958:15;38951:37;38766:229;:::o;39001:228::-;39141:34;39137:1;39129:6;39125:14;39118:58;39210:11;39205:2;39197:6;39193:15;39186:36;39001:228;:::o;39235:179::-;39375:31;39371:1;39363:6;39359:14;39352:55;39235:179;:::o;39420:182::-;39560:34;39556:1;39548:6;39544:14;39537:58;39420:182;:::o;39608:231::-;39748:34;39744:1;39736:6;39732:14;39725:58;39817:14;39812:2;39804:6;39800:15;39793:39;39608:231;:::o;39845:182::-;39985:34;39981:1;39973:6;39969:14;39962:58;39845:182;:::o;40033:228::-;40173:34;40169:1;40161:6;40157:14;40150:58;40242:11;40237:2;40229:6;40225:15;40218:36;40033:228;:::o;40267:234::-;40407:34;40403:1;40395:6;40391:14;40384:58;40476:17;40471:2;40463:6;40459:15;40452:42;40267:234;:::o;40507:220::-;40647:34;40643:1;40635:6;40631:14;40624:58;40716:3;40711:2;40703:6;40699:15;40692:28;40507:220;:::o;40733:169::-;40873:21;40869:1;40861:6;40857:14;40850:45;40733:169;:::o;40908:236::-;41048:34;41044:1;41036:6;41032:14;41025:58;41117:19;41112:2;41104:6;41100:15;41093:44;40908:236;:::o;41150:235::-;41290:34;41286:1;41278:6;41274:14;41267:58;41359:18;41354:2;41346:6;41342:15;41335:43;41150:235;:::o;41391:122::-;41464:24;41482:5;41464:24;:::i;:::-;41457:5;41454:35;41444:63;;41503:1;41500;41493:12;41444:63;41391:122;:::o;41519:116::-;41589:21;41604:5;41589:21;:::i;:::-;41582:5;41579:32;41569:60;;41625:1;41622;41615:12;41569:60;41519:116;:::o;41641:120::-;41713:23;41730:5;41713:23;:::i;:::-;41706:5;41703:34;41693:62;;41751:1;41748;41741:12;41693:62;41641:120;:::o;41767:122::-;41840:24;41858:5;41840:24;:::i;:::-;41833:5;41830:35;41820:63;;41879:1;41876;41869:12;41820:63;41767:122;:::o
Swarm Source
ipfs://72bcb14c6131bd018c6c23c754f1cb487d8316c5cc09255e85a77a4b0fe7d047
Loading...
Loading
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.