Overview
ETH Balance
0.16 ETH
Eth Value
$548.27 (@ $3,426.70/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 169 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 18049419 | 503 days ago | IN | 0 ETH | 0.00123377 | ||||
Set Approval For... | 17010610 | 649 days ago | IN | 0 ETH | 0.00046577 | ||||
Set Approval For... | 17010591 | 649 days ago | IN | 0 ETH | 0.00051122 | ||||
Set Approval For... | 17010571 | 649 days ago | IN | 0 ETH | 0.00050398 | ||||
Set Approval For... | 15669827 | 836 days ago | IN | 0 ETH | 0.00039233 | ||||
Set Approval For... | 15650933 | 839 days ago | IN | 0 ETH | 0.00032953 | ||||
Set Approval For... | 15040109 | 934 days ago | IN | 0 ETH | 0.00215637 | ||||
Mint LMC | 15040051 | 934 days ago | IN | 0.02 ETH | 0.00908721 | ||||
Set Approval For... | 14957341 | 948 days ago | IN | 0 ETH | 0.00232635 | ||||
Set Approval For... | 14807963 | 973 days ago | IN | 0 ETH | 0.00137709 | ||||
Set Approval For... | 14739111 | 984 days ago | IN | 0 ETH | 0.00036231 | ||||
Set Approval For... | 14739111 | 984 days ago | IN | 0 ETH | 0.00036231 | ||||
Set Approval For... | 14731832 | 985 days ago | IN | 0 ETH | 0.00120606 | ||||
Set Approval For... | 14702947 | 990 days ago | IN | 0 ETH | 0.00207484 | ||||
Set Approval For... | 14684943 | 993 days ago | IN | 0 ETH | 0.00076979 | ||||
Set Approval For... | 14633970 | 1001 days ago | IN | 0 ETH | 0.00164887 | ||||
Set Approval For... | 14633970 | 1001 days ago | IN | 0 ETH | 0.00164887 | ||||
Set Approval For... | 14633970 | 1001 days ago | IN | 0 ETH | 0.00164887 | ||||
Mint LMC | 14565528 | 1011 days ago | IN | 0.04 ETH | 0.01937149 | ||||
Set Approval For... | 14531148 | 1017 days ago | IN | 0 ETH | 0.00237557 | ||||
Mint LMC | 14529002 | 1017 days ago | IN | 0.04 ETH | 0.01804747 | ||||
Mint LMC | 14528645 | 1017 days ago | IN | 0.02 ETH | 0.01127541 | ||||
Set Approval For... | 14527677 | 1017 days ago | IN | 0 ETH | 0.00311233 | ||||
Mint LMC | 14527657 | 1017 days ago | IN | 0.04 ETH | 0.02657752 | ||||
Mint LMC | 14523037 | 1018 days ago | IN | 0.02 ETH | 0.00609602 |
Latest 8 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
LosMuertosClub
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import './ERC721Enumerable.sol'; import './Ownable.sol'; contract LosMuertosClub is ERC721Enumerable, Ownable { string baseTokenURI; uint256 public price = 0.02 ether; bool public salePaused = true; uint256 public reserved = 26; // Team gets 4 LMC (minted in constructor), 26 are used for giveaways and other competitions uint256 public constant MAX_LMCS = 10000; string public LMC_PROVENANCE; address a1 = 0xFCDE8D498c3C722db4f7aaf554050dDF1B79FaA4; address a2 = 0x5c716bEDAe1CE71794F39a2055cbaE235723524F; address a3 = 0xe013DF7bED2c8D4E1642e8CD71CBe4FB25856336; address a4 = 0xb18ec35495748904279dcCE0c4EDDB49bf4Ef270; // constructor is executed when the contract is deployed. Sets name and symbol and mints the first 4 LMCs for team constructor(string memory baseURI) ERC721("Los Muertos Club", "LMC") { setBaseURI(baseURI); // the team gets the first 4 token _safeMint( a1, 0); _safeMint( a2, 1); _safeMint( a3, 2); _safeMint( a4, 3); } // fetch the api endpoint function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } // set the api endpoint, useful if the endpoint needs to be changed to a different location function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } // let the owner of the contract change the price of the LMC token, set amount in WEI!!!! function setPrice(uint256 _newPrice) public onlyOwner { price = _newPrice; } // withdraw the funds of the contract to the owner of the smart contract function withdrawAll() public payable onlyOwner { //require(payable(msg.sender).send(address(this).balance)); uint256 _each = address(this).balance / 4; require(payable(a1).send(_each)); require(payable(a2).send(_each)); require(payable(a3).send(_each)); require(payable(a4).send(_each)); } // pause or start the sale function pause(bool val) public onlyOwner { salePaused = val; } // view the tokens of the holder, if the owner does not hold any tokens, return an empty array function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokenIDs = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++) { tokenIDs[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIDs; } // mint los muertos, max. 20 function mintLMC(uint256 amountOfTokens) public payable { require(!salePaused, "Sale paused"); require(amountOfTokens > 0 && amountOfTokens < 21, "Minimum mint is 1 and max are 20 LMCs at a time"); require(msg.value == price * amountOfTokens, "Ether sent is not correct"); uint256 supply = totalSupply(); require((supply + amountOfTokens) <= MAX_LMCS - reserved, "Purchase would exceed max supply of LMCs"); for (uint256 i; i < amountOfTokens; i++) { _safeMint(msg.sender, supply + i); } } // set the provenance hash function setProvenanceHash(string memory provenanceHash) public onlyOwner { LMC_PROVENANCE = provenanceHash; } // reserve LMCs for giveaways function reserveLMC(address to, uint256 amount) public onlyOwner { require(amount > 0 && amount <= reserved, "Requested LMC amount exceeds reserve"); uint256 supply = totalSupply(); for (uint256 i; i < amount; i++) { _safeMint(to, supply + i); } reserved -= amount; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"LMC_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LMCS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"amountOfTokens","type":"uint256"}],"name":"mintLMC","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":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveLMC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266470de4df820000600c55600d805460ff19166001179055601a600e55601080546001600160a01b031990811673fcde8d498c3c722db4f7aaf554050ddf1b79faa417909155601180548216735c716bedae1ce71794f39a2055cbae235723524f17905560128054821673e013df7bed2c8d4e1642e8cd71cbe4fb258563361790556013805490911673b18ec35495748904279dcce0c4eddb49bf4ef270179055348015620000b257600080fd5b506040516200322f3803806200322f833981016040819052620000d59162000928565b604080518082018252601081526f2637b99026bab2b93a37b99021b63ab160811b6020808301918252835180850190945260038452624c4d4360e81b908401528151919291620001289160009162000851565b5080516200013e90600190602084019062000851565b5050506200015b62000155620001d160201b60201c565b620001d5565b620001668162000227565b6010546200017f906001600160a01b031660006200028f565b60115462000198906001600160a01b031660016200028f565b601254620001b1906001600160a01b031660026200028f565b601354620001ca906001600160a01b031660036200028f565b5062000c3a565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000231620001d1565b6001600160a01b031662000244620002b1565b6001600160a01b031614620002765760405162461bcd60e51b81526004016200026d9062000b34565b60405180910390fd5b80516200028b90600b90602084019062000851565b5050565b6200028b828260405180602001604052806000815250620002c060201b60201c565b600a546001600160a01b031690565b620002cc8383620002ff565b620002db6000848484620003ea565b620002fa5760405162461bcd60e51b81526004016200026d9062000a2c565b505050565b6001600160a01b038216620003285760405162461bcd60e51b81526004016200026d9062000aff565b620003338162000523565b15620003535760405162461bcd60e51b81526004016200026d9062000a7e565b620003616000838362000540565b6001600160a01b03821660009081526003602052604081208054600192906200038c90849062000b69565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200040b846001600160a01b0316620005e460201b620010c51760201c565b1562000517576001600160a01b03841663150b7a026200042a620001d1565b8786866040518563ffffffff1660e01b81526004016200044e9493929190620009d6565b602060405180830381600087803b1580156200046957600080fd5b505af19250505080156200049c575060408051601f3d908101601f191682019092526200049991810190620008f7565b60015b620004fc573d808015620004cd576040519150601f19603f3d011682016040523d82523d6000602084013e620004d2565b606091505b508051620004f45760405162461bcd60e51b81526004016200026d9062000a2c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506200051b565b5060015b949350505050565b6000908152600260205260409020546001600160a01b0316151590565b62000558838383620002fa60201b620007911760201c565b6001600160a01b03831662000578576200057281620005ea565b6200059e565b816001600160a01b0316836001600160a01b0316146200059e576200059e83826200062e565b6001600160a01b038216620005be57620005b881620006db565b620002fa565b826001600160a01b0316826001600160a01b031614620002fa57620002fa8282620007b9565b3b151590565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600162000648846200080a60201b62000b2f1760201c565b62000654919062000b84565b600083815260076020526040902054909150808214620006a8576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090620006ef9060019062000b84565b600083815260096020526040812054600880549394509092849081106200072657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106200075657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806200079d57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000620007d1836200080a60201b62000b2f1760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b038216620008355760405162461bcd60e51b81526004016200026d9062000ab5565b506001600160a01b031660009081526003602052604090205490565b8280546200085f9062000bd1565b90600052602060002090601f016020900481019282620008835760008555620008ce565b82601f106200089e57805160ff1916838001178555620008ce565b82800160010185558215620008ce579182015b82811115620008ce578251825591602001919060010190620008b1565b50620008dc929150620008e0565b5090565b5b80821115620008dc5760008155600101620008e1565b60006020828403121562000909578081fd5b81516001600160e01b03198116811462000921578182fd5b9392505050565b6000602082840312156200093a578081fd5b81516001600160401b038082111562000951578283fd5b818401915084601f83011262000965578283fd5b8151818111156200097a576200097a62000c24565b604051601f8201601f191681016020018381118282101715620009a157620009a162000c24565b604052818152838201602001871015620009b9578485fd5b620009cc82602083016020870162000b9e565b9695505050505050565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015262000a158160a085016020870162000b9e565b601f01601f19169190910160a00195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111562000b7f5762000b7f62000c0e565b500190565b60008282101562000b995762000b9962000c0e565b500390565b60005b8381101562000bbb57818101518382015260200162000ba1565b8381111562000bcb576000848401525b50505050565b60028104600182168062000be657607f821691505b6020821081141562000c0857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6125e58062000c4a6000396000f3fe6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063c87b56dd11610064578063c87b56dd1461052c578063e985e9c51461054c578063f2fde38b1461056c578063fe60d12c1461058c576101e3565b8063a22cb465146104b7578063b88d4fde146104d7578063bf0161b9146104f7578063c862106814610517576101e3565b80638da5cb5b116100d15780638da5cb5b1461045857806391b7f5ed1461046d57806395d89b411461048d578063a035b1fe146104a2576101e3565b806370a0823114610406578063715018a61461042657806383ed59cf1461043b578063853828b614610450576101e3565b80632f745c591161017a57806355f804b31161014957806355f804b31461039e57806359a5d96e146103be5780635d08c1ae146103d15780636352211e146103e6576101e3565b80632f745c591461031157806342842e0e14610331578063438b6300146103515780634f6ccce71461037e576101e3565b8063095ea7b3116101b6578063095ea7b31461028f57806310969523146102af57806318160ddd146102cf57806323b872dd146102f1576101e3565b806301ffc9a7146101e857806302329a291461021e57806306fdde0314610240578063081812fc14610262575b600080fd5b3480156101f457600080fd5b50610208610203366004611c7e565b6105a1565b6040516102159190611e04565b60405180910390f35b34801561022a57600080fd5b5061023e610239366004611c64565b6105ce565b005b34801561024c57600080fd5b50610255610629565b6040516102159190611e0f565b34801561026e57600080fd5b5061028261027d366004611cfc565b6106bb565b6040516102159190611d6f565b34801561029b57600080fd5b5061023e6102aa366004611c3b565b6106fe565b3480156102bb57600080fd5b5061023e6102ca366004611cb6565b610796565b3480156102db57600080fd5b506102e46107ec565b6040516102159190612456565b3480156102fd57600080fd5b5061023e61030c366004611b5e565b6107f2565b34801561031d57600080fd5b506102e461032c366004611c3b565b61082a565b34801561033d57600080fd5b5061023e61034c366004611b5e565b61087c565b34801561035d57600080fd5b5061037161036c366004611b12565b610897565b6040516102159190611dc0565b34801561038a57600080fd5b506102e4610399366004611cfc565b610955565b3480156103aa57600080fd5b5061023e6103b9366004611cb6565b6109b0565b61023e6103cc366004611cfc565b610a02565b3480156103dd57600080fd5b50610208610af1565b3480156103f257600080fd5b50610282610401366004611cfc565b610afa565b34801561041257600080fd5b506102e4610421366004611b12565b610b2f565b34801561043257600080fd5b5061023e610b73565b34801561044757600080fd5b506102e4610bbe565b61023e610bc4565b34801561046457600080fd5b50610282610cdc565b34801561047957600080fd5b5061023e610488366004611cfc565b610ceb565b34801561049957600080fd5b50610255610d2f565b3480156104ae57600080fd5b506102e4610d3e565b3480156104c357600080fd5b5061023e6104d2366004611c12565b610d44565b3480156104e357600080fd5b5061023e6104f2366004611b99565b610e12565b34801561050357600080fd5b5061023e610512366004611c3b565b610e51565b34801561052357600080fd5b50610255610f12565b34801561053857600080fd5b50610255610547366004611cfc565b610fa0565b34801561055857600080fd5b50610208610567366004611b2c565b611023565b34801561057857600080fd5b5061023e610587366004611b12565b611051565b34801561059857600080fd5b506102e46110bf565b60006001600160e01b0319821663780e9d6360e01b14806105c657506105c6826110cb565b90505b919050565b6105d661110b565b6001600160a01b03166105e7610cdc565b6001600160a01b0316146106165760405162461bcd60e51b815260040161060d90612274565b60405180910390fd5b600d805460ff1916911515919091179055565b606060008054610638906124ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610664906124ed565b80156106b15780601f10610686576101008083540402835291602001916106b1565b820191906000526020600020905b81548152906001019060200180831161069457829003601f168201915b5050505050905090565b60006106c68261110f565b6106e25760405162461bcd60e51b815260040161060d90612228565b506000908152600460205260409020546001600160a01b031690565b600061070982610afa565b9050806001600160a01b0316836001600160a01b0316141561073d5760405162461bcd60e51b815260040161060d90612341565b806001600160a01b031661074f61110b565b6001600160a01b0316148061076b575061076b8161056761110b565b6107875760405162461bcd60e51b815260040161060d90612103565b610791838361112c565b505050565b61079e61110b565b6001600160a01b03166107af610cdc565b6001600160a01b0316146107d55760405162461bcd60e51b815260040161060d90612274565b80516107e890600f9060208401906119e2565b5050565b60085490565b6108036107fd61110b565b8261119a565b61081f5760405162461bcd60e51b815260040161060d906123b9565b61079183838361121f565b600061083583610b2f565b82106108535760405162461bcd60e51b815260040161060d90611e8f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61079183838360405180602001604052806000815250610e12565b606060006108a483610b2f565b905060008167ffffffffffffffff8111156108cf57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108f8578160200160208202803683370190505b50905060005b8281101561094d57610910858261082a565b82828151811061093057634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061094581612528565b9150506108fe565b509392505050565b600061095f6107ec565b821061097d5760405162461bcd60e51b815260040161060d9061240a565b6008828154811061099e57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6109b861110b565b6001600160a01b03166109c9610cdc565b6001600160a01b0316146109ef5760405162461bcd60e51b815260040161060d90612274565b80516107e890600b9060208401906119e2565b600d5460ff1615610a255760405162461bcd60e51b815260040161060d90611e6a565b600081118015610a355750601581105b610a515760405162461bcd60e51b815260040161060d90612068565b80600c54610a5f919061248b565b3414610a7d5760405162461bcd60e51b815260040161060d90612382565b6000610a876107ec565b9050600e54612710610a9991906124aa565b610aa3838361245f565b1115610ac15760405162461bcd60e51b815260040161060d90611e22565b60005b8281101561079157610adf33610ada838561245f565b61134c565b80610ae981612528565b915050610ac4565b600d5460ff1681565b6000818152600260205260408120546001600160a01b0316806105c65760405162461bcd60e51b815260040161060d906121aa565b60006001600160a01b038216610b575760405162461bcd60e51b815260040161060d90612160565b506001600160a01b031660009081526003602052604090205490565b610b7b61110b565b6001600160a01b0316610b8c610cdc565b6001600160a01b031614610bb25760405162461bcd60e51b815260040161060d90612274565b610bbc6000611366565b565b61271081565b610bcc61110b565b6001600160a01b0316610bdd610cdc565b6001600160a01b031614610c035760405162461bcd60e51b815260040161060d90612274565b6000610c10600447612477565b6010546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050610c4357600080fd5b6011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610c7557600080fd5b6012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610ca757600080fd5b6013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610cd957600080fd5b50565b600a546001600160a01b031690565b610cf361110b565b6001600160a01b0316610d04610cdc565b6001600160a01b031614610d2a5760405162461bcd60e51b815260040161060d90612274565b600c55565b606060018054610638906124ed565b600c5481565b610d4c61110b565b6001600160a01b0316826001600160a01b03161415610d7d5760405162461bcd60e51b815260040161060d90611fed565b8060056000610d8a61110b565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610dce61110b565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e069190611e04565b60405180910390a35050565b610e23610e1d61110b565b8361119a565b610e3f5760405162461bcd60e51b815260040161060d906123b9565b610e4b848484846113b8565b50505050565b610e5961110b565b6001600160a01b0316610e6a610cdc565b6001600160a01b031614610e905760405162461bcd60e51b815260040161060d90612274565b600081118015610ea25750600e548111155b610ebe5760405162461bcd60e51b815260040161060d90612024565b6000610ec86107ec565b905060005b82811015610ef557610ee384610ada838561245f565b80610eed81612528565b915050610ecd565b5081600e6000828254610f0891906124aa565b9091555050505050565b600f8054610f1f906124ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4b906124ed565b8015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b505050505081565b6060610fab8261110f565b610fc75760405162461bcd60e51b815260040161060d906122f2565b6000610fd16113eb565b90506000815111610ff1576040518060200160405280600081525061101c565b80610ffb846113fa565b60405160200161100c929190611d40565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61105961110b565b6001600160a01b031661106a610cdc565b6001600160a01b0316146110905760405162461bcd60e51b815260040161060d90612274565b6001600160a01b0381166110b65760405162461bcd60e51b815260040161060d90611f2c565b610cd981611366565b600e5481565b3b151590565b60006001600160e01b031982166380ac58cd60e01b14806110fc57506001600160e01b03198216635b5e139f60e01b145b806105c657506105c682611515565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061116182610afa565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111a58261110f565b6111c15760405162461bcd60e51b815260040161060d906120b7565b60006111cc83610afa565b9050806001600160a01b0316846001600160a01b031614806112075750836001600160a01b03166111fc846106bb565b6001600160a01b0316145b8061121757506112178185611023565b949350505050565b826001600160a01b031661123282610afa565b6001600160a01b0316146112585760405162461bcd60e51b815260040161060d906122a9565b6001600160a01b03821661127e5760405162461bcd60e51b815260040161060d90611fa9565b61128983838361152e565b61129460008261112c565b6001600160a01b03831660009081526003602052604081208054600192906112bd9084906124aa565b90915550506001600160a01b03821660009081526003602052604081208054600192906112eb90849061245f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6107e88282604051806020016040528060008152506115b7565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6113c384848461121f565b6113cf848484846115ea565b610e4b5760405162461bcd60e51b815260040161060d90611eda565b6060600b8054610638906124ed565b60608161141f57506040805180820190915260018152600360fc1b60208201526105c9565b8160005b8115611449578061143381612528565b91506114429050600a83612477565b9150611423565b60008167ffffffffffffffff81111561147257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561149c576020820181803683370190505b5090505b8415611217576114b16001836124aa565b91506114be600a86612543565b6114c990603061245f565b60f81b8183815181106114ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061150e600a86612477565b94506114a0565b6001600160e01b031981166301ffc9a760e01b14919050565b611539838383610791565b6001600160a01b0383166115555761155081611705565b611578565b816001600160a01b0316836001600160a01b031614611578576115788382611749565b6001600160a01b0382166115945761158f816117e6565b610791565b826001600160a01b0316826001600160a01b0316146107915761079182826118bf565b6115c18383611903565b6115ce60008484846115ea565b6107915760405162461bcd60e51b815260040161060d90611eda565b60006115fe846001600160a01b03166110c5565b156116fa57836001600160a01b031663150b7a0261161a61110b565b8786866040518563ffffffff1660e01b815260040161163c9493929190611d83565b602060405180830381600087803b15801561165657600080fd5b505af1925050508015611686575060408051601f3d908101601f1916820190925261168391810190611c9a565b60015b6116e0573d8080156116b4576040519150601f19603f3d011682016040523d82523d6000602084013e6116b9565b606091505b5080516116d85760405162461bcd60e51b815260040161060d90611eda565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611217565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161175684610b2f565b61176091906124aa565b6000838152600760205260409020549091508082146117b3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906117f8906001906124aa565b6000838152600960205260408120546008805493945090928490811061182e57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061185d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806118a357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006118ca83610b2f565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166119295760405162461bcd60e51b815260040161060d906121f3565b6119328161110f565b1561194f5760405162461bcd60e51b815260040161060d90611f72565b61195b6000838361152e565b6001600160a01b038216600090815260036020526040812080546001929061198490849061245f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546119ee906124ed565b90600052602060002090601f016020900481019282611a105760008555611a56565b82601f10611a2957805160ff1916838001178555611a56565b82800160010185558215611a56579182015b82811115611a56578251825591602001919060010190611a3b565b50611a62929150611a66565b5090565b5b80821115611a625760008155600101611a67565b600067ffffffffffffffff80841115611a9657611a96612583565b604051601f8501601f191681016020018281118282101715611aba57611aba612583565b604052848152915081838501861015611ad257600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146105c957600080fd5b803580151581146105c957600080fd5b600060208284031215611b23578081fd5b61101c82611aeb565b60008060408385031215611b3e578081fd5b611b4783611aeb565b9150611b5560208401611aeb565b90509250929050565b600080600060608486031215611b72578081fd5b611b7b84611aeb565b9250611b8960208501611aeb565b9150604084013590509250925092565b60008060008060808587031215611bae578081fd5b611bb785611aeb565b9350611bc560208601611aeb565b925060408501359150606085013567ffffffffffffffff811115611be7578182fd5b8501601f81018713611bf7578182fd5b611c0687823560208401611a7b565b91505092959194509250565b60008060408385031215611c24578182fd5b611c2d83611aeb565b9150611b5560208401611b02565b60008060408385031215611c4d578182fd5b611c5683611aeb565b946020939093013593505050565b600060208284031215611c75578081fd5b61101c82611b02565b600060208284031215611c8f578081fd5b813561101c81612599565b600060208284031215611cab578081fd5b815161101c81612599565b600060208284031215611cc7578081fd5b813567ffffffffffffffff811115611cdd578182fd5b8201601f81018413611ced578182fd5b61121784823560208401611a7b565b600060208284031215611d0d578081fd5b5035919050565b60008151808452611d2c8160208601602086016124c1565b601f01601f19169290920160200192915050565b60008351611d528184602088016124c1565b835190830190611d668183602088016124c1565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611db690830184611d14565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611df857835183529284019291840191600101611ddc565b50909695505050505050565b901515815260200190565b60006020825261101c6020830184611d14565b60208082526028908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015267206f66204c4d437360c01b606082015260800190565b6020808252600b908201526a14d85b19481c185d5cd95960aa1b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526024908201527f526571756573746564204c4d4320616d6f756e742065786365656473207265736040820152636572766560e01b606082015260800190565b6020808252602f908201527f4d696e696d756d206d696e74206973203120616e64206d61782061726520323060408201526e204c4d437320617420612074696d6560881b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526019908201527f45746865722073656e74206973206e6f7420636f727265637400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b6000821982111561247257612472612557565b500190565b6000826124865761248661256d565b500490565b60008160001904831182151516156124a5576124a5612557565b500290565b6000828210156124bc576124bc612557565b500390565b60005b838110156124dc5781810151838201526020016124c4565b83811115610e4b5750506000910152565b60028104600182168061250157607f821691505b6020821081141561252257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561253c5761253c612557565b5060010190565b6000826125525761255261256d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610cd957600080fdfea2646970667358221220cc478c31312dda3db4f8b77056a6c0f698cdea79f290ae53ec97d2ef0ffcb31764736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6c6f736d756572746f73636c75622e636f6d2f6170692f00
Deployed Bytecode
0x6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063c87b56dd11610064578063c87b56dd1461052c578063e985e9c51461054c578063f2fde38b1461056c578063fe60d12c1461058c576101e3565b8063a22cb465146104b7578063b88d4fde146104d7578063bf0161b9146104f7578063c862106814610517576101e3565b80638da5cb5b116100d15780638da5cb5b1461045857806391b7f5ed1461046d57806395d89b411461048d578063a035b1fe146104a2576101e3565b806370a0823114610406578063715018a61461042657806383ed59cf1461043b578063853828b614610450576101e3565b80632f745c591161017a57806355f804b31161014957806355f804b31461039e57806359a5d96e146103be5780635d08c1ae146103d15780636352211e146103e6576101e3565b80632f745c591461031157806342842e0e14610331578063438b6300146103515780634f6ccce71461037e576101e3565b8063095ea7b3116101b6578063095ea7b31461028f57806310969523146102af57806318160ddd146102cf57806323b872dd146102f1576101e3565b806301ffc9a7146101e857806302329a291461021e57806306fdde0314610240578063081812fc14610262575b600080fd5b3480156101f457600080fd5b50610208610203366004611c7e565b6105a1565b6040516102159190611e04565b60405180910390f35b34801561022a57600080fd5b5061023e610239366004611c64565b6105ce565b005b34801561024c57600080fd5b50610255610629565b6040516102159190611e0f565b34801561026e57600080fd5b5061028261027d366004611cfc565b6106bb565b6040516102159190611d6f565b34801561029b57600080fd5b5061023e6102aa366004611c3b565b6106fe565b3480156102bb57600080fd5b5061023e6102ca366004611cb6565b610796565b3480156102db57600080fd5b506102e46107ec565b6040516102159190612456565b3480156102fd57600080fd5b5061023e61030c366004611b5e565b6107f2565b34801561031d57600080fd5b506102e461032c366004611c3b565b61082a565b34801561033d57600080fd5b5061023e61034c366004611b5e565b61087c565b34801561035d57600080fd5b5061037161036c366004611b12565b610897565b6040516102159190611dc0565b34801561038a57600080fd5b506102e4610399366004611cfc565b610955565b3480156103aa57600080fd5b5061023e6103b9366004611cb6565b6109b0565b61023e6103cc366004611cfc565b610a02565b3480156103dd57600080fd5b50610208610af1565b3480156103f257600080fd5b50610282610401366004611cfc565b610afa565b34801561041257600080fd5b506102e4610421366004611b12565b610b2f565b34801561043257600080fd5b5061023e610b73565b34801561044757600080fd5b506102e4610bbe565b61023e610bc4565b34801561046457600080fd5b50610282610cdc565b34801561047957600080fd5b5061023e610488366004611cfc565b610ceb565b34801561049957600080fd5b50610255610d2f565b3480156104ae57600080fd5b506102e4610d3e565b3480156104c357600080fd5b5061023e6104d2366004611c12565b610d44565b3480156104e357600080fd5b5061023e6104f2366004611b99565b610e12565b34801561050357600080fd5b5061023e610512366004611c3b565b610e51565b34801561052357600080fd5b50610255610f12565b34801561053857600080fd5b50610255610547366004611cfc565b610fa0565b34801561055857600080fd5b50610208610567366004611b2c565b611023565b34801561057857600080fd5b5061023e610587366004611b12565b611051565b34801561059857600080fd5b506102e46110bf565b60006001600160e01b0319821663780e9d6360e01b14806105c657506105c6826110cb565b90505b919050565b6105d661110b565b6001600160a01b03166105e7610cdc565b6001600160a01b0316146106165760405162461bcd60e51b815260040161060d90612274565b60405180910390fd5b600d805460ff1916911515919091179055565b606060008054610638906124ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610664906124ed565b80156106b15780601f10610686576101008083540402835291602001916106b1565b820191906000526020600020905b81548152906001019060200180831161069457829003601f168201915b5050505050905090565b60006106c68261110f565b6106e25760405162461bcd60e51b815260040161060d90612228565b506000908152600460205260409020546001600160a01b031690565b600061070982610afa565b9050806001600160a01b0316836001600160a01b0316141561073d5760405162461bcd60e51b815260040161060d90612341565b806001600160a01b031661074f61110b565b6001600160a01b0316148061076b575061076b8161056761110b565b6107875760405162461bcd60e51b815260040161060d90612103565b610791838361112c565b505050565b61079e61110b565b6001600160a01b03166107af610cdc565b6001600160a01b0316146107d55760405162461bcd60e51b815260040161060d90612274565b80516107e890600f9060208401906119e2565b5050565b60085490565b6108036107fd61110b565b8261119a565b61081f5760405162461bcd60e51b815260040161060d906123b9565b61079183838361121f565b600061083583610b2f565b82106108535760405162461bcd60e51b815260040161060d90611e8f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61079183838360405180602001604052806000815250610e12565b606060006108a483610b2f565b905060008167ffffffffffffffff8111156108cf57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108f8578160200160208202803683370190505b50905060005b8281101561094d57610910858261082a565b82828151811061093057634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061094581612528565b9150506108fe565b509392505050565b600061095f6107ec565b821061097d5760405162461bcd60e51b815260040161060d9061240a565b6008828154811061099e57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6109b861110b565b6001600160a01b03166109c9610cdc565b6001600160a01b0316146109ef5760405162461bcd60e51b815260040161060d90612274565b80516107e890600b9060208401906119e2565b600d5460ff1615610a255760405162461bcd60e51b815260040161060d90611e6a565b600081118015610a355750601581105b610a515760405162461bcd60e51b815260040161060d90612068565b80600c54610a5f919061248b565b3414610a7d5760405162461bcd60e51b815260040161060d90612382565b6000610a876107ec565b9050600e54612710610a9991906124aa565b610aa3838361245f565b1115610ac15760405162461bcd60e51b815260040161060d90611e22565b60005b8281101561079157610adf33610ada838561245f565b61134c565b80610ae981612528565b915050610ac4565b600d5460ff1681565b6000818152600260205260408120546001600160a01b0316806105c65760405162461bcd60e51b815260040161060d906121aa565b60006001600160a01b038216610b575760405162461bcd60e51b815260040161060d90612160565b506001600160a01b031660009081526003602052604090205490565b610b7b61110b565b6001600160a01b0316610b8c610cdc565b6001600160a01b031614610bb25760405162461bcd60e51b815260040161060d90612274565b610bbc6000611366565b565b61271081565b610bcc61110b565b6001600160a01b0316610bdd610cdc565b6001600160a01b031614610c035760405162461bcd60e51b815260040161060d90612274565b6000610c10600447612477565b6010546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050610c4357600080fd5b6011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610c7557600080fd5b6012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610ca757600080fd5b6013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050610cd957600080fd5b50565b600a546001600160a01b031690565b610cf361110b565b6001600160a01b0316610d04610cdc565b6001600160a01b031614610d2a5760405162461bcd60e51b815260040161060d90612274565b600c55565b606060018054610638906124ed565b600c5481565b610d4c61110b565b6001600160a01b0316826001600160a01b03161415610d7d5760405162461bcd60e51b815260040161060d90611fed565b8060056000610d8a61110b565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610dce61110b565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e069190611e04565b60405180910390a35050565b610e23610e1d61110b565b8361119a565b610e3f5760405162461bcd60e51b815260040161060d906123b9565b610e4b848484846113b8565b50505050565b610e5961110b565b6001600160a01b0316610e6a610cdc565b6001600160a01b031614610e905760405162461bcd60e51b815260040161060d90612274565b600081118015610ea25750600e548111155b610ebe5760405162461bcd60e51b815260040161060d90612024565b6000610ec86107ec565b905060005b82811015610ef557610ee384610ada838561245f565b80610eed81612528565b915050610ecd565b5081600e6000828254610f0891906124aa565b9091555050505050565b600f8054610f1f906124ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4b906124ed565b8015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b505050505081565b6060610fab8261110f565b610fc75760405162461bcd60e51b815260040161060d906122f2565b6000610fd16113eb565b90506000815111610ff1576040518060200160405280600081525061101c565b80610ffb846113fa565b60405160200161100c929190611d40565b6040516020818303038152906040525b9392505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61105961110b565b6001600160a01b031661106a610cdc565b6001600160a01b0316146110905760405162461bcd60e51b815260040161060d90612274565b6001600160a01b0381166110b65760405162461bcd60e51b815260040161060d90611f2c565b610cd981611366565b600e5481565b3b151590565b60006001600160e01b031982166380ac58cd60e01b14806110fc57506001600160e01b03198216635b5e139f60e01b145b806105c657506105c682611515565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061116182610afa565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111a58261110f565b6111c15760405162461bcd60e51b815260040161060d906120b7565b60006111cc83610afa565b9050806001600160a01b0316846001600160a01b031614806112075750836001600160a01b03166111fc846106bb565b6001600160a01b0316145b8061121757506112178185611023565b949350505050565b826001600160a01b031661123282610afa565b6001600160a01b0316146112585760405162461bcd60e51b815260040161060d906122a9565b6001600160a01b03821661127e5760405162461bcd60e51b815260040161060d90611fa9565b61128983838361152e565b61129460008261112c565b6001600160a01b03831660009081526003602052604081208054600192906112bd9084906124aa565b90915550506001600160a01b03821660009081526003602052604081208054600192906112eb90849061245f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6107e88282604051806020016040528060008152506115b7565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6113c384848461121f565b6113cf848484846115ea565b610e4b5760405162461bcd60e51b815260040161060d90611eda565b6060600b8054610638906124ed565b60608161141f57506040805180820190915260018152600360fc1b60208201526105c9565b8160005b8115611449578061143381612528565b91506114429050600a83612477565b9150611423565b60008167ffffffffffffffff81111561147257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561149c576020820181803683370190505b5090505b8415611217576114b16001836124aa565b91506114be600a86612543565b6114c990603061245f565b60f81b8183815181106114ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061150e600a86612477565b94506114a0565b6001600160e01b031981166301ffc9a760e01b14919050565b611539838383610791565b6001600160a01b0383166115555761155081611705565b611578565b816001600160a01b0316836001600160a01b031614611578576115788382611749565b6001600160a01b0382166115945761158f816117e6565b610791565b826001600160a01b0316826001600160a01b0316146107915761079182826118bf565b6115c18383611903565b6115ce60008484846115ea565b6107915760405162461bcd60e51b815260040161060d90611eda565b60006115fe846001600160a01b03166110c5565b156116fa57836001600160a01b031663150b7a0261161a61110b565b8786866040518563ffffffff1660e01b815260040161163c9493929190611d83565b602060405180830381600087803b15801561165657600080fd5b505af1925050508015611686575060408051601f3d908101601f1916820190925261168391810190611c9a565b60015b6116e0573d8080156116b4576040519150601f19603f3d011682016040523d82523d6000602084013e6116b9565b606091505b5080516116d85760405162461bcd60e51b815260040161060d90611eda565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611217565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161175684610b2f565b61176091906124aa565b6000838152600760205260409020549091508082146117b3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906117f8906001906124aa565b6000838152600960205260408120546008805493945090928490811061182e57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061185d57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806118a357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006118ca83610b2f565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166119295760405162461bcd60e51b815260040161060d906121f3565b6119328161110f565b1561194f5760405162461bcd60e51b815260040161060d90611f72565b61195b6000838361152e565b6001600160a01b038216600090815260036020526040812080546001929061198490849061245f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546119ee906124ed565b90600052602060002090601f016020900481019282611a105760008555611a56565b82601f10611a2957805160ff1916838001178555611a56565b82800160010185558215611a56579182015b82811115611a56578251825591602001919060010190611a3b565b50611a62929150611a66565b5090565b5b80821115611a625760008155600101611a67565b600067ffffffffffffffff80841115611a9657611a96612583565b604051601f8501601f191681016020018281118282101715611aba57611aba612583565b604052848152915081838501861015611ad257600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146105c957600080fd5b803580151581146105c957600080fd5b600060208284031215611b23578081fd5b61101c82611aeb565b60008060408385031215611b3e578081fd5b611b4783611aeb565b9150611b5560208401611aeb565b90509250929050565b600080600060608486031215611b72578081fd5b611b7b84611aeb565b9250611b8960208501611aeb565b9150604084013590509250925092565b60008060008060808587031215611bae578081fd5b611bb785611aeb565b9350611bc560208601611aeb565b925060408501359150606085013567ffffffffffffffff811115611be7578182fd5b8501601f81018713611bf7578182fd5b611c0687823560208401611a7b565b91505092959194509250565b60008060408385031215611c24578182fd5b611c2d83611aeb565b9150611b5560208401611b02565b60008060408385031215611c4d578182fd5b611c5683611aeb565b946020939093013593505050565b600060208284031215611c75578081fd5b61101c82611b02565b600060208284031215611c8f578081fd5b813561101c81612599565b600060208284031215611cab578081fd5b815161101c81612599565b600060208284031215611cc7578081fd5b813567ffffffffffffffff811115611cdd578182fd5b8201601f81018413611ced578182fd5b61121784823560208401611a7b565b600060208284031215611d0d578081fd5b5035919050565b60008151808452611d2c8160208601602086016124c1565b601f01601f19169290920160200192915050565b60008351611d528184602088016124c1565b835190830190611d668183602088016124c1565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611db690830184611d14565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611df857835183529284019291840191600101611ddc565b50909695505050505050565b901515815260200190565b60006020825261101c6020830184611d14565b60208082526028908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015267206f66204c4d437360c01b606082015260800190565b6020808252600b908201526a14d85b19481c185d5cd95960aa1b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526024908201527f526571756573746564204c4d4320616d6f756e742065786365656473207265736040820152636572766560e01b606082015260800190565b6020808252602f908201527f4d696e696d756d206d696e74206973203120616e64206d61782061726520323060408201526e204c4d437320617420612074696d6560881b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526019908201527f45746865722073656e74206973206e6f7420636f727265637400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b6000821982111561247257612472612557565b500190565b6000826124865761248661256d565b500490565b60008160001904831182151516156124a5576124a5612557565b500290565b6000828210156124bc576124bc612557565b500390565b60005b838110156124dc5781810151838201526020016124c4565b83811115610e4b5750506000910152565b60028104600182168061250157607f821691505b6020821081141561252257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561253c5761253c612557565b5060010190565b6000826125525761255261256d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610cd957600080fdfea2646970667358221220cc478c31312dda3db4f8b77056a6c0f698cdea79f290ae53ec97d2ef0ffcb31764736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6c6f736d756572746f73636c75622e636f6d2f6170692f00
-----Decoded View---------------
Arg [0] : baseURI (string): https://losmuertosclub.com/api/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [2] : 68747470733a2f2f6c6f736d756572746f73636c75622e636f6d2f6170692f00
Deployed Bytecode Sourcemap
121:3822:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:222:4;;;;;;;;;;-1:-1:-1;910:222:4;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2166:77:10;;;;;;;;;;-1:-1:-1;2166:77:10;;;;;:::i;:::-;;:::i;:::-;;2349:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3860:217::-;;;;;;;;;;-1:-1:-1;3860:217:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3398:401::-;;;;;;;;;;-1:-1:-1;3398:401:3;;;;;:::i;:::-;;:::i;3421:124:10:-;;;;;;;;;;-1:-1:-1;3421:124:10;;;;;:::i;:::-;;:::i;1535:111:4:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4724:330:3:-;;;;;;;;;;-1:-1:-1;4724:330:3;;;;;:::i;:::-;;:::i;1211:253:4:-;;;;;;;;;;-1:-1:-1;1211:253:4;;;;;:::i;:::-;;:::i;5120:179:3:-;;;;;;;;;;-1:-1:-1;5120:179:3;;;;;:::i;:::-;;:::i;2353:343:10:-;;;;;;;;;;-1:-1:-1;2353:343:10;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1718:230:4:-;;;;;;;;;;-1:-1:-1;1718:230:4;;;;;:::i;:::-;;:::i;1391:101:10:-;;;;;;;;;;-1:-1:-1;1391:101:10;;;;;:::i;:::-;;:::i;2740:639::-;;;;;;:::i;:::-;;:::i;247:29::-;;;;;;;;;;;;;:::i;2052:235:3:-;;;;;;;;;;-1:-1:-1;2052:235:3;;;;;:::i;:::-;;:::i;1790:205::-;;;;;;;;;;-1:-1:-1;1790:205:3;;;;;:::i;:::-;;:::i;1598:92:11:-;;;;;;;;;;;;;:::i;411:40:10:-;;;;;;;;;;;;;:::i;1775:349::-;;;:::i;966:85:11:-;;;;;;;;;;;;;:::i;1597:90:10:-;;;;;;;;;;-1:-1:-1;1597:90:10;;;;;:::i;:::-;;:::i;2511:102:3:-;;;;;;;;;;;;;:::i;207:33:10:-;;;;;;;;;;;;;:::i;4144:290:3:-;;;;;;;;;;-1:-1:-1;4144:290:3;;;;;:::i;:::-;;:::i;5365:320::-;;;;;;;;;;-1:-1:-1;5365:320:3;;;;;:::i;:::-;;:::i;3590:350:10:-;;;;;;;;;;-1:-1:-1;3590:350:10;;;;;:::i;:::-;;:::i;458:28::-;;;;;;;;;;;;;:::i;2679:329:3:-;;;;;;;;;;-1:-1:-1;2679:329:3;;;;;:::i;:::-;;:::i;4500:162::-;;;;;;;;;;-1:-1:-1;4500:162:3;;;;;:::i;:::-;;:::i;1839:189:11:-;;;;;;;;;;-1:-1:-1;1839:189:11;;;;;:::i;:::-;;:::i;283:28:10:-;;;;;;;;;;;;;:::i;910:222:4:-;1012:4;-1:-1:-1;;;;;;1035:50:4;;-1:-1:-1;;;1035:50:4;;:90;;;1089:36;1113:11;1089:23;:36::i;:::-;1028:97;;910:222;;;;:::o;2166:77:10:-;1189:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;;;;;;;;;2219:10:10::1;:16:::0;;-1:-1:-1;;2219:16:10::1;::::0;::::1;;::::0;;;::::1;::::0;;2166:77::o;2349:98:3:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;-1:-1:-1;;;3955:73:3;;;;;;;:::i;:::-;-1:-1:-1;4046:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4046:24:3;;3860:217::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;-1:-1:-1;;;;;3535:11:3;:2;-1:-1:-1;;;;;3535:11:3;;;3527:57;;;;-1:-1:-1;;;3527:57:3;;;;;;;:::i;:::-;3632:5;-1:-1:-1;;;;;3616:21:3;:12;:10;:12::i;:::-;-1:-1:-1;;;;;3616:21:3;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;3641:37::-;3595:165;;;;-1:-1:-1;;;3595:165:3;;;;;;;:::i;:::-;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3398:401;;;:::o;3421:124:10:-;1189:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;3506:31:10;;::::1;::::0;:14:::1;::::0;:31:::1;::::0;::::1;::::0;::::1;:::i;:::-;;3421:124:::0;:::o;1535:111:4:-;1622:10;:17;1535:111;:::o;4724:330:3:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;-1:-1:-1;;;4905:103:3;;;;;;;:::i;:::-;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;1211:253:4:-;1308:7;1343:23;1360:5;1343:16;:23::i;:::-;1335:5;:31;1327:87;;;;-1:-1:-1;;;1327:87:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1431:19:4;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1211:253::o;5120:179:3:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;2353:343:10:-;2412:16;2441:18;2462:17;2472:6;2462:9;:17::i;:::-;2441:38;;2492:25;2534:10;2520:25;;;;;;-1:-1:-1;;;2520:25:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2520:25:10;;2492:53;;2560:9;2556:107;2575:10;2571:1;:14;2556:107;;;2621:30;2641:6;2649:1;2621:19;:30::i;:::-;2607:8;2616:1;2607:11;;;;;;-1:-1:-1;;;2607:11:10;;;;;;;;;;;;;;;;;;:44;2587:3;;;;:::i;:::-;;;;2556:107;;;-1:-1:-1;2680:8:10;2353:343;-1:-1:-1;;;2353:343:10:o;1718:230:4:-;1793:7;1828:30;:28;:30::i;:::-;1820:5;:38;1812:95;;;;-1:-1:-1;;;1812:95:4;;;;;;;:::i;:::-;1924:10;1935:5;1924:17;;;;;;-1:-1:-1;;;1924:17:4;;;;;;;;;;;;;;;;;1917:24;;1718:230;;;:::o;1391:101:10:-;1189:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1462:22:10;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;2740:639::-:0;2816:10;;;;2815:11;2807:74;;;;-1:-1:-1;;;2807:74:10;;;;;;;:::i;:::-;2917:1;2900:14;:18;:41;;;;;2939:2;2922:14;:19;2900:41;2892:110;;;;-1:-1:-1;;;2892:110:10;;;;;;;:::i;:::-;3042:14;3034:5;;:22;;;;:::i;:::-;3021:9;:35;3013:88;;;;-1:-1:-1;;;3013:88:10;;;;;;;:::i;:::-;3114:14;3131:13;:11;:13::i;:::-;3114:30;;3203:8;;446:5;3192:19;;;;:::i;:::-;3164:23;3173:14;3164:6;:23;:::i;:::-;3163:48;;3155:103;;;;-1:-1:-1;;;3155:103:10;;;;;;;:::i;:::-;3276:9;3271:101;3291:14;3287:1;:18;3271:101;;;3327:33;3337:10;3349;3358:1;3349:6;:10;:::i;:::-;3327:9;:33::i;:::-;3307:3;;;;:::i;:::-;;;;3271:101;;247:29;;;;;;:::o;2052:235:3:-;2124:7;2159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2159:16:3;2193:19;2185:73;;;;-1:-1:-1;;;2185:73:3;;;;;;;:::i;1790:205::-;1862:7;-1:-1:-1;;;;;1889:19:3;;1881:74;;;;-1:-1:-1;;;1881:74:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1972:16:3;;;;;:9;:16;;;;;;;1790:205::o;1598:92:11:-;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;411:40:10:-;446:5;411:40;:::o;1775:349::-;1189:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1903:13:10::1;1919:25;1943:1;1919:21;:25;:::i;:::-;1971:2;::::0;1963:23:::1;::::0;1903:41;;-1:-1:-1;;;;;;1971:2:10::1;::::0;1963:23;::::1;;;::::0;1903:41;;1971:2:::1;1963:23:::0;1971:2;1963:23;1903:41;1971:2;1963:23;::::1;;;;;;1955:32;;;::::0;::::1;;2014:2;::::0;2006:23:::1;::::0;-1:-1:-1;;;;;2014:2:10;;::::1;::::0;2006:23;::::1;;;::::0;2023:5;;2014:2:::1;2006:23:::0;2014:2;2006:23;2023:5;2014:2;2006:23;::::1;;;;;;1998:32;;;::::0;::::1;;2057:2;::::0;2049:23:::1;::::0;-1:-1:-1;;;;;2057:2:10;;::::1;::::0;2049:23;::::1;;;::::0;2066:5;;2057:2:::1;2049:23:::0;2057:2;2049:23;2066:5;2057:2;2049:23;::::1;;;;;;2041:32;;;::::0;::::1;;2100:2;::::0;2092:23:::1;::::0;-1:-1:-1;;;;;2100:2:10;;::::1;::::0;2092:23;::::1;;;::::0;2109:5;;2100:2:::1;2092:23:::0;2100:2;2092:23;2109:5;2100:2;2092:23;::::1;;;;;;2084:32;;;::::0;::::1;;1248:1:11;1775:349:10:o:0;966:85:11:-;1038:6;;-1:-1:-1;;;;;1038:6:11;966:85;:::o;1597:90:10:-;1189:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1662:5:10::1;:17:::0;1597:90::o;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;207:33:10:-;;;;:::o;4144:290:3:-;4258:12;:10;:12::i;:::-;-1:-1:-1;;;;;4246:24:3;:8;-1:-1:-1;;;;;4246:24:3;;;4238:62;;;;-1:-1:-1;;;4238:62:3;;;;;;;:::i;:::-;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;-1:-1:-1;;;;;4311:32:3;;;;;;;;;;;;;;;;;-1:-1:-1;4311:32:3;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;4311:53:3;;;;;;;;;;;4394:12;:10;:12::i;:::-;-1:-1:-1;;;;;4379:48:3;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;-1:-1:-1;;;5526:103:3;;;;;;;:::i;:::-;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;3590:350:10:-;1189:12:11;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;3683:1:10::1;3674:6;:10;:32;;;;;3698:8;;3688:6;:18;;3674:32;3666:99;;;;-1:-1:-1::0;;;3666:99:10::1;;;;;;;:::i;:::-;3776:14;3793:13;:11;:13::i;:::-;3776:30;;3824:9;3819:85;3839:6;3835:1;:10;3819:85;;;3867:25;3877:2:::0;3881:10:::1;3890:1:::0;3881:6;:10:::1;:::i;3867:25::-;3847:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3819:85;;;;3926:6;3914:8;;:18;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;3590:350:10:o;458:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2679:329:3:-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;-1:-1:-1;;;2777:76:3;;;;;;;:::i;:::-;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;2679:329;-1:-1:-1;;;2679:329:3:o;4500:162::-;-1:-1:-1;;;;;4620:25:3;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4500:162::o;1839:189:11:-;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:11;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:11;;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:11;::::1;1919:73;;;;-1:-1:-1::0;;;1919:73:11::1;;;;;;;:::i;:::-;2002:19;2012:8;2002:9;:19::i;283:28:10:-:0;;;;:::o;718:377:0:-;1034:20;1080:8;;;718:377::o;1431:300:3:-;1533:4;-1:-1:-1;;;;;;1568:40:3;;-1:-1:-1;;;1568:40:3;;:104;;-1:-1:-1;;;;;;;1624:48:3;;-1:-1:-1;;;1624:48:3;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;587:96:1:-;666:10;587:96;:::o;7157:125:3:-;7222:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:3;:30;;;7157:125::o;11008:171::-;11082:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11082:29:3;-1:-1:-1;;;;;11082:29:3;;;;;;;;:24;;11135:23;11082:24;11135:14;:23::i;:::-;-1:-1:-1;;;;;11126:46:3;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;-1:-1:-1;;;7549:73:3;;;;;;;:::i;:::-;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;-1:-1:-1;;;;;7689:16:3;:7;-1:-1:-1;;;;;7689:16:3;;:51;;;;7733:7;-1:-1:-1;;;;;7709:31:3;:20;7721:7;7709:11;:20::i;:::-;-1:-1:-1;;;;;7709:31:3;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7681:96;7440:344;-1:-1:-1;;;;7440:344:3:o;10337:560::-;10491:4;-1:-1:-1;;;;;10464:31:3;:23;10479:7;10464:14;:23::i;:::-;-1:-1:-1;;;;;10464:31:3;;10456:85;;;;-1:-1:-1;;;10456:85:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;10559:16:3;;10551:65;;;;-1:-1:-1;;;10551:65:3;;;;;;;:::i;:::-;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;-1:-1:-1;;;;;10768:15:3;;;;;;:9;:15;;;;;:20;;10787:1;;10768:15;:20;;10787:1;;10768:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10798:13:3;;;;;;:9;:13;;;;;:18;;10815:1;;10798:13;:18;;10815:1;;10798:18;:::i;:::-;;;;-1:-1:-1;;10826:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10826:21:3;-1:-1:-1;;;;;10826:21:3;;;;;;;;;10863:27;;10826:16;;10863:27;;;;;;;10337:560;;;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;2034:169:11:-;2108:6;;;-1:-1:-1;;;;;2124:17:11;;;-1:-1:-1;;;;;;2124:17:11;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2034:169;;:::o;6547:307:3:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;-1:-1:-1;;;6736:111:3;;;;;;;:::i;1171:113:10:-;1231:13;1264:12;1257:19;;;;;:::i;275:703:12:-;331:13;548:10;544:51;;-1:-1:-1;574:10:12;;;;;;;;;;;;-1:-1:-1;;;574:10:12;;;;;;544:51;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:12;;-1:-1:-1;720:2:12;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;-1:-1:-1;;;764:17:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:12;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:12;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;-1:-1:-1;;;849:14:12;;;;;;;;;;;;:56;-1:-1:-1;;;;;849:56:12;;;;;;;;-1:-1:-1;919:11:12;928:2;919:11;;:::i;:::-;;;791:150;;763:155:2;-1:-1:-1;;;;;;871:40:2;;-1:-1:-1;;;871:40:2;763:155;;;:::o;2544:572:4:-;2683:45;2710:4;2716:2;2720:7;2683:26;:45::i;:::-;-1:-1:-1;;;;;2743:18:4;;2739:183;;2777:40;2809:7;2777:31;:40::i;:::-;2739:183;;;2846:2;-1:-1:-1;;;;;2838:10:4;:4;-1:-1:-1;;;;;2838:10:4;;2834:88;;2864:47;2897:4;2903:7;2864:32;:47::i;:::-;-1:-1:-1;;;;;2935:16:4;;2931:179;;2967:45;3004:7;2967:36;:45::i;:::-;2931:179;;;3039:4;-1:-1:-1;;;;;3033:10:4;:2;-1:-1:-1;;;;;3033:10:4;;3029:81;;3059:40;3087:2;3091:7;3059:27;:40::i;8443:311:3:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;-1:-1:-1;;;8596:151:3;;;;;;;:::i;11732:778::-;11882:4;11902:15;:2;-1:-1:-1;;;;;11902:13:3;;:15::i;:::-;11898:606;;;11953:2;-1:-1:-1;;;;;11937:36:3;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11937:72:3;;;;;;;;-1:-1:-1;;11937:72:3;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12176:13:3;;12172:266;;12218:60;;-1:-1:-1;;;12218:60:3;;;;;;;:::i;12172:266::-;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;-1:-1:-1;;;;;;12059:51:3;-1:-1:-1;;;12059:51:3;;-1:-1:-1;12052:58:3;;11898:606;-1:-1:-1;12489:4:3;11732:778;;;;;;:::o;3822:161:4:-;3925:10;:17;;3898:24;;;;:15;:24;;;;;:44;;;3952:24;;;;;;;;;;;;3822:161::o;4600:970::-;4862:22;4912:1;4887:22;4904:4;4887:16;:22::i;:::-;:26;;;;:::i;:::-;4923:18;4944:26;;;:17;:26;;;;;;4862:51;;-1:-1:-1;5074:28:4;;;5070:323;;-1:-1:-1;;;;;5140:18:4;;5118:19;5140:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5189:30;;;;;;:44;;;5305:30;;:17;:30;;;;;:43;;;5070:323;-1:-1:-1;5486:26:4;;;;:17;:26;;;;;;;;5479:33;;;-1:-1:-1;;;;;5529:18:4;;;;;:12;:18;;;;;:34;;;;;;;5522:41;4600:970::o;5858:1061::-;6132:10;:17;6107:22;;6132:21;;6152:1;;6132:21;:::i;:::-;6163:18;6184:24;;;:15;:24;;;;;;6552:10;:26;;6107:46;;-1:-1:-1;6184:24:4;;6107:46;;6552:26;;;;-1:-1:-1;;;6552:26:4;;;;;;;;;;;;;;;;;6530:48;;6614:11;6589:10;6600;6589:22;;;;;;-1:-1:-1;;;6589:22:4;;;;;;;;;;;;;;;;;;;;:36;;;;6693:28;;;:15;:28;;;;;;;:41;;;6862:24;;;;;6855:31;6896:10;:16;;;;;-1:-1:-1;;;6896:16:4;;;;;;;;;;;;;;;;;;;;;;;;;;5858:1061;;;;:::o;3410:217::-;3494:14;3511:20;3528:2;3511:16;:20::i;:::-;-1:-1:-1;;;;;3541:16:4;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3585:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3410:217:4:o;9076:372:3:-;-1:-1:-1;;;;;9155:16:3;;9147:61;;;;-1:-1:-1;;;9147:61:3;;;;;;;:::i;:::-;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;-1:-1:-1;;;9218:58:3;;;;;;;:::i;:::-;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;-1:-1:-1;;;;;9343:13:3;;;;;;:9;:13;;;;;:18;;9360:1;;9343:13;:18;;9360:1;;9343:18;:::i;:::-;;;;-1:-1:-1;;9371:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9371:21:3;-1:-1:-1;;;;;9371:21:3;;;;;;;;9408:33;;9371:16;;;9408:33;;9371:16;;9408:33;9076:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:13;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:13;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:13;473:16;;;470:25;-1:-1:-1;467:2:13;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:13;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:13;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:13:o;3053:192::-;;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3183:6;3175;3168:22;3130:2;3211:28;3229:9;3211:28;:::i;3250:257::-;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;3426:9;3413:23;3445:32;3471:5;3445:32;:::i;3512:261::-;;3634:2;3622:9;3613:7;3609:23;3605:32;3602:2;;;3655:6;3647;3640:22;3602:2;3692:9;3686:16;3711:32;3737:5;3711:32;:::i;3778:482::-;;3900:2;3888:9;3879:7;3875:23;3871:32;3868:2;;;3921:6;3913;3906:22;3868:2;3966:9;3953:23;3999:18;3991:6;3988:30;3985:2;;;4036:6;4028;4021:22;3985:2;4064:22;;4117:4;4109:13;;4105:27;-1:-1:-1;4095:2:13;;4151:6;4143;4136:22;4095:2;4179:75;4246:7;4241:2;4228:16;4223:2;4219;4215:11;4179:75;:::i;4265:190::-;;4377:2;4365:9;4356:7;4352:23;4348:32;4345:2;;;4398:6;4390;4383:22;4345:2;-1:-1:-1;4426:23:13;;4335:120;-1:-1:-1;4335:120:13:o;4460:259::-;;4541:5;4535:12;4568:6;4563:3;4556:19;4584:63;4640:6;4633:4;4628:3;4624:14;4617:4;4610:5;4606:16;4584:63;:::i;:::-;4701:2;4680:15;-1:-1:-1;;4676:29:13;4667:39;;;;4708:4;4663:50;;4511:208;-1:-1:-1;;4511:208:13:o;4724:470::-;;4941:6;4935:13;4957:53;5003:6;4998:3;4991:4;4983:6;4979:17;4957:53;:::i;:::-;5073:13;;5032:16;;;;5095:57;5073:13;5032:16;5129:4;5117:17;;5095:57;:::i;:::-;5168:20;;4911:283;-1:-1:-1;;;;4911:283:13:o;5199:203::-;-1:-1:-1;;;;;5363:32:13;;;;5345:51;;5333:2;5318:18;;5300:102::o;5407:490::-;-1:-1:-1;;;;;5676:15:13;;;5658:34;;5728:15;;5723:2;5708:18;;5701:43;5775:2;5760:18;;5753:34;;;5823:3;5818:2;5803:18;;5796:31;;;5407:490;;5844:47;;5871:19;;5863:6;5844:47;:::i;:::-;5836:55;5610:287;-1:-1:-1;;;;;;5610:287:13:o;5902:635::-;6073:2;6125:21;;;6195:13;;6098:18;;;6217:22;;;5902:635;;6073:2;6296:15;;;;6270:2;6255:18;;;5902:635;6342:169;6356:6;6353:1;6350:13;6342:169;;;6417:13;;6405:26;;6486:15;;;;6451:12;;;;6378:1;6371:9;6342:169;;;-1:-1:-1;6528:3:13;;6053:484;-1:-1:-1;;;;;;6053:484:13:o;6542:187::-;6707:14;;6700:22;6682:41;;6670:2;6655:18;;6637:92::o;6734:221::-;;6883:2;6872:9;6865:21;6903:46;6945:2;6934:9;6930:18;6922:6;6903:46;:::i;6960:404::-;7162:2;7144:21;;;7201:2;7181:18;;;7174:30;7240:34;7235:2;7220:18;;7213:62;-1:-1:-1;;;7306:2:13;7291:18;;7284:38;7354:3;7339:19;;7134:230::o;7369:335::-;7571:2;7553:21;;;7610:2;7590:18;;;7583:30;-1:-1:-1;;;7644:2:13;7629:18;;7622:41;7695:2;7680:18;;7543:161::o;7709:407::-;7911:2;7893:21;;;7950:2;7930:18;;;7923:30;7989:34;7984:2;7969:18;;7962:62;-1:-1:-1;;;8055:2:13;8040:18;;8033:41;8106:3;8091:19;;7883:233::o;8121:414::-;8323:2;8305:21;;;8362:2;8342:18;;;8335:30;8401:34;8396:2;8381:18;;8374:62;-1:-1:-1;;;8467:2:13;8452:18;;8445:48;8525:3;8510:19;;8295:240::o;8540:402::-;8742:2;8724:21;;;8781:2;8761:18;;;8754:30;8820:34;8815:2;8800:18;;8793:62;-1:-1:-1;;;8886:2:13;8871:18;;8864:36;8932:3;8917:19;;8714:228::o;8947:352::-;9149:2;9131:21;;;9188:2;9168:18;;;9161:30;9227;9222:2;9207:18;;9200:58;9290:2;9275:18;;9121:178::o;9304:400::-;9506:2;9488:21;;;9545:2;9525:18;;;9518:30;9584:34;9579:2;9564:18;;9557:62;-1:-1:-1;;;9650:2:13;9635:18;;9628:34;9694:3;9679:19;;9478:226::o;9709:349::-;9911:2;9893:21;;;9950:2;9930:18;;;9923:30;9989:27;9984:2;9969:18;;9962:55;10049:2;10034:18;;9883:175::o;10063:400::-;10265:2;10247:21;;;10304:2;10284:18;;;10277:30;10343:34;10338:2;10323:18;;10316:62;-1:-1:-1;;;10409:2:13;10394:18;;10387:34;10453:3;10438:19;;10237:226::o;10468:411::-;10670:2;10652:21;;;10709:2;10689:18;;;10682:30;10748:34;10743:2;10728:18;;10721:62;-1:-1:-1;;;10814:2:13;10799:18;;10792:45;10869:3;10854:19;;10642:237::o;10884:408::-;11086:2;11068:21;;;11125:2;11105:18;;;11098:30;11164:34;11159:2;11144:18;;11137:62;-1:-1:-1;;;11230:2:13;11215:18;;11208:42;11282:3;11267:19;;11058:234::o;11297:420::-;11499:2;11481:21;;;11538:2;11518:18;;;11511:30;11577:34;11572:2;11557:18;;11550:62;11648:26;11643:2;11628:18;;11621:54;11707:3;11692:19;;11471:246::o;11722:406::-;11924:2;11906:21;;;11963:2;11943:18;;;11936:30;12002:34;11997:2;11982:18;;11975:62;-1:-1:-1;;;12068:2:13;12053:18;;12046:40;12118:3;12103:19;;11896:232::o;12133:405::-;12335:2;12317:21;;;12374:2;12354:18;;;12347:30;12413:34;12408:2;12393:18;;12386:62;-1:-1:-1;;;12479:2:13;12464:18;;12457:39;12528:3;12513:19;;12307:231::o;12543:356::-;12745:2;12727:21;;;12764:18;;;12757:30;12823:34;12818:2;12803:18;;12796:62;12890:2;12875:18;;12717:182::o;12904:408::-;13106:2;13088:21;;;13145:2;13125:18;;;13118:30;13184:34;13179:2;13164:18;;13157:62;-1:-1:-1;;;13250:2:13;13235:18;;13228:42;13302:3;13287:19;;13078:234::o;13317:356::-;13519:2;13501:21;;;13538:18;;;13531:30;13597:34;13592:2;13577:18;;13570:62;13664:2;13649:18;;13491:182::o;13678:405::-;13880:2;13862:21;;;13919:2;13899:18;;;13892:30;13958:34;13953:2;13938:18;;13931:62;-1:-1:-1;;;14024:2:13;14009:18;;14002:39;14073:3;14058:19;;13852:231::o;14088:411::-;14290:2;14272:21;;;14329:2;14309:18;;;14302:30;14368:34;14363:2;14348:18;;14341:62;-1:-1:-1;;;14434:2:13;14419:18;;14412:45;14489:3;14474:19;;14262:237::o;14504:397::-;14706:2;14688:21;;;14745:2;14725:18;;;14718:30;14784:34;14779:2;14764:18;;14757:62;-1:-1:-1;;;14850:2:13;14835:18;;14828:31;14891:3;14876:19;;14678:223::o;14906:349::-;15108:2;15090:21;;;15147:2;15127:18;;;15120:30;15186:27;15181:2;15166:18;;15159:55;15246:2;15231:18;;15080:175::o;15260:413::-;15462:2;15444:21;;;15501:2;15481:18;;;15474:30;15540:34;15535:2;15520:18;;15513:62;-1:-1:-1;;;15606:2:13;15591:18;;15584:47;15663:3;15648:19;;15434:239::o;15678:408::-;15880:2;15862:21;;;15919:2;15899:18;;;15892:30;15958:34;15953:2;15938:18;;15931:62;-1:-1:-1;;;16024:2:13;16009:18;;16002:42;16076:3;16061:19;;15852:234::o;16091:177::-;16237:25;;;16225:2;16210:18;;16192:76::o;16273:128::-;;16344:1;16340:6;16337:1;16334:13;16331:2;;;16350:18;;:::i;:::-;-1:-1:-1;16386:9:13;;16321:80::o;16406:120::-;;16472:1;16462:2;;16477:18;;:::i;:::-;-1:-1:-1;16511:9:13;;16452:74::o;16531:168::-;;16637:1;16633;16629:6;16625:14;16622:1;16619:21;16614:1;16607:9;16600:17;16596:45;16593:2;;;16644:18;;:::i;:::-;-1:-1:-1;16684:9:13;;16583:116::o;16704:125::-;;16772:1;16769;16766:8;16763:2;;;16777:18;;:::i;:::-;-1:-1:-1;16814:9:13;;16753:76::o;16834:258::-;16906:1;16916:113;16930:6;16927:1;16924:13;16916:113;;;17006:11;;;17000:18;16987:11;;;16980:39;16952:2;16945:10;16916:113;;;17047:6;17044:1;17041:13;17038:2;;;-1:-1:-1;;17082:1:13;17064:16;;17057:27;16887:205::o;17097:380::-;17182:1;17172:12;;17229:1;17219:12;;;17240:2;;17294:4;17286:6;17282:17;17272:27;;17240:2;17347;17339:6;17336:14;17316:18;17313:38;17310:2;;;17393:10;17388:3;17384:20;17381:1;17374:31;17428:4;17425:1;17418:15;17456:4;17453:1;17446:15;17310:2;;17152:325;;;:::o;17482:135::-;;-1:-1:-1;;17542:17:13;;17539:2;;;17562:18;;:::i;:::-;-1:-1:-1;17609:1:13;17598:13;;17529:88::o;17622:112::-;;17680:1;17670:2;;17685:18;;:::i;:::-;-1:-1:-1;17719:9:13;;17660:74::o;17739:127::-;17800:10;17795:3;17791:20;17788:1;17781:31;17831:4;17828:1;17821:15;17855:4;17852:1;17845:15;17871:127;17932:10;17927:3;17923:20;17920:1;17913:31;17963:4;17960:1;17953:15;17987:4;17984:1;17977:15;18003:127;18064:10;18059:3;18055:20;18052:1;18045:31;18095:4;18092:1;18085:15;18119:4;18116:1;18109:15;18135:133;-1:-1:-1;;;;;;18211:32:13;;18201:43;;18191:2;;18258:1;18255;18248:12
Swarm Source
ipfs://cc478c31312dda3db4f8b77056a6c0f698cdea79f290ae53ec97d2ef0ffcb317
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,426.7 | 0.16 | $548.27 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.