Overview
ETH Balance
0.0028 ETH
Eth Value
$11.12 (@ $3,970.34/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 84 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18350265 | 428 days ago | IN | 0 ETH | 0.00027005 | ||||
Set Approval For... | 18086935 | 465 days ago | IN | 0 ETH | 0.00113187 | ||||
Set Approval For... | 15733769 | 795 days ago | IN | 0 ETH | 0.00141549 | ||||
Set Approval For... | 15537978 | 822 days ago | IN | 0 ETH | 0.00087804 | ||||
Set Approval For... | 15525386 | 824 days ago | IN | 0 ETH | 0.00035439 | ||||
Safe Transfer Fr... | 15516347 | 826 days ago | IN | 0 ETH | 0.00156541 | ||||
Mint General | 15516285 | 826 days ago | IN | 0.0028 ETH | 0.00201416 | ||||
Set Disclosure | 15516190 | 826 days ago | IN | 0 ETH | 0.00111453 | ||||
Set Cost | 15516176 | 826 days ago | IN | 0 ETH | 0.00064885 | ||||
Set White List S... | 15516162 | 826 days ago | IN | 0 ETH | 0.00060021 | ||||
Setmax Presale S... | 15516152 | 826 days ago | IN | 0 ETH | 0.0006422 | ||||
Set White List T... | 15516139 | 826 days ago | IN | 0 ETH | 0.00056639 | ||||
Set Sale Time | 15516096 | 826 days ago | IN | 0 ETH | 0.00071518 | ||||
Safe Transfer Fr... | 15510378 | 827 days ago | IN | 0 ETH | 0.00087062 | ||||
Safe Transfer Fr... | 15435170 | 839 days ago | IN | 0 ETH | 0.00277042 | ||||
Mint Whitelist | 15290425 | 862 days ago | IN | 0 ETH | 0.00176634 | ||||
Mint Whitelist | 15276913 | 864 days ago | IN | 0 ETH | 0.00337076 | ||||
Transfer From | 15272184 | 865 days ago | IN | 0 ETH | 0.00101853 | ||||
Transfer From | 15272132 | 865 days ago | IN | 0 ETH | 0.00178068 | ||||
Mint Presale | 15271609 | 865 days ago | IN | 0 ETH | 0.00479873 | ||||
Mint Presale | 15270891 | 865 days ago | IN | 0 ETH | 0.00216037 | ||||
Mint Whitelist | 15234393 | 871 days ago | IN | 0 ETH | 0.00202373 | ||||
Mint Presale | 15168672 | 881 days ago | IN | 0 ETH | 0.00993897 | ||||
Mint General | 15124118 | 888 days ago | IN | 0 ETH | 0.00059073 | ||||
Mint General | 15124109 | 888 days ago | IN | 0 ETH | 0.00060273 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
C3K_O_89
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "./Ownable.sol"; import "./LiveSale.sol"; import "./PreSale.sol"; import "./WhiteList.sol"; /* .:-=======: :=+****+++===+=#. =%**##*=::-=++**%#*+++=-. @#*++**##******##*-::--==+++=-: -#*%#**++++=----::::::::::---=+**+. =#%##*-:::::::::::::::::::::::-==###= =**+#++-:::::::-===+++===-:::::::=*+#+**= .=**++%+##*::-++++***+++++***++++-::*##+%++**=. +#+**+%=:::=++++****+=======+****++++-:::+%+#**#= :%*++++#=::-#++#*++++===========++++##=+*-::+*++++*#. =#*+===+*::++=*#*+++===============+++*#*=++::*====+*#- ... .#+#*++=++=#==#+#**##*===================*##*##+#-=#=++=++##+# ... -@##**#**%+==*##+#-%-#+++++=====================+++++*=%-%=##+=++@+##**##%: +%###+=#*%#+==++=+=*=**+*####**+=============+**####*+*+=+++=++==+%#**=*####= %###**#@+%+====-:*-**#*%#*+==++##===========##++=++*#%*%+*:*:-====+@+%#**###@- *+%%##%%**====-:-++*%*###+ *%*=========##* +###*#*=*::-====#*%###%%+#- ++#%**@+#===+#*:*=*+%+###+ *%+=========*%* +*#%**%*++=:**+==+#*@**##+** *+#*##*+#==+=---%-+*%*+###***###+===========+##***###*+*#*=-#:--====#+###*#+#%* @%+*##+%+==+-::+#:-**%++++*+++=================+++*++++%+*:-%=::=+==+%+%#*+%%#@- -=%*%*@*+===-::#+::*=#*++++======================+++++**=*::#*::-+==+#%*%*%++%@% *+-%*#*++==++=-%=::-#=#+++++=====================++++*#+#-::+#:=++==+*###@%%%#*# -%##*++==+*+-%::::-***#*##*===================*##*#***-:::-%-+*+==+**##%*-=++# .%+***+===+==*::::=-**=##*+++===============++**##=#+=-::::#==+===+****%=%%#%@ :#+***+====+*+:::=##+=**+**++++===========++++**+**-+##=:::*++====+***+%-%++** =******+++++#*+===++==:-+++++***++=====+****+++++-:==++===+**+++++****+#--#*++ =****#@@@@@@@@@@@@@@#+::::-+**==++*****++=+**+-:::-+#@@@@@@@@@@@@@@#**+#- =@@@ +***############*****+:::::::--=++++*++++=-:::::::-******############***= .*=: +****#######%#######*+:::::::-%*++#***#++##:::::::-+*#######%#######****= =- =****#%%%%%%%%%%%%%%#+:::::::-%+:+#=*=#*:*%-::::::-+#%%%%%%%%%%%%%%#**+#- : -#+****+++++#+++++==+=:::::::-%*-:=#%#+--##::::::::++=++++++#+++++****+#: */ contract C3K_O_89 is WhiteList, PreSale, LiveSale { using Strings for uint256; string public URI; bool public REVEAL = false; constructor( string memory _name, string memory _symbol, string memory initialURI ) ERC721(_name, _symbol) { URI = initialURI; //set royalty of All NTFs to 5% _setDefaultRoyalty(msg.sender, 500); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); return string(abi.encodePacked(URI, tokenId.toString())); } function setDisclosure(bool reveal, string memory updatedURI) public onlyOwner { REVEAL = reveal; URI = updatedURI; } function getReveal() public view returns (bool) { return REVEAL; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /** * @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.13; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "./Ownable.sol"; import "./ERC721Enumerable.sol"; import "./ERC2981.sol"; abstract contract CSale is ERC721Enumerable, ERC2981, Ownable { uint256 internal maxMintAmount = 6; bool internal paused = false; bool internal saleTime; // True = Live Sale, False = Pre Sale uint256 internal maxSupply = 10000; function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } function pause(bool _state) public onlyOwner { paused = _state; } function getSaleTime() public view returns (bool) { return saleTime; } function setSaleTime(bool _isTime) public onlyOwner { saleTime = _isTime; } function getmaxMintAmount() public view returns (uint256) { return maxMintAmount; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { require(_newmaxMintAmount<= maxSupply,"Invalid limit for maxMintAmount"); maxMintAmount = _newmaxMintAmount; } function getmaxSupply() public view returns (uint256) { return maxSupply; } function setmaxSupply(uint256 _newmaxSupply) public onlyOwner { maxSupply = _newmaxSupply; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function makeHash(uint256 _code) internal view returns (bytes32) { bytes32 myHash = keccak256(abi.encode(_code, msg.sender)); return myHash; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; 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 // OpenZeppelin Contracts (last updated v4.5.0) (token/common/ERC2981.sol) pragma solidity ^0.8.13; import "./IERC2981.sol"; import "./ERC165.sol"; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; 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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; 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.13; /** * @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 // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.13; import "./IERC165.sol"; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; 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.13; 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); /** * @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.13; 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.13; /** * @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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "./CSale.sol"; abstract contract LiveSale is CSale { uint256 private cost = 0.08 ether; //80000000000000000 //bool private saleTime; // True = Live Sale, False = Pre Sale function setCost(uint256 _newCost) public onlyOwner { cost = _newCost * 1 wei; } function getCost() public view returns (uint256) { return cost; } function mintGeneral(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "The mint is paused"); //Si evalua falso no sigue require(saleTime == true, "Is time to pre-sale"); require(_mintAmount > 0, "Mint amount must be more than Zero"); require(_mintAmount <= maxMintAmount, "Mint amount must be less or equal than Max Mint amount permited"); require(supply + _mintAmount <= maxSupply, "the amount to be minted exceeds the established limit"); require(msg.value >= cost * _mintAmount, "Incorrect Cost"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; 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.13; import "./CSale.sol"; abstract contract PreSale is CSale { uint256 private presaleCost = 0.04 ether; //40000000000000000 uint256 private maxPresaleSupply = 1000; uint256 private countmintPresale = 0; mapping(address => int) public preSaleMinters; function addPresaleUser(address _user) public onlyOwner{ preSaleMinters[_user] += 1; } function removePresaleUser(address _user) public onlyOwner { preSaleMinters[_user] = 0; } function getPreSaleCost() public view returns (uint256) { return presaleCost; } function setPresaleCost(uint256 _newCost) public onlyOwner { presaleCost = _newCost * 1 wei; } function getMintPresaleSupply() public view returns (uint256) { return countmintPresale; } function setmaxPresaleSupply(uint256 _newmaxPresaleSupply) public onlyOwner { require(_newmaxPresaleSupply >= countmintPresale,"New amount must be greater than presale's minter counter"); require(_newmaxPresaleSupply <= maxSupply,"New amount must be lower than global limit"); maxPresaleSupply = _newmaxPresaleSupply; } function getmaxPresaleSupply() public view returns (uint256) { return maxPresaleSupply; } function mintPresale(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused,"The mint is paused"); //Evalua a false para no pasar require(saleTime == false, "Presale time is over"); require(msg.value >= presaleCost * _mintAmount, "Incorrect Cost"); require(_mintAmount > 0, "Mint Amount must be more then Zero"); require(supply + _mintAmount <= maxSupply,"the amount to be minted exceeds the established limit, try less amount"); require(countmintPresale + _mintAmount <= maxPresaleSupply,"the amount to be minted exceeds the established limit, for presale, try less amount"); if (preSaleMinters[msg.sender] == 0) { preSaleMinters[msg.sender] = int256(_mintAmount); } else { preSaleMinters[msg.sender]+= int256(_mintAmount); } countmintPresale+=_mintAmount; for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } if (countmintPresale == maxPresaleSupply) saleTime=false; } function getPreSaleMintersCount(address _account) public view returns (int) { return preSaleMinters[_account]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /** * @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); } }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "./CSale.sol"; abstract contract WhiteList is CSale { uint256 private whitelistcost = 0.00 ether; uint256 private maxWhiteListSupply = 1000; uint256 private countmintWhiteList = 0; bool private whiteListTime; uint32 private Seed; mapping(address => bool) public whitelisted; function getWhiteListTime() public view returns (bool) { return whiteListTime; } function setWhiteListTime(bool _isTime) public onlyOwner { if (countmintWhiteList == maxWhiteListSupply){ whiteListTime = false; } else { whiteListTime = _isTime; }} function addWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function getWhiteListCost() public view returns (uint256) { return whitelistcost; } function setWhiteListCost(uint256 _cost) public onlyOwner { whitelistcost = _cost * 1 wei; } function getMintWhiteListSupply() public view returns (uint256) { return countmintWhiteList; } function getWhiteListSupply() public view returns (uint256) { return maxWhiteListSupply; } function setWhiteListSupply(uint256 _newmaxWhiteListSupply) public onlyOwner { require(_newmaxWhiteListSupply >= countmintWhiteList,"new amount must be greater than white list's minter counter"); require(_newmaxWhiteListSupply <= maxSupply,"new amount must be lower than global limit"); maxWhiteListSupply = _newmaxWhiteListSupply; } function setSeed(uint32 _code) public onlyOwner { Seed = _code; } function getSeed() public view onlyOwner returns (uint32) { return Seed; } function mintWhitelist(uint256 _mintAmount, bytes32 _discordCode) public payable { require(!paused,"The mint is paused"); require(getWhiteListTime(), "White list time is over - 111"); //Si evalua falso no sigue require(whitelisted[msg.sender] != true,"Only one minted by wallet is permitted"); require(msg.value >= whitelistcost * _mintAmount,"Incorrect Cost"); require(_mintAmount == 1,"Mint amount must be only One"); uint256 supply = totalSupply(); require(supply + _mintAmount <= maxSupply,"the amount to be minted exceeds the established limit, try less amount"); require(IsDiscordCodeValid(_discordCode),"Discord Code Invalid"); whitelisted[msg.sender] = true; _safeMint(msg.sender, supply + _mintAmount); countmintWhiteList++; if (countmintWhiteList == maxWhiteListSupply){ whiteListTime = false; } } function IsDiscordCodeValid(bytes32 _discordCode) private view returns (bool) { require(getWhiteListTime(), "White list time is over - 222"); return (_discordCode == makeHash(Seed)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"initialURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"REVEAL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPresaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintWhiteListSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getPreSaleMintersCount","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSeed","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhiteListCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhiteListSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhiteListTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmaxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmaxPresaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintGeneral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32","name":"_discordCode","type":"bytes32"}],"name":"mintWhitelist","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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preSaleMinters","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"reveal","type":"bool"},{"internalType":"string","name":"updatedURI","type":"string"}],"name":"setDisclosure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTime","type":"bool"}],"name":"setSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_code","type":"uint32"}],"name":"setSeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWhiteListCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxWhiteListSupply","type":"uint256"}],"name":"setWhiteListSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTime","type":"bool"}],"name":"setWhiteListTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxPresaleSupply","type":"uint256"}],"name":"setmaxPresaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526006600d55600e805460ff19908116909155612710600f55600060108190556103e860118190556012829055668e1bc9bf04000060155560165560175567011c37937e080000601955601b805490911690553480156200006357600080fd5b5060405162004050380380620040508339810160408190526200008691620003cd565b8251839083906200009f9060009060208501906200025a565b508051620000b59060019060208401906200025a565b505050620000d2620000cc620000ff60201b60201c565b62000103565b8051620000e790601a9060208401906200025a565b50620000f6336101f462000155565b5050506200049a565b3390565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b0382161115620001c95760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002215760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620001c0565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b82805462000268906200045e565b90600052602060002090601f0160209004810192826200028c5760008555620002d7565b82601f10620002a757805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d7578251825591602001919060010190620002ba565b50620002e5929150620002e9565b5090565b5b80821115620002e55760008155600101620002ea565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200032857600080fd5b81516001600160401b038082111562000345576200034562000300565b604051601f8301601f19908116603f0116810190828211818310171562000370576200037062000300565b816040528381526020925086838588010111156200038d57600080fd5b600091505b83821015620003b1578582018301518183018401529082019062000392565b83821115620003c35760008385830101525b9695505050505050565b600080600060608486031215620003e357600080fd5b83516001600160401b0380821115620003fb57600080fd5b620004098783880162000316565b945060208601519150808211156200042057600080fd5b6200042e8783880162000316565b935060408601519150808211156200044557600080fd5b50620004548682870162000316565b9150509250925092565b600181811c908216806200047357607f821691505b6020821081036200049457634e487b7160e01b600052602260045260246000fd5b50919050565b613ba680620004aa6000396000f3fe60806040526004361061038c5760003560e01c8063715018a6116101dc578063bf3ad24411610102578063d936547e116100a0578063ed931e171161006f578063ed931e1714610a62578063f0bc25c114610a82578063f2fde38b14610aa2578063f759867a14610ac257600080fd5b8063d936547e146109b4578063de3f66e5146109e4578063e985e9c514610a04578063ec21341f14610a4d57600080fd5b8063c7e9d141116100dc578063c7e9d14114610942578063c87b56dd14610962578063cbb897c714610982578063cbf21fe41461099757600080fd5b8063bf3ad244146108eb578063c40e50b114610900578063c776f2401461092d57600080fd5b80638fdcf9421161017a578063af8ef3f111610149578063af8ef3f114610876578063b2f3e85e14610896578063b88d4fde146108b6578063bd3e19d4146108d657600080fd5b80638fdcf9421461080c57806395d89b411461082c578063a22cb46514610841578063a310de881461086157600080fd5b806382dadec1116101b657806382dadec11461078557806384083c89146107985780638a8cc5df146107b85780638da5cb5b146107ee57600080fd5b8063715018a6146107365780637f00c7a61461074b57806382651bd01461076b57600080fd5b80632a55205a116102c157806342842e0e1161025f5780635af970821161022e5780635af97082146106c957806362c5268d146106e15780636352211e146106f657806370a082311461071657600080fd5b806342842e0e1461063c578063438b63001461065c57806344a0d68a146106895780634f6ccce7146106a957600080fd5b80633630df2e1161029b5780633630df2e146105ca578063381a3506146105ea57806339e7357c1461060a5780633ccfd60b1461063457600080fd5b80632a55205a1461054b5780632f745c591461058a57806330cc7ae0146105aa57600080fd5b806313e1220e1161032e578063228025e811610308578063228025e8146104e357806323b872dd1461050357806327191aa41461052357806329510d341461053857600080fd5b806313e1220e1461048f57806318160ddd146104ae5780631a51bade146104c357600080fd5b8063081812fc1161036a578063081812fc1461040a57806308b1f3f614610442578063095ea7b31461045a5780631141d7de1461047a57600080fd5b806301ffc9a71461039157806302329a29146103c657806306fdde03146103e8575b600080fd5b34801561039d57600080fd5b506103b16103ac3660046134dd565b610ad5565b60405190151581526020015b60405180910390f35b3480156103d257600080fd5b506103e66103e1366004613516565b610ae6565b005b3480156103f457600080fd5b506103fd610b46565b6040516103bd9190613589565b34801561041657600080fd5b5061042a61042536600461359c565b610bd8565b6040516001600160a01b0390911681526020016103bd565b34801561044e57600080fd5b5060135460ff166103b1565b34801561046657600080fd5b506103e66104753660046135cc565b610c6d565b34801561048657600080fd5b506103fd610d9e565b34801561049b57600080fd5b506012545b6040519081526020016103bd565b3480156104ba57600080fd5b506008546104a0565b3480156104cf57600080fd5b506103e66104de366004613682565b610e2c565b3480156104ef57600080fd5b506103e66104fe36600461359c565b610e95565b34801561050f57600080fd5b506103e661051e3660046136e4565b610ee2565b34801561052f57600080fd5b506016546104a0565b6103e6610546366004613720565b610f69565b34801561055757600080fd5b5061056b610566366004613720565b61127a565b604080516001600160a01b0390931683526020830191909152016103bd565b34801561059657600080fd5b506104a06105a53660046135cc565b611335565b3480156105b657600080fd5b506103e66105c5366004613742565b6113dd565b3480156105d657600080fd5b506103e66105e5366004613516565b611446565b3480156105f657600080fd5b506103e661060536600461359c565b6114a8565b34801561061657600080fd5b5061061f6115d2565b60405163ffffffff90911681526020016103bd565b6103e661162f565b34801561064857600080fd5b506103e66106573660046136e4565b6116cf565b34801561066857600080fd5b5061067c610677366004613742565b6116ea565b6040516103bd919061375d565b34801561069557600080fd5b506103e66106a436600461359c565b61178c565b3480156106b557600080fd5b506104a06106c436600461359c565b6117e5565b3480156106d557600080fd5b50601b5460ff166103b1565b3480156106ed57600080fd5b50600f546104a0565b34801561070257600080fd5b5061042a61071136600461359c565b611889565b34801561072257600080fd5b506104a0610731366004613742565b611914565b34801561074257600080fd5b506103e66119ae565b34801561075757600080fd5b506103e661076636600461359c565b611a02565b34801561077757600080fd5b50601b546103b19060ff1681565b6103e661079336600461359c565b611aa1565b3480156107a457600080fd5b506103e66107b3366004613742565b611d20565b3480156107c457600080fd5b506104a06107d3366004613742565b6001600160a01b031660009081526018602052604090205490565b3480156107fa57600080fd5b50600c546001600160a01b031661042a565b34801561081857600080fd5b506103e661082736600461359c565b611d8c565b34801561083857600080fd5b506103fd611de5565b34801561084d57600080fd5b506103e661085c3660046137a1565b611df4565b34801561086d57600080fd5b50600d546104a0565b34801561088257600080fd5b506103e66108913660046137d4565b611e03565b3480156108a257600080fd5b506103e66108b1366004613742565b611e6d565b3480156108c257600080fd5b506103e66108d13660046137fa565b611ee6565b3480156108e257600080fd5b506019546104a0565b3480156108f757600080fd5b506010546104a0565b34801561090c57600080fd5b506104a061091b366004613742565b60186020526000908152604090205481565b34801561093957600080fd5b506017546104a0565b34801561094e57600080fd5b506103e661095d36600461359c565b611f74565b34801561096e57600080fd5b506103fd61097d36600461359c565b611fcd565b34801561098e57600080fd5b506015546104a0565b3480156109a357600080fd5b50600e54610100900460ff166103b1565b3480156109c057600080fd5b506103b16109cf366004613742565b60146020526000908152604090205460ff1681565b3480156109f057600080fd5b506103e66109ff36600461359c565b61208c565b348015610a1057600080fd5b506103b1610a1f366004613876565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610a5957600080fd5b506011546104a0565b348015610a6e57600080fd5b506103e6610a7d366004613742565b6121b6565b348015610a8e57600080fd5b506103e6610a9d366004613516565b612218565b348015610aae57600080fd5b506103e6610abd366004613742565b61228b565b6103e6610ad036600461359c565b612358565b6000610ae082612699565b92915050565b600c546001600160a01b03163314610b335760405162461bcd60e51b81526020600482018190526024820152600080516020613b5183398151915260448201526064015b60405180910390fd5b600e805460ff1916911515919091179055565b606060008054610b55906138a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b81906138a0565b8015610bce5780601f10610ba357610100808354040283529160200191610bce565b820191906000526020600020905b815481529060010190602001808311610bb157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b2a565b506000908152600460205260409020546001600160a01b031690565b6000610c7882611889565b9050806001600160a01b0316836001600160a01b031603610d015760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b2a565b336001600160a01b0382161480610d1d5750610d1d8133610a1f565b610d8f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b2a565b610d9983836126d7565b505050565b601a8054610dab906138a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd7906138a0565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b505050505081565b600c546001600160a01b03163314610e745760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b601b805460ff19168315151790558051610d9990601a90602084019061342e565b600c546001600160a01b03163314610edd5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b600f55565b610eec3382612752565b610f5e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b2a565b610d99838383612849565b600e5460ff1615610fb15760405162461bcd60e51b8152602060048201526012602482015271151a19481b5a5b9d081a5cc81c185d5cd95960721b6044820152606401610b2a565b60135460ff166110035760405162461bcd60e51b815260206004820152601d60248201527f5768697465206c6973742074696d65206973206f766572202d203131310000006044820152606401610b2a565b3360009081526014602052604090205460ff16151560010361108d5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79206f6e65206d696e7465642062792077616c6c65742069732070657260448201527f6d697474656400000000000000000000000000000000000000000000000000006064820152608401610b2a565b8160105461109b91906138f0565b3410156110db5760405162461bcd60e51b815260206004820152600e60248201526d125b98dbdc9c9958dd0810dbdcdd60921b6044820152606401610b2a565b8160011461112b5760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420616d6f756e74206d757374206265206f6e6c79204f6e65000000006044820152606401610b2a565b600061113660085490565b600f54909150611146848361390f565b11156111c95760405162461bcd60e51b815260206004820152604660248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d69742c20747279206c65737320606482015265185b5bdd5b9d60d21b608482015260a401610b2a565b6111d282612a2e565b61121e5760405162461bcd60e51b815260206004820152601460248201527f446973636f726420436f646520496e76616c69640000000000000000000000006044820152606401610b2a565b336000818152601460205260409020805460ff1916600117905561124b90611246858461390f565b612aa7565b6012805490600061125b83613927565b919050555060115460125403610d99576013805460ff19169055505050565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff169282019290925282916112f9575060408051808201909152600a546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b60208101516000906127109061131d906bffffffffffffffffffffffff16876138f0565b6113279190613956565b915196919550909350505050565b600061134083611914565b82106113b45760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b2a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600c546001600160a01b031633146114255760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600c546001600160a01b0316331461148e5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b600e80549115156101000261ff0019909216919091179055565b600c546001600160a01b031633146114f05760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6012548110156115685760405162461bcd60e51b815260206004820152603b60248201527f6e657720616d6f756e74206d7573742062652067726561746572207468616e2060448201527f7768697465206c6973742773206d696e74657220636f756e74657200000000006064820152608401610b2a565b600f548111156115cd5760405162461bcd60e51b815260206004820152602a60248201527f6e657720616d6f756e74206d757374206265206c6f776572207468616e20676c6044820152691bd8985b081b1a5b5a5d60b21b6064820152608401610b2a565b601155565b600c546000906001600160a01b0316331461161d5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b50601354610100900463ffffffff1690565b600c546001600160a01b031633146116775760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b604051600090339047908381818185875af1925050503d80600081146116b9576040519150601f19603f3d011682016040523d82523d6000602084013e6116be565b606091505b50509050806116cc57600080fd5b50565b610d9983838360405180602001604052806000815250611ee6565b606060006116f783611914565b905060008167ffffffffffffffff811115611714576117146135f6565b60405190808252806020026020018201604052801561173d578160200160208202803683370190505b50905060005b82811015611784576117558582611335565b8282815181106117675761176761396a565b60209081029190910101528061177c81613927565b915050611743565b509392505050565b600c546001600160a01b031633146117d45760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6117df8160016138f0565b60195550565b60006117f060085490565b82106118645760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b2a565b600882815481106118775761187761396a565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610ae05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b2a565b60006001600160a01b0382166119925760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b2a565b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b031633146119f65760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b611a006000612ac1565b565b600c546001600160a01b03163314611a4a5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b600f54811115611a9c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206c696d697420666f72206d61784d696e74416d6f756e74006044820152606401610b2a565b600d55565b6000611aac60085490565b600e5490915060ff1615611af75760405162461bcd60e51b8152602060048201526012602482015271151a19481b5a5b9d081a5cc81c185d5cd95960721b6044820152606401610b2a565b600e5460ff610100909104161515600114611b545760405162461bcd60e51b815260206004820152601360248201527f49732074696d6520746f207072652d73616c65000000000000000000000000006044820152606401610b2a565b60008211611baf5760405162461bcd60e51b815260206004820152602260248201527f4d696e7420616d6f756e74206d757374206265206d6f7265207468616e205a65604482015261726f60f01b6064820152608401610b2a565b600d54821115611c275760405162461bcd60e51b815260206004820152603f60248201527f4d696e7420616d6f756e74206d757374206265206c657373206f72206571756160448201527f6c207468616e204d6178204d696e7420616d6f756e74207065726d69746564006064820152608401610b2a565b600f54611c34838361390f565b1115611ca85760405162461bcd60e51b815260206004820152603560248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d697400000000000000000000006064820152608401610b2a565b81601954611cb691906138f0565b341015611cf65760405162461bcd60e51b815260206004820152600e60248201526d125b98dbdc9c9958dd0810dbdcdd60921b6044820152606401610b2a565b60015b828111610d9957611d0e33611246838561390f565b80611d1881613927565b915050611cf9565b600c546001600160a01b03163314611d685760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b600c546001600160a01b03163314611dd45760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b611ddf8160016138f0565b60155550565b606060018054610b55906138a0565b611dff338383612b20565b5050565b600c546001600160a01b03163314611e4b5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6013805463ffffffff9092166101000264ffffffff0019909216919091179055565b600c546001600160a01b03163314611eb55760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b0381166000908152601860205260408120805460019290611ede908490613980565b909155505050565b611ef03383612752565b611f625760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b2a565b611f6e84848484612bee565b50505050565b600c546001600160a01b03163314611fbc5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b611fc78160016138f0565b60105550565b6000818152600260205260409020546060906001600160a01b031661205a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b2a565b601a61206583612c6c565b604051602001612076929190613a10565b6040516020818303038152906040529050919050565b600c546001600160a01b031633146120d45760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b60175481101561214c5760405162461bcd60e51b815260206004820152603860248201527f4e657720616d6f756e74206d7573742062652067726561746572207468616e2060448201527f70726573616c652773206d696e74657220636f756e74657200000000000000006064820152608401610b2a565b600f548111156121b15760405162461bcd60e51b815260206004820152602a60248201527f4e657720616d6f756e74206d757374206265206c6f776572207468616e20676c6044820152691bd8985b081b1a5b5a5d60b21b6064820152608401610b2a565b601655565b600c546001600160a01b031633146121fe5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b0316600090815260186020526040812055565b600c546001600160a01b031633146122605760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b60115460125403612278576013805460ff1916905550565b6013805482151560ff1990911617905550565b600c546001600160a01b031633146122d35760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b03811661234f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b2a565b6116cc81612ac1565b600061236360085490565b600e5490915060ff16156123ae5760405162461bcd60e51b8152602060048201526012602482015271151a19481b5a5b9d081a5cc81c185d5cd95960721b6044820152606401610b2a565b600e54610100900460ff16156124065760405162461bcd60e51b815260206004820152601460248201527f50726573616c652074696d65206973206f7665720000000000000000000000006044820152606401610b2a565b8160155461241491906138f0565b3410156124545760405162461bcd60e51b815260206004820152600e60248201526d125b98dbdc9c9958dd0810dbdcdd60921b6044820152606401610b2a565b600082116124af5760405162461bcd60e51b815260206004820152602260248201527f4d696e7420416d6f756e74206d757374206265206d6f7265207468656e205a65604482015261726f60f01b6064820152608401610b2a565b600f546124bc838361390f565b111561253f5760405162461bcd60e51b815260206004820152604660248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d69742c20747279206c65737320606482015265185b5bdd5b9d60d21b608482015260a401610b2a565b60165482601754612550919061390f565b11156125ea5760405162461bcd60e51b815260206004820152605360248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d69742c20666f7220707265736160648201527f6c652c20747279206c65737320616d6f756e7400000000000000000000000000608482015260a401610b2a565b3360009081526018602052604081205490036126175733600090815260186020526040902082905561263c565b3360009081526018602052604081208054849290612636908490613980565b90915550505b816017600082825461264e919061390f565b90915550600190505b82811161267e5761266c33611246838561390f565b8061267681613927565b915050612657565b5060165460175403611dff57600e805461ff00191690555050565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610ae05750610ae082612da1565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061271982611889565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166127cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b2a565b60006127d683611889565b9050806001600160a01b0316846001600160a01b0316148061281d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806128415750836001600160a01b031661283684610bd8565b6001600160a01b0316145b949350505050565b826001600160a01b031661285c82611889565b6001600160a01b0316146128d85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610b2a565b6001600160a01b0382166129535760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b2a565b61295e838383612ddf565b6129696000826126d7565b6001600160a01b0383166000908152600360205260408120805460019290612992908490613ab6565b90915550506001600160a01b03821660009081526003602052604081208054600192906129c090849061390f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000612a3c60135460ff1690565b612a885760405162461bcd60e51b815260206004820152601d60248201527f5768697465206c6973742074696d65206973206f766572202d203232320000006044820152606401610b2a565b601354612a9f90610100900463ffffffff16612e97565b909114919050565b611dff828260405180602001604052806000815250612ede565b600c80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612b815760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b2a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612bf9848484612849565b612c0584848484612f5c565b611f6e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b2a565b606081600003612caf57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612cd95780612cc381613927565b9150612cd29050600a83613956565b9150612cb3565b60008167ffffffffffffffff811115612cf457612cf46135f6565b6040519080825280601f01601f191660200182016040528015612d1e576020820181803683370190505b5090505b841561284157612d33600183613ab6565b9150612d40600a86613acd565b612d4b90603061390f565b60f81b818381518110612d6057612d6061396a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612d9a600a86613956565b9450612d22565b60006001600160e01b031982167f780e9d63000000000000000000000000000000000000000000000000000000001480610ae05750610ae0826130a8565b6001600160a01b038316612e3a57612e3581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612e5d565b816001600160a01b0316836001600160a01b031614612e5d57612e5d8382613143565b6001600160a01b038216612e7457610d99816131e0565b826001600160a01b0316826001600160a01b031614610d9957610d99828261328f565b6000808233604051602001612ebf9291909182526001600160a01b0316602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b612ee883836132d3565b612ef56000848484612f5c565b610d995760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b2a565b60006001600160a01b0384163b1561309d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612fa0903390899088908890600401613ae1565b6020604051808303816000875af1925050508015612fdb575060408051601f3d908101601f19168201909252612fd891810190613b1d565b60015b613083573d808015613009576040519150601f19603f3d011682016040523d82523d6000602084013e61300e565b606091505b50805160000361307b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b2a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612841565b506001949350505050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061310b57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610ae057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610ae0565b6000600161315084611914565b61315a9190613ab6565b6000838152600760205260409020549091508082146131ad576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906131f290600190613ab6565b6000838152600960205260408120546008805493945090928490811061321a5761321a61396a565b90600052602060002001549050806008838154811061323b5761323b61396a565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061327357613273613b3a565b6001900381819060005260206000200160009055905550505050565b600061329a83611914565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166133295760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b2a565b6000818152600260205260409020546001600160a01b03161561338e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b2a565b61339a60008383612ddf565b6001600160a01b03821660009081526003602052604081208054600192906133c390849061390f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461343a906138a0565b90600052602060002090601f01602090048101928261345c57600085556134a2565b82601f1061347557805160ff19168380011785556134a2565b828001600101855582156134a2579182015b828111156134a2578251825591602001919060010190613487565b506134ae9291506134b2565b5090565b5b808211156134ae57600081556001016134b3565b6001600160e01b0319811681146116cc57600080fd5b6000602082840312156134ef57600080fd5b81356134fa816134c7565b9392505050565b8035801515811461351157600080fd5b919050565b60006020828403121561352857600080fd5b6134fa82613501565b60005b8381101561354c578181015183820152602001613534565b83811115611f6e5750506000910152565b60008151808452613575816020860160208601613531565b601f01601f19169290920160200192915050565b6020815260006134fa602083018461355d565b6000602082840312156135ae57600080fd5b5035919050565b80356001600160a01b038116811461351157600080fd5b600080604083850312156135df57600080fd5b6135e8836135b5565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115613627576136276135f6565b604051601f8501601f19908116603f0116810190828211818310171561364f5761364f6135f6565b8160405280935085815286868601111561366857600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561369557600080fd5b61369e83613501565b9150602083013567ffffffffffffffff8111156136ba57600080fd5b8301601f810185136136cb57600080fd5b6136da8582356020840161360c565b9150509250929050565b6000806000606084860312156136f957600080fd5b613702846135b5565b9250613710602085016135b5565b9150604084013590509250925092565b6000806040838503121561373357600080fd5b50508035926020909101359150565b60006020828403121561375457600080fd5b6134fa826135b5565b6020808252825182820181905260009190848201906040850190845b8181101561379557835183529284019291840191600101613779565b50909695505050505050565b600080604083850312156137b457600080fd5b6137bd836135b5565b91506137cb60208401613501565b90509250929050565b6000602082840312156137e657600080fd5b813563ffffffff811681146134fa57600080fd5b6000806000806080858703121561381057600080fd5b613819856135b5565b9350613827602086016135b5565b925060408501359150606085013567ffffffffffffffff81111561384a57600080fd5b8501601f8101871361385b57600080fd5b61386a8782356020840161360c565b91505092959194509250565b6000806040838503121561388957600080fd5b613892836135b5565b91506137cb602084016135b5565b600181811c908216806138b457607f821691505b6020821081036138d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561390a5761390a6138da565b500290565b60008219821115613922576139226138da565b500190565b600060018201613939576139396138da565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261396557613965613940565b500490565b634e487b7160e01b600052603260045260246000fd5b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156139ba576139ba6138da565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156139ee576139ee6138da565b50500190565b60008151613a06818560208601613531565b9290920192915050565b600080845481600182811c915080831680613a2c57607f831692505b60208084108203613a4b57634e487b7160e01b86526022600452602486fd5b818015613a5f5760018114613a7057613a9d565b60ff19861689528489019650613a9d565b60008b81526020902060005b86811015613a955781548b820152908501908301613a7c565b505084890196505b505050505050613aad81856139f4565b95945050505050565b600082821015613ac857613ac86138da565b500390565b600082613adc57613adc613940565b500690565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613b13608083018461355d565b9695505050505050565b600060208284031215613b2f57600080fd5b81516134fa816134c7565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122025990605a49b55b5af0cdbad52877c664cc7030d808f7e79e69c894bbad0854b64736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007334b2d4f2d3839000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005334b4f38390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d656e374b3975576253537947356d756a68616431366352366a45336f587479345a5831774433645837416e782f00000000000000000000
Deployed Bytecode
0x60806040526004361061038c5760003560e01c8063715018a6116101dc578063bf3ad24411610102578063d936547e116100a0578063ed931e171161006f578063ed931e1714610a62578063f0bc25c114610a82578063f2fde38b14610aa2578063f759867a14610ac257600080fd5b8063d936547e146109b4578063de3f66e5146109e4578063e985e9c514610a04578063ec21341f14610a4d57600080fd5b8063c7e9d141116100dc578063c7e9d14114610942578063c87b56dd14610962578063cbb897c714610982578063cbf21fe41461099757600080fd5b8063bf3ad244146108eb578063c40e50b114610900578063c776f2401461092d57600080fd5b80638fdcf9421161017a578063af8ef3f111610149578063af8ef3f114610876578063b2f3e85e14610896578063b88d4fde146108b6578063bd3e19d4146108d657600080fd5b80638fdcf9421461080c57806395d89b411461082c578063a22cb46514610841578063a310de881461086157600080fd5b806382dadec1116101b657806382dadec11461078557806384083c89146107985780638a8cc5df146107b85780638da5cb5b146107ee57600080fd5b8063715018a6146107365780637f00c7a61461074b57806382651bd01461076b57600080fd5b80632a55205a116102c157806342842e0e1161025f5780635af970821161022e5780635af97082146106c957806362c5268d146106e15780636352211e146106f657806370a082311461071657600080fd5b806342842e0e1461063c578063438b63001461065c57806344a0d68a146106895780634f6ccce7146106a957600080fd5b80633630df2e1161029b5780633630df2e146105ca578063381a3506146105ea57806339e7357c1461060a5780633ccfd60b1461063457600080fd5b80632a55205a1461054b5780632f745c591461058a57806330cc7ae0146105aa57600080fd5b806313e1220e1161032e578063228025e811610308578063228025e8146104e357806323b872dd1461050357806327191aa41461052357806329510d341461053857600080fd5b806313e1220e1461048f57806318160ddd146104ae5780631a51bade146104c357600080fd5b8063081812fc1161036a578063081812fc1461040a57806308b1f3f614610442578063095ea7b31461045a5780631141d7de1461047a57600080fd5b806301ffc9a71461039157806302329a29146103c657806306fdde03146103e8575b600080fd5b34801561039d57600080fd5b506103b16103ac3660046134dd565b610ad5565b60405190151581526020015b60405180910390f35b3480156103d257600080fd5b506103e66103e1366004613516565b610ae6565b005b3480156103f457600080fd5b506103fd610b46565b6040516103bd9190613589565b34801561041657600080fd5b5061042a61042536600461359c565b610bd8565b6040516001600160a01b0390911681526020016103bd565b34801561044e57600080fd5b5060135460ff166103b1565b34801561046657600080fd5b506103e66104753660046135cc565b610c6d565b34801561048657600080fd5b506103fd610d9e565b34801561049b57600080fd5b506012545b6040519081526020016103bd565b3480156104ba57600080fd5b506008546104a0565b3480156104cf57600080fd5b506103e66104de366004613682565b610e2c565b3480156104ef57600080fd5b506103e66104fe36600461359c565b610e95565b34801561050f57600080fd5b506103e661051e3660046136e4565b610ee2565b34801561052f57600080fd5b506016546104a0565b6103e6610546366004613720565b610f69565b34801561055757600080fd5b5061056b610566366004613720565b61127a565b604080516001600160a01b0390931683526020830191909152016103bd565b34801561059657600080fd5b506104a06105a53660046135cc565b611335565b3480156105b657600080fd5b506103e66105c5366004613742565b6113dd565b3480156105d657600080fd5b506103e66105e5366004613516565b611446565b3480156105f657600080fd5b506103e661060536600461359c565b6114a8565b34801561061657600080fd5b5061061f6115d2565b60405163ffffffff90911681526020016103bd565b6103e661162f565b34801561064857600080fd5b506103e66106573660046136e4565b6116cf565b34801561066857600080fd5b5061067c610677366004613742565b6116ea565b6040516103bd919061375d565b34801561069557600080fd5b506103e66106a436600461359c565b61178c565b3480156106b557600080fd5b506104a06106c436600461359c565b6117e5565b3480156106d557600080fd5b50601b5460ff166103b1565b3480156106ed57600080fd5b50600f546104a0565b34801561070257600080fd5b5061042a61071136600461359c565b611889565b34801561072257600080fd5b506104a0610731366004613742565b611914565b34801561074257600080fd5b506103e66119ae565b34801561075757600080fd5b506103e661076636600461359c565b611a02565b34801561077757600080fd5b50601b546103b19060ff1681565b6103e661079336600461359c565b611aa1565b3480156107a457600080fd5b506103e66107b3366004613742565b611d20565b3480156107c457600080fd5b506104a06107d3366004613742565b6001600160a01b031660009081526018602052604090205490565b3480156107fa57600080fd5b50600c546001600160a01b031661042a565b34801561081857600080fd5b506103e661082736600461359c565b611d8c565b34801561083857600080fd5b506103fd611de5565b34801561084d57600080fd5b506103e661085c3660046137a1565b611df4565b34801561086d57600080fd5b50600d546104a0565b34801561088257600080fd5b506103e66108913660046137d4565b611e03565b3480156108a257600080fd5b506103e66108b1366004613742565b611e6d565b3480156108c257600080fd5b506103e66108d13660046137fa565b611ee6565b3480156108e257600080fd5b506019546104a0565b3480156108f757600080fd5b506010546104a0565b34801561090c57600080fd5b506104a061091b366004613742565b60186020526000908152604090205481565b34801561093957600080fd5b506017546104a0565b34801561094e57600080fd5b506103e661095d36600461359c565b611f74565b34801561096e57600080fd5b506103fd61097d36600461359c565b611fcd565b34801561098e57600080fd5b506015546104a0565b3480156109a357600080fd5b50600e54610100900460ff166103b1565b3480156109c057600080fd5b506103b16109cf366004613742565b60146020526000908152604090205460ff1681565b3480156109f057600080fd5b506103e66109ff36600461359c565b61208c565b348015610a1057600080fd5b506103b1610a1f366004613876565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610a5957600080fd5b506011546104a0565b348015610a6e57600080fd5b506103e6610a7d366004613742565b6121b6565b348015610a8e57600080fd5b506103e6610a9d366004613516565b612218565b348015610aae57600080fd5b506103e6610abd366004613742565b61228b565b6103e6610ad036600461359c565b612358565b6000610ae082612699565b92915050565b600c546001600160a01b03163314610b335760405162461bcd60e51b81526020600482018190526024820152600080516020613b5183398151915260448201526064015b60405180910390fd5b600e805460ff1916911515919091179055565b606060008054610b55906138a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b81906138a0565b8015610bce5780601f10610ba357610100808354040283529160200191610bce565b820191906000526020600020905b815481529060010190602001808311610bb157829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b2a565b506000908152600460205260409020546001600160a01b031690565b6000610c7882611889565b9050806001600160a01b0316836001600160a01b031603610d015760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b2a565b336001600160a01b0382161480610d1d5750610d1d8133610a1f565b610d8f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b2a565b610d9983836126d7565b505050565b601a8054610dab906138a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd7906138a0565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b505050505081565b600c546001600160a01b03163314610e745760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b601b805460ff19168315151790558051610d9990601a90602084019061342e565b600c546001600160a01b03163314610edd5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b600f55565b610eec3382612752565b610f5e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b2a565b610d99838383612849565b600e5460ff1615610fb15760405162461bcd60e51b8152602060048201526012602482015271151a19481b5a5b9d081a5cc81c185d5cd95960721b6044820152606401610b2a565b60135460ff166110035760405162461bcd60e51b815260206004820152601d60248201527f5768697465206c6973742074696d65206973206f766572202d203131310000006044820152606401610b2a565b3360009081526014602052604090205460ff16151560010361108d5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79206f6e65206d696e7465642062792077616c6c65742069732070657260448201527f6d697474656400000000000000000000000000000000000000000000000000006064820152608401610b2a565b8160105461109b91906138f0565b3410156110db5760405162461bcd60e51b815260206004820152600e60248201526d125b98dbdc9c9958dd0810dbdcdd60921b6044820152606401610b2a565b8160011461112b5760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420616d6f756e74206d757374206265206f6e6c79204f6e65000000006044820152606401610b2a565b600061113660085490565b600f54909150611146848361390f565b11156111c95760405162461bcd60e51b815260206004820152604660248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d69742c20747279206c65737320606482015265185b5bdd5b9d60d21b608482015260a401610b2a565b6111d282612a2e565b61121e5760405162461bcd60e51b815260206004820152601460248201527f446973636f726420436f646520496e76616c69640000000000000000000000006044820152606401610b2a565b336000818152601460205260409020805460ff1916600117905561124b90611246858461390f565b612aa7565b6012805490600061125b83613927565b919050555060115460125403610d99576013805460ff19169055505050565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff169282019290925282916112f9575060408051808201909152600a546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b60208101516000906127109061131d906bffffffffffffffffffffffff16876138f0565b6113279190613956565b915196919550909350505050565b600061134083611914565b82106113b45760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b2a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600c546001600160a01b031633146114255760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600c546001600160a01b0316331461148e5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b600e80549115156101000261ff0019909216919091179055565b600c546001600160a01b031633146114f05760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6012548110156115685760405162461bcd60e51b815260206004820152603b60248201527f6e657720616d6f756e74206d7573742062652067726561746572207468616e2060448201527f7768697465206c6973742773206d696e74657220636f756e74657200000000006064820152608401610b2a565b600f548111156115cd5760405162461bcd60e51b815260206004820152602a60248201527f6e657720616d6f756e74206d757374206265206c6f776572207468616e20676c6044820152691bd8985b081b1a5b5a5d60b21b6064820152608401610b2a565b601155565b600c546000906001600160a01b0316331461161d5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b50601354610100900463ffffffff1690565b600c546001600160a01b031633146116775760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b604051600090339047908381818185875af1925050503d80600081146116b9576040519150601f19603f3d011682016040523d82523d6000602084013e6116be565b606091505b50509050806116cc57600080fd5b50565b610d9983838360405180602001604052806000815250611ee6565b606060006116f783611914565b905060008167ffffffffffffffff811115611714576117146135f6565b60405190808252806020026020018201604052801561173d578160200160208202803683370190505b50905060005b82811015611784576117558582611335565b8282815181106117675761176761396a565b60209081029190910101528061177c81613927565b915050611743565b509392505050565b600c546001600160a01b031633146117d45760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6117df8160016138f0565b60195550565b60006117f060085490565b82106118645760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b2a565b600882815481106118775761187761396a565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b031680610ae05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b2a565b60006001600160a01b0382166119925760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b2a565b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b031633146119f65760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b611a006000612ac1565b565b600c546001600160a01b03163314611a4a5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b600f54811115611a9c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206c696d697420666f72206d61784d696e74416d6f756e74006044820152606401610b2a565b600d55565b6000611aac60085490565b600e5490915060ff1615611af75760405162461bcd60e51b8152602060048201526012602482015271151a19481b5a5b9d081a5cc81c185d5cd95960721b6044820152606401610b2a565b600e5460ff610100909104161515600114611b545760405162461bcd60e51b815260206004820152601360248201527f49732074696d6520746f207072652d73616c65000000000000000000000000006044820152606401610b2a565b60008211611baf5760405162461bcd60e51b815260206004820152602260248201527f4d696e7420616d6f756e74206d757374206265206d6f7265207468616e205a65604482015261726f60f01b6064820152608401610b2a565b600d54821115611c275760405162461bcd60e51b815260206004820152603f60248201527f4d696e7420616d6f756e74206d757374206265206c657373206f72206571756160448201527f6c207468616e204d6178204d696e7420616d6f756e74207065726d69746564006064820152608401610b2a565b600f54611c34838361390f565b1115611ca85760405162461bcd60e51b815260206004820152603560248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d697400000000000000000000006064820152608401610b2a565b81601954611cb691906138f0565b341015611cf65760405162461bcd60e51b815260206004820152600e60248201526d125b98dbdc9c9958dd0810dbdcdd60921b6044820152606401610b2a565b60015b828111610d9957611d0e33611246838561390f565b80611d1881613927565b915050611cf9565b600c546001600160a01b03163314611d685760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b600c546001600160a01b03163314611dd45760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b611ddf8160016138f0565b60155550565b606060018054610b55906138a0565b611dff338383612b20565b5050565b600c546001600160a01b03163314611e4b5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6013805463ffffffff9092166101000264ffffffff0019909216919091179055565b600c546001600160a01b03163314611eb55760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b0381166000908152601860205260408120805460019290611ede908490613980565b909155505050565b611ef03383612752565b611f625760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b2a565b611f6e84848484612bee565b50505050565b600c546001600160a01b03163314611fbc5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b611fc78160016138f0565b60105550565b6000818152600260205260409020546060906001600160a01b031661205a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b2a565b601a61206583612c6c565b604051602001612076929190613a10565b6040516020818303038152906040529050919050565b600c546001600160a01b031633146120d45760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b60175481101561214c5760405162461bcd60e51b815260206004820152603860248201527f4e657720616d6f756e74206d7573742062652067726561746572207468616e2060448201527f70726573616c652773206d696e74657220636f756e74657200000000000000006064820152608401610b2a565b600f548111156121b15760405162461bcd60e51b815260206004820152602a60248201527f4e657720616d6f756e74206d757374206265206c6f776572207468616e20676c6044820152691bd8985b081b1a5b5a5d60b21b6064820152608401610b2a565b601655565b600c546001600160a01b031633146121fe5760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b0316600090815260186020526040812055565b600c546001600160a01b031633146122605760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b60115460125403612278576013805460ff1916905550565b6013805482151560ff1990911617905550565b600c546001600160a01b031633146122d35760405162461bcd60e51b81526020600482018190526024820152600080516020613b518339815191526044820152606401610b2a565b6001600160a01b03811661234f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b2a565b6116cc81612ac1565b600061236360085490565b600e5490915060ff16156123ae5760405162461bcd60e51b8152602060048201526012602482015271151a19481b5a5b9d081a5cc81c185d5cd95960721b6044820152606401610b2a565b600e54610100900460ff16156124065760405162461bcd60e51b815260206004820152601460248201527f50726573616c652074696d65206973206f7665720000000000000000000000006044820152606401610b2a565b8160155461241491906138f0565b3410156124545760405162461bcd60e51b815260206004820152600e60248201526d125b98dbdc9c9958dd0810dbdcdd60921b6044820152606401610b2a565b600082116124af5760405162461bcd60e51b815260206004820152602260248201527f4d696e7420416d6f756e74206d757374206265206d6f7265207468656e205a65604482015261726f60f01b6064820152608401610b2a565b600f546124bc838361390f565b111561253f5760405162461bcd60e51b815260206004820152604660248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d69742c20747279206c65737320606482015265185b5bdd5b9d60d21b608482015260a401610b2a565b60165482601754612550919061390f565b11156125ea5760405162461bcd60e51b815260206004820152605360248201527f74686520616d6f756e7420746f206265206d696e74656420657863656564732060448201527f7468652065737461626c6973686564206c696d69742c20666f7220707265736160648201527f6c652c20747279206c65737320616d6f756e7400000000000000000000000000608482015260a401610b2a565b3360009081526018602052604081205490036126175733600090815260186020526040902082905561263c565b3360009081526018602052604081208054849290612636908490613980565b90915550505b816017600082825461264e919061390f565b90915550600190505b82811161267e5761266c33611246838561390f565b8061267681613927565b915050612657565b5060165460175403611dff57600e805461ff00191690555050565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610ae05750610ae082612da1565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155819061271982611889565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166127cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b2a565b60006127d683611889565b9050806001600160a01b0316846001600160a01b0316148061281d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806128415750836001600160a01b031661283684610bd8565b6001600160a01b0316145b949350505050565b826001600160a01b031661285c82611889565b6001600160a01b0316146128d85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610b2a565b6001600160a01b0382166129535760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b2a565b61295e838383612ddf565b6129696000826126d7565b6001600160a01b0383166000908152600360205260408120805460019290612992908490613ab6565b90915550506001600160a01b03821660009081526003602052604081208054600192906129c090849061390f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000612a3c60135460ff1690565b612a885760405162461bcd60e51b815260206004820152601d60248201527f5768697465206c6973742074696d65206973206f766572202d203232320000006044820152606401610b2a565b601354612a9f90610100900463ffffffff16612e97565b909114919050565b611dff828260405180602001604052806000815250612ede565b600c80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612b815760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b2a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612bf9848484612849565b612c0584848484612f5c565b611f6e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b2a565b606081600003612caf57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612cd95780612cc381613927565b9150612cd29050600a83613956565b9150612cb3565b60008167ffffffffffffffff811115612cf457612cf46135f6565b6040519080825280601f01601f191660200182016040528015612d1e576020820181803683370190505b5090505b841561284157612d33600183613ab6565b9150612d40600a86613acd565b612d4b90603061390f565b60f81b818381518110612d6057612d6061396a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612d9a600a86613956565b9450612d22565b60006001600160e01b031982167f780e9d63000000000000000000000000000000000000000000000000000000001480610ae05750610ae0826130a8565b6001600160a01b038316612e3a57612e3581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612e5d565b816001600160a01b0316836001600160a01b031614612e5d57612e5d8382613143565b6001600160a01b038216612e7457610d99816131e0565b826001600160a01b0316826001600160a01b031614610d9957610d99828261328f565b6000808233604051602001612ebf9291909182526001600160a01b0316602082015260400190565b60408051601f1981840301815291905280516020909101209392505050565b612ee883836132d3565b612ef56000848484612f5c565b610d995760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b2a565b60006001600160a01b0384163b1561309d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612fa0903390899088908890600401613ae1565b6020604051808303816000875af1925050508015612fdb575060408051601f3d908101601f19168201909252612fd891810190613b1d565b60015b613083573d808015613009576040519150601f19603f3d011682016040523d82523d6000602084013e61300e565b606091505b50805160000361307b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610b2a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612841565b506001949350505050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061310b57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610ae057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610ae0565b6000600161315084611914565b61315a9190613ab6565b6000838152600760205260409020549091508082146131ad576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906131f290600190613ab6565b6000838152600960205260408120546008805493945090928490811061321a5761321a61396a565b90600052602060002001549050806008838154811061323b5761323b61396a565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061327357613273613b3a565b6001900381819060005260206000200160009055905550505050565b600061329a83611914565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166133295760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b2a565b6000818152600260205260409020546001600160a01b03161561338e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b2a565b61339a60008383612ddf565b6001600160a01b03821660009081526003602052604081208054600192906133c390849061390f565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461343a906138a0565b90600052602060002090601f01602090048101928261345c57600085556134a2565b82601f1061347557805160ff19168380011785556134a2565b828001600101855582156134a2579182015b828111156134a2578251825591602001919060010190613487565b506134ae9291506134b2565b5090565b5b808211156134ae57600081556001016134b3565b6001600160e01b0319811681146116cc57600080fd5b6000602082840312156134ef57600080fd5b81356134fa816134c7565b9392505050565b8035801515811461351157600080fd5b919050565b60006020828403121561352857600080fd5b6134fa82613501565b60005b8381101561354c578181015183820152602001613534565b83811115611f6e5750506000910152565b60008151808452613575816020860160208601613531565b601f01601f19169290920160200192915050565b6020815260006134fa602083018461355d565b6000602082840312156135ae57600080fd5b5035919050565b80356001600160a01b038116811461351157600080fd5b600080604083850312156135df57600080fd5b6135e8836135b5565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115613627576136276135f6565b604051601f8501601f19908116603f0116810190828211818310171561364f5761364f6135f6565b8160405280935085815286868601111561366857600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561369557600080fd5b61369e83613501565b9150602083013567ffffffffffffffff8111156136ba57600080fd5b8301601f810185136136cb57600080fd5b6136da8582356020840161360c565b9150509250929050565b6000806000606084860312156136f957600080fd5b613702846135b5565b9250613710602085016135b5565b9150604084013590509250925092565b6000806040838503121561373357600080fd5b50508035926020909101359150565b60006020828403121561375457600080fd5b6134fa826135b5565b6020808252825182820181905260009190848201906040850190845b8181101561379557835183529284019291840191600101613779565b50909695505050505050565b600080604083850312156137b457600080fd5b6137bd836135b5565b91506137cb60208401613501565b90509250929050565b6000602082840312156137e657600080fd5b813563ffffffff811681146134fa57600080fd5b6000806000806080858703121561381057600080fd5b613819856135b5565b9350613827602086016135b5565b925060408501359150606085013567ffffffffffffffff81111561384a57600080fd5b8501601f8101871361385b57600080fd5b61386a8782356020840161360c565b91505092959194509250565b6000806040838503121561388957600080fd5b613892836135b5565b91506137cb602084016135b5565b600181811c908216806138b457607f821691505b6020821081036138d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561390a5761390a6138da565b500290565b60008219821115613922576139226138da565b500190565b600060018201613939576139396138da565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261396557613965613940565b500490565b634e487b7160e01b600052603260045260246000fd5b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156139ba576139ba6138da565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156139ee576139ee6138da565b50500190565b60008151613a06818560208601613531565b9290920192915050565b600080845481600182811c915080831680613a2c57607f831692505b60208084108203613a4b57634e487b7160e01b86526022600452602486fd5b818015613a5f5760018114613a7057613a9d565b60ff19861689528489019650613a9d565b60008b81526020902060005b86811015613a955781548b820152908501908301613a7c565b505084890196505b505050505050613aad81856139f4565b95945050505050565b600082821015613ac857613ac86138da565b500390565b600082613adc57613adc613940565b500690565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613b13608083018461355d565b9695505050505050565b600060208284031215613b2f57600080fd5b81516134fa816134c7565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122025990605a49b55b5af0cdbad52877c664cc7030d808f7e79e69c894bbad0854b64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007334b2d4f2d3839000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005334b4f38390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d656e374b3975576253537947356d756a68616431366352366a45336f587479345a5831774433645837416e782f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): 3K-O-89
Arg [1] : _symbol (string): 3KO89
Arg [2] : initialURI (string): ipfs://Qmen7K9uWbSSyG5mujhad16cR6jE3oXty4ZX1wD3dX7Anx/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 334b2d4f2d383900000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 334b4f3839000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d656e374b3975576253537947356d756a68616431366352
Arg [9] : 366a45336f587479345a5831774433645837416e782f00000000000000000000
Deployed Bytecode Sourcemap
2631:1202:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;402:180:2;;;;;;;;;;-1:-1:-1;402:180:2;;;;;:::i;:::-;;:::i;:::-;;;611:14:21;;604:22;586:41;;574:2;559:18;402:180:2;;;;;;;;590:77;;;;;;;;;;-1:-1:-1;590:77:2;;;;;:::i;:::-;;:::i;:::-;;2349:98:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3861:217::-;;;;;;;;;;-1:-1:-1;3861:217:7;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2110:55:21;;;2092:74;;2080:2;2065:18;3861:217:7;1946:226:21;384:92:20;;;;;;;;;;-1:-1:-1;457:13:20;;;;384:92;;3399:401:7;;;;;;;;;;-1:-1:-1;3399:401:7;;;;;:::i;:::-;;:::i;2722:17:0:-;;;;;;;;;;;;;:::i;1165:106:20:-;;;;;;;;;;-1:-1:-1;1247:18:20;;1165:106;;;2783:25:21;;;2771:2;2756:18;1165:106:20;2637:177:21;1681:111:8;;;;;;;;;;-1:-1:-1;1768:10:8;:17;1681:111;;3396:140:0;;;;;;;;;;-1:-1:-1;3396:140:0;;;;;:::i;:::-;;:::i;1282:104:2:-;;;;;;;;;;-1:-1:-1;1282:104:2;;;;;:::i;:::-;;:::i;4588:330:7:-;;;;;;;;;;-1:-1:-1;4588:330:7;;;;;:::i;:::-;;:::i;1239:101:17:-;;;;;;;;;;-1:-1:-1;1318:16:17;;1239:101;;1936:943:20;;;;;;:::i;:::-;;:::i;1675:442:6:-;;;;;;;;;;-1:-1:-1;1675:442:6;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;5200:55:21;;;5182:74;;5287:2;5272:18;;5265:34;;;;5155:18;1675:442:6;5008:297:21;1279:331:8;;;;;;;;;;-1:-1:-1;1279:331:8;;;;;:::i;:::-;;:::i;840:104:20:-;;;;;;;;;;-1:-1:-1;840:104:20;;;;;:::i;:::-;;:::i;765:91:2:-;;;;;;;;;;-1:-1:-1;765:91:2;;;;;:::i;:::-;;:::i;1388:363:20:-;;;;;;;;;;-1:-1:-1;1388:363:20;;;;;:::i;:::-;;:::i;1842:86::-;;;;;;;;;;;;;:::i;:::-;;;5675:10:21;5663:23;;;5645:42;;5633:2;5618:18;1842:86:20;5501:192:21;3638::0;;;:::i;4984:179:7:-;;;;;;;;;;-1:-1:-1;4984:179:7;;;;;:::i;:::-;;:::i;1394:387:2:-;;;;;;;;;;-1:-1:-1;1394:387:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;256:89:15:-;;;;;;;;;;-1:-1:-1;256:89:15;;;;;:::i;:::-;;:::i;1864:308:8:-;;;;;;;;;;-1:-1:-1;1864:308:8;;;;;:::i;:::-;;:::i;3548:80:0:-;;;;;;;;;;-1:-1:-1;3614:6:0;;;;3548:80;;1187:87:2;;;;;;;;;;-1:-1:-1;1259:9:2;;1187:87;;2052:235:7;;;;;;;;;;-1:-1:-1;2052:235:7;;;;;:::i;:::-;;:::i;1790:205::-;;;;;;;;;;-1:-1:-1;1790:205:7;;;;;:::i;:::-;;:::i;1621:92:16:-;;;;;;;;;;;;;:::i;975:204:2:-;;;;;;;;;;-1:-1:-1;975:204:2;;;;;:::i;:::-;;:::i;2746:26:0:-;;;;;;;;;;-1:-1:-1;2746:26:0;;;;;;;;435:747:15;;;;;;:::i;:::-;;:::i;733:101:20:-;;;;;;;;;;-1:-1:-1;733:101:20;;;;;:::i;:::-;;:::i;2486:126:17:-;;;;;;;;;;-1:-1:-1;2486:126:17;;;;;:::i;:::-;-1:-1:-1;;;;;2580:24:17;2557:3;2580:24;;;:14;:24;;;;;;;2486:126;989:85:16;;;;;;;;;;-1:-1:-1;1061:6:16;;-1:-1:-1;;;;;1061:6:16;989:85;;656:106:17;;;;;;;;;;-1:-1:-1;656:106:17;;;;;:::i;:::-;;:::i;2511:102:7:-;;;;;;;;;;;;;:::i;4145:153::-;;;;;;;;;;-1:-1:-1;4145:153:7;;;;;:::i;:::-;;:::i;872:95:2:-;;;;;;;;;;-1:-1:-1;948:13:2;;872:95;;1759:77:20;;;;;;;;;;-1:-1:-1;1759:77:20;;;;;:::i;:::-;;:::i;342:98:17:-;;;;;;;;;;-1:-1:-1;342:98:17;;;;;:::i;:::-;;:::i;5229:320:7:-;;;;;;;;;;-1:-1:-1;5229:320:7;;;;;:::i;:::-;;:::i;353:74:15:-;;;;;;;;;;-1:-1:-1;420:4:15;;353:74;;952:95:20;;;;;;;;;;-1:-1:-1;1028:13:20;;952:95;;284:45:17;;;;;;;;;;-1:-1:-1;284:45:17;;;;;:::i;:::-;;;;;;;;;;;;;;770:102;;;;;;;;;;-1:-1:-1;850:16:17;;770:102;;1053:104:20;;;;;;;;;;-1:-1:-1;1053:104:20;;;;;:::i;:::-;;:::i;3051:337:0:-;;;;;;;;;;-1:-1:-1;3051:337:0;;;;;:::i;:::-;;:::i;559:91:17:-;;;;;;;;;;-1:-1:-1;633:11:17;;559:91;;675:82:2;;;;;;;;;;-1:-1:-1;743:8:2;;;;;;;675:82;;328:43:20;;;;;;;;;;-1:-1:-1;328:43:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;884:349:17;;;;;;;;;;-1:-1:-1;884:349:17;;;;;:::i;:::-;;:::i;4364:162:7:-;;;;;;;;;;-1:-1:-1;4364:162:7;;;;;:::i;:::-;-1:-1:-1;;;;;4484:25:7;;;4461:4;4484:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4364:162;1280:102:20;;;;;;;;;;-1:-1:-1;1358:18:20;;1280:102;;446:101:17;;;;;;;;;;-1:-1:-1;446:101:17;;;;;:::i;:::-;;:::i;482:243:20:-;;;;;;;;;;-1:-1:-1;482:243:20;;;;;:::i;:::-;;:::i;1862:223:16:-;;;;;;;;;;-1:-1:-1;1862:223:16;;;;;:::i;:::-;;:::i;1358:1122:17:-;;;;;;:::i;:::-;;:::i;402:180:2:-;514:4;538:36;562:11;538:23;:36::i;:::-;531:43;402:180;-1:-1:-1;;402:180:2:o;590:77::-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;;;;;;;;;646:6:2::1;:15:::0;;-1:-1:-1;;646:15:2::1;::::0;::::1;;::::0;;;::::1;::::0;;590:77::o;2349:98:7:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3861:217::-;3937:7;7109:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7109:16:7;3956:73;;;;-1:-1:-1;;;3956:73:7;;8997:2:21;3956:73:7;;;8979:21:21;9036:2;9016:18;;;9009:30;9075:34;9055:18;;;9048:62;-1:-1:-1;;;9126:18:21;;;9119:42;9178:19;;3956:73:7;8795:408:21;3956:73:7;-1:-1:-1;4047:24:7;;;;:15;:24;;;;;;-1:-1:-1;;;;;4047:24:7;;3861:217::o;3399:401::-;3479:13;3495:23;3510:7;3495:14;:23::i;:::-;3479:39;;3542:5;-1:-1:-1;;;;;3536:11:7;:2;-1:-1:-1;;;;;3536:11:7;;3528:57;;;;-1:-1:-1;;;3528:57:7;;9410:2:21;3528:57:7;;;9392:21:21;9449:2;9429:18;;;9422:30;9488:34;9468:18;;;9461:62;9559:3;9539:18;;;9532:31;9580:19;;3528:57:7;9208:397:21;3528:57:7;666:10:3;-1:-1:-1;;;;;3617:21:7;;;;:62;;-1:-1:-1;3642:37:7;3659:5;666:10:3;4364:162:7;:::i;3642:37::-;3596:165;;;;-1:-1:-1;;;3596:165:7;;9812:2:21;3596:165:7;;;9794:21:21;9851:2;9831:18;;;9824:30;9890:34;9870:18;;;9863:62;9961:26;9941:18;;;9934:54;10005:19;;3596:165:7;9610:420:21;3596:165:7;3772:21;3781:2;3785:7;3772:8;:21::i;:::-;3469:331;3399:401;;:::o;2722:17:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3396:140::-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;3486:6:0::1;:15:::0;;-1:-1:-1;;3486:15:0::1;::::0;::::1;;;::::0;;3512:16;;::::1;::::0;:3:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;1282:104:2:-:0;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1355:9:2::1;:25:::0;1282:104::o;4588:330:7:-;4777:41;666:10:3;4810:7:7;4777:18;:41::i;:::-;4769:103;;;;-1:-1:-1;;;4769:103:7;;10237:2:21;4769:103:7;;;10219:21:21;10276:2;10256:18;;;10249:30;10315:34;10295:18;;;10288:62;10386:19;10366:18;;;10359:47;10423:19;;4769:103:7;10035:413:21;4769:103:7;4883:28;4893:4;4899:2;4903:7;4883:9;:28::i;1936:943:20:-;2037:6;;;;2036:7;2028:37;;;;-1:-1:-1;;;2028:37:20;;10655:2:21;2028:37:20;;;10637:21:21;10694:2;10674:18;;;10667:30;-1:-1:-1;;;10713:18:21;;;10706:48;10771:18;;2028:37:20;10453:342:21;2028:37:20;457:13;;;;2076:60;;;;-1:-1:-1;;;2076:60:20;;11002:2:21;2076:60:20;;;10984:21:21;11041:2;11021:18;;;11014:30;11080:31;11060:18;;;11053:59;11129:18;;2076:60:20;10800:353:21;2076:60:20;2194:10;2182:23;;;;:11;:23;;;;;;;;:31;;:23;:31;2174:81;;;;-1:-1:-1;;;2174:81:20;;11360:2:21;2174:81:20;;;11342:21:21;11399:2;11379:18;;;11372:30;11438:34;11418:18;;;11411:62;11509:8;11489:18;;;11482:36;11535:19;;2174:81:20;11158:402:21;2174:81:20;2303:11;2287:13;;:27;;;;:::i;:::-;2274:9;:40;;2266:66;;;;-1:-1:-1;;;2266:66:20;;12129:2:21;2266:66:20;;;12111:21:21;12168:2;12148:18;;;12141:30;-1:-1:-1;;;12187:18:21;;;12180:44;12241:18;;2266:66:20;11927:338:21;2266:66:20;2351:11;2366:1;2351:16;2343:56;;;;-1:-1:-1;;;2343:56:20;;12472:2:21;2343:56:20;;;12454:21:21;12511:2;12491:18;;;12484:30;12550;12530:18;;;12523:58;12598:18;;2343:56:20;12270:352:21;2343:56:20;2410:14;2427:13;1768:10:8;:17;;1681:111;2427:13:20;2483:9;;2410:30;;-1:-1:-1;2459:20:20;2468:11;2410:30;2459:20;:::i;:::-;:33;;2451:115;;;;-1:-1:-1;;;2451:115:20;;12962:2:21;2451:115:20;;;12944:21:21;13001:2;12981:18;;;12974:30;13040:34;13020:18;;;13013:62;13111:34;13091:18;;;13084:62;-1:-1:-1;;;13162:19:21;;;13155:37;13209:19;;2451:115:20;12760:474:21;2451:115:20;2585:32;2604:12;2585:18;:32::i;:::-;2577:64;;;;-1:-1:-1;;;2577:64:20;;13441:2:21;2577:64:20;;;13423:21:21;13480:2;13460:18;;;13453:30;13519:22;13499:18;;;13492:50;13559:18;;2577:64:20;13239:344:21;2577:64:20;2664:10;2652:23;;;;:11;:23;;;;;:30;;-1:-1:-1;;2652:30:20;2678:4;2652:30;;;2693:43;;2715:20;2724:11;2715:6;:20;:::i;:::-;2693:9;:43::i;:::-;2751:18;:20;;;:18;:20;;;:::i;:::-;;;;;;2809:18;;2787;;:40;2783:94;;2843:13;:21;;-1:-1:-1;;2843:21:20;;;2017:862;1936:943;;:::o;1675:442:6:-;1772:7;1830:27;;;:17;:27;;;;;;;;1801:56;;;;;;;;;-1:-1:-1;;;;;1801:56:6;;;;;-1:-1:-1;;;1801:56:6;;;;;;;;;;;;1772:7;;1870:92;;-1:-1:-1;1921:29:6;;;;;;;;;1931:19;1921:29;-1:-1:-1;;;;;1921:29:6;;;;-1:-1:-1;;;1921:29:6;;;;;;;;1870:92;2012:23;;;;1974:21;;2483:5;;1999:36;;1998:58;1999:36;:10;:36;:::i;:::-;1998:58;;;;:::i;:::-;2077:16;;;;;-1:-1:-1;1675:442:6;;-1:-1:-1;;;;1675:442:6:o;1279:331:8:-;1416:7;1468:23;1485:5;1468:16;:23::i;:::-;1460:5;:31;1439:121;;;;-1:-1:-1;;;1439:121:8;;14244:2:21;1439:121:8;;;14226:21:21;14283:2;14263:18;;;14256:30;14322:34;14302:18;;;14295:62;14393:13;14373:18;;;14366:41;14424:19;;1439:121:8;14042:407:21;1439:121:8;-1:-1:-1;;;;;;1577:19:8;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1279:331::o;840:104:20:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;-1:-1:-1;;;;;912:18:20::1;933:5;912:18:::0;;;:11:::1;:18;::::0;;;;:26;;-1:-1:-1;;912:26:20::1;::::0;;840:104::o;765:91:2:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;832:8:2::1;:18:::0;;;::::1;;;;-1:-1:-1::0;;832:18:2;;::::1;::::0;;;::::1;::::0;;765:91::o;1388:363:20:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1510:18:20::1;;1484:22;:44;;1476:115;;;::::0;-1:-1:-1;;;1476:115:20;;14656:2:21;1476:115:20::1;::::0;::::1;14638:21:21::0;14695:2;14675:18;;;14668:30;14734:34;14714:18;;;14707:62;14805:29;14785:18;;;14778:57;14852:19;;1476:115:20::1;14454:423:21::0;1476:115:20::1;1636:9;;1610:22;:35;;1602:89;;;::::0;-1:-1:-1;;;1602:89:20;;15084:2:21;1602:89:20::1;::::0;::::1;15066:21:21::0;15123:2;15103:18;;;15096:30;15162:34;15142:18;;;15135:62;-1:-1:-1;;;15213:18:21;;;15206:40;15263:19;;1602:89:20::1;14882:406:21::0;1602:89:20::1;1702:18;:43:::0;1388:363::o;1842:86::-;1061:6:16;;1892::20;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;-1:-1:-1;1918:4:20::1;::::0;::::1;::::0;::::1;;;::::0;1842:86::o;3638:192:0:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;3713:82:0::1;::::0;3695:12:::1;::::0;3721:10:::1;::::0;3759:21:::1;::::0;3695:12;3713:82;3695:12;3713:82;3759:21;3721:10;3713:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3694:101;;;3814:7;3806:16;;;::::0;::::1;;3683:147;3638:192::o:0;4984:179:7:-;5117:39;5134:4;5140:2;5144:7;5117:39;;;;;;;;;;;;:16;:39::i;1394:387:2:-;1481:16;1513:23;1539:17;1549:6;1539:9;:17::i;:::-;1513:43;;1567:25;1609:15;1595:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1595:30:2;;1567:58;;1641:9;1636:113;1656:15;1652:1;:19;1636:113;;;1707:30;1727:6;1735:1;1707:19;:30::i;:::-;1693:8;1702:1;1693:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;1673:3;;;;:::i;:::-;;;;1636:113;;;-1:-1:-1;1766:8:2;1394:387;-1:-1:-1;;;1394:387:2:o;256:89:15:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;326:16:15::1;:8:::0;337:5:::1;326:16;:::i;:::-;319:4;:23:::0;-1:-1:-1;256:89:15:o;1864:308:8:-;1979:7;2031:30;1768:10;:17;;1681:111;2031:30;2023:5;:38;2002:129;;;;-1:-1:-1;;;2002:129:8;;15894:2:21;2002:129:8;;;15876:21:21;15933:2;15913:18;;;15906:30;15972:34;15952:18;;;15945:62;16043:14;16023:18;;;16016:42;16075:19;;2002:129:8;15692:408:21;2002:129:8;2148:10;2159:5;2148:17;;;;;;;;:::i;:::-;;;;;;;;;2141:24;;1864:308;;;:::o;2052:235:7:-;2124:7;2159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2159:16:7;;2185:73;;;;-1:-1:-1;;;2185:73:7;;16307:2:21;2185:73:7;;;16289:21:21;16346:2;16326:18;;;16319:30;16385:34;16365:18;;;16358:62;16456:11;16436:18;;;16429:39;16485:19;;2185:73:7;16105:405:21;1790:205:7;1862:7;-1:-1:-1;;;;;1889:19:7;;1881:74;;;;-1:-1:-1;;;1881:74:7;;16717:2:21;1881:74:7;;;16699:21:21;16756:2;16736:18;;;16729:30;16795:34;16775:18;;;16768:62;16866:12;16846:18;;;16839:40;16896:19;;1881:74:7;16515:406:21;1881:74:7;-1:-1:-1;;;;;;1972:16:7;;;;;:9;:16;;;;;;;1790:205::o;1621:92:16:-;1061:6;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1685:21:::1;1703:1;1685:9;:21::i;:::-;1621:92::o:0;975:204:2:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1084:9:2::1;;1064:17;:29;;1056:72;;;::::0;-1:-1:-1;;;1056:72:2;;17128:2:21;1056:72:2::1;::::0;::::1;17110:21:21::0;17167:2;17147:18;;;17140:30;17206:33;17186:18;;;17179:61;17257:18;;1056:72:2::1;16926:355:21::0;1056:72:2::1;1139:13;:33:::0;975:204::o;435:747:15:-;503:14;520:13;1768:10:8;:17;;1681:111;520:13:15;553:6;;503:30;;-1:-1:-1;553:6:15;;552:7;544:38;;;;-1:-1:-1;;;544:38:15;;10655:2:21;544:38:15;;;10637:21:21;10694:2;10674:18;;;10667:30;-1:-1:-1;;;10713:18:21;;;10706:48;10771:18;;544:38:15;10453:342:21;544:38:15;628:8;;;;;;;;:16;;:8;:16;620:48;;;;-1:-1:-1;;;620:48:15;;17488:2:21;620:48:15;;;17470:21:21;17527:2;17507:18;;;17500:30;17566:21;17546:18;;;17539:49;17605:18;;620:48:15;17286:343:21;620:48:15;701:1;687:11;:15;679:62;;;;-1:-1:-1;;;679:62:15;;17836:2:21;679:62:15;;;17818:21:21;17875:2;17855:18;;;17848:30;17914:34;17894:18;;;17887:62;-1:-1:-1;;;17965:18:21;;;17958:32;18007:19;;679:62:15;17634:398:21;679:62:15;775:13;;760:11;:28;;752:117;;;;-1:-1:-1;;;752:117:15;;18239:2:21;752:117:15;;;18221:21:21;18278:2;18258:18;;;18251:30;18317:34;18297:18;;;18290:62;18388:33;18368:18;;;18361:61;18439:19;;752:117:15;18037:427:21;752:117:15;912:9;;888:20;897:11;888:6;:20;:::i;:::-;:33;;880:112;;;;-1:-1:-1;;;880:112:15;;18671:2:21;880:112:15;;;18653:21:21;18710:2;18690:18;;;18683:30;18749:34;18729:18;;;18722:62;18820:23;18800:18;;;18793:51;18861:19;;880:112:15;18469:417:21;880:112:15;1031:11;1024:4;;:18;;;;:::i;:::-;1011:9;:31;;1003:58;;;;-1:-1:-1;;;1003:58:15;;12129:2:21;1003:58:15;;;12111:21:21;12168:2;12148:18;;;12141:30;-1:-1:-1;;;12187:18:21;;;12180:44;12241:18;;1003:58:15;11927:338:21;1003:58:15;1089:1;1072:103;1097:11;1092:1;:16;1072:103;;1130:33;1140:10;1152;1161:1;1152:6;:10;:::i;1130:33::-;1110:3;;;;:::i;:::-;;;;1072:103;;733:101:20;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;-1:-1:-1;;;;;802:18:20::1;;::::0;;;:11:::1;:18;::::0;;;;:25;;-1:-1:-1;;802:25:20::1;823:4;802:25;::::0;;733:101::o;656:106:17:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;740:16:17::1;:8:::0;751:5:::1;740:16;:::i;:::-;726:11;:30:::0;-1:-1:-1;656:106:17:o;2511:102:7:-;2567:13;2599:7;2592:14;;;;;:::i;4145:153::-;4239:52;666:10:3;4272:8:7;4282;4239:18;:52::i;:::-;4145:153;;:::o;1759:77:20:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1818:4:20::1;:12:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;1818:12:20;;::::1;::::0;;;::::1;::::0;;1759:77::o;342:98:17:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;-1:-1:-1;;;;;408:21:17;::::1;;::::0;;;:14:::1;:21;::::0;;;;:26;;433:1:::1;::::0;408:21;:26:::1;::::0;433:1;;408:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;;342:98:17:o;5229:320:7:-;5398:41;666:10:3;5431:7:7;5398:18;:41::i;:::-;5390:103;;;;-1:-1:-1;;;5390:103:7;;10237:2:21;5390:103:7;;;10219:21:21;10276:2;10256:18;;;10249:30;10315:34;10295:18;;;10288:62;10386:19;10366:18;;;10359:47;10423:19;;5390:103:7;10035:413:21;5390:103:7;5503:39;5517:4;5523:2;5527:7;5536:5;5503:13;:39::i;:::-;5229:320;;;;:::o;1053:104:20:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1138:13:20::1;:5:::0;1146::::1;1138:13;:::i;:::-;1122;:29:::0;-1:-1:-1;1053:104:20:o;3051:337:0:-;7086:4:7;7109:16;;;:7;:16;;;;;;3169:13:0;;-1:-1:-1;;;;;7109:16:7;3200:113:0;;;;-1:-1:-1;;;3200:113:0;;19465:2:21;3200:113:0;;;19447:21:21;19504:2;19484:18;;;19477:30;19543:34;19523:18;;;19516:62;19614:17;19594:18;;;19587:45;19649:19;;3200:113:0;19263:411:21;3200:113:0;3355:3;3360:18;:7;:16;:18::i;:::-;3338:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3324:56;;3051:337;;;:::o;884:349:17:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;1003:16:17::1;;979:20;:40;;971:108;;;::::0;-1:-1:-1;;;971:108:17;;21433:2:21;971:108:17::1;::::0;::::1;21415:21:21::0;21472:2;21452:18;;;21445:30;21511:34;21491:18;;;21484:62;21582:26;21562:18;;;21555:54;21626:19;;971:108:17::1;21231:420:21::0;971:108:17::1;1122:9;;1098:20;:33;;1090:87;;;::::0;-1:-1:-1;;;1090:87:17;;21858:2:21;1090:87:17::1;::::0;::::1;21840:21:21::0;21897:2;21877:18;;;21870:30;21936:34;21916:18;;;21909:62;-1:-1:-1;;;21987:18:21;;;21980:40;22037:19;;1090:87:17::1;21656:406:21::0;1090:87:17::1;1188:16;:39:::0;884:349::o;446:101::-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;-1:-1:-1;;;;;516:21:17::1;540:1;516:21:::0;;;:14:::1;:21;::::0;;;;:25;446:101::o;482:243:20:-;1061:6:16;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;576:18:20::1;;554;;:40:::0;550:174:::1;;610:13;:21:::0;;-1:-1:-1;;610:21:20::1;::::0;;3683:147:0::1;3638:192::o:0;550:174:20:-:1;685:13;:23:::0;;;::::1;;-1:-1:-1::0;;685:23:20;;::::1;;::::0;;482:243;:::o;1862:223:16:-;1061:6;;-1:-1:-1;;;;;1061:6:16;666:10:3;1201:23:16;1193:68;;;;-1:-1:-1;;;1193:68:16;;8194:2:21;1193:68:16;;;8176:21:21;;;8213:18;;;8206:30;-1:-1:-1;;;;;;;;;;;8252:18:21;;;8245:62;8324:18;;1193:68:16;7992:356:21;1193:68:16;-1:-1:-1;;;;;1963:22:16;::::1;1942:107;;;::::0;-1:-1:-1;;;1942:107:16;;22269:2:21;1942:107:16::1;::::0;::::1;22251:21:21::0;22308:2;22288:18;;;22281:30;22347:34;22327:18;;;22320:62;22418:8;22398:18;;;22391:36;22444:19;;1942:107:16::1;22067:402:21::0;1942:107:16::1;2059:19;2069:8;2059:9;:19::i;1358:1122:17:-:0;1426:14;1443:13;1768:10:8;:17;;1681:111;1443:13:17;1476:6;;1426:30;;-1:-1:-1;1476:6:17;;1475:7;1467:37;;;;-1:-1:-1;;;1467:37:17;;10655:2:21;1467:37:17;;;10637:21:21;10694:2;10674:18;;;10667:30;-1:-1:-1;;;10713:18:21;;;10706:48;10771:18;;1467:37:17;10453:342:21;1467:37:17;1554:8;;;;;;;:17;1546:50;;;;-1:-1:-1;;;1546:50:17;;22676:2:21;1546:50:17;;;22658:21:21;22715:2;22695:18;;;22688:30;22754:22;22734:18;;;22727:50;22794:18;;1546:50:17;22474:344:21;1546:50:17;1643:11;1629;;:25;;;;:::i;:::-;1615:9;:39;;1607:66;;;;-1:-1:-1;;;1607:66:17;;12129:2:21;1607:66:17;;;12111:21:21;12168:2;12148:18;;;12141:30;-1:-1:-1;;;12187:18:21;;;12180:44;12241:18;;1607:66:17;11927:338:21;1607:66:17;1706:1;1692:11;:15;1684:62;;;;-1:-1:-1;;;1684:62:17;;23025:2:21;1684:62:17;;;23007:21:21;23064:2;23044:18;;;23037:30;23103:34;23083:18;;;23076:62;-1:-1:-1;;;23154:18:21;;;23147:32;23196:19;;1684:62:17;22823:398:21;1684:62:17;1789:9;;1765:20;1774:11;1765:6;:20;:::i;:::-;:33;;1757:115;;;;-1:-1:-1;;;1757:115:17;;12962:2:21;1757:115:17;;;12944:21:21;13001:2;12981:18;;;12974:30;13040:34;13020:18;;;13013:62;13111:34;13091:18;;;13084:62;-1:-1:-1;;;13162:19:21;;;13155:37;13209:19;;1757:115:17;12760:474:21;1757:115:17;1925:16;;1910:11;1891:16;;:30;;;;:::i;:::-;:50;;1883:145;;;;-1:-1:-1;;;1883:145:17;;23428:2:21;1883:145:17;;;23410:21:21;23467:2;23447:18;;;23440:30;23506:34;23486:18;;;23479:62;23577:34;23557:18;;;23550:62;23649:21;23628:19;;;23621:50;23688:19;;1883:145:17;23226:487:21;1883:145:17;2058:10;2043:26;;;;:14;:26;;;;;;:31;;2039:202;;2106:10;2091:26;;;;:14;:26;;;;;:48;;;2039:202;;;2196:10;2181:26;;;;:14;:26;;;;;:48;;2217:11;;2181:26;:48;;2217:11;;2181:48;:::i;:::-;;;;-1:-1:-1;;2039:202:17;2269:11;2251:16;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;2308:1:17;;-1:-1:-1;2291:103:17;2316:11;2311:1;:16;2291:103;;2349:33;2359:10;2371;2380:1;2371:6;:10;:::i;2349:33::-;2329:3;;;;:::i;:::-;;;;2291:103;;;;2432:16;;2412;;:36;2408:69;;2463:8;:14;;-1:-1:-1;;2463:14:17;;;1415:1065;1358:1122;:::o;1405:215:6:-;1507:4;-1:-1:-1;;;;;;1531:41:6;;1546:26;1531:41;;:81;;;1576:36;1600:11;1576:23;:36::i;11030:171:7:-;11104:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;11104:29:7;-1:-1:-1;;;;;11104:29:7;;;;;;;;:24;;11157:23;11104:24;11157:14;:23::i;:::-;-1:-1:-1;;;;;11148:46:7;;;;;;;;;;;11030:171;;:::o;7304:344::-;7397:4;7109:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7109:16:7;7413:73;;;;-1:-1:-1;;;7413:73:7;;23920:2:21;7413:73:7;;;23902:21:21;23959:2;23939:18;;;23932:30;23998:34;23978:18;;;23971:62;-1:-1:-1;;;24049:18:21;;;24042:42;24101:19;;7413:73:7;23718:408:21;7413:73:7;7496:13;7512:23;7527:7;7512:14;:23::i;:::-;7496:39;;7564:5;-1:-1:-1;;;;;7553:16:7;:7;-1:-1:-1;;;;;7553:16:7;;:52;;;-1:-1:-1;;;;;;4484:25:7;;;4461:4;4484:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7573:32;7553:87;;;;7633:7;-1:-1:-1;;;;;7609:31:7;:20;7621:7;7609:11;:20::i;:::-;-1:-1:-1;;;;;7609:31:7;;7553:87;7545:96;7304:344;-1:-1:-1;;;;7304:344:7:o;10314:605::-;10468:4;-1:-1:-1;;;;;10441:31:7;:23;10456:7;10441:14;:23::i;:::-;-1:-1:-1;;;;;10441:31:7;;10433:81;;;;-1:-1:-1;;;10433:81:7;;24333:2:21;10433:81:7;;;24315:21:21;24372:2;24352:18;;;24345:30;24411:34;24391:18;;;24384:62;24482:7;24462:18;;;24455:35;24507:19;;10433:81:7;24131:401:21;10433:81:7;-1:-1:-1;;;;;10532:16:7;;10524:65;;;;-1:-1:-1;;;10524:65:7;;24739:2:21;10524:65:7;;;24721:21:21;24778:2;24758:18;;;24751:30;24817:34;24797:18;;;24790:62;24888:6;24868:18;;;24861:34;24912:19;;10524:65:7;24537:400:21;10524:65:7;10600:39;10621:4;10627:2;10631:7;10600:20;:39::i;:::-;10701:29;10718:1;10722:7;10701:8;:29::i;:::-;-1:-1:-1;;;;;10741:15:7;;;;;;:9;:15;;;;;:20;;10760:1;;10741:15;:20;;10760:1;;10741:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10771:13:7;;;;;;:9;:13;;;;;:18;;10788:1;;10771:13;:18;;10788:1;;10771:18;:::i;:::-;;;;-1:-1:-1;;10799:16:7;;;;:7;:16;;;;;;:21;;-1:-1:-1;;10799:21:7;-1:-1:-1;;;;;10799:21:7;;;;;;;;;10836:27;;10799:16;;10836:27;;;;;;;3469:331;3399:401;;:::o;2887:206:20:-;2960:4;2985:18;457:13;;;;;384:92;2985:18;2977:60;;;;-1:-1:-1;;;2977:60:20;;25274:2:21;2977:60:20;;;25256:21:21;25313:2;25293:18;;;25286:30;25352:31;25332:18;;;25325:59;25401:18;;2977:60:20;25072:353:21;2977:60:20;3081:4;;3072:14;;3081:4;;;;;3072:8;:14::i;:::-;3056:30;;;;2887:206;-1:-1:-1;2887:206:20:o;7978:108:7:-;8053:26;8063:2;8067:7;8053:26;;;;;;;;;;;;:9;:26::i;2091:169:16:-;2165:6;;;-1:-1:-1;;;;;2181:17:16;;;-1:-1:-1;;2181:17:16;;;;;;;2213:40;;2165:6;;;2181:17;2165:6;;2213:40;;2146:16;;2213:40;2136:124;2091:169;:::o;11336:307:7:-;11486:8;-1:-1:-1;;;;;11477:17:7;:5;-1:-1:-1;;;;;11477:17:7;;11469:55;;;;-1:-1:-1;;;11469:55:7;;25632:2:21;11469:55:7;;;25614:21:21;25671:2;25651:18;;;25644:30;25710:27;25690:18;;;25683:55;25755:18;;11469:55:7;25430:349:21;11469:55:7;-1:-1:-1;;;;;11534:25:7;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11534:46:7;;;;;;;;;;11595:41;;586::21;;;11595::7;;559:18:21;11595:41:7;;;;;;;11336:307;;;:::o;6411:::-;6562:28;6572:4;6578:2;6582:7;6562:9;:28::i;:::-;6608:48;6631:4;6637:2;6641:7;6650:5;6608:22;:48::i;:::-;6600:111;;;;-1:-1:-1;;;6600:111:7;;25986:2:21;6600:111:7;;;25968:21:21;26025:2;26005:18;;;25998:30;26064:34;26044:18;;;26037:62;-1:-1:-1;;;26115:18:21;;;26108:48;26173:19;;6600:111:7;25784:414:21;276:703:19;332:13;549:5;558:1;549:10;545:51;;-1:-1:-1;;575:10:19;;;;;;;;;;;;;;;;;;276:703::o;545:51::-;620:5;605:12;659:75;666:9;;659:75;;691:8;;;;:::i;:::-;;-1:-1:-1;713:10:19;;-1:-1:-1;721:2:19;713:10;;:::i;:::-;;;659:75;;;743:19;775:6;765:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;765:17:19;;743:39;;792:150;799:10;;792:150;;825:11;835:1;825:11;;:::i;:::-;;-1:-1:-1;893:10:19;901:2;893:5;:10;:::i;:::-;880:24;;:2;:24;:::i;:::-;867:39;;850:6;857;850:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;920:11:19;929:2;920:11;;:::i;:::-;;;792:150;;910:290:8;1052:4;-1:-1:-1;;;;;;1091:50:8;;1106:35;1091:50;;:102;;;1157:36;1181:11;1157:23;:36::i;2768:572::-;-1:-1:-1;;;;;2967:18:8;;2963:183;;3001:40;3033:7;4149:10;:17;;4122:24;;;;:15;:24;;;;;:44;;;4176:24;;;;;;;;;;;;4046:161;3001:40;2963:183;;;3070:2;-1:-1:-1;;;;;3062:10:8;:4;-1:-1:-1;;;;;3062:10:8;;3058:88;;3088:47;3121:4;3127:7;3088:32;:47::i;:::-;-1:-1:-1;;;;;3159:16:8;;3155:179;;3191:45;3228:7;3191:36;:45::i;3155:179::-;3263:4;-1:-1:-1;;;;;3257:10:8;:2;-1:-1:-1;;;;;3257:10:8;;3253:81;;3283:40;3311:2;3315:7;3283:27;:40::i;1789:163:2:-;1845:7;1865:14;1903:5;1910:10;1892:29;;;;;;;;26494:25:21;;;-1:-1:-1;;;;;26555:55:21;26550:2;26535:18;;26528:83;26482:2;26467:18;;26320:297;1892:29:2;;;;-1:-1:-1;;1892:29:2;;;;;;;;;1882:40;;1892:29;1882:40;;;;;1789:163;-1:-1:-1;;;1789:163:2:o;8307:311:7:-;8432:18;8438:2;8442:7;8432:5;:18::i;:::-;8481:54;8512:1;8516:2;8520:7;8529:5;8481:22;:54::i;:::-;8460:151;;;;-1:-1:-1;;;8460:151:7;;25986:2:21;8460:151:7;;;25968:21:21;26025:2;26005:18;;;25998:30;26064:34;26044:18;;;26037:62;-1:-1:-1;;;26115:18:21;;;26108:48;26173:19;;8460:151:7;25784:414:21;12196:778:7;12346:4;-1:-1:-1;;;;;12366:13:7;;1398:19:1;:23;12362:606:7;;12401:72;;-1:-1:-1;;;12401:72:7;;-1:-1:-1;;;;;12401:36:7;;;;;:72;;666:10:3;;12452:4:7;;12458:7;;12467:5;;12401:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12401:72:7;;;;;;;;-1:-1:-1;;12401:72:7;;;;;;;;;;;;:::i;:::-;;;12397:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12640:6;:13;12657:1;12640:18;12636:266;;12682:60;;-1:-1:-1;;;12682:60:7;;25986:2:21;12682:60:7;;;25968:21:21;26025:2;26005:18;;;25998:30;26064:34;26044:18;;;26037:62;-1:-1:-1;;;26115:18:21;;;26108:48;26173:19;;12682:60:7;25784:414:21;12636:266:7;12854:6;12848:13;12839:6;12835:2;12831:15;12824:38;12397:519;-1:-1:-1;;;;;;12523:51:7;-1:-1:-1;;;12523:51:7;;-1:-1:-1;12516:58:7;;12362:606;-1:-1:-1;12953:4:7;12196:778;;;;;;:::o;1431:300::-;1533:4;-1:-1:-1;;;;;;1568:40:7;;1583:25;1568:40;;:104;;-1:-1:-1;;;;;;;1624:48:7;;1639:33;1624:48;1568:104;:156;;;-1:-1:-1;887:25:5;-1:-1:-1;;;;;;872:40:5;;;1688:36:7;764:155:5;4824:982:8;5098:22;5148:1;5123:22;5140:4;5123:16;:22::i;:::-;:26;;;;:::i;:::-;5159:18;5180:26;;;:17;:26;;;;;;5098:51;;-1:-1:-1;5310:28:8;;;5306:323;;-1:-1:-1;;;;;5376:18:8;;5354:19;5376:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5425:30;;;;;;:44;;;5541:30;;:17;:30;;;;;:43;;;5306:323;-1:-1:-1;5722:26:8;;;;:17;:26;;;;;;;;5715:33;;;-1:-1:-1;;;;;5765:18:8;;;;;:12;:18;;;;;:34;;;;;;;5758:41;4824:982::o;6094:1061::-;6368:10;:17;6343:22;;6368:21;;6388:1;;6368:21;:::i;:::-;6399:18;6420:24;;;:15;:24;;;;;;6788:10;:26;;6343:46;;-1:-1:-1;6420:24:8;;6343:46;;6788:26;;;;;;:::i;:::-;;;;;;;;;6766:48;;6850:11;6825:10;6836;6825:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6929:28;;;:15;:28;;;;;;;:41;;;7098:24;;;;;7091:31;7132:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6165:990;;;6094:1061;:::o;3634:217::-;3718:14;3735:20;3752:2;3735:16;:20::i;:::-;-1:-1:-1;;;;;3765:16:8;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3809:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3634:217:8:o;8940:427:7:-;-1:-1:-1;;;;;9019:16:7;;9011:61;;;;-1:-1:-1;;;9011:61:7;;27795:2:21;9011:61:7;;;27777:21:21;;;27814:18;;;27807:30;27873:34;27853:18;;;27846:62;27925:18;;9011:61:7;27593:356:21;9011:61:7;7086:4;7109:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7109:16:7;:30;9082:58;;;;-1:-1:-1;;;9082:58:7;;28156:2:21;9082:58:7;;;28138:21:21;28195:2;28175:18;;;28168:30;28234;28214:18;;;28207:58;28282:18;;9082:58:7;27954:352:21;9082:58:7;9151:45;9180:1;9184:2;9188:7;9151:20;:45::i;:::-;-1:-1:-1;;;;;9207:13:7;;;;;;:9;:13;;;;;:18;;9224:1;;9207:13;:18;;9224:1;;9207:18;:::i;:::-;;;;-1:-1:-1;;9235:16:7;;;;:7;:16;;;;;;:21;;-1:-1:-1;;9235:21:7;-1:-1:-1;;;;;9235:21:7;;;;;;;;9272:33;;9235:16;;;9272:33;;9235:16;;9272:33;4145:153;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:21;-1:-1:-1;;;;;;92:5:21;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;:::-;430:5;196:245;-1:-1:-1;;;196:245:21:o;638:160::-;703:20;;759:13;;752:21;742:32;;732:60;;788:1;785;778:12;732:60;638:160;;;:::o;803:180::-;859:6;912:2;900:9;891:7;887:23;883:32;880:52;;;928:1;925;918:12;880:52;951:26;967:9;951:26;:::i;988:258::-;1060:1;1070:113;1084:6;1081:1;1078:13;1070:113;;;1160:11;;;1154:18;1141:11;;;1134:39;1106:2;1099:10;1070:113;;;1201:6;1198:1;1195:13;1192:48;;;-1:-1:-1;;1236:1:21;1218:16;;1211:27;988:258::o;1251:269::-;1304:3;1342:5;1336:12;1369:6;1364:3;1357:19;1385:63;1441:6;1434:4;1429:3;1425:14;1418:4;1411:5;1407:16;1385:63;:::i;:::-;1502:2;1481:15;-1:-1:-1;;1477:29:21;1468:39;;;;1509:4;1464:50;;1251:269;-1:-1:-1;;1251:269:21:o;1525:231::-;1674:2;1663:9;1656:21;1637:4;1694:56;1746:2;1735:9;1731:18;1723:6;1694:56;:::i;1761:180::-;1820:6;1873:2;1861:9;1852:7;1848:23;1844:32;1841:52;;;1889:1;1886;1879:12;1841:52;-1:-1:-1;1912:23:21;;1761:180;-1:-1:-1;1761:180:21:o;2177:196::-;2245:20;;-1:-1:-1;;;;;2294:54:21;;2284:65;;2274:93;;2363:1;2360;2353:12;2378:254;2446:6;2454;2507:2;2495:9;2486:7;2482:23;2478:32;2475:52;;;2523:1;2520;2513:12;2475:52;2546:29;2565:9;2546:29;:::i;:::-;2536:39;2622:2;2607:18;;;;2594:32;;-1:-1:-1;;;2378:254:21:o;2819:184::-;-1:-1:-1;;;2868:1:21;2861:88;2968:4;2965:1;2958:15;2992:4;2989:1;2982:15;3008:632;3073:5;3103:18;3144:2;3136:6;3133:14;3130:40;;;3150:18;;:::i;:::-;3225:2;3219:9;3193:2;3279:15;;-1:-1:-1;;3275:24:21;;;3301:2;3271:33;3267:42;3255:55;;;3325:18;;;3345:22;;;3322:46;3319:72;;;3371:18;;:::i;:::-;3411:10;3407:2;3400:22;3440:6;3431:15;;3470:6;3462;3455:22;3510:3;3501:6;3496:3;3492:16;3489:25;3486:45;;;3527:1;3524;3517:12;3486:45;3577:6;3572:3;3565:4;3557:6;3553:17;3540:44;3632:1;3625:4;3616:6;3608;3604:19;3600:30;3593:41;;;;3008:632;;;;;:::o;3645:519::-;3720:6;3728;3781:2;3769:9;3760:7;3756:23;3752:32;3749:52;;;3797:1;3794;3787:12;3749:52;3820:26;3836:9;3820:26;:::i;:::-;3810:36;;3897:2;3886:9;3882:18;3869:32;3924:18;3916:6;3913:30;3910:50;;;3956:1;3953;3946:12;3910:50;3979:22;;4032:4;4024:13;;4020:27;-1:-1:-1;4010:55:21;;4061:1;4058;4051:12;4010:55;4084:74;4150:7;4145:2;4132:16;4127:2;4123;4119:11;4084:74;:::i;:::-;4074:84;;;3645:519;;;;;:::o;4169:328::-;4246:6;4254;4262;4315:2;4303:9;4294:7;4290:23;4286:32;4283:52;;;4331:1;4328;4321:12;4283:52;4354:29;4373:9;4354:29;:::i;:::-;4344:39;;4402:38;4436:2;4425:9;4421:18;4402:38;:::i;:::-;4392:48;;4487:2;4476:9;4472:18;4459:32;4449:42;;4169:328;;;;;:::o;4502:248::-;4570:6;4578;4631:2;4619:9;4610:7;4606:23;4602:32;4599:52;;;4647:1;4644;4637:12;4599:52;-1:-1:-1;;4670:23:21;;;4740:2;4725:18;;;4712:32;;-1:-1:-1;4502:248:21:o;5310:186::-;5369:6;5422:2;5410:9;5401:7;5397:23;5393:32;5390:52;;;5438:1;5435;5428:12;5390:52;5461:29;5480:9;5461:29;:::i;5698:632::-;5869:2;5921:21;;;5991:13;;5894:18;;;6013:22;;;5840:4;;5869:2;6092:15;;;;6066:2;6051:18;;;5840:4;6135:169;6149:6;6146:1;6143:13;6135:169;;;6210:13;;6198:26;;6279:15;;;;6244:12;;;;6171:1;6164:9;6135:169;;;-1:-1:-1;6321:3:21;;5698:632;-1:-1:-1;;;;;;5698:632:21:o;6515:254::-;6580:6;6588;6641:2;6629:9;6620:7;6616:23;6612:32;6609:52;;;6657:1;6654;6647:12;6609:52;6680:29;6699:9;6680:29;:::i;:::-;6670:39;;6728:35;6759:2;6748:9;6744:18;6728:35;:::i;:::-;6718:45;;6515:254;;;;;:::o;6774:276::-;6832:6;6885:2;6873:9;6864:7;6860:23;6856:32;6853:52;;;6901:1;6898;6891:12;6853:52;6940:9;6927:23;6990:10;6983:5;6979:22;6972:5;6969:33;6959:61;;7016:1;7013;7006:12;7055:667;7150:6;7158;7166;7174;7227:3;7215:9;7206:7;7202:23;7198:33;7195:53;;;7244:1;7241;7234:12;7195:53;7267:29;7286:9;7267:29;:::i;:::-;7257:39;;7315:38;7349:2;7338:9;7334:18;7315:38;:::i;:::-;7305:48;;7400:2;7389:9;7385:18;7372:32;7362:42;;7455:2;7444:9;7440:18;7427:32;7482:18;7474:6;7471:30;7468:50;;;7514:1;7511;7504:12;7468:50;7537:22;;7590:4;7582:13;;7578:27;-1:-1:-1;7568:55:21;;7619:1;7616;7609:12;7568:55;7642:74;7708:7;7703:2;7690:16;7685:2;7681;7677:11;7642:74;:::i;:::-;7632:84;;;7055:667;;;;;;;:::o;7727:260::-;7795:6;7803;7856:2;7844:9;7835:7;7831:23;7827:32;7824:52;;;7872:1;7869;7862:12;7824:52;7895:29;7914:9;7895:29;:::i;:::-;7885:39;;7943:38;7977:2;7966:9;7962:18;7943:38;:::i;8353:437::-;8432:1;8428:12;;;;8475;;;8496:61;;8550:4;8542:6;8538:17;8528:27;;8496:61;8603:2;8595:6;8592:14;8572:18;8569:38;8566:218;;-1:-1:-1;;;8637:1:21;8630:88;8741:4;8738:1;8731:15;8769:4;8766:1;8759:15;8566:218;;8353:437;;;:::o;11565:184::-;-1:-1:-1;;;11614:1:21;11607:88;11714:4;11711:1;11704:15;11738:4;11735:1;11728:15;11754:168;11794:7;11860:1;11856;11852:6;11848:14;11845:1;11842:21;11837:1;11830:9;11823:17;11819:45;11816:71;;;11867:18;;:::i;:::-;-1:-1:-1;11907:9:21;;11754:168::o;12627:128::-;12667:3;12698:1;12694:6;12691:1;12688:13;12685:39;;;12704:18;;:::i;:::-;-1:-1:-1;12740:9:21;;12627:128::o;13588:135::-;13627:3;13648:17;;;13645:43;;13668:18;;:::i;:::-;-1:-1:-1;13715:1:21;13704:13;;13588:135::o;13728:184::-;-1:-1:-1;;;13777:1:21;13770:88;13877:4;13874:1;13867:15;13901:4;13898:1;13891:15;13917:120;13957:1;13983;13973:35;;13988:18;;:::i;:::-;-1:-1:-1;14022:9:21;;13917:120::o;15503:184::-;-1:-1:-1;;;15552:1:21;15545:88;15652:4;15649:1;15642:15;15676:4;15673:1;15666:15;18891:367;18930:3;18965:1;18962;18958:9;19074:1;19006:66;19002:74;18999:1;18995:82;18990:2;18983:10;18979:99;18976:125;;;19081:18;;:::i;:::-;19200:1;19132:66;19128:74;19125:1;19121:82;19117:2;19113:91;19110:117;;;19207:18;;:::i;:::-;-1:-1:-1;;19243:9:21;;18891:367::o;19805:185::-;19847:3;19885:5;19879:12;19900:52;19945:6;19940:3;19933:4;19926:5;19922:16;19900:52;:::i;:::-;19968:16;;;;;19805:185;-1:-1:-1;;19805:185:21:o;19995:1231::-;20171:3;20200:1;20233:6;20227:13;20263:3;20285:1;20313:9;20309:2;20305:18;20295:28;;20373:2;20362:9;20358:18;20395;20385:61;;20439:4;20431:6;20427:17;20417:27;;20385:61;20465:2;20513;20505:6;20502:14;20482:18;20479:38;20476:222;;-1:-1:-1;;;20547:3:21;20540:90;20653:4;20650:1;20643:15;20683:4;20678:3;20671:17;20476:222;20714:18;20741:104;;;;20859:1;20854:320;;;;20707:467;;20741:104;-1:-1:-1;;20774:24:21;;20762:37;;20819:16;;;;-1:-1:-1;20741:104:21;;20854:320;19752:1;19745:14;;;19789:4;19776:18;;20949:1;20963:165;20977:6;20974:1;20971:13;20963:165;;;21055:14;;21042:11;;;21035:35;21098:16;;;;20992:10;;20963:165;;;20967:3;;21157:6;21152:3;21148:16;21141:23;;20707:467;;;;;;;21190:30;21216:3;21208:6;21190:30;:::i;:::-;21183:37;19995:1231;-1:-1:-1;;;;;19995:1231:21:o;24942:125::-;24982:4;25010:1;25007;25004:8;25001:34;;;25015:18;;:::i;:::-;-1:-1:-1;25052:9:21;;24942:125::o;26203:112::-;26235:1;26261;26251:35;;26266:18;;:::i;:::-;-1:-1:-1;26300:9:21;;26203:112::o;26622:523::-;26816:4;-1:-1:-1;;;;;26926:2:21;26918:6;26914:15;26903:9;26896:34;26978:2;26970:6;26966:15;26961:2;26950:9;26946:18;26939:43;;27018:6;27013:2;27002:9;26998:18;26991:34;27061:3;27056:2;27045:9;27041:18;27034:31;27082:57;27134:3;27123:9;27119:19;27111:6;27082:57;:::i;:::-;27074:65;26622:523;-1:-1:-1;;;;;;26622:523:21:o;27150:249::-;27219:6;27272:2;27260:9;27251:7;27247:23;27243:32;27240:52;;;27288:1;27285;27278:12;27240:52;27320:9;27314:16;27339:30;27363:5;27339:30;:::i;27404:184::-;-1:-1:-1;;;27453:1:21;27446:88;27553:4;27550:1;27543:15;27577:4;27574:1;27567:15
Swarm Source
ipfs://25990605a49b55b5af0cdbad52877c664cc7030d808f7e79e69c894bbad0854b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,970.34 | 0.0028 | $11.12 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.