ERC-721
Overview
Max Total Supply
100 HT2
Holders
46
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 HT2Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HedsTape
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-12 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/hedsTape.sol pragma solidity >=0.4.22 <0.9.0; contract HedsTape is Ownable, ERC721 { Counters.Counter private _tokenIds; using Counters for Counters.Counter; using Strings for uint256; mapping(uint256 => string) private _tokenURIs; string private _baseURIextended; uint256 public constant HEDS_PRICE = 100000000000000000; // 0.1 ETH uint256 public MAX_HEADS = 100; constructor() public ERC721("hedsTAPE 2", "HT2") { setBaseURI("ipfs://QmVDgEqUoevFn7wPn8FzwY9b3NvZxnAbW9RZLh6q6r67kx"); } function setBaseURI(string memory baseURI_) internal onlyOwner { _baseURIextended = baseURI_; } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function mintHead() public payable returns (uint256) { _tokenIds.increment(); uint256 current = _tokenIds.current(); // set newItemId = (1, ...) require((HEDS_PRICE == msg.value), "ERC721Metadata: invalid amount of ether recieved"); require(current <= MAX_HEADS, "ERC721Metadata: max hedsTapes minted"); // check to make sure newItemId less than 10 require((bytes(_baseURIextended).length > 0), "ERC721Metadata: this tape has not been made public"); // _safeMint(msg.sender, current); return current; } receive() external payable {} fallback() external payable {} function getBalance() public view returns (uint) { return address(this).balance; } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } function totalSupply() public view returns (uint256) { return _tokenIds.current(); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return _baseURIextended; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"HEDS_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_HEADS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintHead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526064600a553480156200001657600080fd5b506040518060400160405280600a81526020017f68656473544150452032000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4854320000000000000000000000000000000000000000000000000000000000815250620000a3620000976200010760201b60201c565b6200010f60201b60201c565b8160019080519060200190620000bb929190620002a7565b508060029080519060200190620000d4929190620002a7565b505050620001016040518060600160405280603581526020016200326560359139620001d360201b60201c565b6200043f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001e36200010760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002096200027e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000259906200037e565b60405180910390fd5b80600990805190602001906200027a929190620002a7565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002b590620003b1565b90600052602060002090601f016020900481019282620002d9576000855562000325565b82601f10620002f457805160ff191683800117855562000325565b8280016001018555821562000325579182015b828111156200032457825182559160200191906001019062000307565b5b50905062000334919062000338565b5090565b5b808211156200035357600081600090555060010162000339565b5090565b600062000366602083620003a0565b9150620003738262000416565b602082019050919050565b60006020820190508181036000830152620003998162000357565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003ca57607f821691505b60208210811415620003e157620003e0620003e7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b612e16806200044f6000396000f3fe6080604052600436106101395760003560e01c806370a08231116100ab578063b88d4fde1161006f578063b88d4fde146103fd578063c87b56dd14610426578063e86bdbf714610463578063e985e9c51461048e578063f2fde38b146104cb578063f5dde2ae146104f457610140565b806370a082311461032a578063715018a6146103675780638da5cb5b1461037e57806395d89b41146103a9578063a22cb465146103d457610140565b806318160ddd116100fd57806318160ddd1461023b57806323b872dd146102665780633ccfd60b1461028f57806342842e0e146102a65780635988e68e146102cf5780636352211e146102ed57610140565b806301ffc9a71461014257806306fdde031461017f578063081812fc146101aa578063095ea7b3146101e757806312065fe01461021057610140565b3661014057005b005b34801561014e57600080fd5b5061016960048036038101906101649190611e7e565b61051f565b60405161017691906122a4565b60405180910390f35b34801561018b57600080fd5b50610194610601565b6040516101a191906122bf565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc9190611ed8565b610693565b6040516101de919061223d565b60405180910390f35b3480156101f357600080fd5b5061020e60048036038101906102099190611e3e565b610718565b005b34801561021c57600080fd5b50610225610830565b6040516102329190612541565b60405180910390f35b34801561024757600080fd5b50610250610838565b60405161025d9190612541565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611d28565b610849565b005b34801561029b57600080fd5b506102a46108a9565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190611d28565b610974565b005b6102d7610994565b6040516102e49190612541565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190611ed8565b610a9f565b604051610321919061223d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190611cbb565b610b51565b60405161035e9190612541565b60405180910390f35b34801561037357600080fd5b5061037c610c09565b005b34801561038a57600080fd5b50610393610c91565b6040516103a0919061223d565b60405180910390f35b3480156103b557600080fd5b506103be610cba565b6040516103cb91906122bf565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190611dfe565b610d4c565b005b34801561040957600080fd5b50610424600480360381019061041f9190611d7b565b610d62565b005b34801561043257600080fd5b5061044d60048036038101906104489190611ed8565b610dc4565b60405161045a91906122bf565b60405180910390f35b34801561046f57600080fd5b50610478610ea0565b6040516104859190612541565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190611ce8565b610eac565b6040516104c291906122a4565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190611cbb565b610f40565b005b34801561050057600080fd5b50610509611038565b6040516105169190612541565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105fa57506105f98261103e565b5b9050919050565b6060600180546106109061272a565b80601f016020809104026020016040519081016040528092919081815260200182805461063c9061272a565b80156106895780601f1061065e57610100808354040283529160200191610689565b820191906000526020600020905b81548152906001019060200180831161066c57829003601f168201915b5050505050905090565b600061069e826110a8565b6106dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d490612461565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072382610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078b906124c1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107b3611114565b73ffffffffffffffffffffffffffffffffffffffff1614806107e257506107e1816107dc611114565b610eac565b5b610821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610818906123e1565b60405180910390fd5b61082b838361111c565b505050565b600047905090565b600061084460076111d5565b905090565b61085a610854611114565b826111e3565b610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906124e1565b60405180910390fd5b6108a48383836112c1565b505050565b6108b1611114565b73ffffffffffffffffffffffffffffffffffffffff166108cf610c91565b73ffffffffffffffffffffffffffffffffffffffff1614610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c90612481565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610970573d6000803e3d6000fd5b5050565b61098f83838360405180602001604052806000815250610d62565b505050565b60006109a06007611528565b60006109ac60076111d5565b90503467016345785d8a0000146109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612501565b60405180910390fd5b600a54811115610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a34906123c1565b60405180910390fd5b600060098054610a4c9061272a565b905011610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590612521565b60405180910390fd5b610a98338261153e565b8091505090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90612421565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990612401565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c11611114565b73ffffffffffffffffffffffffffffffffffffffff16610c2f610c91565b73ffffffffffffffffffffffffffffffffffffffff1614610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90612481565b60405180910390fd5b610c8f600061155c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610cc99061272a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf59061272a565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b5050505050905090565b610d5e610d57611114565b8383611620565b5050565b610d73610d6d611114565b836111e3565b610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906124e1565b60405180910390fd5b610dbe8484848461178d565b50505050565b6060610dcf826110a8565b610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e05906124a1565b60405180910390fd5b60098054610e1b9061272a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e479061272a565b8015610e945780601f10610e6957610100808354040283529160200191610e94565b820191906000526020600020905b815481529060010190602001808311610e7757829003601f168201915b50505050509050919050565b67016345785d8a000081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f48611114565b73ffffffffffffffffffffffffffffffffffffffff16610f66610c91565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390612481565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102390612301565b60405180910390fd5b6110358161155c565b50565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661118f83610a9f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006111ee826110a8565b61122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906123a1565b60405180910390fd5b600061123883610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112a757508373ffffffffffffffffffffffffffffffffffffffff1661128f84610693565b73ffffffffffffffffffffffffffffffffffffffff16145b806112b857506112b78185610eac565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166112e182610a9f565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90612321565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612361565b60405180910390fd5b6113b28383836117e9565b6113bd60008261111c565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461140d9190612640565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461146491906125ea565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115238383836117ee565b505050565b6001816000016000828254019250508190555050565b6115588282604051806020016040528060008152506117f3565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690612381565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161178091906122a4565b60405180910390a3505050565b6117988484846112c1565b6117a48484848461184e565b6117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da906122e1565b60405180910390fd5b50505050565b505050565b505050565b6117fd83836119e5565b61180a600084848461184e565b611849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611840906122e1565b60405180910390fd5b505050565b600061186f8473ffffffffffffffffffffffffffffffffffffffff16611bbf565b156119d8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611898611114565b8786866040518563ffffffff1660e01b81526004016118ba9493929190612258565b602060405180830381600087803b1580156118d457600080fd5b505af192505050801561190557506040513d601f19601f820116820180604052508101906119029190611eab565b60015b611988573d8060008114611935576040519150601f19603f3d011682016040523d82523d6000602084013e61193a565b606091505b50600081511415611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906122e1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506119dd565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90612441565b60405180910390fd5b611a5e816110a8565b15611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9590612341565b60405180910390fd5b611aaa600083836117e9565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611afa91906125ea565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bbb600083836117ee565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611bf5611bf084612581565b61255c565b905082815260208101848484011115611c1157611c1061281f565b5b611c1c8482856126e8565b509392505050565b600081359050611c3381612d84565b92915050565b600081359050611c4881612d9b565b92915050565b600081359050611c5d81612db2565b92915050565b600081519050611c7281612db2565b92915050565b600082601f830112611c8d57611c8c61281a565b5b8135611c9d848260208601611be2565b91505092915050565b600081359050611cb581612dc9565b92915050565b600060208284031215611cd157611cd0612829565b5b6000611cdf84828501611c24565b91505092915050565b60008060408385031215611cff57611cfe612829565b5b6000611d0d85828601611c24565b9250506020611d1e85828601611c24565b9150509250929050565b600080600060608486031215611d4157611d40612829565b5b6000611d4f86828701611c24565b9350506020611d6086828701611c24565b9250506040611d7186828701611ca6565b9150509250925092565b60008060008060808587031215611d9557611d94612829565b5b6000611da387828801611c24565b9450506020611db487828801611c24565b9350506040611dc587828801611ca6565b925050606085013567ffffffffffffffff811115611de657611de5612824565b5b611df287828801611c78565b91505092959194509250565b60008060408385031215611e1557611e14612829565b5b6000611e2385828601611c24565b9250506020611e3485828601611c39565b9150509250929050565b60008060408385031215611e5557611e54612829565b5b6000611e6385828601611c24565b9250506020611e7485828601611ca6565b9150509250929050565b600060208284031215611e9457611e93612829565b5b6000611ea284828501611c4e565b91505092915050565b600060208284031215611ec157611ec0612829565b5b6000611ecf84828501611c63565b91505092915050565b600060208284031215611eee57611eed612829565b5b6000611efc84828501611ca6565b91505092915050565b611f0e81612674565b82525050565b611f1d81612686565b82525050565b6000611f2e826125b2565b611f3881856125c8565b9350611f488185602086016126f7565b611f518161282e565b840191505092915050565b6000611f67826125bd565b611f7181856125d9565b9350611f818185602086016126f7565b611f8a8161282e565b840191505092915050565b6000611fa26032836125d9565b9150611fad8261283f565b604082019050919050565b6000611fc56026836125d9565b9150611fd08261288e565b604082019050919050565b6000611fe86025836125d9565b9150611ff3826128dd565b604082019050919050565b600061200b601c836125d9565b91506120168261292c565b602082019050919050565b600061202e6024836125d9565b915061203982612955565b604082019050919050565b60006120516019836125d9565b915061205c826129a4565b602082019050919050565b6000612074602c836125d9565b915061207f826129cd565b604082019050919050565b60006120976024836125d9565b91506120a282612a1c565b604082019050919050565b60006120ba6038836125d9565b91506120c582612a6b565b604082019050919050565b60006120dd602a836125d9565b91506120e882612aba565b604082019050919050565b60006121006029836125d9565b915061210b82612b09565b604082019050919050565b60006121236020836125d9565b915061212e82612b58565b602082019050919050565b6000612146602c836125d9565b915061215182612b81565b604082019050919050565b60006121696020836125d9565b915061217482612bd0565b602082019050919050565b600061218c602f836125d9565b915061219782612bf9565b604082019050919050565b60006121af6021836125d9565b91506121ba82612c48565b604082019050919050565b60006121d26031836125d9565b91506121dd82612c97565b604082019050919050565b60006121f56030836125d9565b915061220082612ce6565b604082019050919050565b60006122186032836125d9565b915061222382612d35565b604082019050919050565b612237816126de565b82525050565b60006020820190506122526000830184611f05565b92915050565b600060808201905061226d6000830187611f05565b61227a6020830186611f05565b612287604083018561222e565b81810360608301526122998184611f23565b905095945050505050565b60006020820190506122b96000830184611f14565b92915050565b600060208201905081810360008301526122d98184611f5c565b905092915050565b600060208201905081810360008301526122fa81611f95565b9050919050565b6000602082019050818103600083015261231a81611fb8565b9050919050565b6000602082019050818103600083015261233a81611fdb565b9050919050565b6000602082019050818103600083015261235a81611ffe565b9050919050565b6000602082019050818103600083015261237a81612021565b9050919050565b6000602082019050818103600083015261239a81612044565b9050919050565b600060208201905081810360008301526123ba81612067565b9050919050565b600060208201905081810360008301526123da8161208a565b9050919050565b600060208201905081810360008301526123fa816120ad565b9050919050565b6000602082019050818103600083015261241a816120d0565b9050919050565b6000602082019050818103600083015261243a816120f3565b9050919050565b6000602082019050818103600083015261245a81612116565b9050919050565b6000602082019050818103600083015261247a81612139565b9050919050565b6000602082019050818103600083015261249a8161215c565b9050919050565b600060208201905081810360008301526124ba8161217f565b9050919050565b600060208201905081810360008301526124da816121a2565b9050919050565b600060208201905081810360008301526124fa816121c5565b9050919050565b6000602082019050818103600083015261251a816121e8565b9050919050565b6000602082019050818103600083015261253a8161220b565b9050919050565b6000602082019050612556600083018461222e565b92915050565b6000612566612577565b9050612572828261275c565b919050565b6000604051905090565b600067ffffffffffffffff82111561259c5761259b6127eb565b5b6125a58261282e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006125f5826126de565b9150612600836126de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126355761263461278d565b5b828201905092915050565b600061264b826126de565b9150612656836126de565b9250828210156126695761266861278d565b5b828203905092915050565b600061267f826126be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127155780820151818401526020810190506126fa565b83811115612724576000848401525b50505050565b6000600282049050600182168061274257607f821691505b60208210811415612756576127556127bc565b5b50919050565b6127658261282e565b810181811067ffffffffffffffff82111715612784576127836127eb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a206d617820686564735461706573206d6960008201527f6e74656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a20696e76616c696420616d6f756e74206f60008201527f6620657468657220726563696576656400000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2074686973207461706520686173206e6f60008201527f74206265656e206d616465207075626c69630000000000000000000000000000602082015250565b612d8d81612674565b8114612d9857600080fd5b50565b612da481612686565b8114612daf57600080fd5b50565b612dbb81612692565b8114612dc657600080fd5b50565b612dd2816126de565b8114612ddd57600080fd5b5056fea2646970667358221220d48d97f57f1ef3fd276e03d469baee9846646670cd31e54dc9d4774dd4e8343f64736f6c63430008070033697066733a2f2f516d5644674571556f6576466e3777506e38467a77593962334e765a786e41625739525a4c683671367236376b78
Deployed Bytecode
0x6080604052600436106101395760003560e01c806370a08231116100ab578063b88d4fde1161006f578063b88d4fde146103fd578063c87b56dd14610426578063e86bdbf714610463578063e985e9c51461048e578063f2fde38b146104cb578063f5dde2ae146104f457610140565b806370a082311461032a578063715018a6146103675780638da5cb5b1461037e57806395d89b41146103a9578063a22cb465146103d457610140565b806318160ddd116100fd57806318160ddd1461023b57806323b872dd146102665780633ccfd60b1461028f57806342842e0e146102a65780635988e68e146102cf5780636352211e146102ed57610140565b806301ffc9a71461014257806306fdde031461017f578063081812fc146101aa578063095ea7b3146101e757806312065fe01461021057610140565b3661014057005b005b34801561014e57600080fd5b5061016960048036038101906101649190611e7e565b61051f565b60405161017691906122a4565b60405180910390f35b34801561018b57600080fd5b50610194610601565b6040516101a191906122bf565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc9190611ed8565b610693565b6040516101de919061223d565b60405180910390f35b3480156101f357600080fd5b5061020e60048036038101906102099190611e3e565b610718565b005b34801561021c57600080fd5b50610225610830565b6040516102329190612541565b60405180910390f35b34801561024757600080fd5b50610250610838565b60405161025d9190612541565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190611d28565b610849565b005b34801561029b57600080fd5b506102a46108a9565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190611d28565b610974565b005b6102d7610994565b6040516102e49190612541565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190611ed8565b610a9f565b604051610321919061223d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190611cbb565b610b51565b60405161035e9190612541565b60405180910390f35b34801561037357600080fd5b5061037c610c09565b005b34801561038a57600080fd5b50610393610c91565b6040516103a0919061223d565b60405180910390f35b3480156103b557600080fd5b506103be610cba565b6040516103cb91906122bf565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190611dfe565b610d4c565b005b34801561040957600080fd5b50610424600480360381019061041f9190611d7b565b610d62565b005b34801561043257600080fd5b5061044d60048036038101906104489190611ed8565b610dc4565b60405161045a91906122bf565b60405180910390f35b34801561046f57600080fd5b50610478610ea0565b6040516104859190612541565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190611ce8565b610eac565b6040516104c291906122a4565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190611cbb565b610f40565b005b34801561050057600080fd5b50610509611038565b6040516105169190612541565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105fa57506105f98261103e565b5b9050919050565b6060600180546106109061272a565b80601f016020809104026020016040519081016040528092919081815260200182805461063c9061272a565b80156106895780601f1061065e57610100808354040283529160200191610689565b820191906000526020600020905b81548152906001019060200180831161066c57829003601f168201915b5050505050905090565b600061069e826110a8565b6106dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d490612461565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072382610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078b906124c1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107b3611114565b73ffffffffffffffffffffffffffffffffffffffff1614806107e257506107e1816107dc611114565b610eac565b5b610821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610818906123e1565b60405180910390fd5b61082b838361111c565b505050565b600047905090565b600061084460076111d5565b905090565b61085a610854611114565b826111e3565b610899576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610890906124e1565b60405180910390fd5b6108a48383836112c1565b505050565b6108b1611114565b73ffffffffffffffffffffffffffffffffffffffff166108cf610c91565b73ffffffffffffffffffffffffffffffffffffffff1614610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c90612481565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610970573d6000803e3d6000fd5b5050565b61098f83838360405180602001604052806000815250610d62565b505050565b60006109a06007611528565b60006109ac60076111d5565b90503467016345785d8a0000146109f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ef90612501565b60405180910390fd5b600a54811115610a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a34906123c1565b60405180910390fd5b600060098054610a4c9061272a565b905011610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590612521565b60405180910390fd5b610a98338261153e565b8091505090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90612421565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb990612401565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c11611114565b73ffffffffffffffffffffffffffffffffffffffff16610c2f610c91565b73ffffffffffffffffffffffffffffffffffffffff1614610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90612481565b60405180910390fd5b610c8f600061155c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610cc99061272a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf59061272a565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b5050505050905090565b610d5e610d57611114565b8383611620565b5050565b610d73610d6d611114565b836111e3565b610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906124e1565b60405180910390fd5b610dbe8484848461178d565b50505050565b6060610dcf826110a8565b610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e05906124a1565b60405180910390fd5b60098054610e1b9061272a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e479061272a565b8015610e945780601f10610e6957610100808354040283529160200191610e94565b820191906000526020600020905b815481529060010190602001808311610e7757829003601f168201915b50505050509050919050565b67016345785d8a000081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f48611114565b73ffffffffffffffffffffffffffffffffffffffff16610f66610c91565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390612481565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102390612301565b60405180910390fd5b6110358161155c565b50565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661118f83610a9f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60006111ee826110a8565b61122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906123a1565b60405180910390fd5b600061123883610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112a757508373ffffffffffffffffffffffffffffffffffffffff1661128f84610693565b73ffffffffffffffffffffffffffffffffffffffff16145b806112b857506112b78185610eac565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166112e182610a9f565b73ffffffffffffffffffffffffffffffffffffffff1614611337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132e90612321565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612361565b60405180910390fd5b6113b28383836117e9565b6113bd60008261111c565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461140d9190612640565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461146491906125ea565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115238383836117ee565b505050565b6001816000016000828254019250508190555050565b6115588282604051806020016040528060008152506117f3565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690612381565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161178091906122a4565b60405180910390a3505050565b6117988484846112c1565b6117a48484848461184e565b6117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da906122e1565b60405180910390fd5b50505050565b505050565b505050565b6117fd83836119e5565b61180a600084848461184e565b611849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611840906122e1565b60405180910390fd5b505050565b600061186f8473ffffffffffffffffffffffffffffffffffffffff16611bbf565b156119d8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611898611114565b8786866040518563ffffffff1660e01b81526004016118ba9493929190612258565b602060405180830381600087803b1580156118d457600080fd5b505af192505050801561190557506040513d601f19601f820116820180604052508101906119029190611eab565b60015b611988573d8060008114611935576040519150601f19603f3d011682016040523d82523d6000602084013e61193a565b606091505b50600081511415611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906122e1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506119dd565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90612441565b60405180910390fd5b611a5e816110a8565b15611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9590612341565b60405180910390fd5b611aaa600083836117e9565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611afa91906125ea565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bbb600083836117ee565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611bf5611bf084612581565b61255c565b905082815260208101848484011115611c1157611c1061281f565b5b611c1c8482856126e8565b509392505050565b600081359050611c3381612d84565b92915050565b600081359050611c4881612d9b565b92915050565b600081359050611c5d81612db2565b92915050565b600081519050611c7281612db2565b92915050565b600082601f830112611c8d57611c8c61281a565b5b8135611c9d848260208601611be2565b91505092915050565b600081359050611cb581612dc9565b92915050565b600060208284031215611cd157611cd0612829565b5b6000611cdf84828501611c24565b91505092915050565b60008060408385031215611cff57611cfe612829565b5b6000611d0d85828601611c24565b9250506020611d1e85828601611c24565b9150509250929050565b600080600060608486031215611d4157611d40612829565b5b6000611d4f86828701611c24565b9350506020611d6086828701611c24565b9250506040611d7186828701611ca6565b9150509250925092565b60008060008060808587031215611d9557611d94612829565b5b6000611da387828801611c24565b9450506020611db487828801611c24565b9350506040611dc587828801611ca6565b925050606085013567ffffffffffffffff811115611de657611de5612824565b5b611df287828801611c78565b91505092959194509250565b60008060408385031215611e1557611e14612829565b5b6000611e2385828601611c24565b9250506020611e3485828601611c39565b9150509250929050565b60008060408385031215611e5557611e54612829565b5b6000611e6385828601611c24565b9250506020611e7485828601611ca6565b9150509250929050565b600060208284031215611e9457611e93612829565b5b6000611ea284828501611c4e565b91505092915050565b600060208284031215611ec157611ec0612829565b5b6000611ecf84828501611c63565b91505092915050565b600060208284031215611eee57611eed612829565b5b6000611efc84828501611ca6565b91505092915050565b611f0e81612674565b82525050565b611f1d81612686565b82525050565b6000611f2e826125b2565b611f3881856125c8565b9350611f488185602086016126f7565b611f518161282e565b840191505092915050565b6000611f67826125bd565b611f7181856125d9565b9350611f818185602086016126f7565b611f8a8161282e565b840191505092915050565b6000611fa26032836125d9565b9150611fad8261283f565b604082019050919050565b6000611fc56026836125d9565b9150611fd08261288e565b604082019050919050565b6000611fe86025836125d9565b9150611ff3826128dd565b604082019050919050565b600061200b601c836125d9565b91506120168261292c565b602082019050919050565b600061202e6024836125d9565b915061203982612955565b604082019050919050565b60006120516019836125d9565b915061205c826129a4565b602082019050919050565b6000612074602c836125d9565b915061207f826129cd565b604082019050919050565b60006120976024836125d9565b91506120a282612a1c565b604082019050919050565b60006120ba6038836125d9565b91506120c582612a6b565b604082019050919050565b60006120dd602a836125d9565b91506120e882612aba565b604082019050919050565b60006121006029836125d9565b915061210b82612b09565b604082019050919050565b60006121236020836125d9565b915061212e82612b58565b602082019050919050565b6000612146602c836125d9565b915061215182612b81565b604082019050919050565b60006121696020836125d9565b915061217482612bd0565b602082019050919050565b600061218c602f836125d9565b915061219782612bf9565b604082019050919050565b60006121af6021836125d9565b91506121ba82612c48565b604082019050919050565b60006121d26031836125d9565b91506121dd82612c97565b604082019050919050565b60006121f56030836125d9565b915061220082612ce6565b604082019050919050565b60006122186032836125d9565b915061222382612d35565b604082019050919050565b612237816126de565b82525050565b60006020820190506122526000830184611f05565b92915050565b600060808201905061226d6000830187611f05565b61227a6020830186611f05565b612287604083018561222e565b81810360608301526122998184611f23565b905095945050505050565b60006020820190506122b96000830184611f14565b92915050565b600060208201905081810360008301526122d98184611f5c565b905092915050565b600060208201905081810360008301526122fa81611f95565b9050919050565b6000602082019050818103600083015261231a81611fb8565b9050919050565b6000602082019050818103600083015261233a81611fdb565b9050919050565b6000602082019050818103600083015261235a81611ffe565b9050919050565b6000602082019050818103600083015261237a81612021565b9050919050565b6000602082019050818103600083015261239a81612044565b9050919050565b600060208201905081810360008301526123ba81612067565b9050919050565b600060208201905081810360008301526123da8161208a565b9050919050565b600060208201905081810360008301526123fa816120ad565b9050919050565b6000602082019050818103600083015261241a816120d0565b9050919050565b6000602082019050818103600083015261243a816120f3565b9050919050565b6000602082019050818103600083015261245a81612116565b9050919050565b6000602082019050818103600083015261247a81612139565b9050919050565b6000602082019050818103600083015261249a8161215c565b9050919050565b600060208201905081810360008301526124ba8161217f565b9050919050565b600060208201905081810360008301526124da816121a2565b9050919050565b600060208201905081810360008301526124fa816121c5565b9050919050565b6000602082019050818103600083015261251a816121e8565b9050919050565b6000602082019050818103600083015261253a8161220b565b9050919050565b6000602082019050612556600083018461222e565b92915050565b6000612566612577565b9050612572828261275c565b919050565b6000604051905090565b600067ffffffffffffffff82111561259c5761259b6127eb565b5b6125a58261282e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006125f5826126de565b9150612600836126de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126355761263461278d565b5b828201905092915050565b600061264b826126de565b9150612656836126de565b9250828210156126695761266861278d565b5b828203905092915050565b600061267f826126be565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127155780820151818401526020810190506126fa565b83811115612724576000848401525b50505050565b6000600282049050600182168061274257607f821691505b60208210811415612756576127556127bc565b5b50919050565b6127658261282e565b810181811067ffffffffffffffff82111715612784576127836127eb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a206d617820686564735461706573206d6960008201527f6e74656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a20696e76616c696420616d6f756e74206f60008201527f6620657468657220726563696576656400000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2074686973207461706520686173206e6f60008201527f74206265656e206d616465207075626c69630000000000000000000000000000602082015250565b612d8d81612674565b8114612d9857600080fd5b50565b612da481612686565b8114612daf57600080fd5b50565b612dbb81612692565b8114612dc657600080fd5b50565b612dd2816126de565b8114612ddd57600080fd5b5056fea2646970667358221220d48d97f57f1ef3fd276e03d469baee9846646670cd31e54dc9d4774dd4e8343f64736f6c63430008070033
Deployed Bytecode Sourcemap
38767:1846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25574:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28078:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40079:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40307:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40173:130;;;;;;;;;;;;;:::i;:::-;;29238:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39467:541;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29494:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40403:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39004:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28597:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39075:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25574:305;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;40079:90::-;40122:4;40142:21;40135:28;;40079:90;:::o;40307:92::-;40351:7;40374:19;:9;:17;:19::i;:::-;40367:26;;40307:92;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;40173:130::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40217:12:::1;40232:21;40217:36;;40268:10;40260:28;;:37;40289:7;40260:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40210:93;40173:130::o:0;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;39467:541::-;39511:7;39527:21;:9;:19;:21::i;:::-;39555:15;39573:19;:9;:17;:19::i;:::-;39555:37;;39650:9;39041:18;39636:23;39627:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39739:9;;39728:7;:20;;39720:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39883:1;39856:16;39850:30;;;;;:::i;:::-;;;:34;39841:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39951:30;39961:10;39973:7;39951:9;:30::i;:::-;39995:7;39988:14;;;39467:541;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;40403:207::-;40476:13;40506:16;40514:7;40506;:16::i;:::-;40498:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40588:16;40581:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40403:207;;;:::o;39004:55::-;39041:18;39004:55;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;39075:30::-;;;;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;32316:110::-;32392:26;32402:2;32406:7;32392:26;;;;;;;;;;;;:9;:26::i;:::-;32316:110;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;32653:321::-;32783:18;32789:2;32793:7;32783:5;:18::i;:::-;32834:54;32865:1;32869:2;32873:7;32882:5;32834:22;:54::i;:::-;32812:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32653:321;;;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:366::-;6982:3;7003:67;7067:2;7062:3;7003:67;:::i;:::-;6996:74;;7079:93;7168:3;7079:93;:::i;:::-;7197:2;7192:3;7188:12;7181:19;;6840:366;;;:::o;7212:::-;7354:3;7375:67;7439:2;7434:3;7375:67;:::i;:::-;7368:74;;7451:93;7540:3;7451:93;:::i;:::-;7569:2;7564:3;7560:12;7553:19;;7212:366;;;:::o;7584:::-;7726:3;7747:67;7811:2;7806:3;7747:67;:::i;:::-;7740:74;;7823:93;7912:3;7823:93;:::i;:::-;7941:2;7936:3;7932:12;7925:19;;7584:366;;;:::o;7956:::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;7956:366;;;:::o;8328:::-;8470:3;8491:67;8555:2;8550:3;8491:67;:::i;:::-;8484:74;;8567:93;8656:3;8567:93;:::i;:::-;8685:2;8680:3;8676:12;8669:19;;8328:366;;;:::o;8700:::-;8842:3;8863:67;8927:2;8922:3;8863:67;:::i;:::-;8856:74;;8939:93;9028:3;8939:93;:::i;:::-;9057:2;9052:3;9048:12;9041:19;;8700:366;;;:::o;9072:::-;9214:3;9235:67;9299:2;9294:3;9235:67;:::i;:::-;9228:74;;9311:93;9400:3;9311:93;:::i;:::-;9429:2;9424:3;9420:12;9413:19;;9072:366;;;:::o;9444:::-;9586:3;9607:67;9671:2;9666:3;9607:67;:::i;:::-;9600:74;;9683:93;9772:3;9683:93;:::i;:::-;9801:2;9796:3;9792:12;9785:19;;9444:366;;;:::o;9816:::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9816:366;;;:::o;10188:::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10188:366;;;:::o;10560:::-;10702:3;10723:67;10787:2;10782:3;10723:67;:::i;:::-;10716:74;;10799:93;10888:3;10799:93;:::i;:::-;10917:2;10912:3;10908:12;10901:19;;10560:366;;;:::o;10932:::-;11074:3;11095:67;11159:2;11154:3;11095:67;:::i;:::-;11088:74;;11171:93;11260:3;11171:93;:::i;:::-;11289:2;11284:3;11280:12;11273:19;;10932:366;;;:::o;11304:::-;11446:3;11467:67;11531:2;11526:3;11467:67;:::i;:::-;11460:74;;11543:93;11632:3;11543:93;:::i;:::-;11661:2;11656:3;11652:12;11645:19;;11304:366;;;:::o;11676:::-;11818:3;11839:67;11903:2;11898:3;11839:67;:::i;:::-;11832:74;;11915:93;12004:3;11915:93;:::i;:::-;12033:2;12028:3;12024:12;12017:19;;11676:366;;;:::o;12048:::-;12190:3;12211:67;12275:2;12270:3;12211:67;:::i;:::-;12204:74;;12287:93;12376:3;12287:93;:::i;:::-;12405:2;12400:3;12396:12;12389:19;;12048:366;;;:::o;12420:::-;12562:3;12583:67;12647:2;12642:3;12583:67;:::i;:::-;12576:74;;12659:93;12748:3;12659:93;:::i;:::-;12777:2;12772:3;12768:12;12761:19;;12420:366;;;:::o;12792:::-;12934:3;12955:67;13019:2;13014:3;12955:67;:::i;:::-;12948:74;;13031:93;13120:3;13031:93;:::i;:::-;13149:2;13144:3;13140:12;13133:19;;12792:366;;;:::o;13164:::-;13306:3;13327:67;13391:2;13386:3;13327:67;:::i;:::-;13320:74;;13403:93;13492:3;13403:93;:::i;:::-;13521:2;13516:3;13512:12;13505:19;;13164:366;;;:::o;13536:::-;13678:3;13699:67;13763:2;13758:3;13699:67;:::i;:::-;13692:74;;13775:93;13864:3;13775:93;:::i;:::-;13893:2;13888:3;13884:12;13877:19;;13536:366;;;:::o;13908:118::-;13995:24;14013:5;13995:24;:::i;:::-;13990:3;13983:37;13908:118;;:::o;14032:222::-;14125:4;14163:2;14152:9;14148:18;14140:26;;14176:71;14244:1;14233:9;14229:17;14220:6;14176:71;:::i;:::-;14032:222;;;;:::o;14260:640::-;14455:4;14493:3;14482:9;14478:19;14470:27;;14507:71;14575:1;14564:9;14560:17;14551:6;14507:71;:::i;:::-;14588:72;14656:2;14645:9;14641:18;14632:6;14588:72;:::i;:::-;14670;14738:2;14727:9;14723:18;14714:6;14670:72;:::i;:::-;14789:9;14783:4;14779:20;14774:2;14763:9;14759:18;14752:48;14817:76;14888:4;14879:6;14817:76;:::i;:::-;14809:84;;14260:640;;;;;;;:::o;14906:210::-;14993:4;15031:2;15020:9;15016:18;15008:26;;15044:65;15106:1;15095:9;15091:17;15082:6;15044:65;:::i;:::-;14906:210;;;;:::o;15122:313::-;15235:4;15273:2;15262:9;15258:18;15250:26;;15322:9;15316:4;15312:20;15308:1;15297:9;15293:17;15286:47;15350:78;15423:4;15414:6;15350:78;:::i;:::-;15342:86;;15122:313;;;;:::o;15441:419::-;15607:4;15645:2;15634:9;15630:18;15622:26;;15694:9;15688:4;15684:20;15680:1;15669:9;15665:17;15658:47;15722:131;15848:4;15722:131;:::i;:::-;15714:139;;15441:419;;;:::o;15866:::-;16032:4;16070:2;16059:9;16055:18;16047:26;;16119:9;16113:4;16109:20;16105:1;16094:9;16090:17;16083:47;16147:131;16273:4;16147:131;:::i;:::-;16139:139;;15866:419;;;:::o;16291:::-;16457:4;16495:2;16484:9;16480:18;16472:26;;16544:9;16538:4;16534:20;16530:1;16519:9;16515:17;16508:47;16572:131;16698:4;16572:131;:::i;:::-;16564:139;;16291:419;;;:::o;16716:::-;16882:4;16920:2;16909:9;16905:18;16897:26;;16969:9;16963:4;16959:20;16955:1;16944:9;16940:17;16933:47;16997:131;17123:4;16997:131;:::i;:::-;16989:139;;16716:419;;;:::o;17141:::-;17307:4;17345:2;17334:9;17330:18;17322:26;;17394:9;17388:4;17384:20;17380:1;17369:9;17365:17;17358:47;17422:131;17548:4;17422:131;:::i;:::-;17414:139;;17141:419;;;:::o;17566:::-;17732:4;17770:2;17759:9;17755:18;17747:26;;17819:9;17813:4;17809:20;17805:1;17794:9;17790:17;17783:47;17847:131;17973:4;17847:131;:::i;:::-;17839:139;;17566:419;;;:::o;17991:::-;18157:4;18195:2;18184:9;18180:18;18172:26;;18244:9;18238:4;18234:20;18230:1;18219:9;18215:17;18208:47;18272:131;18398:4;18272:131;:::i;:::-;18264:139;;17991:419;;;:::o;18416:::-;18582:4;18620:2;18609:9;18605:18;18597:26;;18669:9;18663:4;18659:20;18655:1;18644:9;18640:17;18633:47;18697:131;18823:4;18697:131;:::i;:::-;18689:139;;18416:419;;;:::o;18841:::-;19007:4;19045:2;19034:9;19030:18;19022:26;;19094:9;19088:4;19084:20;19080:1;19069:9;19065:17;19058:47;19122:131;19248:4;19122:131;:::i;:::-;19114:139;;18841:419;;;:::o;19266:::-;19432:4;19470:2;19459:9;19455:18;19447:26;;19519:9;19513:4;19509:20;19505:1;19494:9;19490:17;19483:47;19547:131;19673:4;19547:131;:::i;:::-;19539:139;;19266:419;;;:::o;19691:::-;19857:4;19895:2;19884:9;19880:18;19872:26;;19944:9;19938:4;19934:20;19930:1;19919:9;19915:17;19908:47;19972:131;20098:4;19972:131;:::i;:::-;19964:139;;19691:419;;;:::o;20116:::-;20282:4;20320:2;20309:9;20305:18;20297:26;;20369:9;20363:4;20359:20;20355:1;20344:9;20340:17;20333:47;20397:131;20523:4;20397:131;:::i;:::-;20389:139;;20116:419;;;:::o;20541:::-;20707:4;20745:2;20734:9;20730:18;20722:26;;20794:9;20788:4;20784:20;20780:1;20769:9;20765:17;20758:47;20822:131;20948:4;20822:131;:::i;:::-;20814:139;;20541:419;;;:::o;20966:::-;21132:4;21170:2;21159:9;21155:18;21147:26;;21219:9;21213:4;21209:20;21205:1;21194:9;21190:17;21183:47;21247:131;21373:4;21247:131;:::i;:::-;21239:139;;20966:419;;;:::o;21391:::-;21557:4;21595:2;21584:9;21580:18;21572:26;;21644:9;21638:4;21634:20;21630:1;21619:9;21615:17;21608:47;21672:131;21798:4;21672:131;:::i;:::-;21664:139;;21391:419;;;:::o;21816:::-;21982:4;22020:2;22009:9;22005:18;21997:26;;22069:9;22063:4;22059:20;22055:1;22044:9;22040:17;22033:47;22097:131;22223:4;22097:131;:::i;:::-;22089:139;;21816:419;;;:::o;22241:::-;22407:4;22445:2;22434:9;22430:18;22422:26;;22494:9;22488:4;22484:20;22480:1;22469:9;22465:17;22458:47;22522:131;22648:4;22522:131;:::i;:::-;22514:139;;22241:419;;;:::o;22666:::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22919:9;22913:4;22909:20;22905:1;22894:9;22890:17;22883:47;22947:131;23073:4;22947:131;:::i;:::-;22939:139;;22666:419;;;:::o;23091:::-;23257:4;23295:2;23284:9;23280:18;23272:26;;23344:9;23338:4;23334:20;23330:1;23319:9;23315:17;23308:47;23372:131;23498:4;23372:131;:::i;:::-;23364:139;;23091:419;;;:::o;23516:222::-;23609:4;23647:2;23636:9;23632:18;23624:26;;23660:71;23728:1;23717:9;23713:17;23704:6;23660:71;:::i;:::-;23516:222;;;;:::o;23744:129::-;23778:6;23805:20;;:::i;:::-;23795:30;;23834:33;23862:4;23854:6;23834:33;:::i;:::-;23744:129;;;:::o;23879:75::-;23912:6;23945:2;23939:9;23929:19;;23879:75;:::o;23960:307::-;24021:4;24111:18;24103:6;24100:30;24097:56;;;24133:18;;:::i;:::-;24097:56;24171:29;24193:6;24171:29;:::i;:::-;24163:37;;24255:4;24249;24245:15;24237:23;;23960:307;;;:::o;24273:98::-;24324:6;24358:5;24352:12;24342:22;;24273:98;;;:::o;24377:99::-;24429:6;24463:5;24457:12;24447:22;;24377:99;;;:::o;24482:168::-;24565:11;24599:6;24594:3;24587:19;24639:4;24634:3;24630:14;24615:29;;24482:168;;;;:::o;24656:169::-;24740:11;24774:6;24769:3;24762:19;24814:4;24809:3;24805:14;24790:29;;24656:169;;;;:::o;24831:305::-;24871:3;24890:20;24908:1;24890:20;:::i;:::-;24885:25;;24924:20;24942:1;24924:20;:::i;:::-;24919:25;;25078:1;25010:66;25006:74;25003:1;25000:81;24997:107;;;25084:18;;:::i;:::-;24997:107;25128:1;25125;25121:9;25114:16;;24831:305;;;;:::o;25142:191::-;25182:4;25202:20;25220:1;25202:20;:::i;:::-;25197:25;;25236:20;25254:1;25236:20;:::i;:::-;25231:25;;25275:1;25272;25269:8;25266:34;;;25280:18;;:::i;:::-;25266:34;25325:1;25322;25318:9;25310:17;;25142:191;;;;:::o;25339:96::-;25376:7;25405:24;25423:5;25405:24;:::i;:::-;25394:35;;25339:96;;;:::o;25441:90::-;25475:7;25518:5;25511:13;25504:21;25493:32;;25441:90;;;:::o;25537:149::-;25573:7;25613:66;25606:5;25602:78;25591:89;;25537:149;;;:::o;25692:126::-;25729:7;25769:42;25762:5;25758:54;25747:65;;25692:126;;;:::o;25824:77::-;25861:7;25890:5;25879:16;;25824:77;;;:::o;25907:154::-;25991:6;25986:3;25981;25968:30;26053:1;26044:6;26039:3;26035:16;26028:27;25907:154;;;:::o;26067:307::-;26135:1;26145:113;26159:6;26156:1;26153:13;26145:113;;;26244:1;26239:3;26235:11;26229:18;26225:1;26220:3;26216:11;26209:39;26181:2;26178:1;26174:10;26169:15;;26145:113;;;26276:6;26273:1;26270:13;26267:101;;;26356:1;26347:6;26342:3;26338:16;26331:27;26267:101;26116:258;26067:307;;;:::o;26380:320::-;26424:6;26461:1;26455:4;26451:12;26441:22;;26508:1;26502:4;26498:12;26529:18;26519:81;;26585:4;26577:6;26573:17;26563:27;;26519:81;26647:2;26639:6;26636:14;26616:18;26613:38;26610:84;;;26666:18;;:::i;:::-;26610:84;26431:269;26380:320;;;:::o;26706:281::-;26789:27;26811:4;26789:27;:::i;:::-;26781:6;26777:40;26919:6;26907:10;26904:22;26883:18;26871:10;26868:34;26865:62;26862:88;;;26930:18;;:::i;:::-;26862:88;26970:10;26966:2;26959:22;26749:238;26706:281;;:::o;26993:180::-;27041:77;27038:1;27031:88;27138:4;27135:1;27128:15;27162:4;27159:1;27152:15;27179:180;27227:77;27224:1;27217:88;27324:4;27321:1;27314:15;27348:4;27345:1;27338:15;27365:180;27413:77;27410:1;27403:88;27510:4;27507:1;27500:15;27534:4;27531:1;27524:15;27551:117;27660:1;27657;27650:12;27674:117;27783:1;27780;27773:12;27797:117;27906:1;27903;27896:12;27920:117;28029:1;28026;28019:12;28043:102;28084:6;28135:2;28131:7;28126:2;28119:5;28115:14;28111:28;28101:38;;28043:102;;;:::o;28151:237::-;28291:34;28287:1;28279:6;28275:14;28268:58;28360:20;28355:2;28347:6;28343:15;28336:45;28151:237;:::o;28394:225::-;28534:34;28530:1;28522:6;28518:14;28511:58;28603:8;28598:2;28590:6;28586:15;28579:33;28394:225;:::o;28625:224::-;28765:34;28761:1;28753:6;28749:14;28742:58;28834:7;28829:2;28821:6;28817:15;28810:32;28625:224;:::o;28855:178::-;28995:30;28991:1;28983:6;28979:14;28972:54;28855:178;:::o;29039:223::-;29179:34;29175:1;29167:6;29163:14;29156:58;29248:6;29243:2;29235:6;29231:15;29224:31;29039:223;:::o;29268:175::-;29408:27;29404:1;29396:6;29392:14;29385:51;29268:175;:::o;29449:231::-;29589:34;29585:1;29577:6;29573:14;29566:58;29658:14;29653:2;29645:6;29641:15;29634:39;29449:231;:::o;29686:223::-;29826:34;29822:1;29814:6;29810:14;29803:58;29895:6;29890:2;29882:6;29878:15;29871:31;29686:223;:::o;29915:243::-;30055:34;30051:1;30043:6;30039:14;30032:58;30124:26;30119:2;30111:6;30107:15;30100:51;29915:243;:::o;30164:229::-;30304:34;30300:1;30292:6;30288:14;30281:58;30373:12;30368:2;30360:6;30356:15;30349:37;30164:229;:::o;30399:228::-;30539:34;30535:1;30527:6;30523:14;30516:58;30608:11;30603:2;30595:6;30591:15;30584:36;30399:228;:::o;30633:182::-;30773:34;30769:1;30761:6;30757:14;30750:58;30633:182;:::o;30821:231::-;30961:34;30957:1;30949:6;30945:14;30938:58;31030:14;31025:2;31017:6;31013:15;31006:39;30821:231;:::o;31058:182::-;31198:34;31194:1;31186:6;31182:14;31175:58;31058:182;:::o;31246:234::-;31386:34;31382:1;31374:6;31370:14;31363:58;31455:17;31450:2;31442:6;31438:15;31431:42;31246:234;:::o;31486:220::-;31626:34;31622:1;31614:6;31610:14;31603:58;31695:3;31690:2;31682:6;31678:15;31671:28;31486:220;:::o;31712:236::-;31852:34;31848:1;31840:6;31836:14;31829:58;31921:19;31916:2;31908:6;31904:15;31897:44;31712:236;:::o;31954:235::-;32094:34;32090:1;32082:6;32078:14;32071:58;32163:18;32158:2;32150:6;32146:15;32139:43;31954:235;:::o;32195:237::-;32335:34;32331:1;32323:6;32319:14;32312:58;32404:20;32399:2;32391:6;32387:15;32380:45;32195:237;:::o;32438:122::-;32511:24;32529:5;32511:24;:::i;:::-;32504:5;32501:35;32491:63;;32550:1;32547;32540:12;32491:63;32438:122;:::o;32566:116::-;32636:21;32651:5;32636:21;:::i;:::-;32629:5;32626:32;32616:60;;32672:1;32669;32662:12;32616:60;32566:116;:::o;32688:120::-;32760:23;32777:5;32760:23;:::i;:::-;32753:5;32750:34;32740:62;;32798:1;32795;32788:12;32740:62;32688:120;:::o;32814:122::-;32887:24;32905:5;32887:24;:::i;:::-;32880:5;32877:35;32867:63;;32926:1;32923;32916:12;32867:63;32814:122;:::o
Swarm Source
ipfs://d48d97f57f1ef3fd276e03d469baee9846646670cd31e54dc9d4774dd4e8343f
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.