ERC-721
NFT
Overview
Max Total Supply
6,000 Sidus
Holders
1,331
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 SidusLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HeroesCommon
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // Galaxy Heroes NFT game pragma solidity 0.8.6; import "./ERC721Enumerable.sol"; import "./IERC20.sol"; import "./Ownable.sol"; contract HeroesCommon is ERC721Enumerable, Ownable { struct Partners { uint256 limit; uint256 nftMinted; } uint256 constant public MAX_TOTAL_SUPPLY = 6000; uint256 constant public MAGIC_BOX_TOKENID = 777777777777777777777777777; uint256 constant public MAX_MINT_PER_TX = 20; uint256 constant public MAX_BUY_PER_TX = 3; uint256 public mintPrice = 5e16; uint256 public stopMintAfter = 2000; //First Wave ofCommon Heroes uint256 public reservedForPartners; uint256 public enableBuyAfterTimestamp; mapping (uint256 => uint256) internal isMagicBox; mapping (address => Partners) public partnersLimit; mapping (address => uint256) public tokensForMint; //Event for track mint channel: // 1 - MagicBox // 2 - With Ethere // 3 - Partners White List // 4 - With ERC20 event MintSource(uint256 tokenId, uint8 channel); event PartnesChanged(address partner, uint256 limit); /** * @dev Set _mintMagicBox to true for enable this feature * */ constructor(uint256 _amount, bool _mintMagicBox) ERC721("Sidus NFT Heroes", "Sidus") { //Let's mint MagicBox if need if (_mintMagicBox) { _mint(owner(),MAGIC_BOX_TOKENID); isMagicBox[MAGIC_BOX_TOKENID] = _amount; } //1630353600 - 2021-08-30 20:00 UTC enableBuyAfterTimestamp = 1630353600; } /** * @dev Mint new NFTs with ether or free for partners. * */ function multiMint() external payable { uint256 mintAmount = _availableFreeMint(msg.sender); if(mintAmount > 0) { require(msg.value == 0, "No need Ether"); mintAmount = _multiMint(msg.sender, mintAmount, 3); partnersLimit[msg.sender].nftMinted += mintAmount; reservedForPartners -= mintAmount; } else { require(enableBuyAfterTimestamp <= block.timestamp, "To early"); require(msg.value >= mintPrice, "Less ether for mint"); uint256 estimateAmountForMint = msg.value / mintPrice; require(estimateAmountForMint <= MAX_BUY_PER_TX, "So much payable mint"); require(stopMintAfter - reservedForPartners >= totalSupply() + estimateAmountForMint, "Minting is paused"); mintAmount = _multiMint(msg.sender, estimateAmountForMint, 2); if ((msg.value - mintAmount * mintPrice) > 0) { address payable s = payable(msg.sender); s.transfer(msg.value - mintAmount * mintPrice); } } } /** * @dev Mint new NFTs with ERC20 payment * */ function mintWithERC20(address _withToken, uint256 _nftAmountForMint) external { require(enableBuyAfterTimestamp <= block.timestamp, "To early"); require(tokensForMint[_withToken] > 0, "No mint with this Token"); require(stopMintAfter - reservedForPartners >= totalSupply() + _nftAmountForMint, "Minting is paused"); require(_nftAmountForMint <= MAX_BUY_PER_TX, "So much payable mint"); IERC20(_withToken).transferFrom( msg.sender, address(this), tokensForMint[_withToken] * _nftAmountForMint ); require( _multiMint(msg.sender, _nftAmountForMint, 4) == _nftAmountForMint, "Error in multi mint" ); } /** * @dev Returns avilable for free mint NFTs for address * */ function availableFreeMint(address _partner) external view returns (uint256) { return _availableFreeMint(_partner); } /////////////////////////////////////////////////////////////////// ///// Owners Functions /////////////////////////////////////////// /////////////////////////////////////////////////////////////////// function setPartner(address _partner, uint256 _limit) external onlyOwner { _setPartner(_partner, _limit); } function setPartnerBatch(address[] memory _partners, uint256[] memory _limits) external onlyOwner { require(_partners.length == _limits.length, "Array params must have equal length"); require(_partners.length <= 256, "Not more than 256"); for (uint8 i; i < _partners.length; i ++) { _setPartner(_partners[i], _limits[i]); } } function setMintPrice(uint256 _newPrice) external onlyOwner { mintPrice = _newPrice; } function withdrawEther() external onlyOwner { address payable o = payable(msg.sender); o.transfer(address(this).balance); } function withdrawTokens(address _erc20) external onlyOwner { IERC20(_erc20).transfer(msg.sender, IERC20(_erc20).balanceOf(address(this))); } function editMagicBox(uint256 _tokenId, uint256 _amount) external onlyOwner { isMagicBox[_tokenId] = _amount; } function setMintPause(uint256 _newTotalSupply) external onlyOwner { stopMintAfter = _newTotalSupply; } function setPriceInToken(address _token, uint256 _pricePerMint) external onlyOwner { require(_token != address(0), "No zero"); tokensForMint[_token] = _pricePerMint; } function setEnableTimestamp(uint256 _newTimestamp) external onlyOwner { enableBuyAfterTimestamp = _newTimestamp; } /////////////////////////////////////////////////////////////////// ///// INTERNALS ///////////////////////////////////////////// /////////////////////////////////////////////////////////////////// function _availableFreeMint(address _partner) internal view returns (uint256) { return partnersLimit[_partner].limit - partnersLimit[_partner].nftMinted; } function _baseURI() internal view override returns (string memory) { //return "https://dev.nftstars.app/backend/api/v1/nfts/metadata/{address}/{tokenId}"; return string(abi.encodePacked( "https://dev.nftstars.app/backend/api/v1/nfts/metadata/0x", //string(abi.encodePacked(address(this))), toAsciiString(address(this)), "/") ); } function _setPartner(address _partner, uint256 _limit) internal { require(_partner != address(0), "No zero"); uint256 av = _availableFreeMint(_partner); require(_limit >= partnersLimit[_partner].nftMinted, "Cant decrease more then minted"); if (partnersLimit[_partner].limit < _limit) { reservedForPartners += _limit; } else { reservedForPartners -= _limit; } partnersLimit[_partner].limit = _limit; emit PartnesChanged(_partner, _limit); } function _multiMint(address to, uint256 amount, uint8 channel) internal returns (uint256) { require((totalSupply() + reservedForPartners + amount) <= MAX_TOTAL_SUPPLY, "No more common heroes"); uint256 counter; if (amount > MAX_MINT_PER_TX) { counter = MAX_MINT_PER_TX; } else { counter = amount; } if ((totalSupply() + counter) > MAX_TOTAL_SUPPLY) { counter = MAX_TOTAL_SUPPLY - totalSupply(); } for(uint i = 0; i < counter; i++) { _mint(to, totalSupply()); emit MintSource(totalSupply(), channel); } return counter; } function toAsciiString(address x) internal view returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2*i] = char(hi); s[2*i+1] = char(lo); } return string(s); } function char(bytes1 b) internal view returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } /** * @dev Override standart OpenZeppelin hook * due MagicBox never be transfered * */ function _transfer( address from, address to, uint256 tokenId ) internal override { if (isMagicBox[tokenId] > 0) { uint256 counter = _multiMint(to, isMagicBox[tokenId], 1); return; } else { super._transfer(from, to, tokenId); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_mintMagicBox","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"channel","type":"uint8"}],"name":"MintSource","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"partner","type":"address"},{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"PartnesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAGIC_BOX_TOKENID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUY_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_SUPPLY","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":"_partner","type":"address"}],"name":"availableFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"editMagicBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBuyAfterTimestamp","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":[{"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":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_withToken","type":"address"},{"internalType":"uint256","name":"_nftAmountForMint","type":"uint256"}],"name":"mintWithERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"multiMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partnersLimit","outputs":[{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"nftMinted","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedForPartners","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":"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":"uint256","name":"_newTimestamp","type":"uint256"}],"name":"setEnableTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTotalSupply","type":"uint256"}],"name":"setMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_partner","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setPartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_partners","type":"address[]"},{"internalType":"uint256[]","name":"_limits","type":"uint256[]"}],"name":"setPartnerBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_pricePerMint","type":"uint256"}],"name":"setPriceInToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopMintAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensForMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec50000600b556107d0600c553480156200002257600080fd5b5060405162003743380380620037438339810160408190526200004591620006c0565b604080518082018252601081526f5369647573204e4654204865726f657360801b602080830191825283518085019094526005845264536964757360d81b9084015281519192916200009a916000916200061a565b508051620000b09060019060208401906200061a565b505050620000cd620000c76200014860201b60201c565b6200014c565b80156200013857620000fe620000eb600a546001600160a01b031690565b6b02835cd9d1a22ada09c71c716200019e565b6b02835cd9d1a22ada09c71c71600052600f6020527f4abef9bd14768deffe7778e323503dc62dab5c9ad4395313a45f6f04deb73dae8290555b505063612d38c0600e55620007ab565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001fa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b6000818152600260205260409020546001600160a01b031615620002615760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620001f1565b6200026f60008383620002f8565b6001600160a01b03821660009081526003602052604081208054600192906200029a908490620006f7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b62000310838383620003ae60201b620009df1760201c565b6001600160a01b0383166200036e576200036881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b62000394565b816001600160a01b0316836001600160a01b0316146200039457620003948382620003d9565b6001600160a01b038216620003b357620003ae8162000486565b505050565b826001600160a01b0316826001600160a01b031614620003ae57620003ae828262000540565b60006001620003f3846200059160201b62000fb11760201c565b620003ff919062000712565b60008381526007602052604090205490915080821462000453576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906200049a9060019062000712565b60008381526009602052604081205460088054939450909284908110620004c557620004c562000795565b906000526020600020015490508060088381548110620004e957620004e962000795565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806200052457620005246200077f565b6001900381819060005260206000200160009055905550505050565b600062000558836200059160201b62000fb11760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b038216620005fe5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401620001f1565b506001600160a01b031660009081526003602052604090205490565b82805462000628906200072c565b90600052602060002090601f0160209004810192826200064c576000855562000697565b82601f106200066757805160ff191683800117855562000697565b8280016001018555821562000697579182015b82811115620006975782518255916020019190600101906200067a565b50620006a5929150620006a9565b5090565b5b80821115620006a55760008155600101620006aa565b60008060408385031215620006d457600080fd5b8251915060208301518015158114620006ec57600080fd5b809150509250929050565b600082198211156200070d576200070d62000769565b500190565b60008282101562000727576200072762000769565b500390565b600181811c908216806200074157607f821691505b602082108114156200076357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b612f8880620007bb6000396000f3fe6080604052600436106102465760003560e01c80637bdb0c93116101395780639413b04d116100b6578063b88d4fde1161007a578063b88d4fde14610698578063c87b56dd146106b8578063e985e9c5146106d8578063f097903a14610721578063f2fde38b14610737578063f4a0a5281461075757600080fd5b80639413b04d1461062557806395d89b41146106455780639d38e9771461065a578063a22cb46514610670578063b3f85e0b1461069057600080fd5b806388f63414116100fd57806388f63414146105925780638b51ae16146105b25780638da5cb5b146105d25780638ecad721146105f05780639193c4851461060557600080fd5b80637bdb0c93146104fa5780637c9c1f0b1461050f5780637e66ffd81461053c5780637f6ab2561461055c578063803e48241461057c57600080fd5b806342842e0e116101c75780636352211e1161018b5780636352211e1461047a5780636817c76c1461049a57806370a08231146104b0578063715018a6146104d05780637362377b146104e557600080fd5b806342842e0e146103b157806346e494a2146103d1578063479687431461041a57806349df728c1461043a5780634f6ccce71461045a57600080fd5b806318160ddd1161020e57806318160ddd1461031c57806323b872dd1461033b5780632cc663d11461035b5780632f745c591461037b57806333039d3d1461039b57600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da5780631330d0c8146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612956565b610777565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102956107a2565b6040516102779190612af2565b3480156102ae57600080fd5b506102c26102bd366004612990565b610834565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612848565b6108ce565b005b34801561030857600080fd5b506102fa610317366004612848565b6109e4565b34801561032857600080fd5b506008545b604051908152602001610277565b34801561034757600080fd5b506102fa610356366004612715565b610c3e565b34801561036757600080fd5b506102fa610376366004612990565b610c6f565b34801561038757600080fd5b5061032d610396366004612848565b610c9e565b3480156103a757600080fd5b5061032d61177081565b3480156103bd57600080fd5b506102fa6103cc366004612715565b610d34565b3480156103dd57600080fd5b506104056103ec3660046126c7565b6010602052600090815260409020805460019091015482565b60408051928352602083019190915201610277565b34801561042657600080fd5b506102fa610435366004612990565b610d4f565b34801561044657600080fd5b506102fa6104553660046126c7565b610d7e565b34801561046657600080fd5b5061032d610475366004612990565b610ea7565b34801561048657600080fd5b506102c2610495366004612990565b610f3a565b3480156104a657600080fd5b5061032d600b5481565b3480156104bc57600080fd5b5061032d6104cb3660046126c7565b610fb1565b3480156104dc57600080fd5b506102fa611038565b3480156104f157600080fd5b506102fa61106e565b34801561050657600080fd5b5061032d600381565b34801561051b57600080fd5b5061032d61052a3660046126c7565b60116020526000908152604090205481565b34801561054857600080fd5b506102fa6105573660046129c2565b6110c6565b34801561056857600080fd5b506102fa610577366004612872565b611102565b34801561058857600080fd5b5061032d600d5481565b34801561059e57600080fd5b506102fa6105ad366004612848565b611233565b3480156105be57600080fd5b5061032d6b02835cd9d1a22ada09c71c7181565b3480156105de57600080fd5b50600a546001600160a01b03166102c2565b3480156105fc57600080fd5b5061032d601481565b34801561061157600080fd5b506102fa610620366004612848565b6112b9565b34801561063157600080fd5b5061032d6106403660046126c7565b6112ed565b34801561065157600080fd5b506102956112f8565b34801561066657600080fd5b5061032d600e5481565b34801561067c57600080fd5b506102fa61068b366004612811565b611307565b6102fa6113cc565b3480156106a457600080fd5b506102fa6106b3366004612751565b611635565b3480156106c457600080fd5b506102956106d3366004612990565b611667565b3480156106e457600080fd5b5061026b6106f33660046126e2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561072d57600080fd5b5061032d600c5481565b34801561074357600080fd5b506102fa6107523660046126c7565b611742565b34801561076357600080fd5b506102fa610772366004612990565b6117da565b60006001600160e01b0319821663780e9d6360e01b148061079c575061079c82611809565b92915050565b6060600080546107b190612e36565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90612e36565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108b25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108d982610f3a565b9050806001600160a01b0316836001600160a01b031614156109475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a9565b336001600160a01b0382161480610963575061096381336106f3565b6109d55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108a9565b6109df8383611859565b505050565b42600e541115610a215760405162461bcd60e51b8152602060048201526008602482015267546f206561726c7960c01b60448201526064016108a9565b6001600160a01b038216600090815260116020526040902054610a865760405162461bcd60e51b815260206004820152601760248201527f4e6f206d696e742077697468207468697320546f6b656e00000000000000000060448201526064016108a9565b80610a9060085490565b610a9a9190612c32565b600d54600c54610aaa9190612dd0565b1015610aec5760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016108a9565b6003811115610b345760405162461bcd60e51b815260206004820152601460248201527314dbc81b5d58da081c185e58589b19481b5a5b9d60621b60448201526064016108a9565b6001600160a01b0382166000818152601160205260409020546323b872dd9033903090610b62908690612d90565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b158015610bb157600080fd5b505af1158015610bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be99190612939565b5080610bf7338360046118c7565b14610c3a5760405162461bcd60e51b8152602060048201526013602482015272115c9c9bdc881a5b881b5d5b1d1a481b5a5b9d606a1b60448201526064016108a9565b5050565b610c4833826119f3565b610c645760405162461bcd60e51b81526004016108a990612b8c565b6109df838383611aea565b600a546001600160a01b03163314610c995760405162461bcd60e51b81526004016108a990612b57565b600c55565b6000610ca983610fb1565b8210610d0b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108a9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6109df83838360405180602001604052806000815250611635565b600a546001600160a01b03163314610d795760405162461bcd60e51b81526004016108a990612b57565b600e55565b600a546001600160a01b03163314610da85760405162461bcd60e51b81526004016108a990612b57565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b158015610df157600080fd5b505afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2991906129a9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610e6f57600080fd5b505af1158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190612939565b6000610eb260085490565b8210610f155760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108a9565b60088281548110610f2857610f28612f02565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061079c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108a9565b60006001600160a01b03821661101c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108a9565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110625760405162461bcd60e51b81526004016108a990612b57565b61106c6000611b2c565b565b600a546001600160a01b031633146110985760405162461bcd60e51b81526004016108a990612b57565b604051339081904780156108fc02916000818181858888f19350505050158015610c3a573d6000803e3d6000fd5b600a546001600160a01b031633146110f05760405162461bcd60e51b81526004016108a990612b57565b6000918252600f602052604090912055565b600a546001600160a01b0316331461112c5760405162461bcd60e51b81526004016108a990612b57565b80518251146111895760405162461bcd60e51b815260206004820152602360248201527f417272617920706172616d73206d757374206861766520657175616c206c656e6044820152620cee8d60eb1b60648201526084016108a9565b610100825111156111d05760405162461bcd60e51b81526020600482015260116024820152702737ba1036b7b932903a3430b710191a9b60791b60448201526064016108a9565b60005b82518160ff1610156109df57611221838260ff16815181106111f7576111f7612f02565b6020026020010151838360ff168151811061121457611214612f02565b6020026020010151611b7e565b8061122b81612e8c565b9150506111d3565b600a546001600160a01b0316331461125d5760405162461bcd60e51b81526004016108a990612b57565b6001600160a01b03821661129d5760405162461bcd60e51b81526020600482015260076024820152664e6f207a65726f60c81b60448201526064016108a9565b6001600160a01b03909116600090815260116020526040902055565b600a546001600160a01b031633146112e35760405162461bcd60e51b81526004016108a990612b57565b610c3a8282611b7e565b600061079c82611ce5565b6060600180546107b190612e36565b6001600160a01b0382163314156113605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a9565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006113d733611ce5565b9050801561147457341561141d5760405162461bcd60e51b815260206004820152600d60248201526c2737903732b2b21022ba3432b960991b60448201526064016108a9565b611429338260036118c7565b33600090815260106020526040812060010180549293508392909190611450908490612c32565b9250508190555080600d60008282546114699190612dd0565b909155506116329050565b42600e5411156114b15760405162461bcd60e51b8152602060048201526008602482015267546f206561726c7960c01b60448201526064016108a9565b600b543410156114f95760405162461bcd60e51b815260206004820152601360248201527213195cdcc8195d1a195c88199bdc881b5a5b9d606a1b60448201526064016108a9565b6000600b54346115099190612c6f565b905060038111156115535760405162461bcd60e51b815260206004820152601460248201527314dbc81b5d58da081c185e58589b19481b5a5b9d60621b60448201526064016108a9565b8061155d60085490565b6115679190612c32565b600d54600c546115779190612dd0565b10156115b95760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016108a9565b6115c5338260026118c7565b91506000600b54836115d79190612d90565b6115e19034612dd0565b1115610c3a57600b54339081906108fc906115fc9086612d90565b6116069034612dd0565b6040518115909202916000818181858888f1935050505015801561162e573d6000803e3d6000fd5b5050505b50565b61163f33836119f3565b61165b5760405162461bcd60e51b81526004016108a990612b8c565b61162e84848484611d0e565b6000818152600260205260409020546060906001600160a01b03166116e65760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108a9565b60006116f0611d41565b90506000815111611710576040518060200160405280600081525061173b565b8061171a84611d70565b60405160200161172b929190612a10565b6040516020818303038152906040525b9392505050565b600a546001600160a01b0316331461176c5760405162461bcd60e51b81526004016108a990612b57565b6001600160a01b0381166117d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a9565b61163281611b2c565b600a546001600160a01b031633146118045760405162461bcd60e51b81526004016108a990612b57565b600b55565b60006001600160e01b031982166380ac58cd60e01b148061183a57506001600160e01b03198216635b5e139f60e01b145b8061079c57506301ffc9a760e01b6001600160e01b031983161461079c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061188e82610f3a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061177083600d546118d960085490565b6118e39190612c32565b6118ed9190612c32565b11156119335760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f726520636f6d6d6f6e206865726f657360581b60448201526064016108a9565b6000601484111561194657506014611949565b50825b6117708161195660085490565b6119609190612c32565b11156119785760085461197590611770612dd0565b90505b60005b818110156119ea576119958661199060085490565b611e6e565b7ffd636c29295c38c3eeae326f7097ebd61b78de26ef55bca5765e27633270c8d16119bf60085490565b6040805191825260ff871660208301520160405180910390a1806119e281612e71565b91505061197b565b50949350505050565b6000818152600260205260408120546001600160a01b0316611a6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108a9565b6000611a7783610f3a565b9050806001600160a01b0316846001600160a01b03161480611ab25750836001600160a01b0316611aa784610834565b6001600160a01b0316145b80611ae257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b6000818152600f602052604090205415611b21576000818152600f6020526040812054611b1a90849060016118c7565b5050505050565b6109df838383611fbc565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611bbe5760405162461bcd60e51b81526020600482015260076024820152664e6f207a65726f60c81b60448201526064016108a9565b6000611bc983611ce5565b6001600160a01b038416600090815260106020526040902060010154909150821015611c375760405162461bcd60e51b815260206004820152601e60248201527f43616e74206465637265617365206d6f7265207468656e206d696e746564000060448201526064016108a9565b6001600160a01b038316600090815260106020526040902054821115611c745781600d6000828254611c699190612c32565b90915550611c8c9050565b81600d6000828254611c869190612dd0565b90915550505b6001600160a01b038316600081815260106020908152604091829020859055815192835282018490527f803981771db745bd970856e925c35e52bd496491aaf602198e48b9e33e4d7ee7910160405180910390a1505050565b6001600160a01b03811660009081526010602052604081206001810154905461079c9190612dd0565b611d19848484611aea565b611d2584848484612167565b61162e5760405162461bcd60e51b81526004016108a990612b05565b6060611d4c30612274565b604051602001611d5c9190612a3f565b604051602081830303815290604052905090565b606081611d945750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dbe5780611da881612e71565b9150611db79050600a83612c6f565b9150611d98565b60008167ffffffffffffffff811115611dd957611dd9612f18565b6040519080825280601f01601f191660200182016040528015611e03576020820181803683370190505b5090505b8415611ae257611e18600183612dd0565b9150611e25600a86612eac565b611e30906030612c32565b60f81b818381518110611e4557611e45612f02565b60200101906001600160f81b031916908160001a905350611e67600a86612c6f565b9450611e07565b6001600160a01b038216611ec45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a9565b6000818152600260205260409020546001600160a01b031615611f295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a9565b611f35600083836123bb565b6001600160a01b0382166000908152600360205260408120805460019290611f5e908490612c32565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b826001600160a01b0316611fcf82610f3a565b6001600160a01b0316146120375760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108a9565b6001600160a01b0382166120995760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a9565b6120a48383836123bb565b6120af600082611859565b6001600160a01b03831660009081526003602052604081208054600192906120d8908490612dd0565b90915550506001600160a01b0382166000908152600360205260408120805460019290612106908490612c32565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b1561226957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121ab903390899088908890600401612ab5565b602060405180830381600087803b1580156121c557600080fd5b505af19250505080156121f5575060408051601f3d908101601f191682019092526121f291810190612973565b60015b61224f573d808015612223576040519150601f19603f3d011682016040523d82523d6000602084013e612228565b606091505b5080516122475760405162461bcd60e51b81526004016108a990612b05565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ae2565b506001949350505050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156123b45760006122b1826013612dd0565b6122bc906008612d90565b6122c7906002612ce8565b6122da906001600160a01b038716612c6f565b60f81b9050600060108260f81c6122f19190612c83565b60f81b905060008160f81c60106123089190612daf565b8360f81c6123169190612de7565b60f81b905061232482612473565b85612330866002612d90565b8151811061234057612340612f02565b60200101906001600160f81b031916908160001a90535061236081612473565b8561236c866002612d90565b612377906001612c32565b8151811061238757612387612f02565b60200101906001600160f81b031916908160001a90535050505080806123ac90612e71565b91505061229b565b5092915050565b6001600160a01b0383166124165761241181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612439565b816001600160a01b0316836001600160a01b0316146124395761243983826124ae565b6001600160a01b038216612450576109df8161254b565b826001600160a01b0316826001600160a01b0316146109df576109df82826125fa565b6000600a60f883901c101561249a5761249160f883901c6030612c4a565b60f81b92915050565b61249160f883901c6057612c4a565b919050565b600060016124bb84610fb1565b6124c59190612dd0565b600083815260076020526040902054909150808214612518576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061255d90600190612dd0565b6000838152600960205260408120546008805493945090928490811061258557612585612f02565b9060005260206000200154905080600883815481106125a6576125a6612f02565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806125de576125de612eec565b6001900381819060005260206000200160009055905550505050565b600061260583610fb1565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b80356001600160a01b03811681146124a957600080fd5b600082601f83011261266657600080fd5b8135602061267b61267683612c0e565b612bdd565b80838252828201915082860187848660051b890101111561269b57600080fd5b60005b858110156126ba5781358452928401929084019060010161269e565b5090979650505050505050565b6000602082840312156126d957600080fd5b61173b8261263e565b600080604083850312156126f557600080fd5b6126fe8361263e565b915061270c6020840161263e565b90509250929050565b60008060006060848603121561272a57600080fd5b6127338461263e565b92506127416020850161263e565b9150604084013590509250925092565b6000806000806080858703121561276757600080fd5b6127708561263e565b9350602061277f81870161263e565b935060408601359250606086013567ffffffffffffffff808211156127a357600080fd5b818801915088601f8301126127b757600080fd5b8135818111156127c9576127c9612f18565b6127db601f8201601f19168501612bdd565b915080825289848285010111156127f157600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561282457600080fd5b61282d8361263e565b9150602083013561283d81612f2e565b809150509250929050565b6000806040838503121561285b57600080fd5b6128648361263e565b946020939093013593505050565b6000806040838503121561288557600080fd5b823567ffffffffffffffff8082111561289d57600080fd5b818501915085601f8301126128b157600080fd5b813560206128c161267683612c0e565b8083825282820191508286018a848660051b89010111156128e157600080fd5b600096505b8487101561290b576128f78161263e565b8352600196909601959183019183016128e6565b509650508601359250508082111561292257600080fd5b5061292f85828601612655565b9150509250929050565b60006020828403121561294b57600080fd5b815161173b81612f2e565b60006020828403121561296857600080fd5b813561173b81612f3c565b60006020828403121561298557600080fd5b815161173b81612f3c565b6000602082840312156129a257600080fd5b5035919050565b6000602082840312156129bb57600080fd5b5051919050565b600080604083850312156129d557600080fd5b50508035926020909101359150565b600081518084526129fc816020860160208601612e0a565b601f01601f19169290920160200192915050565b60008351612a22818460208801612e0a565b835190830190612a36818360208801612e0a565b01949350505050565b7f68747470733a2f2f6465762e6e667473746172732e6170702f6261636b656e6481527f2f6170692f76312f6e6674732f6d657461646174612f30780000000000000000602082015260008251612a9d816038850160208701612e0a565b602f60f81b6038939091019283015250603901919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ae8908301846129e4565b9695505050505050565b60208152600061173b60208301846129e4565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c0657612c06612f18565b604052919050565b600067ffffffffffffffff821115612c2857612c28612f18565b5060051b60200190565b60008219821115612c4557612c45612ec0565b500190565b600060ff821660ff84168060ff03821115612c6757612c67612ec0565b019392505050565b600082612c7e57612c7e612ed6565b500490565b600060ff831680612c9657612c96612ed6565b8060ff84160491505092915050565b600181815b80851115612ce0578160001904821115612cc657612cc6612ec0565b80851615612cd357918102915b93841c9390800290612caa565b509250929050565b600061173b8383600082612cfe5750600161079c565b81612d0b5750600061079c565b8160018114612d215760028114612d2b57612d47565b600191505061079c565b60ff841115612d3c57612d3c612ec0565b50506001821b61079c565b5060208310610133831016604e8410600b8410161715612d6a575081810a61079c565b612d748383612ca5565b8060001904821115612d8857612d88612ec0565b029392505050565b6000816000190483118215151615612daa57612daa612ec0565b500290565b600060ff821660ff84168160ff0481118215151615612d8857612d88612ec0565b600082821015612de257612de2612ec0565b500390565b600060ff821660ff841680821015612e0157612e01612ec0565b90039392505050565b60005b83811015612e25578181015183820152602001612e0d565b8381111561162e5750506000910152565b600181811c90821680612e4a57607f821691505b60208210811415612e6b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e8557612e85612ec0565b5060010190565b600060ff821660ff811415612ea357612ea3612ec0565b60010192915050565b600082612ebb57612ebb612ed6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461163257600080fd5b6001600160e01b03198116811461163257600080fdfea26469706673582212205b20aac1ba7640830dc86434f36ee12d4879e9ee24a4d4471a48380eb45b1ef464736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c80637bdb0c93116101395780639413b04d116100b6578063b88d4fde1161007a578063b88d4fde14610698578063c87b56dd146106b8578063e985e9c5146106d8578063f097903a14610721578063f2fde38b14610737578063f4a0a5281461075757600080fd5b80639413b04d1461062557806395d89b41146106455780639d38e9771461065a578063a22cb46514610670578063b3f85e0b1461069057600080fd5b806388f63414116100fd57806388f63414146105925780638b51ae16146105b25780638da5cb5b146105d25780638ecad721146105f05780639193c4851461060557600080fd5b80637bdb0c93146104fa5780637c9c1f0b1461050f5780637e66ffd81461053c5780637f6ab2561461055c578063803e48241461057c57600080fd5b806342842e0e116101c75780636352211e1161018b5780636352211e1461047a5780636817c76c1461049a57806370a08231146104b0578063715018a6146104d05780637362377b146104e557600080fd5b806342842e0e146103b157806346e494a2146103d1578063479687431461041a57806349df728c1461043a5780634f6ccce71461045a57600080fd5b806318160ddd1161020e57806318160ddd1461031c57806323b872dd1461033b5780632cc663d11461035b5780632f745c591461037b57806333039d3d1461039b57600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da5780631330d0c8146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612956565b610777565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102956107a2565b6040516102779190612af2565b3480156102ae57600080fd5b506102c26102bd366004612990565b610834565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612848565b6108ce565b005b34801561030857600080fd5b506102fa610317366004612848565b6109e4565b34801561032857600080fd5b506008545b604051908152602001610277565b34801561034757600080fd5b506102fa610356366004612715565b610c3e565b34801561036757600080fd5b506102fa610376366004612990565b610c6f565b34801561038757600080fd5b5061032d610396366004612848565b610c9e565b3480156103a757600080fd5b5061032d61177081565b3480156103bd57600080fd5b506102fa6103cc366004612715565b610d34565b3480156103dd57600080fd5b506104056103ec3660046126c7565b6010602052600090815260409020805460019091015482565b60408051928352602083019190915201610277565b34801561042657600080fd5b506102fa610435366004612990565b610d4f565b34801561044657600080fd5b506102fa6104553660046126c7565b610d7e565b34801561046657600080fd5b5061032d610475366004612990565b610ea7565b34801561048657600080fd5b506102c2610495366004612990565b610f3a565b3480156104a657600080fd5b5061032d600b5481565b3480156104bc57600080fd5b5061032d6104cb3660046126c7565b610fb1565b3480156104dc57600080fd5b506102fa611038565b3480156104f157600080fd5b506102fa61106e565b34801561050657600080fd5b5061032d600381565b34801561051b57600080fd5b5061032d61052a3660046126c7565b60116020526000908152604090205481565b34801561054857600080fd5b506102fa6105573660046129c2565b6110c6565b34801561056857600080fd5b506102fa610577366004612872565b611102565b34801561058857600080fd5b5061032d600d5481565b34801561059e57600080fd5b506102fa6105ad366004612848565b611233565b3480156105be57600080fd5b5061032d6b02835cd9d1a22ada09c71c7181565b3480156105de57600080fd5b50600a546001600160a01b03166102c2565b3480156105fc57600080fd5b5061032d601481565b34801561061157600080fd5b506102fa610620366004612848565b6112b9565b34801561063157600080fd5b5061032d6106403660046126c7565b6112ed565b34801561065157600080fd5b506102956112f8565b34801561066657600080fd5b5061032d600e5481565b34801561067c57600080fd5b506102fa61068b366004612811565b611307565b6102fa6113cc565b3480156106a457600080fd5b506102fa6106b3366004612751565b611635565b3480156106c457600080fd5b506102956106d3366004612990565b611667565b3480156106e457600080fd5b5061026b6106f33660046126e2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561072d57600080fd5b5061032d600c5481565b34801561074357600080fd5b506102fa6107523660046126c7565b611742565b34801561076357600080fd5b506102fa610772366004612990565b6117da565b60006001600160e01b0319821663780e9d6360e01b148061079c575061079c82611809565b92915050565b6060600080546107b190612e36565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90612e36565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108b25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108d982610f3a565b9050806001600160a01b0316836001600160a01b031614156109475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a9565b336001600160a01b0382161480610963575061096381336106f3565b6109d55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108a9565b6109df8383611859565b505050565b42600e541115610a215760405162461bcd60e51b8152602060048201526008602482015267546f206561726c7960c01b60448201526064016108a9565b6001600160a01b038216600090815260116020526040902054610a865760405162461bcd60e51b815260206004820152601760248201527f4e6f206d696e742077697468207468697320546f6b656e00000000000000000060448201526064016108a9565b80610a9060085490565b610a9a9190612c32565b600d54600c54610aaa9190612dd0565b1015610aec5760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016108a9565b6003811115610b345760405162461bcd60e51b815260206004820152601460248201527314dbc81b5d58da081c185e58589b19481b5a5b9d60621b60448201526064016108a9565b6001600160a01b0382166000818152601160205260409020546323b872dd9033903090610b62908690612d90565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b158015610bb157600080fd5b505af1158015610bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be99190612939565b5080610bf7338360046118c7565b14610c3a5760405162461bcd60e51b8152602060048201526013602482015272115c9c9bdc881a5b881b5d5b1d1a481b5a5b9d606a1b60448201526064016108a9565b5050565b610c4833826119f3565b610c645760405162461bcd60e51b81526004016108a990612b8c565b6109df838383611aea565b600a546001600160a01b03163314610c995760405162461bcd60e51b81526004016108a990612b57565b600c55565b6000610ca983610fb1565b8210610d0b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108a9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6109df83838360405180602001604052806000815250611635565b600a546001600160a01b03163314610d795760405162461bcd60e51b81526004016108a990612b57565b600e55565b600a546001600160a01b03163314610da85760405162461bcd60e51b81526004016108a990612b57565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a082319060240160206040518083038186803b158015610df157600080fd5b505afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2991906129a9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610e6f57600080fd5b505af1158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190612939565b6000610eb260085490565b8210610f155760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108a9565b60088281548110610f2857610f28612f02565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061079c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108a9565b60006001600160a01b03821661101c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108a9565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110625760405162461bcd60e51b81526004016108a990612b57565b61106c6000611b2c565b565b600a546001600160a01b031633146110985760405162461bcd60e51b81526004016108a990612b57565b604051339081904780156108fc02916000818181858888f19350505050158015610c3a573d6000803e3d6000fd5b600a546001600160a01b031633146110f05760405162461bcd60e51b81526004016108a990612b57565b6000918252600f602052604090912055565b600a546001600160a01b0316331461112c5760405162461bcd60e51b81526004016108a990612b57565b80518251146111895760405162461bcd60e51b815260206004820152602360248201527f417272617920706172616d73206d757374206861766520657175616c206c656e6044820152620cee8d60eb1b60648201526084016108a9565b610100825111156111d05760405162461bcd60e51b81526020600482015260116024820152702737ba1036b7b932903a3430b710191a9b60791b60448201526064016108a9565b60005b82518160ff1610156109df57611221838260ff16815181106111f7576111f7612f02565b6020026020010151838360ff168151811061121457611214612f02565b6020026020010151611b7e565b8061122b81612e8c565b9150506111d3565b600a546001600160a01b0316331461125d5760405162461bcd60e51b81526004016108a990612b57565b6001600160a01b03821661129d5760405162461bcd60e51b81526020600482015260076024820152664e6f207a65726f60c81b60448201526064016108a9565b6001600160a01b03909116600090815260116020526040902055565b600a546001600160a01b031633146112e35760405162461bcd60e51b81526004016108a990612b57565b610c3a8282611b7e565b600061079c82611ce5565b6060600180546107b190612e36565b6001600160a01b0382163314156113605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a9565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006113d733611ce5565b9050801561147457341561141d5760405162461bcd60e51b815260206004820152600d60248201526c2737903732b2b21022ba3432b960991b60448201526064016108a9565b611429338260036118c7565b33600090815260106020526040812060010180549293508392909190611450908490612c32565b9250508190555080600d60008282546114699190612dd0565b909155506116329050565b42600e5411156114b15760405162461bcd60e51b8152602060048201526008602482015267546f206561726c7960c01b60448201526064016108a9565b600b543410156114f95760405162461bcd60e51b815260206004820152601360248201527213195cdcc8195d1a195c88199bdc881b5a5b9d606a1b60448201526064016108a9565b6000600b54346115099190612c6f565b905060038111156115535760405162461bcd60e51b815260206004820152601460248201527314dbc81b5d58da081c185e58589b19481b5a5b9d60621b60448201526064016108a9565b8061155d60085490565b6115679190612c32565b600d54600c546115779190612dd0565b10156115b95760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016108a9565b6115c5338260026118c7565b91506000600b54836115d79190612d90565b6115e19034612dd0565b1115610c3a57600b54339081906108fc906115fc9086612d90565b6116069034612dd0565b6040518115909202916000818181858888f1935050505015801561162e573d6000803e3d6000fd5b5050505b50565b61163f33836119f3565b61165b5760405162461bcd60e51b81526004016108a990612b8c565b61162e84848484611d0e565b6000818152600260205260409020546060906001600160a01b03166116e65760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108a9565b60006116f0611d41565b90506000815111611710576040518060200160405280600081525061173b565b8061171a84611d70565b60405160200161172b929190612a10565b6040516020818303038152906040525b9392505050565b600a546001600160a01b0316331461176c5760405162461bcd60e51b81526004016108a990612b57565b6001600160a01b0381166117d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a9565b61163281611b2c565b600a546001600160a01b031633146118045760405162461bcd60e51b81526004016108a990612b57565b600b55565b60006001600160e01b031982166380ac58cd60e01b148061183a57506001600160e01b03198216635b5e139f60e01b145b8061079c57506301ffc9a760e01b6001600160e01b031983161461079c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061188e82610f3a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061177083600d546118d960085490565b6118e39190612c32565b6118ed9190612c32565b11156119335760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f726520636f6d6d6f6e206865726f657360581b60448201526064016108a9565b6000601484111561194657506014611949565b50825b6117708161195660085490565b6119609190612c32565b11156119785760085461197590611770612dd0565b90505b60005b818110156119ea576119958661199060085490565b611e6e565b7ffd636c29295c38c3eeae326f7097ebd61b78de26ef55bca5765e27633270c8d16119bf60085490565b6040805191825260ff871660208301520160405180910390a1806119e281612e71565b91505061197b565b50949350505050565b6000818152600260205260408120546001600160a01b0316611a6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108a9565b6000611a7783610f3a565b9050806001600160a01b0316846001600160a01b03161480611ab25750836001600160a01b0316611aa784610834565b6001600160a01b0316145b80611ae257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b6000818152600f602052604090205415611b21576000818152600f6020526040812054611b1a90849060016118c7565b5050505050565b6109df838383611fbc565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611bbe5760405162461bcd60e51b81526020600482015260076024820152664e6f207a65726f60c81b60448201526064016108a9565b6000611bc983611ce5565b6001600160a01b038416600090815260106020526040902060010154909150821015611c375760405162461bcd60e51b815260206004820152601e60248201527f43616e74206465637265617365206d6f7265207468656e206d696e746564000060448201526064016108a9565b6001600160a01b038316600090815260106020526040902054821115611c745781600d6000828254611c699190612c32565b90915550611c8c9050565b81600d6000828254611c869190612dd0565b90915550505b6001600160a01b038316600081815260106020908152604091829020859055815192835282018490527f803981771db745bd970856e925c35e52bd496491aaf602198e48b9e33e4d7ee7910160405180910390a1505050565b6001600160a01b03811660009081526010602052604081206001810154905461079c9190612dd0565b611d19848484611aea565b611d2584848484612167565b61162e5760405162461bcd60e51b81526004016108a990612b05565b6060611d4c30612274565b604051602001611d5c9190612a3f565b604051602081830303815290604052905090565b606081611d945750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611dbe5780611da881612e71565b9150611db79050600a83612c6f565b9150611d98565b60008167ffffffffffffffff811115611dd957611dd9612f18565b6040519080825280601f01601f191660200182016040528015611e03576020820181803683370190505b5090505b8415611ae257611e18600183612dd0565b9150611e25600a86612eac565b611e30906030612c32565b60f81b818381518110611e4557611e45612f02565b60200101906001600160f81b031916908160001a905350611e67600a86612c6f565b9450611e07565b6001600160a01b038216611ec45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a9565b6000818152600260205260409020546001600160a01b031615611f295760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a9565b611f35600083836123bb565b6001600160a01b0382166000908152600360205260408120805460019290611f5e908490612c32565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b826001600160a01b0316611fcf82610f3a565b6001600160a01b0316146120375760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108a9565b6001600160a01b0382166120995760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a9565b6120a48383836123bb565b6120af600082611859565b6001600160a01b03831660009081526003602052604081208054600192906120d8908490612dd0565b90915550506001600160a01b0382166000908152600360205260408120805460019290612106908490612c32565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b1561226957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121ab903390899088908890600401612ab5565b602060405180830381600087803b1580156121c557600080fd5b505af19250505080156121f5575060408051601f3d908101601f191682019092526121f291810190612973565b60015b61224f573d808015612223576040519150601f19603f3d011682016040523d82523d6000602084013e612228565b606091505b5080516122475760405162461bcd60e51b81526004016108a990612b05565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ae2565b506001949350505050565b60408051602880825260608281019093526000919060208201818036833701905050905060005b60148110156123b45760006122b1826013612dd0565b6122bc906008612d90565b6122c7906002612ce8565b6122da906001600160a01b038716612c6f565b60f81b9050600060108260f81c6122f19190612c83565b60f81b905060008160f81c60106123089190612daf565b8360f81c6123169190612de7565b60f81b905061232482612473565b85612330866002612d90565b8151811061234057612340612f02565b60200101906001600160f81b031916908160001a90535061236081612473565b8561236c866002612d90565b612377906001612c32565b8151811061238757612387612f02565b60200101906001600160f81b031916908160001a90535050505080806123ac90612e71565b91505061229b565b5092915050565b6001600160a01b0383166124165761241181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612439565b816001600160a01b0316836001600160a01b0316146124395761243983826124ae565b6001600160a01b038216612450576109df8161254b565b826001600160a01b0316826001600160a01b0316146109df576109df82826125fa565b6000600a60f883901c101561249a5761249160f883901c6030612c4a565b60f81b92915050565b61249160f883901c6057612c4a565b919050565b600060016124bb84610fb1565b6124c59190612dd0565b600083815260076020526040902054909150808214612518576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061255d90600190612dd0565b6000838152600960205260408120546008805493945090928490811061258557612585612f02565b9060005260206000200154905080600883815481106125a6576125a6612f02565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806125de576125de612eec565b6001900381819060005260206000200160009055905550505050565b600061260583610fb1565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b80356001600160a01b03811681146124a957600080fd5b600082601f83011261266657600080fd5b8135602061267b61267683612c0e565b612bdd565b80838252828201915082860187848660051b890101111561269b57600080fd5b60005b858110156126ba5781358452928401929084019060010161269e565b5090979650505050505050565b6000602082840312156126d957600080fd5b61173b8261263e565b600080604083850312156126f557600080fd5b6126fe8361263e565b915061270c6020840161263e565b90509250929050565b60008060006060848603121561272a57600080fd5b6127338461263e565b92506127416020850161263e565b9150604084013590509250925092565b6000806000806080858703121561276757600080fd5b6127708561263e565b9350602061277f81870161263e565b935060408601359250606086013567ffffffffffffffff808211156127a357600080fd5b818801915088601f8301126127b757600080fd5b8135818111156127c9576127c9612f18565b6127db601f8201601f19168501612bdd565b915080825289848285010111156127f157600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561282457600080fd5b61282d8361263e565b9150602083013561283d81612f2e565b809150509250929050565b6000806040838503121561285b57600080fd5b6128648361263e565b946020939093013593505050565b6000806040838503121561288557600080fd5b823567ffffffffffffffff8082111561289d57600080fd5b818501915085601f8301126128b157600080fd5b813560206128c161267683612c0e565b8083825282820191508286018a848660051b89010111156128e157600080fd5b600096505b8487101561290b576128f78161263e565b8352600196909601959183019183016128e6565b509650508601359250508082111561292257600080fd5b5061292f85828601612655565b9150509250929050565b60006020828403121561294b57600080fd5b815161173b81612f2e565b60006020828403121561296857600080fd5b813561173b81612f3c565b60006020828403121561298557600080fd5b815161173b81612f3c565b6000602082840312156129a257600080fd5b5035919050565b6000602082840312156129bb57600080fd5b5051919050565b600080604083850312156129d557600080fd5b50508035926020909101359150565b600081518084526129fc816020860160208601612e0a565b601f01601f19169290920160200192915050565b60008351612a22818460208801612e0a565b835190830190612a36818360208801612e0a565b01949350505050565b7f68747470733a2f2f6465762e6e667473746172732e6170702f6261636b656e6481527f2f6170692f76312f6e6674732f6d657461646174612f30780000000000000000602082015260008251612a9d816038850160208701612e0a565b602f60f81b6038939091019283015250603901919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ae8908301846129e4565b9695505050505050565b60208152600061173b60208301846129e4565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c0657612c06612f18565b604052919050565b600067ffffffffffffffff821115612c2857612c28612f18565b5060051b60200190565b60008219821115612c4557612c45612ec0565b500190565b600060ff821660ff84168060ff03821115612c6757612c67612ec0565b019392505050565b600082612c7e57612c7e612ed6565b500490565b600060ff831680612c9657612c96612ed6565b8060ff84160491505092915050565b600181815b80851115612ce0578160001904821115612cc657612cc6612ec0565b80851615612cd357918102915b93841c9390800290612caa565b509250929050565b600061173b8383600082612cfe5750600161079c565b81612d0b5750600061079c565b8160018114612d215760028114612d2b57612d47565b600191505061079c565b60ff841115612d3c57612d3c612ec0565b50506001821b61079c565b5060208310610133831016604e8410600b8410161715612d6a575081810a61079c565b612d748383612ca5565b8060001904821115612d8857612d88612ec0565b029392505050565b6000816000190483118215151615612daa57612daa612ec0565b500290565b600060ff821660ff84168160ff0481118215151615612d8857612d88612ec0565b600082821015612de257612de2612ec0565b500390565b600060ff821660ff841680821015612e0157612e01612ec0565b90039392505050565b60005b83811015612e25578181015183820152602001612e0d565b8381111561162e5750506000910152565b600181811c90821680612e4a57607f821691505b60208210811415612e6b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612e8557612e85612ec0565b5060010190565b600060ff821660ff811415612ea357612ea3612ec0565b60010192915050565b600082612ebb57612ebb612ed6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461163257600080fd5b6001600160e01b03198116811461163257600080fdfea26469706673582212205b20aac1ba7640830dc86434f36ee12d4879e9ee24a4d4471a48380eb45b1ef464736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _amount (uint256): 0
Arg [1] : _mintMagicBox (bool): False
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
164:8466:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:222:4;;;;;;;;;;-1:-1:-1;909:222:4;;;;;:::i;:::-;;:::i;:::-;;;8694:14:14;;8687:22;8669:41;;8657:2;8642:18;909:222:4;;;;;;;;2349:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3860:217::-;;;;;;;;;;-1:-1:-1;3860:217:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7333:32:14;;;7315:51;;7303:2;7288:18;3860:217:3;7270:102:14;3398:401:3;;;;;;;;;;-1:-1:-1;3398:401:3;;;;;:::i;:::-;;:::i;:::-;;2856:733:5;;;;;;;;;;-1:-1:-1;2856:733:5;;;;;:::i;:::-;;:::i;1534:111:4:-;;;;;;;;;;-1:-1:-1;1621:10:4;:17;1534:111;;;20513:25:14;;;20501:2;20486:18;1534:111:4;20468:76:14;4724:330:3;;;;;;;;;;-1:-1:-1;4724:330:3;;;;;:::i;:::-;;:::i;5094:114:5:-;;;;;;;;;;-1:-1:-1;5094:114:5;;;;;:::i;:::-;;:::i;1210:253:4:-;;;;;;;;;;-1:-1:-1;1210:253:4;;;;;:::i;:::-;;:::i;301:47:5:-;;;;;;;;;;;;344:4;301:47;;5120:179:3;;;;;;;;;;-1:-1:-1;5120:179:3;;;;;:::i;:::-;;:::i;777:52:5:-;;;;;;;;;;-1:-1:-1;777:52:5;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;20723:25:14;;;20779:2;20764:18;;20757:34;;;;20696:18;777:52:5;20678:119:14;5407:126:5;;;;;;;;;;-1:-1:-1;5407:126:5;;;;;:::i;:::-;;:::i;4807:152::-;;;;;;;;;;-1:-1:-1;4807:152:5;;;;;:::i;:::-;;:::i;1717:230:4:-;;;;;;;;;;-1:-1:-1;1717:230:4;;;;;:::i;:::-;;:::i;2052:235:3:-;;;;;;;;;;-1:-1:-1;2052:235:3;;;;;:::i;:::-;;:::i;530:31:5:-;;;;;;;;;;;;;;;;1790:205:3;;;;;;;;;;-1:-1:-1;1790:205:3;;;;;:::i;:::-;;:::i;1598:92:12:-;;;;;;;;;;;;;:::i;4658:143:5:-;;;;;;;;;;;;;:::i;481:42::-;;;;;;;;;;;;522:1;481:42;;835:52;;;;;;;;;;-1:-1:-1;835:52:5;;;;;:::i;:::-;;;;;;;;;;;;;;4965:123;;;;;;;;;;-1:-1:-1;4965:123:5;;;;;:::i;:::-;;:::i;4173:374::-;;;;;;;;;;-1:-1:-1;4173:374:5;;;;;:::i;:::-;;:::i;637:34::-;;;;;;;;;;;;;;;;5214:187;;;;;;;;;;-1:-1:-1;5214:187:5;;;;;:::i;:::-;;:::i;354:71::-;;;;;;;;;;;;398:27;354:71;;966:85:12;;;;;;;;;;-1:-1:-1;1038:6:12;;-1:-1:-1;;;;;1038:6:12;966:85;;431:44:5;;;;;;;;;;;;473:2;431:44;;4048:119;;;;;;;;;;-1:-1:-1;4048:119:5;;;;;:::i;:::-;;:::i;3684:133::-;;;;;;;;;;-1:-1:-1;3684:133:5;;;;;:::i;:::-;;:::i;2511:102:3:-;;;;;;;;;;;;;:::i;677:38:5:-;;;;;;;;;;;;;;;;4144:290:3;;;;;;;;;;-1:-1:-1;4144:290:3;;;;;:::i;:::-;;:::i;1693:1081:5:-;;;:::i;5365:320:3:-;;;;;;;;;;-1:-1:-1;5365:320:3;;;;;:::i;:::-;;:::i;2679:329::-;;;;;;;;;;-1:-1:-1;2679:329:3;;;;;:::i;:::-;;:::i;4500:162::-;;;;;;;;;;-1:-1:-1;4500:162:3;;;;;:::i;:::-;-1:-1:-1;;;;;4620:25:3;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4500:162;567:35:5;;;;;;;;;;;;;;;;1839:189:12;;;;;;;;;;-1:-1:-1;1839:189:12;;;;;:::i;:::-;;:::i;4554:98:5:-;;;;;;;;;;-1:-1:-1;4554:98:5;;;;;:::i;:::-;;:::i;909:222:4:-;1011:4;-1:-1:-1;;;;;;1034:50:4;;-1:-1:-1;;;1034:50:4;;:90;;;1088:36;1112:11;1088:23;:36::i;:::-;1027:97;909:222;-1:-1:-1;;909:222:4:o;2349:98:3:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:3;3955:73;;;;-1:-1:-1;;;3955:73:3;;14976:2:14;3955:73:3;;;14958:21:14;15015:2;14995:18;;;14988:30;15054:34;15034:18;;;15027:62;-1:-1:-1;;;15105:18:14;;;15098:42;15157:19;;3955:73:3;;;;;;;;;-1:-1:-1;4046:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4046:24:3;;3860:217::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;-1:-1:-1;;;;;3535:11:3;:2;-1:-1:-1;;;;;3535:11:3;;;3527:57;;;;-1:-1:-1;;;3527:57:3;;16911:2:14;3527:57:3;;;16893:21:14;16950:2;16930:18;;;16923:30;16989:34;16969:18;;;16962:62;-1:-1:-1;;;17040:18:14;;;17033:31;17081:19;;3527:57:3;16883:223:14;3527:57:3;666:10:1;-1:-1:-1;;;;;3616:21:3;;;;:62;;-1:-1:-1;3641:37:3;3658:5;666:10:1;4500:162:3;:::i;3641:37::-;3595:165;;;;-1:-1:-1;;;3595:165:3;;12668:2:14;3595:165:3;;;12650:21:14;12707:2;12687:18;;;12680:30;12746:34;12726:18;;;12719:62;12817:26;12797:18;;;12790:54;12861:19;;3595:165:3;12640:246:14;3595:165:3;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;2856:733:5:-;2981:15;2954:23;;:42;;2946:63;;;;-1:-1:-1;;;2946:63:5;;18419:2:14;2946:63:5;;;18401:21:14;18458:1;18438:18;;;18431:29;-1:-1:-1;;;18476:18:14;;;18469:38;18524:18;;2946:63:5;18391:157:14;2946:63:5;-1:-1:-1;;;;;3027:25:5;;3055:1;3027:25;;;:13;:25;;;;;;3019:65;;;;-1:-1:-1;;;3019:65:5;;14624:2:14;3019:65:5;;;14606:21:14;14663:2;14643:18;;;14636:30;14702:25;14682:18;;;14675:53;14745:18;;3019:65:5;14596:173:14;3019:65:5;3158:17;3141:13;1621:10:4;:17;;1534:111;3141:13:5;:34;;;;:::i;:::-;3118:19;;3102:13;;:35;;;;:::i;:::-;:73;;3094:103;;;;-1:-1:-1;;;3094:103:5;;18073:2:14;3094:103:5;;;18055:21:14;18112:2;18092:18;;;18085:30;-1:-1:-1;;;18131:18:14;;;18124:47;18188:18;;3094:103:5;18045:167:14;3094:103:5;522:1;3215:17;:35;;3207:68;;;;-1:-1:-1;;;3207:68:5;;13914:2:14;3207:68:5;;;13896:21:14;13953:2;13933:18;;;13926:30;-1:-1:-1;;;13972:18:14;;;13965:50;14032:18;;3207:68:5;13886:170:14;3207:68:5;-1:-1:-1;;;;;3285:31:5;;3383:25;;;;:13;:25;;;;;;3285:31;;3330:10;;3363:4;;3383:45;;3411:17;;3383:45;:::i;:::-;3285:153;;-1:-1:-1;;;;;;3285:153:5;;;;;;;-1:-1:-1;;;;;7635:15:14;;;3285:153:5;;;7617:34:14;7687:15;;;;7667:18;;;7660:43;7719:18;;;7712:34;7552:18;;3285:153:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3517:17;3469:44;3480:10;3492:17;3511:1;3469:10;:44::i;:::-;:65;3448:131;;;;-1:-1:-1;;;3448:131:5;;19101:2:14;3448:131:5;;;19083:21:14;19140:2;19120:18;;;19113:30;-1:-1:-1;;;19159:18:14;;;19152:49;19218:18;;3448:131:5;19073:169:14;3448:131:5;2856:733;;:::o;4724:330:3:-;4913:41;666:10:1;4946:7:3;4913:18;:41::i;:::-;4905:103;;;;-1:-1:-1;;;4905:103:3;;;;;;;:::i;:::-;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;5094:114:5:-;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;5170:13:5::1;:31:::0;5094:114::o;1210:253:4:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;-1:-1:-1;;;1326:87:4;;9497:2:14;1326:87:4;;;9479:21:14;9536:2;9516:18;;;9509:30;9575:34;9555:18;;;9548:62;-1:-1:-1;;;9626:18:14;;;9619:41;9677:19;;1326:87:4;9469:233:14;1326:87:4;-1:-1:-1;;;;;;1430:19:4;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1210:253::o;5120:179:3:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;5407:126:5:-;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;5487:23:5::1;:39:::0;5407:126::o;4807:152::-;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;4912:39:5::1;::::0;-1:-1:-1;;;4912:39:5;;4945:4:::1;4912:39;::::0;::::1;7315:51:14::0;-1:-1:-1;;;;;4876:23:5;::::1;::::0;::::1;::::0;4900:10:::1;::::0;4876:23;;4912:24:::1;::::0;7288:18:14;;4912:39:5::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4876:76;::::0;-1:-1:-1;;;;;;4876:76:5::1;::::0;;;;;;-1:-1:-1;;;;;8442:32:14;;;4876:76:5::1;::::0;::::1;8424:51:14::0;8491:18;;;8484:34;8397:18;;4876:76:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1717:230:4:-:0;1792:7;1827:30;1621:10;:17;;1534:111;1827:30;1819:5;:38;1811:95;;;;-1:-1:-1;;;1811:95:4;;19797:2:14;1811:95:4;;;19779:21:14;19836:2;19816:18;;;19809:30;19875:34;19855:18;;;19848:62;-1:-1:-1;;;19926:18:14;;;19919:42;19978:19;;1811:95:4;19769:234:14;1811:95:4;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;1916:24;;1717:230;;;:::o;2052:235:3:-;2124:7;2159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2159:16:3;2193:19;2185:73;;;;-1:-1:-1;;;2185:73:3;;13504:2:14;2185:73:3;;;13486:21:14;13543:2;13523:18;;;13516:30;13582:34;13562:18;;;13555:62;-1:-1:-1;;;13633:18:14;;;13626:39;13682:19;;2185:73:3;13476:231:14;1790:205:3;1862:7;-1:-1:-1;;;;;1889:19:3;;1881:74;;;;-1:-1:-1;;;1881:74:3;;13093:2:14;1881:74:3;;;13075:21:14;13132:2;13112:18;;;13105:30;13171:34;13151:18;;;13144:62;-1:-1:-1;;;13222:18:14;;;13215:40;13272:19;;1881:74:3;13065:232:14;1881:74:3;-1:-1:-1;;;;;;1972:16:3;;;;;:9;:16;;;;;;;1790:205::o;1598:92:12:-;1038:6;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;4658:143:5:-;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;4761:33:5::1;::::0;4740:10:::1;::::0;;;4772:21:::1;4761:33:::0;::::1;;;::::0;4712:17:::1;4761:33:::0;4712:17;4761:33;4772:21;4740:10;4761:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;4965:123:::0;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;5051:20:5::1;::::0;;;:10:::1;:20;::::0;;;;;:30;4965:123::o;4173:374::-;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;4309:7:5::1;:14;4289:9;:16;:34;4281:82;;;::::0;-1:-1:-1;;;4281:82:5;;11092:2:14;4281:82:5::1;::::0;::::1;11074:21:14::0;11131:2;11111:18;;;11104:30;11170:34;11150:18;;;11143:62;-1:-1:-1;;;11221:18:14;;;11214:33;11264:19;;4281:82:5::1;11064:225:14::0;4281:82:5::1;4401:3;4381:9;:16;:23;;4373:53;;;::::0;-1:-1:-1;;;4373:53:5;;18755:2:14;4373:53:5::1;::::0;::::1;18737:21:14::0;18794:2;18774:18;;;18767:30;-1:-1:-1;;;18813:18:14;;;18806:47;18870:18;;4373:53:5::1;18727:167:14::0;4373:53:5::1;4441:7;4436:104;4454:9;:16;4450:1;:20;;;4436:104;;;4492:37;4504:9;4514:1;4504:12;;;;;;;;;;:::i;:::-;;;;;;;4518:7;4526:1;4518:10;;;;;;;;;;:::i;:::-;;;;;;;4492:11;:37::i;:::-;4472:4:::0;::::1;::::0;::::1;:::i;:::-;;;;4436:104;;5214:187:::0;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;5315:20:5;::::1;5307:40;;;::::0;-1:-1:-1;;;5307:40:5;;16576:2:14;5307:40:5::1;::::0;::::1;16558:21:14::0;16615:1;16595:18;;;16588:29;-1:-1:-1;;;16633:18:14;;;16626:37;16680:18;;5307:40:5::1;16548:156:14::0;5307:40:5::1;-1:-1:-1::0;;;;;5357:21:5;;::::1;;::::0;;;:13:::1;:21;::::0;;;;:37;5214:187::o;4048:119::-;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;4131:29:5::1;4143:8;4153:6;4131:11;:29::i;3684:133::-:0;3752:7;3778:28;3797:8;3778:18;:28::i;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;4144:290::-;-1:-1:-1;;;;;4246:24:3;;666:10:1;4246:24:3;;4238:62;;;;-1:-1:-1;;;4238:62:3;;11901:2:14;4238:62:3;;;11883:21:14;11940:2;11920:18;;;11913:30;11979:27;11959:18;;;11952:55;12024:18;;4238:62:3;11873:175:14;4238:62:3;666:10:1;4311:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4311:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;4311:53:3;;;;;;;;;;4379:48;;8669:41:14;;;4311:42:3;;666:10:1;4379:48:3;;8642:18:14;4379:48:3;;;;;;;4144:290;;:::o;1693:1081:5:-;1741:18;1762:30;1781:10;1762:18;:30::i;:::-;1741:51;-1:-1:-1;1805:14:5;;1802:966;;1843:9;:14;1835:40;;;;-1:-1:-1;;;1835:40:5;;17313:2:14;1835:40:5;;;17295:21:14;17352:2;17332:18;;;17325:30;-1:-1:-1;;;17371:18:14;;;17364:43;17424:18;;1835:40:5;17285:163:14;1835:40:5;1902:37;1913:10;1925;1937:1;1902:10;:37::i;:::-;1967:10;1953:25;;;;:13;:25;;;;;:35;;:49;;1889:50;;-1:-1:-1;1889:50:5;;1953:35;;:25;:49;;1889:50;;1953:49;:::i;:::-;;;;;;;;2039:10;2016:19;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;1802:966:5;;-1:-1:-1;1802:966:5;;2115:15;2088:23;;:42;;2080:63;;;;-1:-1:-1;;;2080:63:5;;18419:2:14;2080:63:5;;;18401:21:14;18458:1;18438:18;;;18431:29;-1:-1:-1;;;18476:18:14;;;18469:38;18524:18;;2080:63:5;18391:157:14;2080:63:5;2178:9;;2165;:22;;2157:54;;;;-1:-1:-1;;;2157:54:5;;19449:2:14;2157:54:5;;;19431:21:14;19488:2;19468:18;;;19461:30;-1:-1:-1;;;19507:18:14;;;19500:49;19566:18;;2157:54:5;19421:169:14;2157:54:5;2225:29;2269:9;;2257;:21;;;;:::i;:::-;2225:53;;522:1;2300:21;:39;;2292:72;;;;-1:-1:-1;;;2292:72:5;;13914:2:14;2292:72:5;;;13896:21:14;13953:2;13933:18;;;13926:30;-1:-1:-1;;;13972:18:14;;;13965:50;14032:18;;2292:72:5;13886:170:14;2292:72:5;2443:21;2425:13;1621:10:4;:17;;1534:111;2425:13:5;:39;;;;:::i;:::-;2402:19;;2386:13;;:35;;;;:::i;:::-;:78;;2378:108;;;;-1:-1:-1;;;2378:108:5;;18073:2:14;2378:108:5;;;18055:21:14;18112:2;18092:18;;;18085:30;-1:-1:-1;;;18131:18:14;;;18124:47;18188:18;;2378:108:5;18045:167:14;2378:108:5;2513:48;2524:10;2536:21;2559:1;2513:10;:48::i;:::-;2500:61;;2619:1;2606:9;;2593:10;:22;;;;:::i;:::-;2581:34;;:9;:34;:::i;:::-;2580:40;2575:183;;;2733:9;;2668:10;;;;2697:46;;2720:22;;:10;:22;:::i;:::-;2708:34;;:9;:34;:::i;:::-;2697:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2622:136;2066:702;1802:966;1731:1043;1693:1081::o;5365:320:3:-;5534:41;666:10:1;5567:7:3;5534:18;:41::i;:::-;5526:103;;;;-1:-1:-1;;;5526:103:3;;;;;;;:::i;:::-;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;2679:329::-;7222:4;7245:16;;;:7;:16;;;;;;2752:13;;-1:-1:-1;;;;;7245:16:3;2777:76;;;;-1:-1:-1;;;2777:76:3;;16160:2:14;2777:76:3;;;16142:21:14;16199:2;16179:18;;;16172:30;16238:34;16218:18;;;16211:62;-1:-1:-1;;;16289:18:14;;;16282:45;16344:19;;2777:76:3;16132:237:14;2777:76:3;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;2679:329;-1:-1:-1;;;2679:329:3:o;1839:189:12:-;1038:6;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:12;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:12;;10328:2:14;1919:73:12::1;::::0;::::1;10310:21:14::0;10367:2;10347:18;;;10340:30;10406:34;10386:18;;;10379:62;-1:-1:-1;;;10457:18:14;;;10450:36;10503:19;;1919:73:12::1;10300:228:14::0;1919:73:12::1;2002:19;2012:8;2002:9;:19::i;4554:98:5:-:0;1038:6:12;;-1:-1:-1;;;;;1038:6:12;666:10:1;1178:23:12;1170:68;;;;-1:-1:-1;;;1170:68:12;;;;;;;:::i;:::-;4624:9:5::1;:21:::0;4554:98::o;1431:300:3:-;1533:4;-1:-1:-1;;;;;;1568:40:3;;-1:-1:-1;;;1568:40:3;;:104;;-1:-1:-1;;;;;;;1624:48:3;;-1:-1:-1;;;1624:48:3;1568:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:2;;;1688:36:3;763:155:2;11008:171:3;11082:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11082:29:3;-1:-1:-1;;;;;11082:29:3;;;;;;;;:24;;11135:23;11082:24;11135:14;:23::i;:::-;-1:-1:-1;;;;;11126:46:3;;;;;;;;;;;11008:171;;:::o;6886:665:5:-;6967:7;344:4;7033:6;7011:19;;6995:13;1621:10:4;:17;;1534:111;6995:13:5;:35;;;;:::i;:::-;:44;;;;:::i;:::-;6994:66;;6986:100;;;;-1:-1:-1;;;6986:100:5;;9147:2:14;6986:100:5;;;9129:21:14;9186:2;9166:18;;;9159:30;-1:-1:-1;;;9205:18:14;;;9198:51;9266:18;;6986:100:5;9119:171:14;6986:100:5;7096:15;473:2;7125:6;:25;7121:128;;;-1:-1:-1;473:2:5;7121:128;;;-1:-1:-1;7232:6:5;7121:128;344:4;7280:7;7264:13;1621:10:4;:17;;1534:111;7264:13:5;:23;;;;:::i;:::-;7263:44;7259:117;;;1621:10:4;:17;7333:32:5;;344:4;7333:32;:::i;:::-;7323:42;;7259:117;7389:6;7385:136;7405:7;7401:1;:11;7385:136;;;7433:24;7439:2;7443:13;1621:10:4;:17;;1534:111;7443:13:5;7433:5;:24::i;:::-;7476:34;7487:13;1621:10:4;:17;;1534:111;7487:13:5;7476:34;;;20972:25:14;;;21045:4;21033:17;;21028:2;21013:18;;21006:45;20945:18;7476:34:5;;;;;;;7414:3;;;;:::i;:::-;;;;7385:136;;;-1:-1:-1;7537:7:5;6886:665;-1:-1:-1;;;;6886:665:5:o;7440:344:3:-;7533:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:3;7549:73;;;;-1:-1:-1;;;7549:73:3;;12255:2:14;7549:73:3;;;12237:21:14;12294:2;12274:18;;;12267:30;12333:34;12313:18;;;12306:62;-1:-1:-1;;;12384:18:14;;;12377:42;12436:19;;7549:73:3;12227:234:14;7549:73:3;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;-1:-1:-1;;;;;7689:16:3;:7;-1:-1:-1;;;;;7689:16:3;;:51;;;;7733:7;-1:-1:-1;;;;;7709:31:3;:20;7721:7;7709:11;:20::i;:::-;-1:-1:-1;;;;;7709:31:3;;7689:51;:87;;;-1:-1:-1;;;;;;4620:25:3;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7744:32;7681:96;7440:344;-1:-1:-1;;;;7440:344:3:o;8304:322:5:-;8451:1;8429:19;;;:10;:19;;;;;;:23;8425:195;;8468:15;8501:19;;;:10;:19;;;;;;8486:38;;8497:2;;8522:1;8486:10;:38::i;:::-;-1:-1:-1;;;;;8304:322:5:o;8425:195::-;8575:34;8591:4;8597:2;8601:7;8575:15;:34::i;2034:169:12:-;2108:6;;;-1:-1:-1;;;;;2124:17:12;;;-1:-1:-1;;;;;;2124:17:12;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2079:124;2034:169;:::o;6347:533:5:-;-1:-1:-1;;;;;6429:22:5;;6421:42;;;;-1:-1:-1;;;6421:42:5;;16576:2:14;6421:42:5;;;16558:21:14;16615:1;16595:18;;;16588:29;-1:-1:-1;;;16633:18:14;;;16626:37;16680:18;;6421:42:5;16548:156:14;6421:42:5;6473:10;6486:28;6505:8;6486:18;:28::i;:::-;-1:-1:-1;;;;;6543:23:5;;;;;;:13;:23;;;;;:33;;;6473:41;;-1:-1:-1;6532:44:5;;;6524:87;;;;-1:-1:-1;;;6524:87:5;;20210:2:14;6524:87:5;;;20192:21:14;20249:2;20229:18;;;20222:30;20288:32;20268:18;;;20261:60;20338:18;;6524:87:5;20182:180:14;6524:87:5;-1:-1:-1;;;;;6625:23:5;;;;;;:13;:23;;;;;:29;:38;-1:-1:-1;6621:158:5;;;6702:6;6679:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;6621:158:5;;-1:-1:-1;6621:158:5;;6762:6;6739:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;6621:158:5;-1:-1:-1;;;;;6788:23:5;;;;;;:13;:23;;;;;;;;;:38;;;6841:32;;8424:51:14;;;8491:18;;8484:34;;;6841:32:5;;8397:18:14;6841:32:5;;;;;;;6411:469;6347:533;;:::o;5761:167::-;-1:-1:-1;;;;;5888:23:5;;5830:7;5888:23;;;:13;:23;;;;;:33;;;;5856:29;;:65;;5888:33;5856:65;:::i;6547:307:3:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;-1:-1:-1;;;6736:111:3;;;;;;;:::i;5936:405:5:-;5988:13;6278:28;6300:4;6278:13;:28::i;:::-;6121:203;;;;;;;;:::i;:::-;;;;;;;;;;;;;6107:227;;5936:405;:::o;275:703:13:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:13;;;;;;;;;;;;-1:-1:-1;;;574:10:13;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:13;;-1:-1:-1;720:2:13;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:13;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:13;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;849:56:13;;;;;;;;-1:-1:-1;919:11:13;928:2;919:11;;:::i;:::-;;;791:150;;9076:372:3;-1:-1:-1;;;;;9155:16:3;;9147:61;;;;-1:-1:-1;;;9147:61:3;;14263:2:14;9147:61:3;;;14245:21:14;;;14282:18;;;14275:30;14341:34;14321:18;;;14314:62;14393:18;;9147:61:3;14235:182:14;9147:61:3;7222:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:3;:30;9218:58;;;;-1:-1:-1;;;9218:58:3;;10735:2:14;9218:58:3;;;10717:21:14;10774:2;10754:18;;;10747:30;10813;10793:18;;;10786:58;10861:18;;9218:58:3;10707:178:14;9218:58:3;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;-1:-1:-1;;;;;9343:13:3;;;;;;:9;:13;;;;;:18;;9360:1;;9343:13;:18;;9360:1;;9343:18;:::i;:::-;;;;-1:-1:-1;;9371:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9371:21:3;-1:-1:-1;;;;;9371:21:3;;;;;;;;9408:33;;9371:16;;;9408:33;;9371:16;;9408:33;9076:372;;:::o;10337:560::-;10491:4;-1:-1:-1;;;;;10464:31:3;:23;10479:7;10464:14;:23::i;:::-;-1:-1:-1;;;;;10464:31:3;;10456:85;;;;-1:-1:-1;;;10456:85:3;;15750:2:14;10456:85:3;;;15732:21:14;15789:2;15769:18;;;15762:30;15828:34;15808:18;;;15801:62;-1:-1:-1;;;15879:18:14;;;15872:39;15928:19;;10456:85:3;15722:231:14;10456:85:3;-1:-1:-1;;;;;10559:16:3;;10551:65;;;;-1:-1:-1;;;10551:65:3;;11496:2:14;10551:65:3;;;11478:21:14;11535:2;11515:18;;;11508:30;11574:34;11554:18;;;11547:62;-1:-1:-1;;;11625:18:14;;;11618:34;11669:19;;10551:65:3;11468:226:14;10551:65:3;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;-1:-1:-1;;;;;10768:15:3;;;;;;:9;:15;;;;;:20;;10787:1;;10768:15;:20;;10787:1;;10768:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10798:13:3;;;;;;:9;:13;;;;;:18;;10815:1;;10798:13;:18;;10815:1;;10798:18;:::i;:::-;;;;-1:-1:-1;;10826:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10826:21:3;-1:-1:-1;;;;;10826:21:3;;;;;;;;;10863:27;;10826:16;;10863:27;;;;;;;10337:560;;;:::o;11732:778::-;11882:4;-1:-1:-1;;;;;11902:13:3;;1034:20:0;1080:8;11898:606:3;;11937:72;;-1:-1:-1;;;11937:72:3;;-1:-1:-1;;;;;11937:36:3;;;;;:72;;666:10:1;;11988:4:3;;11994:7;;12003:5;;11937:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11937:72:3;;;;;;;;-1:-1:-1;;11937:72:3;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12176:13:3;;12172:266;;12218:60;;-1:-1:-1;;;12218:60:3;;;;;;;:::i;12172:266::-;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;-1:-1:-1;;;;;;12059:51:3;-1:-1:-1;;;12059:51:3;;-1:-1:-1;12052:58:3;;11898:606;-1:-1:-1;12489:4:3;11732:778;;;;;;:::o;7557:453:5:-;7656:13;;;7666:2;7656:13;;;7614;7656;;;;;;7639:14;;7656:13;;;;;;;;;;;-1:-1:-1;7656:13:5;7639:30;;7684:6;7679:299;7700:2;7696:1;:6;7679:299;;;7723:8;7774:6;7779:1;7774:2;:6;:::i;:::-;7771:10;;:1;:10;:::i;:::-;7767:15;;:1;:15;:::i;:::-;7747:36;;-1:-1:-1;;;;;7747:16:5;;:36;:::i;:::-;7734:51;;7723:62;;7799:9;7829:2;7824:1;7818:8;;:13;;;;:::i;:::-;7811:21;;7799:33;;7846:9;7887:2;7881:9;;7876:2;:14;;;;:::i;:::-;7871:1;7865:8;;:25;;;;:::i;:::-;7858:33;;7846:45;;7914:8;7919:2;7914:4;:8::i;:::-;7905:1;7907:3;7909:1;7907;:3;:::i;:::-;7905:6;;;;;;;;:::i;:::-;;;;:17;-1:-1:-1;;;;;7905:17:5;;;;;;;;;7947:8;7952:2;7947:4;:8::i;:::-;7936:1;7938:3;7940:1;7938;:3;:::i;:::-;:5;;7942:1;7938:5;:::i;:::-;7936:8;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;7936:19:5;;;;;;;;;7709:269;;;7704:3;;;;;:::i;:::-;;;;7679:299;;;-1:-1:-1;8001:1:5;7557:453;-1:-1:-1;;7557:453:5:o;2543:572:4:-;-1:-1:-1;;;;;2742:18:4;;2738:183;;2776:40;2808:7;3924:10;:17;;3897:24;;;;:15;:24;;;;;:44;;;3951:24;;;;;;;;;;;;3821:161;2776:40;2738:183;;;2845:2;-1:-1:-1;;;;;2837:10:4;:4;-1:-1:-1;;;;;2837:10:4;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;-1:-1:-1;;;;;2934:16:4;;2930:179;;2966:45;3003:7;2966:36;:45::i;2930:179::-;3038:4;-1:-1:-1;;;;;3032:10:4;:2;-1:-1:-1;;;;;3032:10:4;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;8016:169:5:-;8063:8;8098:2;8087:8;;;;:13;8083:94;;;8116:15;:8;;;;8127:4;8116:15;:::i;:::-;8109:23;;;8016:169;-1:-1:-1;;8016:169:5:o;8083:94::-;8161:15;:8;;;;8172:4;8161:15;:::i;8083:94::-;8016:169;;;:::o;4599:970:4:-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4922:18;4943:26;;;:17;:26;;;;;;4861:51;;-1:-1:-1;5073:28:4;;;5069:323;;-1:-1:-1;;;;;5139:18:4;;5117:19;5139:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5188:30;;;;;;:44;;;5304:30;;:17;:30;;;;;:43;;;5069:323;-1:-1:-1;5485:26:4;;;;:17;:26;;;;;;;;5478:33;;;-1:-1:-1;;;;;5528:18:4;;;;;:12;:18;;;;;:34;;;;;;;5521:41;4599:970::o;5857:1061::-;6131:10;:17;6106:22;;6131:21;;6151:1;;6131:21;:::i;:::-;6162:18;6183:24;;;:15;:24;;;;;;6551:10;:26;;6106:46;;-1:-1:-1;6183:24:4;;6106:46;;6551:26;;;;;;:::i;:::-;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6692:28;;;:15;:28;;;;;;;:41;;;6861:24;;;;;6854:31;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;-1:-1:-1;;;;;3540:16:4;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3584:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3409:217:4:o;14:173:14:-;82:20;;-1:-1:-1;;;;;131:31:14;;121:42;;111:2;;177:1;174;167:12;192:673;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;317:1;314;307:12;266:2;353:6;340:20;379:4;403:60;419:43;459:2;419:43;:::i;:::-;403:60;:::i;:::-;485:3;509:2;504:3;497:15;537:2;532:3;528:12;521:19;;572:2;564:6;560:15;624:3;619:2;613;610:1;606:10;598:6;594:23;590:32;587:41;584:2;;;641:1;638;631:12;584:2;663:1;673:163;687:2;684:1;681:9;673:163;;;744:17;;732:30;;782:12;;;;814;;;;705:1;698:9;673:163;;;-1:-1:-1;854:5:14;;256:609;-1:-1:-1;;;;;;;256:609:14:o;870:186::-;929:6;982:2;970:9;961:7;957:23;953:32;950:2;;;998:1;995;988:12;950:2;1021:29;1040:9;1021:29;:::i;1061:260::-;1129:6;1137;1190:2;1178:9;1169:7;1165:23;1161:32;1158:2;;;1206:1;1203;1196:12;1158:2;1229:29;1248:9;1229:29;:::i;:::-;1219:39;;1277:38;1311:2;1300:9;1296:18;1277:38;:::i;:::-;1267:48;;1148:173;;;;;:::o;1326:328::-;1403:6;1411;1419;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1488:1;1485;1478:12;1440:2;1511:29;1530:9;1511:29;:::i;:::-;1501:39;;1559:38;1593:2;1582:9;1578:18;1559:38;:::i;:::-;1549:48;;1644:2;1633:9;1629:18;1616:32;1606:42;;1430:224;;;;;:::o;1659:980::-;1754:6;1762;1770;1778;1831:3;1819:9;1810:7;1806:23;1802:33;1799:2;;;1848:1;1845;1838:12;1799:2;1871:29;1890:9;1871:29;:::i;:::-;1861:39;;1919:2;1940:38;1974:2;1963:9;1959:18;1940:38;:::i;:::-;1930:48;;2025:2;2014:9;2010:18;1997:32;1987:42;;2080:2;2069:9;2065:18;2052:32;2103:18;2144:2;2136:6;2133:14;2130:2;;;2160:1;2157;2150:12;2130:2;2198:6;2187:9;2183:22;2173:32;;2243:7;2236:4;2232:2;2228:13;2224:27;2214:2;;2265:1;2262;2255:12;2214:2;2301;2288:16;2323:2;2319;2316:10;2313:2;;;2329:18;;:::i;:::-;2371:53;2414:2;2395:13;;-1:-1:-1;;2391:27:14;2387:36;;2371:53;:::i;:::-;2358:66;;2447:2;2440:5;2433:17;2487:7;2482:2;2477;2473;2469:11;2465:20;2462:33;2459:2;;;2508:1;2505;2498:12;2459:2;2563;2558;2554;2550:11;2545:2;2538:5;2534:14;2521:45;2607:1;2602:2;2597;2590:5;2586:14;2582:23;2575:34;;2628:5;2618:15;;;;;1789:850;;;;;;;:::o;2644:315::-;2709:6;2717;2770:2;2758:9;2749:7;2745:23;2741:32;2738:2;;;2786:1;2783;2776:12;2738:2;2809:29;2828:9;2809:29;:::i;:::-;2799:39;;2888:2;2877:9;2873:18;2860:32;2901:28;2923:5;2901:28;:::i;:::-;2948:5;2938:15;;;2728:231;;;;;:::o;2964:254::-;3032:6;3040;3093:2;3081:9;3072:7;3068:23;3064:32;3061:2;;;3109:1;3106;3099:12;3061:2;3132:29;3151:9;3132:29;:::i;:::-;3122:39;3208:2;3193:18;;;;3180:32;;-1:-1:-1;;;3051:167:14:o;3223:1157::-;3341:6;3349;3402:2;3390:9;3381:7;3377:23;3373:32;3370:2;;;3418:1;3415;3408:12;3370:2;3458:9;3445:23;3487:18;3528:2;3520:6;3517:14;3514:2;;;3544:1;3541;3534:12;3514:2;3582:6;3571:9;3567:22;3557:32;;3627:7;3620:4;3616:2;3612:13;3608:27;3598:2;;3649:1;3646;3639:12;3598:2;3685;3672:16;3707:4;3731:60;3747:43;3787:2;3747:43;:::i;3731:60::-;3813:3;3837:2;3832:3;3825:15;3865:2;3860:3;3856:12;3849:19;;3896:2;3892;3888:11;3944:7;3939:2;3933;3930:1;3926:10;3922:2;3918:19;3914:28;3911:41;3908:2;;;3965:1;3962;3955:12;3908:2;3987:1;3978:10;;3997:169;4011:2;4008:1;4005:9;3997:169;;;4068:23;4087:3;4068:23;:::i;:::-;4056:36;;4029:1;4022:9;;;;;4112:12;;;;4144;;3997:169;;;-1:-1:-1;4185:5:14;-1:-1:-1;;4228:18:14;;4215:32;;-1:-1:-1;;4259:16:14;;;4256:2;;;4288:1;4285;4278:12;4256:2;;4311:63;4366:7;4355:8;4344:9;4340:24;4311:63;:::i;:::-;4301:73;;;3360:1020;;;;;:::o;4385:245::-;4452:6;4505:2;4493:9;4484:7;4480:23;4476:32;4473:2;;;4521:1;4518;4511:12;4473:2;4553:9;4547:16;4572:28;4594:5;4572:28;:::i;4635:245::-;4693:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:2;;;4762:1;4759;4752:12;4714:2;4801:9;4788:23;4820:30;4844:5;4820:30;:::i;4885:249::-;4954:6;5007:2;4995:9;4986:7;4982:23;4978:32;4975:2;;;5023:1;5020;5013:12;4975:2;5055:9;5049:16;5074:30;5098:5;5074:30;:::i;5139:180::-;5198:6;5251:2;5239:9;5230:7;5226:23;5222:32;5219:2;;;5267:1;5264;5257:12;5219:2;-1:-1:-1;5290:23:14;;5209:110;-1:-1:-1;5209:110:14:o;5324:184::-;5394:6;5447:2;5435:9;5426:7;5422:23;5418:32;5415:2;;;5463:1;5460;5453:12;5415:2;-1:-1:-1;5486:16:14;;5405:103;-1:-1:-1;5405:103:14:o;5513:248::-;5581:6;5589;5642:2;5630:9;5621:7;5617:23;5613:32;5610:2;;;5658:1;5655;5648:12;5610:2;-1:-1:-1;;5681:23:14;;;5751:2;5736:18;;;5723:32;;-1:-1:-1;5600:161:14:o;5766:257::-;5807:3;5845:5;5839:12;5872:6;5867:3;5860:19;5888:63;5944:6;5937:4;5932:3;5928:14;5921:4;5914:5;5910:16;5888:63;:::i;:::-;6005:2;5984:15;-1:-1:-1;;5980:29:14;5971:39;;;;6012:4;5967:50;;5815:208;-1:-1:-1;;5815:208:14:o;6028:470::-;6207:3;6245:6;6239:13;6261:53;6307:6;6302:3;6295:4;6287:6;6283:17;6261:53;:::i;:::-;6377:13;;6336:16;;;;6399:57;6377:13;6336:16;6433:4;6421:17;;6399:57;:::i;:::-;6472:20;;6215:283;-1:-1:-1;;;;6215:283:14:o;6503:661::-;6866:34;6861:3;6854:47;6931:26;6926:2;6921:3;6917:12;6910:48;6836:3;6987:6;6981:13;7003:60;7056:6;7051:2;7046:3;7042:12;7037:2;7029:6;7025:15;7003:60;:::i;:::-;-1:-1:-1;;;7122:2:14;7082:16;;;;7114:11;;;7107:24;-1:-1:-1;7155:2:14;7147:11;;6844:320;-1:-1:-1;6844:320:14:o;7757:488::-;-1:-1:-1;;;;;8026:15:14;;;8008:34;;8078:15;;8073:2;8058:18;;8051:43;8125:2;8110:18;;8103:34;;;8173:3;8168:2;8153:18;;8146:31;;;7951:4;;8194:45;;8219:19;;8211:6;8194:45;:::i;:::-;8186:53;7960:285;-1:-1:-1;;;;;;7960:285:14:o;8721:219::-;8870:2;8859:9;8852:21;8833:4;8890:44;8930:2;8919:9;8915:18;8907:6;8890:44;:::i;9707:414::-;9909:2;9891:21;;;9948:2;9928:18;;;9921:30;9987:34;9982:2;9967:18;;9960:62;-1:-1:-1;;;10053:2:14;10038:18;;10031:48;10111:3;10096:19;;9881:240::o;15187:356::-;15389:2;15371:21;;;15408:18;;;15401:30;15467:34;15462:2;15447:18;;15440:62;15534:2;15519:18;;15361:182::o;17453:413::-;17655:2;17637:21;;;17694:2;17674:18;;;17667:30;17733:34;17728:2;17713:18;;17706:62;-1:-1:-1;;;17799:2:14;17784:18;;17777:47;17856:3;17841:19;;17627:239::o;21062:275::-;21133:2;21127:9;21198:2;21179:13;;-1:-1:-1;;21175:27:14;21163:40;;21233:18;21218:34;;21254:22;;;21215:62;21212:2;;;21280:18;;:::i;:::-;21316:2;21309:22;21107:230;;-1:-1:-1;21107:230:14:o;21342:183::-;21402:4;21435:18;21427:6;21424:30;21421:2;;;21457:18;;:::i;:::-;-1:-1:-1;21502:1:14;21498:14;21514:4;21494:25;;21411:114::o;21530:128::-;21570:3;21601:1;21597:6;21594:1;21591:13;21588:2;;;21607:18;;:::i;:::-;-1:-1:-1;21643:9:14;;21578:80::o;21663:204::-;21701:3;21737:4;21734:1;21730:12;21769:4;21766:1;21762:12;21804:3;21798:4;21794:14;21789:3;21786:23;21783:2;;;21812:18;;:::i;:::-;21848:13;;21709:158;-1:-1:-1;;;21709:158:14:o;21872:120::-;21912:1;21938;21928:2;;21943:18;;:::i;:::-;-1:-1:-1;21977:9:14;;21918:74::o;21997:165::-;22035:1;22069:4;22066:1;22062:12;22093:3;22083:2;;22100:18;;:::i;:::-;22152:3;22145:4;22142:1;22138:12;22134:22;22129:27;;;22041:121;;;;:::o;22167:422::-;22256:1;22299:5;22256:1;22313:270;22334:7;22324:8;22321:21;22313:270;;;22393:4;22389:1;22385:6;22381:17;22375:4;22372:27;22369:2;;;22402:18;;:::i;:::-;22452:7;22442:8;22438:22;22435:2;;;22472:16;;;;22435:2;22551:22;;;;22511:15;;;;22313:270;;;22317:3;22231:358;;;;;:::o;22594:131::-;22654:5;22683:36;22710:8;22704:4;22779:5;22809:8;22799:2;;-1:-1:-1;22850:1:14;22864:5;;22799:2;22898:4;22888:2;;-1:-1:-1;22935:1:14;22949:5;;22888:2;22980:4;22998:1;22993:59;;;;23066:1;23061:130;;;;22973:218;;22993:59;23023:1;23014:10;;23037:5;;;23061:130;23098:3;23088:8;23085:17;23082:2;;;23105:18;;:::i;:::-;-1:-1:-1;;23161:1:14;23147:16;;23176:5;;22973:218;;23275:2;23265:8;23262:16;23256:3;23250:4;23247:13;23243:36;23237:2;23227:8;23224:16;23219:2;23213:4;23210:12;23206:35;23203:77;23200:2;;;-1:-1:-1;23312:19:14;;;23344:5;;23200:2;23391:34;23416:8;23410:4;23391:34;:::i;:::-;23461:6;23457:1;23453:6;23449:19;23440:7;23437:32;23434:2;;;23472:18;;:::i;:::-;23510:20;;22789:747;-1:-1:-1;;;22789:747:14:o;23541:168::-;23581:7;23647:1;23643;23639:6;23635:14;23632:1;23629:21;23624:1;23617:9;23610:17;23606:45;23603:2;;;23654:18;;:::i;:::-;-1:-1:-1;23694:9:14;;23593:116::o;23714:238::-;23752:7;23792:4;23789:1;23785:12;23824:4;23821:1;23817:12;23884:3;23878:4;23874:14;23869:3;23866:23;23859:3;23852:11;23845:19;23841:49;23838:2;;;23893:18;;:::i;23957:125::-;23997:4;24025:1;24022;24019:8;24016:2;;;24030:18;;:::i;:::-;-1:-1:-1;24067:9:14;;24006:76::o;24087:195::-;24125:4;24162;24159:1;24155:12;24194:4;24191:1;24187:12;24219:3;24214;24211:12;24208:2;;;24226:18;;:::i;:::-;24263:13;;;24134:148;-1:-1:-1;;;24134:148:14:o;24287:258::-;24359:1;24369:113;24383:6;24380:1;24377:13;24369:113;;;24459:11;;;24453:18;24440:11;;;24433:39;24405:2;24398:10;24369:113;;;24500:6;24497:1;24494:13;24491:2;;;-1:-1:-1;;24535:1:14;24517:16;;24510:27;24340:205::o;24550:380::-;24629:1;24625:12;;;;24672;;;24693:2;;24747:4;24739:6;24735:17;24725:27;;24693:2;24800;24792:6;24789:14;24769:18;24766:38;24763:2;;;24846:10;24841:3;24837:20;24834:1;24827:31;24881:4;24878:1;24871:15;24909:4;24906:1;24899:15;24763:2;;24605:325;;;:::o;24935:135::-;24974:3;-1:-1:-1;;24995:17:14;;24992:2;;;25015:18;;:::i;:::-;-1:-1:-1;25062:1:14;25051:13;;24982:88::o;25075:175::-;25112:3;25156:4;25149:5;25145:16;25185:4;25176:7;25173:17;25170:2;;;25193:18;;:::i;:::-;25242:1;25229:15;;25120:130;-1:-1:-1;;25120:130:14:o;25255:112::-;25287:1;25313;25303:2;;25318:18;;:::i;:::-;-1:-1:-1;25352:9:14;;25293:74::o;25372:127::-;25433:10;25428:3;25424:20;25421:1;25414:31;25464:4;25461:1;25454:15;25488:4;25485:1;25478:15;25504:127;25565:10;25560:3;25556:20;25553:1;25546:31;25596:4;25593:1;25586:15;25620:4;25617:1;25610:15;25636:127;25697:10;25692:3;25688:20;25685:1;25678:31;25728:4;25725:1;25718:15;25752:4;25749:1;25742:15;25768:127;25829:10;25824:3;25820:20;25817:1;25810:31;25860:4;25857:1;25850:15;25884:4;25881:1;25874:15;25900:127;25961:10;25956:3;25952:20;25949:1;25942:31;25992:4;25989:1;25982:15;26016:4;26013:1;26006:15;26032:118;26118:5;26111:13;26104:21;26097:5;26094:32;26084:2;;26140:1;26137;26130:12;26155:131;-1:-1:-1;;;;;;26229:32:14;;26219:43;;26209:2;;26276:1;26273;26266:12
Swarm Source
ipfs://5b20aac1ba7640830dc86434f36ee12d4879e9ee24a4d4471a48380eb45b1ef4
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.