ERC-721
Overview
Max Total Supply
500 CUBISMC
Holders
55
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CUBISMCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CubismCanvas
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-11 */ // SPDX-License-Identifier: MIT // _______ __ __ _______ ___ _______ __ __ // | || | | || _ || | | || |_| | // | || | | || |_| || | | _____|| | // | || |_| || || | | |_____ | | // | _|| || _ | | | |_____ || | // | |_ | || |_| || | _____| || ||_|| | // |_______||_______||_______||___| |_______||_| |_| C A N V A S // www.nftmintclub.com // Cubism Canvas Collection pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } 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); } } pragma solidity ^0.8.0; library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } 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); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } 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); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @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(); } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } 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); } } pragma solidity >=0.7.0 <0.9.0; contract CubismCanvas is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.02 ether; uint256 public preSaleCost = 0.00 ether; uint256 public maxSupply = 500; uint256 public maxMintAmount = 50; uint256 public preSaleGroup = 1; bool public paused = true; bool public revealed = false; string public notRevealedUri; bool public preSale = false; address public publicKey = 0xB0F8f33DE6F715aACbFB56D3fe0570EbddcEf776; // mapping with dimension for preSaleGroup mapping(uint256 => mapping(bytes32 => bool)) public executed; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function showText() public view returns (string memory) { //bytes memory stringContract = abi.encodePacked(address(this)); uint256 _allocation = 3; string memory stringWallet = Strings.toHexString(uint256(uint160(msg.sender)), 20); string memory stringAllocation = Strings.toString(_allocation); string memory stringContract = Strings.toHexString(uint256(uint160(address(this))), 20); string memory combinedData = string(bytes.concat(bytes(stringWallet), bytes(stringContract), bytes(stringAllocation))); return combinedData; } // public function mint(uint256 _mintAmount, bytes memory _sig, uint256 _allocation) public payable { uint256 supply = totalSupply(); // DRM start if (preSale == true) { cost = preSaleCost; string memory stringContract = Strings.toHexString(uint256(uint160(address(this))), 20); string memory stringAllocation = Strings.toString(_allocation); string memory stringWallet = Strings.toHexString(uint256(uint160(msg.sender)), 20); stringContract = toUpper(stringContract); stringAllocation = toUpper(stringAllocation); stringWallet = toUpper(stringWallet); string memory combinedData = string(bytes.concat(bytes(stringWallet), bytes(stringContract), bytes(stringAllocation))); bytes32 txHash = getMessageHash(combinedData); require(!executed[preSaleGroup][txHash], "Transaction already executed: Mint process stopped"); require(verify(publicKey, combinedData, _sig), "Invalid signature: Mint process stopped"); require(_mintAmount <= _allocation, "Allocation breached: Mint process stopped"); executed[preSaleGroup][txHash] = true; } // DRM end require(!paused, "Contract paused: Mint process stopped"); require(_mintAmount > 0, "Mint amount too low: Mint process stopped"); require(_mintAmount <= maxMintAmount, "Mint amount too high: Mint process stopped"); require(supply + _mintAmount <= maxSupply, "Not enough supply: Mint process stopped"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount, "Price too low: Mint process stopped"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function preSaleState(bool _state) public onlyOwner { preSale = _state; } function setPreSaleGroup(uint256 _state) public onlyOwner { preSaleGroup = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // Signature code function verify(address _signer, string memory _message, bytes memory _sig) public pure returns (bool) { bytes32 messageHash = getMessageHash(_message); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recover(ethSignedMessageHash, _sig) == _signer; } function getMessageHash(string memory _word) internal pure returns(bytes32) { bytes32 output = keccak256(abi.encodePacked(_word)); return output; } function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns(bytes32) { bytes32 output = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)); return output; } function recover(bytes32 _ethSignedMessageHash, bytes memory _sig) internal pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = split(_sig); return ecrecover(_ethSignedMessageHash, v, r, s); } function split(bytes memory _sig) internal pure returns (bytes32 r, bytes32 s, uint8 v) { require(_sig.length == 65, "Invlaid signature length"); assembly { r := mload(add(_sig, 32)) s := mload(add(_sig, 64)) v := byte(0, mload(add(_sig, 96))) } } function toUpper(string memory str) internal pure returns (string memory) { bytes memory bStr = bytes(str); bytes memory bUpper = new bytes(bStr.length); for (uint i = 0; i < bStr.length; i++) { // Lowercase character... if ((uint8(bStr[i]) >= 97) && (uint8(bStr[i]) <= 122)) { // So we subtract 32 to make it uppercase bUpper[i] = bytes1(uint8(bStr[i]) - 32); } else { bUpper[i] = bStr[i]; } } return string(bUpper); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"executed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes","name":"_sig","type":"bytes"},{"internalType":"uint256","name":"_allocation","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleGroup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"preSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicKey","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"setPreSaleGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showText","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_signer","type":"address"},{"internalType":"string","name":"_message","type":"string"},{"internalType":"bytes","name":"_sig","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608090815264173539b7b760d91b60a052600c90620000269082620002bf565b5066470de4df820000600d556000600e556101f4600f556032601055600160118190556012805461ffff19169091179055601480546001600160a81b03191674b0f8f33de6f715aacbfb56d3fe0570ebddcef776001790553480156200008b57600080fd5b506040516200355f3803806200355f833981016040819052620000ae916200043a565b83836000620000be8382620002bf565b506001620000cd8282620002bf565b505050620000ea620000e46200010a60201b60201c565b6200010e565b620000f58262000160565b6200010081620001c1565b50505050620004f3565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001af5760405162461bcd60e51b815260206004820181905260248201526000805160206200353f83398151915260448201526064015b60405180910390fd5b600b620001bd8282620002bf565b5050565b600a546001600160a01b031633146200020c5760405162461bcd60e51b815260206004820181905260248201526000805160206200353f8339815191526044820152606401620001a6565b6013620001bd8282620002bf565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200024557607f821691505b6020821081036200026657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ba57600081815260208120601f850160051c81016020861015620002955750805b601f850160051c820191505b81811015620002b657828155600101620002a1565b5050505b505050565b81516001600160401b03811115620002db57620002db6200021a565b620002f381620002ec845462000230565b846200026c565b602080601f8311600181146200032b5760008415620003125750858301515b600019600386901b1c1916600185901b178555620002b6565b600085815260208120601f198616915b828110156200035c578886015182559484019460019091019084016200033b565b50858210156200037b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126200039d57600080fd5b81516001600160401b0380821115620003ba57620003ba6200021a565b604051601f8301601f19908116603f01168101908282118183101715620003e557620003e56200021a565b816040528381526020925086838588010111156200040257600080fd5b600091505b8382101562000426578582018301518183018401529082019062000407565b600093810190920192909252949350505050565b600080600080608085870312156200045157600080fd5b84516001600160401b03808211156200046957600080fd5b62000477888389016200038b565b955060208701519150808211156200048e57600080fd5b6200049c888389016200038b565b94506040870151915080821115620004b357600080fd5b620004c1888389016200038b565b93506060870151915080821115620004d857600080fd5b50620004e7878288016200038b565b91505092959194509250565b61303c80620005036000396000f3fe6080604052600436106102725760003560e01c8063518302271161014f578063a22cb465116100c1578063d5abeb011161007a578063d5abeb011461071a578063da3ef23f14610730578063e985e9c514610750578063f2c4ce1e14610799578063f2fde38b146107b9578063fe4702ea146107d957600080fd5b8063a22cb4651461067a578063a475b5dd1461069a578063b88d4fde146106af578063c6682862146106cf578063c87b56dd146106e4578063cc9ff9c61461070457600080fd5b806363ffab311161011357806363ffab31146105cd57806370a08231146105f2578063715018a6146106125780637f00c7a6146106275780638da5cb5b1461064757806395d89b411461066557600080fd5b8063518302271461053a57806355f804b3146105595780635a7adf7f146105795780635c975abb146105935780636352211e146105ad57600080fd5b80632dd34f0f116101e8578063438b6300116101ac578063438b63001461045c57806344a0d68a1461048957806344b32e71146104a95780634b97f8d4146104c95780634eaca07a146105045780634f6ccce71461051a57600080fd5b80632dd34f0f146103e15780632e87871d146104015780632f745c59146104145780633ccfd60b1461043457806342842e0e1461043c57600080fd5b8063081c8c441161023a578063081c8c441461033d578063095ea7b31461035257806313faede61461037257806318160ddd14610396578063239c70ae146103ab57806323b872dd146103c157600080fd5b806301ffc9a71461027757806302329a29146102ac57806306fdde03146102ce57806307bc8829146102f0578063081812fc14610305575b600080fd5b34801561028357600080fd5b5061029761029236600461275f565b6107f9565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c7366004612791565b610824565b005b3480156102da57600080fd5b506102e361086a565b6040516102a391906127fc565b3480156102fc57600080fd5b506102e36108fc565b34801561031157600080fd5b5061032561032036600461280f565b61095c565b6040516001600160a01b0390911681526020016102a3565b34801561034957600080fd5b506102e36109f1565b34801561035e57600080fd5b506102cc61036d36600461283f565b610a7f565b34801561037e57600080fd5b50610388600d5481565b6040519081526020016102a3565b3480156103a257600080fd5b50600854610388565b3480156103b757600080fd5b5061038860105481565b3480156103cd57600080fd5b506102cc6103dc366004612869565b610b94565b3480156103ed57600080fd5b506102976103fc366004612948565b610bc5565b6102cc61040f3660046129bc565b610c08565b34801561042057600080fd5b5061038861042f36600461283f565b611081565b6102cc611117565b34801561044857600080fd5b506102cc610457366004612869565b6111b5565b34801561046857600080fd5b5061047c610477366004612a0c565b6111d0565b6040516102a39190612a27565b34801561049557600080fd5b506102cc6104a436600461280f565b611272565b3480156104b557600080fd5b506102cc6104c436600461280f565b6112a1565b3480156104d557600080fd5b506102976104e4366004612a6b565b601560209081526000928352604080842090915290825290205460ff1681565b34801561051057600080fd5b5061038860115481565b34801561052657600080fd5b5061038861053536600461280f565b6112d0565b34801561054657600080fd5b5060125461029790610100900460ff1681565b34801561056557600080fd5b506102cc610574366004612a8d565b611363565b34801561058557600080fd5b506014546102979060ff1681565b34801561059f57600080fd5b506012546102979060ff1681565b3480156105b957600080fd5b506103256105c836600461280f565b61139d565b3480156105d957600080fd5b506014546103259061010090046001600160a01b031681565b3480156105fe57600080fd5b5061038861060d366004612a0c565b611414565b34801561061e57600080fd5b506102cc61149b565b34801561063357600080fd5b506102cc61064236600461280f565b6114d1565b34801561065357600080fd5b50600a546001600160a01b0316610325565b34801561067157600080fd5b506102e3611500565b34801561068657600080fd5b506102cc610695366004612ac2565b61150f565b3480156106a657600080fd5b506102cc6115d3565b3480156106bb57600080fd5b506102cc6106ca366004612af5565b61160e565b3480156106db57600080fd5b506102e3611646565b3480156106f057600080fd5b506102e36106ff36600461280f565b611653565b34801561071057600080fd5b50610388600e5481565b34801561072657600080fd5b50610388600f5481565b34801561073c57600080fd5b506102cc61074b366004612a8d565b6117d7565b34801561075c57600080fd5b5061029761076b366004612b5d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a557600080fd5b506102cc6107b4366004612a8d565b61180d565b3480156107c557600080fd5b506102cc6107d4366004612a0c565b611843565b3480156107e557600080fd5b506102cc6107f4366004612791565b6118db565b60006001600160e01b0319821663780e9d6360e01b148061081e575061081e82611918565b92915050565b600a546001600160a01b031633146108575760405162461bcd60e51b815260040161084e90612b87565b60405180910390fd5b6012805460ff1916911515919091179055565b60606000805461087990612bbc565b80601f01602080910402602001604051908101604052809291908181526020018280546108a590612bbc565b80156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b5050505050905090565b60606003600061090d336014611968565b9050600061091a83611b04565b90506000610929306014611968565b9050600083828460405160200161094293929190612bf6565b60408051601f198184030181529190529695505050505050565b6000818152600260205260408120546001600160a01b03166109d55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084e565b506000908152600460205260409020546001600160a01b031690565b601380546109fe90612bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90612bbc565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b505050505081565b6000610a8a8261139d565b9050806001600160a01b0316836001600160a01b031603610af75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161084e565b336001600160a01b0382161480610b135750610b13813361076b565b610b855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084e565b610b8f8383611c0d565b505050565b610b9e3382611c7b565b610bba5760405162461bcd60e51b815260040161084e90612c39565b610b8f838383611d6e565b600080610bd184611f19565b90506000610bde82611f4c565b9050856001600160a01b0316610bf48286611f89565b6001600160a01b0316149695505050505050565b6000610c1360085490565b60145490915060ff161515600103610e3a57600e54600d556000610c38306014611968565b90506000610c4584611b04565b90506000610c54336014611968565b9050610c5f83612008565b9250610c6a82612008565b9150610c7581612008565b90506000818484604051602001610c8e93929190612bf6565b60405160208183030381529060405290506000610caa82611f19565b601154600090815260156020908152604080832084845290915290205490915060ff1615610d355760405162461bcd60e51b815260206004820152603260248201527f5472616e73616374696f6e20616c72656164792065786563757465643a204d696044820152711b9d081c1c9bd8d95cdcc81cdd1bdc1c195960721b606482015260840161084e565b601454610d519061010090046001600160a01b0316838a610bc5565b610dad5760405162461bcd60e51b815260206004820152602760248201527f496e76616c6964207369676e61747572653a204d696e742070726f63657373206044820152661cdd1bdc1c195960ca1b606482015260840161084e565b86891115610e0f5760405162461bcd60e51b815260206004820152602960248201527f416c6c6f636174696f6e2062726561636865643a204d696e742070726f6365736044820152681cc81cdd1bdc1c195960ba1b606482015260840161084e565b601154600090815260156020908152604080832093835292905220805460ff19166001179055505050505b60125460ff1615610e9b5760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374207061757365643a204d696e742070726f636573732073746044820152641bdc1c195960da1b606482015260840161084e565b60008411610efe5760405162461bcd60e51b815260206004820152602a60248201527f4d696e7420616d6f756e7420746f6f206c6f773a20204d696e742070726f63656044820152691cdcc81cdd1bdc1c195960b21b606482015260840161084e565b601054841115610f645760405162461bcd60e51b815260206004820152602b60248201527f4d696e7420616d6f756e7420746f6f20686967683a20204d696e742070726f6360448201526a195cdcc81cdd1bdc1c195960aa1b606482015260840161084e565b600f54610f718583612ca0565b1115610fd05760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f75676820737570706c793a20204d696e742070726f63657373604482015267081cdd1bdc1c195960c21b606482015260840161084e565b600a546001600160a01b0316331461104b5783600d54610ff09190612cb3565b34101561104b5760405162461bcd60e51b8152602060048201526024808201527f507269636520746f6f206c6f773a20204d696e742070726f636573732073746f6044820152631c1c195960e21b606482015260840161084e565b60015b84811161107a57611068336110638385612ca0565b61215d565b8061107281612cca565b91505061104e565b5050505050565b600061108c83611414565b82106110ee5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161084e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146111415760405162461bcd60e51b815260040161084e90612b87565b6000611155600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461119f576040519150601f19603f3d011682016040523d82523d6000602084013e6111a4565b606091505b50509050806111b257600080fd5b50565b610b8f8383836040518060200160405280600081525061160e565b606060006111dd83611414565b905060008167ffffffffffffffff8111156111fa576111fa6128a5565b604051908082528060200260200182016040528015611223578160200160208202803683370190505b50905060005b8281101561126a5761123b8582611081565b82828151811061124d5761124d612ce3565b60209081029190910101528061126281612cca565b915050611229565b509392505050565b600a546001600160a01b0316331461129c5760405162461bcd60e51b815260040161084e90612b87565b600d55565b600a546001600160a01b031633146112cb5760405162461bcd60e51b815260040161084e90612b87565b601155565b60006112db60085490565b821061133e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161084e565b6008828154811061135157611351612ce3565b90600052602060002001549050919050565b600a546001600160a01b0316331461138d5760405162461bcd60e51b815260040161084e90612b87565b600b6113998282612d47565b5050565b6000818152600260205260408120546001600160a01b03168061081e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161084e565b60006001600160a01b03821661147f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161084e565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114c55760405162461bcd60e51b815260040161084e90612b87565b6114cf6000612177565b565b600a546001600160a01b031633146114fb5760405162461bcd60e51b815260040161084e90612b87565b601055565b60606001805461087990612bbc565b336001600160a01b038316036115675760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084e565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115fd5760405162461bcd60e51b815260040161084e90612b87565b6012805461ff001916610100179055565b6116183383611c7b565b6116345760405162461bcd60e51b815260040161084e90612c39565b611640848484846121c9565b50505050565b600c80546109fe90612bbc565b6000818152600260205260409020546060906001600160a01b03166116d25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161084e565b601254610100900460ff16151560000361177857601380546116f390612bbc565b80601f016020809104026020016040519081016040528092919081815260200182805461171f90612bbc565b801561176c5780601f106117415761010080835404028352916020019161176c565b820191906000526020600020905b81548152906001019060200180831161174f57829003601f168201915b50505050509050919050565b60006117826121fc565b905060008151116117a257604051806020016040528060008152506117d0565b806117ac84611b04565b600c6040516020016117c093929190612e07565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146118015760405162461bcd60e51b815260040161084e90612b87565b600c6113998282612d47565b600a546001600160a01b031633146118375760405162461bcd60e51b815260040161084e90612b87565b60136113998282612d47565b600a546001600160a01b0316331461186d5760405162461bcd60e51b815260040161084e90612b87565b6001600160a01b0381166118d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084e565b6111b281612177565b600a546001600160a01b031633146119055760405162461bcd60e51b815260040161084e90612b87565b6014805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b148061194957506001600160e01b03198216635b5e139f60e01b145b8061081e57506301ffc9a760e01b6001600160e01b031983161461081e565b60606000611977836002612cb3565b611982906002612ca0565b67ffffffffffffffff81111561199a5761199a6128a5565b6040519080825280601f01601f1916602001820160405280156119c4576020820181803683370190505b509050600360fc1b816000815181106119df576119df612ce3565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a0e57611a0e612ce3565b60200101906001600160f81b031916908160001a9053506000611a32846002612cb3565b611a3d906001612ca0565b90505b6001811115611ab5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7157611a71612ce3565b1a60f81b828281518110611a8757611a87612ce3565b60200101906001600160f81b031916908160001a90535060049490941c93611aae81612ea7565b9050611a40565b5083156117d05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161084e565b606081600003611b2b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b555780611b3f81612cca565b9150611b4e9050600a83612ed4565b9150611b2f565b60008167ffffffffffffffff811115611b7057611b706128a5565b6040519080825280601f01601f191660200182016040528015611b9a576020820181803683370190505b5090505b8415611c0557611baf600183612ee8565b9150611bbc600a86612efb565b611bc7906030612ca0565b60f81b818381518110611bdc57611bdc612ce3565b60200101906001600160f81b031916908160001a905350611bfe600a86612ed4565b9450611b9e565b949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c428261139d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611cf45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084e565b6000611cff8361139d565b9050806001600160a01b0316846001600160a01b03161480611d3a5750836001600160a01b0316611d2f8461095c565b6001600160a01b0316145b80611c0557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611c05565b826001600160a01b0316611d818261139d565b6001600160a01b031614611de95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161084e565b6001600160a01b038216611e4b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084e565b611e5683838361220b565b611e61600082611c0d565b6001600160a01b0383166000908152600360205260408120805460019290611e8a908490612ee8565b90915550506001600160a01b0382166000908152600360205260408120805460019290611eb8908490612ca0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008082604051602001611f2d9190612f0f565b60408051601f1981840301815291905280516020909101209392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526000908190605c01611f2d565b600080600080611f98856122c3565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611ff3573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b606060008290506000815167ffffffffffffffff81111561202b5761202b6128a5565b6040519080825280601f01601f191660200182016040528015612055576020820181803683370190505b50905060005b825181101561126a57606183828151811061207857612078612ce3565b016020015160f81c108015906120a85750607a83828151811061209d5761209d612ce3565b016020015160f81c11155b156121045760208382815181106120c1576120c1612ce3565b01602001516120d3919060f81c612f2b565b60f81b8282815181106120e8576120e8612ce3565b60200101906001600160f81b031916908160001a90535061214b565b82818151811061211657612116612ce3565b602001015160f81c60f81b82828151811061213357612133612ce3565b60200101906001600160f81b031916908160001a9053505b8061215581612cca565b91505061205b565b611399828260405180602001604052806000815250612337565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121d4848484611d6e565b6121e08484848461236a565b6116405760405162461bcd60e51b815260040161084e90612f44565b6060600b805461087990612bbc565b6001600160a01b0383166122665761226181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612289565b816001600160a01b0316836001600160a01b03161461228957612289838261246b565b6001600160a01b0382166122a057610b8f81612508565b826001600160a01b0316826001600160a01b031614610b8f57610b8f82826125b7565b600080600083516041146123195760405162461bcd60e51b815260206004820152601860248201527f496e766c616964207369676e6174757265206c656e6774680000000000000000604482015260640161084e565b50505060208101516040820151606090920151909260009190911a90565b61234183836125fb565b61234e600084848461236a565b610b8f5760405162461bcd60e51b815260040161084e90612f44565b60006001600160a01b0384163b1561246057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123ae903390899088908890600401612f96565b6020604051808303816000875af19250505080156123e9575060408051601f3d908101601f191682019092526123e691810190612fd3565b60015b612446573d808015612417576040519150601f19603f3d011682016040523d82523d6000602084013e61241c565b606091505b50805160000361243e5760405162461bcd60e51b815260040161084e90612f44565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c05565b506001949350505050565b6000600161247884611414565b6124829190612ee8565b6000838152600760205260409020549091508082146124d5576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061251a90600190612ee8565b6000838152600960205260408120546008805493945090928490811061254257612542612ce3565b90600052602060002001549050806008838154811061256357612563612ce3565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061259b5761259b612ff0565b6001900381819060005260206000200160009055905550505050565b60006125c283611414565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166126515760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084e565b6000818152600260205260409020546001600160a01b0316156126b65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084e565b6126c26000838361220b565b6001600160a01b03821660009081526003602052604081208054600192906126eb908490612ca0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b0319811681146111b257600080fd5b60006020828403121561277157600080fd5b81356117d081612749565b8035801515811461278c57600080fd5b919050565b6000602082840312156127a357600080fd5b6117d08261277c565b60005b838110156127c75781810151838201526020016127af565b50506000910152565b600081518084526127e88160208601602086016127ac565b601f01601f19169290920160200192915050565b6020815260006117d060208301846127d0565b60006020828403121561282157600080fd5b5035919050565b80356001600160a01b038116811461278c57600080fd5b6000806040838503121561285257600080fd5b61285b83612828565b946020939093013593505050565b60008060006060848603121561287e57600080fd5b61288784612828565b925061289560208501612828565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126128cc57600080fd5b813567ffffffffffffffff808211156128e7576128e76128a5565b604051601f8301601f19908116603f0116810190828211818310171561290f5761290f6128a5565b8160405283815286602085880101111561292857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561295d57600080fd5b61296684612828565b9250602084013567ffffffffffffffff8082111561298357600080fd5b61298f878388016128bb565b935060408601359150808211156129a557600080fd5b506129b2868287016128bb565b9150509250925092565b6000806000606084860312156129d157600080fd5b83359250602084013567ffffffffffffffff8111156129ef57600080fd5b6129fb868287016128bb565b925050604084013590509250925092565b600060208284031215612a1e57600080fd5b6117d082612828565b6020808252825182820181905260009190848201906040850190845b81811015612a5f57835183529284019291840191600101612a43565b50909695505050505050565b60008060408385031215612a7e57600080fd5b50508035926020909101359150565b600060208284031215612a9f57600080fd5b813567ffffffffffffffff811115612ab657600080fd5b611c05848285016128bb565b60008060408385031215612ad557600080fd5b612ade83612828565b9150612aec6020840161277c565b90509250929050565b60008060008060808587031215612b0b57600080fd5b612b1485612828565b9350612b2260208601612828565b925060408501359150606085013567ffffffffffffffff811115612b4557600080fd5b612b51878288016128bb565b91505092959194509250565b60008060408385031215612b7057600080fd5b612b7983612828565b9150612aec60208401612828565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612bd057607f821691505b602082108103612bf057634e487b7160e01b600052602260045260246000fd5b50919050565b60008451612c088184602089016127ac565b845190830190612c1c8183602089016127ac565b8451910190612c2f8183602088016127ac565b0195945050505050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561081e5761081e612c8a565b808202811582820484141761081e5761081e612c8a565b600060018201612cdc57612cdc612c8a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f821115610b8f57600081815260208120601f850160051c81016020861015612d205750805b601f850160051c820191505b81811015612d3f57828155600101612d2c565b505050505050565b815167ffffffffffffffff811115612d6157612d616128a5565b612d7581612d6f8454612bbc565b84612cf9565b602080601f831160018114612daa5760008415612d925750858301515b600019600386901b1c1916600185901b178555612d3f565b600085815260208120601f198616915b82811015612dd957888601518255948401946001909101908401612dba565b5085821015612df75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600084516020612e1a8285838a016127ac565b855191840191612e2d8184848a016127ac565b8554920191600090612e3e81612bbc565b60018281168015612e565760018114612e6b57612e97565b60ff1984168752821515830287019450612e97565b896000528560002060005b84811015612e8f57815489820152908301908701612e76565b505082870194505b50929a9950505050505050505050565b600081612eb657612eb6612c8a565b506000190190565b634e487b7160e01b600052601260045260246000fd5b600082612ee357612ee3612ebe565b500490565b8181038181111561081e5761081e612c8a565b600082612f0a57612f0a612ebe565b500690565b60008251612f218184602087016127ac565b9190910192915050565b60ff828116828216039081111561081e5761081e612c8a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fc9908301846127d0565b9695505050505050565b600060208284031215612fe557600080fd5b81516117d081612749565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201a795e0636f9b10a6194dec32904de44329fe3a664cde692ca7d0d8782d15aea64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e43756269736d2043616e76617320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000743554249534d43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d614141565a4e524c635a7458446178383157516f4e414e596634596f464250563559364e7574796f384637332f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6551364c4b3461314d52737570324b4767506a67634268547a39426663525751735a564132677333434d4c352f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063518302271161014f578063a22cb465116100c1578063d5abeb011161007a578063d5abeb011461071a578063da3ef23f14610730578063e985e9c514610750578063f2c4ce1e14610799578063f2fde38b146107b9578063fe4702ea146107d957600080fd5b8063a22cb4651461067a578063a475b5dd1461069a578063b88d4fde146106af578063c6682862146106cf578063c87b56dd146106e4578063cc9ff9c61461070457600080fd5b806363ffab311161011357806363ffab31146105cd57806370a08231146105f2578063715018a6146106125780637f00c7a6146106275780638da5cb5b1461064757806395d89b411461066557600080fd5b8063518302271461053a57806355f804b3146105595780635a7adf7f146105795780635c975abb146105935780636352211e146105ad57600080fd5b80632dd34f0f116101e8578063438b6300116101ac578063438b63001461045c57806344a0d68a1461048957806344b32e71146104a95780634b97f8d4146104c95780634eaca07a146105045780634f6ccce71461051a57600080fd5b80632dd34f0f146103e15780632e87871d146104015780632f745c59146104145780633ccfd60b1461043457806342842e0e1461043c57600080fd5b8063081c8c441161023a578063081c8c441461033d578063095ea7b31461035257806313faede61461037257806318160ddd14610396578063239c70ae146103ab57806323b872dd146103c157600080fd5b806301ffc9a71461027757806302329a29146102ac57806306fdde03146102ce57806307bc8829146102f0578063081812fc14610305575b600080fd5b34801561028357600080fd5b5061029761029236600461275f565b6107f9565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102cc6102c7366004612791565b610824565b005b3480156102da57600080fd5b506102e361086a565b6040516102a391906127fc565b3480156102fc57600080fd5b506102e36108fc565b34801561031157600080fd5b5061032561032036600461280f565b61095c565b6040516001600160a01b0390911681526020016102a3565b34801561034957600080fd5b506102e36109f1565b34801561035e57600080fd5b506102cc61036d36600461283f565b610a7f565b34801561037e57600080fd5b50610388600d5481565b6040519081526020016102a3565b3480156103a257600080fd5b50600854610388565b3480156103b757600080fd5b5061038860105481565b3480156103cd57600080fd5b506102cc6103dc366004612869565b610b94565b3480156103ed57600080fd5b506102976103fc366004612948565b610bc5565b6102cc61040f3660046129bc565b610c08565b34801561042057600080fd5b5061038861042f36600461283f565b611081565b6102cc611117565b34801561044857600080fd5b506102cc610457366004612869565b6111b5565b34801561046857600080fd5b5061047c610477366004612a0c565b6111d0565b6040516102a39190612a27565b34801561049557600080fd5b506102cc6104a436600461280f565b611272565b3480156104b557600080fd5b506102cc6104c436600461280f565b6112a1565b3480156104d557600080fd5b506102976104e4366004612a6b565b601560209081526000928352604080842090915290825290205460ff1681565b34801561051057600080fd5b5061038860115481565b34801561052657600080fd5b5061038861053536600461280f565b6112d0565b34801561054657600080fd5b5060125461029790610100900460ff1681565b34801561056557600080fd5b506102cc610574366004612a8d565b611363565b34801561058557600080fd5b506014546102979060ff1681565b34801561059f57600080fd5b506012546102979060ff1681565b3480156105b957600080fd5b506103256105c836600461280f565b61139d565b3480156105d957600080fd5b506014546103259061010090046001600160a01b031681565b3480156105fe57600080fd5b5061038861060d366004612a0c565b611414565b34801561061e57600080fd5b506102cc61149b565b34801561063357600080fd5b506102cc61064236600461280f565b6114d1565b34801561065357600080fd5b50600a546001600160a01b0316610325565b34801561067157600080fd5b506102e3611500565b34801561068657600080fd5b506102cc610695366004612ac2565b61150f565b3480156106a657600080fd5b506102cc6115d3565b3480156106bb57600080fd5b506102cc6106ca366004612af5565b61160e565b3480156106db57600080fd5b506102e3611646565b3480156106f057600080fd5b506102e36106ff36600461280f565b611653565b34801561071057600080fd5b50610388600e5481565b34801561072657600080fd5b50610388600f5481565b34801561073c57600080fd5b506102cc61074b366004612a8d565b6117d7565b34801561075c57600080fd5b5061029761076b366004612b5d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a557600080fd5b506102cc6107b4366004612a8d565b61180d565b3480156107c557600080fd5b506102cc6107d4366004612a0c565b611843565b3480156107e557600080fd5b506102cc6107f4366004612791565b6118db565b60006001600160e01b0319821663780e9d6360e01b148061081e575061081e82611918565b92915050565b600a546001600160a01b031633146108575760405162461bcd60e51b815260040161084e90612b87565b60405180910390fd5b6012805460ff1916911515919091179055565b60606000805461087990612bbc565b80601f01602080910402602001604051908101604052809291908181526020018280546108a590612bbc565b80156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b5050505050905090565b60606003600061090d336014611968565b9050600061091a83611b04565b90506000610929306014611968565b9050600083828460405160200161094293929190612bf6565b60408051601f198184030181529190529695505050505050565b6000818152600260205260408120546001600160a01b03166109d55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084e565b506000908152600460205260409020546001600160a01b031690565b601380546109fe90612bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a90612bbc565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b505050505081565b6000610a8a8261139d565b9050806001600160a01b0316836001600160a01b031603610af75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161084e565b336001600160a01b0382161480610b135750610b13813361076b565b610b855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161084e565b610b8f8383611c0d565b505050565b610b9e3382611c7b565b610bba5760405162461bcd60e51b815260040161084e90612c39565b610b8f838383611d6e565b600080610bd184611f19565b90506000610bde82611f4c565b9050856001600160a01b0316610bf48286611f89565b6001600160a01b0316149695505050505050565b6000610c1360085490565b60145490915060ff161515600103610e3a57600e54600d556000610c38306014611968565b90506000610c4584611b04565b90506000610c54336014611968565b9050610c5f83612008565b9250610c6a82612008565b9150610c7581612008565b90506000818484604051602001610c8e93929190612bf6565b60405160208183030381529060405290506000610caa82611f19565b601154600090815260156020908152604080832084845290915290205490915060ff1615610d355760405162461bcd60e51b815260206004820152603260248201527f5472616e73616374696f6e20616c72656164792065786563757465643a204d696044820152711b9d081c1c9bd8d95cdcc81cdd1bdc1c195960721b606482015260840161084e565b601454610d519061010090046001600160a01b0316838a610bc5565b610dad5760405162461bcd60e51b815260206004820152602760248201527f496e76616c6964207369676e61747572653a204d696e742070726f63657373206044820152661cdd1bdc1c195960ca1b606482015260840161084e565b86891115610e0f5760405162461bcd60e51b815260206004820152602960248201527f416c6c6f636174696f6e2062726561636865643a204d696e742070726f6365736044820152681cc81cdd1bdc1c195960ba1b606482015260840161084e565b601154600090815260156020908152604080832093835292905220805460ff19166001179055505050505b60125460ff1615610e9b5760405162461bcd60e51b815260206004820152602560248201527f436f6e7472616374207061757365643a204d696e742070726f636573732073746044820152641bdc1c195960da1b606482015260840161084e565b60008411610efe5760405162461bcd60e51b815260206004820152602a60248201527f4d696e7420616d6f756e7420746f6f206c6f773a20204d696e742070726f63656044820152691cdcc81cdd1bdc1c195960b21b606482015260840161084e565b601054841115610f645760405162461bcd60e51b815260206004820152602b60248201527f4d696e7420616d6f756e7420746f6f20686967683a20204d696e742070726f6360448201526a195cdcc81cdd1bdc1c195960aa1b606482015260840161084e565b600f54610f718583612ca0565b1115610fd05760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f75676820737570706c793a20204d696e742070726f63657373604482015267081cdd1bdc1c195960c21b606482015260840161084e565b600a546001600160a01b0316331461104b5783600d54610ff09190612cb3565b34101561104b5760405162461bcd60e51b8152602060048201526024808201527f507269636520746f6f206c6f773a20204d696e742070726f636573732073746f6044820152631c1c195960e21b606482015260840161084e565b60015b84811161107a57611068336110638385612ca0565b61215d565b8061107281612cca565b91505061104e565b5050505050565b600061108c83611414565b82106110ee5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161084e565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146111415760405162461bcd60e51b815260040161084e90612b87565b6000611155600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461119f576040519150601f19603f3d011682016040523d82523d6000602084013e6111a4565b606091505b50509050806111b257600080fd5b50565b610b8f8383836040518060200160405280600081525061160e565b606060006111dd83611414565b905060008167ffffffffffffffff8111156111fa576111fa6128a5565b604051908082528060200260200182016040528015611223578160200160208202803683370190505b50905060005b8281101561126a5761123b8582611081565b82828151811061124d5761124d612ce3565b60209081029190910101528061126281612cca565b915050611229565b509392505050565b600a546001600160a01b0316331461129c5760405162461bcd60e51b815260040161084e90612b87565b600d55565b600a546001600160a01b031633146112cb5760405162461bcd60e51b815260040161084e90612b87565b601155565b60006112db60085490565b821061133e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161084e565b6008828154811061135157611351612ce3565b90600052602060002001549050919050565b600a546001600160a01b0316331461138d5760405162461bcd60e51b815260040161084e90612b87565b600b6113998282612d47565b5050565b6000818152600260205260408120546001600160a01b03168061081e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161084e565b60006001600160a01b03821661147f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161084e565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114c55760405162461bcd60e51b815260040161084e90612b87565b6114cf6000612177565b565b600a546001600160a01b031633146114fb5760405162461bcd60e51b815260040161084e90612b87565b601055565b60606001805461087990612bbc565b336001600160a01b038316036115675760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161084e565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115fd5760405162461bcd60e51b815260040161084e90612b87565b6012805461ff001916610100179055565b6116183383611c7b565b6116345760405162461bcd60e51b815260040161084e90612c39565b611640848484846121c9565b50505050565b600c80546109fe90612bbc565b6000818152600260205260409020546060906001600160a01b03166116d25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161084e565b601254610100900460ff16151560000361177857601380546116f390612bbc565b80601f016020809104026020016040519081016040528092919081815260200182805461171f90612bbc565b801561176c5780601f106117415761010080835404028352916020019161176c565b820191906000526020600020905b81548152906001019060200180831161174f57829003601f168201915b50505050509050919050565b60006117826121fc565b905060008151116117a257604051806020016040528060008152506117d0565b806117ac84611b04565b600c6040516020016117c093929190612e07565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146118015760405162461bcd60e51b815260040161084e90612b87565b600c6113998282612d47565b600a546001600160a01b031633146118375760405162461bcd60e51b815260040161084e90612b87565b60136113998282612d47565b600a546001600160a01b0316331461186d5760405162461bcd60e51b815260040161084e90612b87565b6001600160a01b0381166118d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084e565b6111b281612177565b600a546001600160a01b031633146119055760405162461bcd60e51b815260040161084e90612b87565b6014805460ff1916911515919091179055565b60006001600160e01b031982166380ac58cd60e01b148061194957506001600160e01b03198216635b5e139f60e01b145b8061081e57506301ffc9a760e01b6001600160e01b031983161461081e565b60606000611977836002612cb3565b611982906002612ca0565b67ffffffffffffffff81111561199a5761199a6128a5565b6040519080825280601f01601f1916602001820160405280156119c4576020820181803683370190505b509050600360fc1b816000815181106119df576119df612ce3565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a0e57611a0e612ce3565b60200101906001600160f81b031916908160001a9053506000611a32846002612cb3565b611a3d906001612ca0565b90505b6001811115611ab5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a7157611a71612ce3565b1a60f81b828281518110611a8757611a87612ce3565b60200101906001600160f81b031916908160001a90535060049490941c93611aae81612ea7565b9050611a40565b5083156117d05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161084e565b606081600003611b2b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b555780611b3f81612cca565b9150611b4e9050600a83612ed4565b9150611b2f565b60008167ffffffffffffffff811115611b7057611b706128a5565b6040519080825280601f01601f191660200182016040528015611b9a576020820181803683370190505b5090505b8415611c0557611baf600183612ee8565b9150611bbc600a86612efb565b611bc7906030612ca0565b60f81b818381518110611bdc57611bdc612ce3565b60200101906001600160f81b031916908160001a905350611bfe600a86612ed4565b9450611b9e565b949350505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c428261139d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611cf45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161084e565b6000611cff8361139d565b9050806001600160a01b0316846001600160a01b03161480611d3a5750836001600160a01b0316611d2f8461095c565b6001600160a01b0316145b80611c0557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611c05565b826001600160a01b0316611d818261139d565b6001600160a01b031614611de95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161084e565b6001600160a01b038216611e4b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084e565b611e5683838361220b565b611e61600082611c0d565b6001600160a01b0383166000908152600360205260408120805460019290611e8a908490612ee8565b90915550506001600160a01b0382166000908152600360205260408120805460019290611eb8908490612ca0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008082604051602001611f2d9190612f0f565b60408051601f1981840301815291905280516020909101209392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526000908190605c01611f2d565b600080600080611f98856122c3565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611ff3573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b606060008290506000815167ffffffffffffffff81111561202b5761202b6128a5565b6040519080825280601f01601f191660200182016040528015612055576020820181803683370190505b50905060005b825181101561126a57606183828151811061207857612078612ce3565b016020015160f81c108015906120a85750607a83828151811061209d5761209d612ce3565b016020015160f81c11155b156121045760208382815181106120c1576120c1612ce3565b01602001516120d3919060f81c612f2b565b60f81b8282815181106120e8576120e8612ce3565b60200101906001600160f81b031916908160001a90535061214b565b82818151811061211657612116612ce3565b602001015160f81c60f81b82828151811061213357612133612ce3565b60200101906001600160f81b031916908160001a9053505b8061215581612cca565b91505061205b565b611399828260405180602001604052806000815250612337565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121d4848484611d6e565b6121e08484848461236a565b6116405760405162461bcd60e51b815260040161084e90612f44565b6060600b805461087990612bbc565b6001600160a01b0383166122665761226181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612289565b816001600160a01b0316836001600160a01b03161461228957612289838261246b565b6001600160a01b0382166122a057610b8f81612508565b826001600160a01b0316826001600160a01b031614610b8f57610b8f82826125b7565b600080600083516041146123195760405162461bcd60e51b815260206004820152601860248201527f496e766c616964207369676e6174757265206c656e6774680000000000000000604482015260640161084e565b50505060208101516040820151606090920151909260009190911a90565b61234183836125fb565b61234e600084848461236a565b610b8f5760405162461bcd60e51b815260040161084e90612f44565b60006001600160a01b0384163b1561246057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123ae903390899088908890600401612f96565b6020604051808303816000875af19250505080156123e9575060408051601f3d908101601f191682019092526123e691810190612fd3565b60015b612446573d808015612417576040519150601f19603f3d011682016040523d82523d6000602084013e61241c565b606091505b50805160000361243e5760405162461bcd60e51b815260040161084e90612f44565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c05565b506001949350505050565b6000600161247884611414565b6124829190612ee8565b6000838152600760205260409020549091508082146124d5576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061251a90600190612ee8565b6000838152600960205260408120546008805493945090928490811061254257612542612ce3565b90600052602060002001549050806008838154811061256357612563612ce3565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061259b5761259b612ff0565b6001900381819060005260206000200160009055905550505050565b60006125c283611414565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166126515760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161084e565b6000818152600260205260409020546001600160a01b0316156126b65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161084e565b6126c26000838361220b565b6001600160a01b03821660009081526003602052604081208054600192906126eb908490612ca0565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b0319811681146111b257600080fd5b60006020828403121561277157600080fd5b81356117d081612749565b8035801515811461278c57600080fd5b919050565b6000602082840312156127a357600080fd5b6117d08261277c565b60005b838110156127c75781810151838201526020016127af565b50506000910152565b600081518084526127e88160208601602086016127ac565b601f01601f19169290920160200192915050565b6020815260006117d060208301846127d0565b60006020828403121561282157600080fd5b5035919050565b80356001600160a01b038116811461278c57600080fd5b6000806040838503121561285257600080fd5b61285b83612828565b946020939093013593505050565b60008060006060848603121561287e57600080fd5b61288784612828565b925061289560208501612828565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126128cc57600080fd5b813567ffffffffffffffff808211156128e7576128e76128a5565b604051601f8301601f19908116603f0116810190828211818310171561290f5761290f6128a5565b8160405283815286602085880101111561292857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561295d57600080fd5b61296684612828565b9250602084013567ffffffffffffffff8082111561298357600080fd5b61298f878388016128bb565b935060408601359150808211156129a557600080fd5b506129b2868287016128bb565b9150509250925092565b6000806000606084860312156129d157600080fd5b83359250602084013567ffffffffffffffff8111156129ef57600080fd5b6129fb868287016128bb565b925050604084013590509250925092565b600060208284031215612a1e57600080fd5b6117d082612828565b6020808252825182820181905260009190848201906040850190845b81811015612a5f57835183529284019291840191600101612a43565b50909695505050505050565b60008060408385031215612a7e57600080fd5b50508035926020909101359150565b600060208284031215612a9f57600080fd5b813567ffffffffffffffff811115612ab657600080fd5b611c05848285016128bb565b60008060408385031215612ad557600080fd5b612ade83612828565b9150612aec6020840161277c565b90509250929050565b60008060008060808587031215612b0b57600080fd5b612b1485612828565b9350612b2260208601612828565b925060408501359150606085013567ffffffffffffffff811115612b4557600080fd5b612b51878288016128bb565b91505092959194509250565b60008060408385031215612b7057600080fd5b612b7983612828565b9150612aec60208401612828565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612bd057607f821691505b602082108103612bf057634e487b7160e01b600052602260045260246000fd5b50919050565b60008451612c088184602089016127ac565b845190830190612c1c8183602089016127ac565b8451910190612c2f8183602088016127ac565b0195945050505050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561081e5761081e612c8a565b808202811582820484141761081e5761081e612c8a565b600060018201612cdc57612cdc612c8a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f821115610b8f57600081815260208120601f850160051c81016020861015612d205750805b601f850160051c820191505b81811015612d3f57828155600101612d2c565b505050505050565b815167ffffffffffffffff811115612d6157612d616128a5565b612d7581612d6f8454612bbc565b84612cf9565b602080601f831160018114612daa5760008415612d925750858301515b600019600386901b1c1916600185901b178555612d3f565b600085815260208120601f198616915b82811015612dd957888601518255948401946001909101908401612dba565b5085821015612df75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600084516020612e1a8285838a016127ac565b855191840191612e2d8184848a016127ac565b8554920191600090612e3e81612bbc565b60018281168015612e565760018114612e6b57612e97565b60ff1984168752821515830287019450612e97565b896000528560002060005b84811015612e8f57815489820152908301908701612e76565b505082870194505b50929a9950505050505050505050565b600081612eb657612eb6612c8a565b506000190190565b634e487b7160e01b600052601260045260246000fd5b600082612ee357612ee3612ebe565b500490565b8181038181111561081e5761081e612c8a565b600082612f0a57612f0a612ebe565b500690565b60008251612f218184602087016127ac565b9190910192915050565b60ff828116828216039081111561081e5761081e612c8a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fc9908301846127d0565b9695505050505050565b600060208284031215612fe557600080fd5b81516117d081612749565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201a795e0636f9b10a6194dec32904de44329fe3a664cde692ca7d0d8782d15aea64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e43756269736d2043616e76617320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000743554249534d43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d614141565a4e524c635a7458446178383157516f4e414e596634596f464250563559364e7574796f384637332f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6551364c4b3461314d52737570324b4767506a67634268547a39426663525751735a564132677333434d4c352f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Cubism Canvas
Arg [1] : _symbol (string): CUBISMC
Arg [2] : _initBaseURI (string): ipfs://QmaAAVZNRLcZtXDax81WQoNANYf4YoFBPV5Y6Nutyo8F73/
Arg [3] : _initNotRevealedUri (string): ipfs://QmeQ6LK4a1MRsup2KGgPjgcBhTz9BfcRWQsZVA2gs3CML5/hidden.json
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 43756269736d2043616e76617320000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 43554249534d4300000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d614141565a4e524c635a7458446178383157516f4e414e
Arg [10] : 596634596f464250563559364e7574796f384637332f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d6551364c4b3461314d52737570324b4767506a67634268
Arg [13] : 547a39426663525751735a564132677333434d4c352f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31018:7127:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23870:224;;;;;;;;;;-1:-1:-1;23870:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;23870:224:0;;;;;;;;35899:73;;;;;;;;;;-1:-1:-1;35899:73:0;;;;;:::i;:::-;;:::i;:::-;;11770:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32060:588::-;;;;;;;;;;;;;:::i;13329:221::-;;;;;;;;;;-1:-1:-1;13329:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2047:32:1;;;2029:51;;2017:2;2002:18;13329:221:0;1883:203:1;31420:28:0;;;;;;;;;;;;;:::i;12852:411::-;;;;;;;;;;-1:-1:-1;12852:411:0;;;;;:::i;:::-;;:::i;31167:32::-;;;;;;;;;;;;;;;;;;;2674:25:1;;;2662:2;2647:18;31167:32:0;2528:177:1;24510:113:0;;;;;;;;;;-1:-1:-1;24598:10:0;:17;24510:113;;31283:33;;;;;;;;;;;;;;;;14219:339;;;;;;;;;;-1:-1:-1;14219:339:0;;;;;:::i;:::-;;:::i;36332:295::-;;;;;;;;;;-1:-1:-1;36332:295:0;;;;;:::i;:::-;;:::i;32670:1725::-;;;;;;:::i;:::-;;:::i;24178:256::-;;;;;;;;;;-1:-1:-1;24178:256:0;;;;;:::i;:::-;;:::i;36164:145::-;;;:::i;14629:185::-;;;;;;;;;;-1:-1:-1;14629:185:0;;;;;:::i;:::-;;:::i;34401:348::-;;;;;;;;;;-1:-1:-1;34401:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35331:80::-;;;;;;;;;;-1:-1:-1;35331:80:0;;;;;:::i;:::-;;:::i;36065:92::-;;;;;;;;;;-1:-1:-1;36065:92:0;;;;;:::i;:::-;;:::i;31611:60::-;;;;;;;;;;-1:-1:-1;31611:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;31321:31;;;;;;;;;;;;;;;;24700:233;;;;;;;;;;-1:-1:-1;24700:233:0;;;;;:::i;:::-;;:::i;31387:28::-;;;;;;;;;;-1:-1:-1;31387:28:0;;;;;;;;;;;35667:98;;;;;;;;;;-1:-1:-1;35667:98:0;;;;;:::i;:::-;;:::i;31453:27::-;;;;;;;;;;-1:-1:-1;31453:27:0;;;;;;;;31357:25;;;;;;;;;;-1:-1:-1;31357:25:0;;;;;;;;11464:239;;;;;;;;;;-1:-1:-1;11464:239:0;;;;;:::i;:::-;;:::i;31485:69::-;;;;;;;;;;-1:-1:-1;31485:69:0;;;;;;;-1:-1:-1;;;;;31485:69:0;;;11194:208;;;;;;;;;;-1:-1:-1;11194:208:0;;;;;:::i;:::-;;:::i;30501:94::-;;;;;;;;;;;;;:::i;35417:116::-;;;;;;;;;;-1:-1:-1;35417:116:0;;;;;:::i;:::-;;:::i;30278:87::-;;;;;;;;;;-1:-1:-1;30351:6:0;;-1:-1:-1;;;;;30351:6:0;30278:87;;11939:104;;;;;;;;;;;;;:::i;13622:295::-;;;;;;;;;;-1:-1:-1;13622:295:0;;;;;:::i;:::-;;:::i;35258:65::-;;;;;;;;;;;;;:::i;14885:328::-;;;;;;;;;;-1:-1:-1;14885:328:0;;;;;:::i;:::-;;:::i;31125:37::-;;;;;;;;;;;;;:::i;34755:497::-;;;;;;;;;;-1:-1:-1;34755:497:0;;;;;:::i;:::-;;:::i;31204:39::-;;;;;;;;;;;;;;;;31248:30;;;;;;;;;;;;;;;;35771:122;;;;;;;;;;-1:-1:-1;35771:122:0;;;;;:::i;:::-;;:::i;13988:164::-;;;;;;;;;;-1:-1:-1;13988:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;14109:25:0;;;14085:4;14109:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;13988:164;35541:120;;;;;;;;;;-1:-1:-1;35541:120:0;;;;;:::i;:::-;;:::i;30603:192::-;;;;;;;;;;-1:-1:-1;30603:192:0;;;;;:::i;:::-;;:::i;35978:81::-;;;;;;;;;;-1:-1:-1;35978:81:0;;;;;:::i;:::-;;:::i;23870:224::-;23972:4;-1:-1:-1;;;;;;23996:50:0;;-1:-1:-1;;;23996:50:0;;:90;;;24050:36;24074:11;24050:23;:36::i;:::-;23989:97;23870:224;-1:-1:-1;;23870:224:0:o;35899:73::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;;;;;;;;;35951:6:::1;:15:::0;;-1:-1:-1;;35951:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35899:73::o;11770:100::-;11824:13;11857:5;11850:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11770:100;:::o;32060:588::-;32101:13;32228:1;32206:19;32265:53;32301:10;32315:2;32265:19;:53::i;:::-;32236:82;;32325:30;32358:29;32375:11;32358:16;:29::i;:::-;32325:62;-1:-1:-1;32396:28:0;32427:56;32471:4;32480:2;32427:19;:56::i;:::-;32396:87;;32491:26;32546:12;32567:14;32590:16;32527:81;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;32527:81:0;;;;;;;;;;32060:588;-1:-1:-1;;;;;;32060:588:0:o;13329:221::-;13405:7;16812:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16812:16:0;13425:73;;;;-1:-1:-1;;;13425:73:0;;9107:2:1;13425:73:0;;;9089:21:1;9146:2;9126:18;;;9119:30;9185:34;9165:18;;;9158:62;-1:-1:-1;;;9236:18:1;;;9229:42;9288:19;;13425:73:0;8905:408:1;13425:73:0;-1:-1:-1;13518:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;13518:24:0;;13329:221::o;31420:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12852:411::-;12933:13;12949:23;12964:7;12949:14;:23::i;:::-;12933:39;;12997:5;-1:-1:-1;;;;;12991:11:0;:2;-1:-1:-1;;;;;12991:11:0;;12983:57;;;;-1:-1:-1;;;12983:57:0;;9520:2:1;12983:57:0;;;9502:21:1;9559:2;9539:18;;;9532:30;9598:34;9578:18;;;9571:62;-1:-1:-1;;;9649:18:1;;;9642:31;9690:19;;12983:57:0;9318:397:1;12983:57:0;9379:10;-1:-1:-1;;;;;13075:21:0;;;;:62;;-1:-1:-1;13100:37:0;13117:5;9379:10;13988:164;:::i;13100:37::-;13053:168;;;;-1:-1:-1;;;13053:168:0;;9922:2:1;13053:168:0;;;9904:21:1;9961:2;9941:18;;;9934:30;10000:34;9980:18;;;9973:62;10071:26;10051:18;;;10044:54;10115:19;;13053:168:0;9720:420:1;13053:168:0;13234:21;13243:2;13247:7;13234:8;:21::i;:::-;12922:341;12852:411;;:::o;14219:339::-;14414:41;9379:10;14447:7;14414:18;:41::i;:::-;14406:103;;;;-1:-1:-1;;;14406:103:0;;;;;;;:::i;:::-;14522:28;14532:4;14538:2;14542:7;14522:9;:28::i;36332:295::-;36429:4;36443:19;36465:24;36480:8;36465:14;:24::i;:::-;36443:46;;36496:28;36527:36;36551:11;36527:23;:36::i;:::-;36496:67;;36616:7;-1:-1:-1;;;;;36577:46:0;:35;36585:20;36607:4;36577:7;:35::i;:::-;-1:-1:-1;;;;;36577:46:0;;;36332:295;-1:-1:-1;;;;;;36332:295:0:o;32670:1725::-;32767:14;32784:13;24598:10;:17;;24510:113;32784:13;32826:7;;32767:30;;-1:-1:-1;32826:7:0;;:15;;:7;:15;32822:992;;32862:11;;32855:4;:18;-1:-1:-1;32916:56:0;32960:4;32969:2;32916:19;:56::i;:::-;32885:87;;32982:30;33015:29;33032:11;33015:16;:29::i;:::-;32982:62;-1:-1:-1;33054:26:0;33083:53;33119:10;33133:2;33083:19;:53::i;:::-;33054:82;;33163:23;33171:14;33163:7;:23::i;:::-;33146:40;;33215:25;33223:16;33215:7;:25::i;:::-;33196:44;;33265:21;33273:12;33265:7;:21::i;:::-;33250:36;;33296:26;33351:12;33372:14;33395:16;33332:81;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33296:118;;33423:14;33440:28;33455:12;33440:14;:28::i;:::-;33493:12;;33484:22;;;;:8;:22;;;;;;;;:30;;;;;;;;;33423:45;;-1:-1:-1;33484:30:0;;33483:31;33475:94;;;;-1:-1:-1;;;33475:94:0;;10765:2:1;33475:94:0;;;10747:21:1;10804:2;10784:18;;;10777:30;10843:34;10823:18;;;10816:62;-1:-1:-1;;;10894:18:1;;;10887:48;10952:19;;33475:94:0;10563:414:1;33475:94:0;33591:9;;33584:37;;33591:9;;;-1:-1:-1;;;;;33591:9:0;33602:12;33616:4;33584:6;:37::i;:::-;33576:89;;;;-1:-1:-1;;;33576:89:0;;11184:2:1;33576:89:0;;;11166:21:1;11223:2;11203:18;;;11196:30;11262:34;11242:18;;;11235:62;-1:-1:-1;;;11313:18:1;;;11306:37;11360:19;;33576:89:0;10982:403:1;33576:89:0;33695:11;33680;:26;;33672:80;;;;-1:-1:-1;;;33672:80:0;;11592:2:1;33672:80:0;;;11574:21:1;11631:2;11611:18;;;11604:30;11670:34;11650:18;;;11643:62;-1:-1:-1;;;11721:18:1;;;11714:39;11770:19;;33672:80:0;11390:405:1;33672:80:0;33768:12;;33759:22;;;;:8;:22;;;;;;;;:30;;;;;;;:37;;-1:-1:-1;;33759:37:0;33792:4;33759:37;;;-1:-1:-1;;;;32822:992:0;33847:6;;;;33846:7;33838:57;;;;-1:-1:-1;;;33838:57:0;;12002:2:1;33838:57:0;;;11984:21:1;12041:2;12021:18;;;12014:30;12080:34;12060:18;;;12053:62;-1:-1:-1;;;12131:18:1;;;12124:35;12176:19;;33838:57:0;11800:401:1;33838:57:0;33924:1;33910:11;:15;33902:70;;;;-1:-1:-1;;;33902:70:0;;12408:2:1;33902:70:0;;;12390:21:1;12447:2;12427:18;;;12420:30;12486:34;12466:18;;;12459:62;-1:-1:-1;;;12537:18:1;;;12530:40;12587:19;;33902:70:0;12206:406:1;33902:70:0;34002:13;;33987:11;:28;;33979:84;;;;-1:-1:-1;;;33979:84:0;;12819:2:1;33979:84:0;;;12801:21:1;12858:2;12838:18;;;12831:30;12897:34;12877:18;;;12870:62;-1:-1:-1;;;12948:18:1;;;12941:41;12999:19;;33979:84:0;12617:407:1;33979:84:0;34102:9;;34078:20;34087:11;34078:6;:20;:::i;:::-;:33;;34070:86;;;;-1:-1:-1;;;34070:86:0;;13493:2:1;34070:86:0;;;13475:21:1;13532:2;13512:18;;;13505:30;13571:34;13551:18;;;13544:62;-1:-1:-1;;;13622:18:1;;;13615:38;13670:19;;34070:86:0;13291:404:1;34070:86:0;30351:6;;-1:-1:-1;;;;;30351:6:0;34169:10;:21;34165:124;;34229:11;34222:4;;:18;;;;:::i;:::-;34209:9;:31;;34201:80;;;;-1:-1:-1;;;34201:80:0;;14075:2:1;34201:80:0;;;14057:21:1;14114:2;14094:18;;;14087:30;14153:34;14133:18;;;14126:62;-1:-1:-1;;;14204:18:1;;;14197:34;14248:19;;34201:80:0;13873:400:1;34201:80:0;34314:1;34297:93;34322:11;34317:1;:16;34297:93;;34349:33;34359:10;34371;34380:1;34371:6;:10;:::i;:::-;34349:9;:33::i;:::-;34335:3;;;;:::i;:::-;;;;34297:93;;;;32760:1635;32670:1725;;;:::o;24178:256::-;24275:7;24311:23;24328:5;24311:16;:23::i;:::-;24303:5;:31;24295:87;;;;-1:-1:-1;;;24295:87:0;;14620:2:1;24295:87:0;;;14602:21:1;14659:2;14639:18;;;14632:30;14698:34;14678:18;;;14671:62;-1:-1:-1;;;14749:18:1;;;14742:41;14800:19;;24295:87:0;14418:407:1;24295:87:0;-1:-1:-1;;;;;;24400:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;24178:256::o;36164:145::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;36217:7:::1;36238;30351:6:::0;;-1:-1:-1;;;;;30351:6:0;;30278:87;36238:7:::1;-1:-1:-1::0;;;;;36230:21:0::1;36259;36230:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36216:69;;;36300:2;36292:11;;;::::0;::::1;;36209:100;36164:145::o:0;14629:185::-;14767:39;14784:4;14790:2;14794:7;14767:39;;;;;;;;;;;;:16;:39::i;34401:348::-;34476:16;34504:23;34530:17;34540:6;34530:9;:17::i;:::-;34504:43;;34554:25;34596:15;34582:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34582:30:0;;34554:58;;34624:9;34619:103;34639:15;34635:1;:19;34619:103;;;34684:30;34704:6;34712:1;34684:19;:30::i;:::-;34670:8;34679:1;34670:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;34656:3;;;;:::i;:::-;;;;34619:103;;;-1:-1:-1;34735:8:0;34401:348;-1:-1:-1;;;34401:348:0:o;35331:80::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;35390:4:::1;:15:::0;35331:80::o;36065:92::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;36130:12:::1;:21:::0;36065:92::o;24700:233::-;24775:7;24811:30;24598:10;:17;;24510:113;24811:30;24803:5;:38;24795:95;;;;-1:-1:-1;;;24795:95:0;;15374:2:1;24795:95:0;;;15356:21:1;15413:2;15393:18;;;15386:30;15452:34;15432:18;;;15425:62;-1:-1:-1;;;15503:18:1;;;15496:42;15555:19;;24795:95:0;15172:408:1;24795:95:0;24908:10;24919:5;24908:17;;;;;;;;:::i;:::-;;;;;;;;;24901:24;;24700:233;;;:::o;35667:98::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;35738:7:::1;:21;35748:11:::0;35738:7;:21:::1;:::i;:::-;;35667:98:::0;:::o;11464:239::-;11536:7;11572:16;;;:7;:16;;;;;;-1:-1:-1;;;;;11572:16:0;;11599:73;;;;-1:-1:-1;;;11599:73:0;;17991:2:1;11599:73:0;;;17973:21:1;18030:2;18010:18;;;18003:30;18069:34;18049:18;;;18042:62;-1:-1:-1;;;18120:18:1;;;18113:39;18169:19;;11599:73:0;17789:405:1;11194:208:0;11266:7;-1:-1:-1;;;;;11294:19:0;;11286:74;;;;-1:-1:-1;;;11286:74:0;;18401:2:1;11286:74:0;;;18383:21:1;18440:2;18420:18;;;18413:30;18479:34;18459:18;;;18452:62;-1:-1:-1;;;18530:18:1;;;18523:40;18580:19;;11286:74:0;18199:406:1;11286:74:0;-1:-1:-1;;;;;;11378:16:0;;;;;:9;:16;;;;;;;11194:208::o;30501:94::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;30566:21:::1;30584:1;30566:9;:21::i;:::-;30501:94::o:0;35417:116::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;35494:13:::1;:33:::0;35417:116::o;11939:104::-;11995:13;12028:7;12021:14;;;;;:::i;13622:295::-;9379:10;-1:-1:-1;;;;;13725:24:0;;;13717:62;;;;-1:-1:-1;;;13717:62:0;;18812:2:1;13717:62:0;;;18794:21:1;18851:2;18831:18;;;18824:30;18890:27;18870:18;;;18863:55;18935:18;;13717:62:0;18610:349:1;13717:62:0;9379:10;13792:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;13792:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;13792:53:0;;;;;;;;;;13861:48;;540:41:1;;;13792:42:0;;9379:10;13861:48;;513:18:1;13861:48:0;;;;;;;13622:295;;:::o;35258:65::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;35302:8:::1;:15:::0;;-1:-1:-1;;35302:15:0::1;;;::::0;;35258:65::o;14885:328::-;15060:41;9379:10;15093:7;15060:18;:41::i;:::-;15052:103;;;;-1:-1:-1;;;15052:103:0;;;;;;;:::i;:::-;15166:39;15180:4;15186:2;15190:7;15199:5;15166:13;:39::i;:::-;14885:328;;;;:::o;31125:37::-;;;;;;;:::i;34755:497::-;16788:4;16812:16;;;:7;:16;;;;;;34853:13;;-1:-1:-1;;;;;16812:16:0;34878:97;;;;-1:-1:-1;;;34878:97:0;;19166:2:1;34878:97:0;;;19148:21:1;19205:2;19185:18;;;19178:30;19244:34;19224:18;;;19217:62;-1:-1:-1;;;19295:18:1;;;19288:45;19350:19;;34878:97:0;18964:411:1;34878:97:0;34991:8;;;;;;;:17;;35003:5;34991:17;34988:62;;35028:14;35021:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34755:497;;;:::o;34988:62::-;35058:28;35089:10;:8;:10::i;:::-;35058:41;;35144:1;35119:14;35113:28;:32;:133;;;;;;;;;;;;;;;;;35181:14;35197:18;:7;:16;:18::i;:::-;35217:13;35164:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35113:133;35106:140;34755:497;-1:-1:-1;;;34755:497:0:o;35771:122::-;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;35854:13:::1;:33;35870:17:::0;35854:13;:33:::1;:::i;35541:120::-:0;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;35623:14:::1;:32;35640:15:::0;35623:14;:32:::1;:::i;30603:192::-:0;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30692:22:0;::::1;30684:73;;;::::0;-1:-1:-1;;;30684:73:0;;20843:2:1;30684:73:0::1;::::0;::::1;20825:21:1::0;20882:2;20862:18;;;20855:30;20921:34;20901:18;;;20894:62;-1:-1:-1;;;20972:18:1;;;20965:36;21018:19;;30684:73:0::1;20641:402:1::0;30684:73:0::1;30768:19;30778:8;30768:9;:19::i;35978:81::-:0;30351:6;;-1:-1:-1;;;;;30351:6:0;9379:10;30413:23;30405:68;;;;-1:-1:-1;;;30405:68:0;;;;;;;:::i;:::-;36037:7:::1;:16:::0;;-1:-1:-1;;36037:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35978:81::o;10825:305::-;10927:4;-1:-1:-1;;;;;;10964:40:0;;-1:-1:-1;;;10964:40:0;;:105;;-1:-1:-1;;;;;;;11021:48:0;;-1:-1:-1;;;11021:48:0;10964:105;:158;;;-1:-1:-1;;;;;;;;;;2397:40:0;;;11086:36;2288:157;3453:451;3528:13;3554:19;3586:10;3590:6;3586:1;:10;:::i;:::-;:14;;3599:1;3586:14;:::i;:::-;3576:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3576:25:0;;3554:47;;-1:-1:-1;;;3612:6:0;3619:1;3612:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;3612:15:0;;;;;;;;;-1:-1:-1;;;3638:6:0;3645:1;3638:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;3638:15:0;;;;;;;;-1:-1:-1;3669:9:0;3681:10;3685:6;3681:1;:10;:::i;:::-;:14;;3694:1;3681:14;:::i;:::-;3669:26;;3664:135;3701:1;3697;:5;3664:135;;;-1:-1:-1;;;3749:5:0;3757:3;3749:11;3736:25;;;;;;;:::i;:::-;;;;3724:6;3731:1;3724:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;3724:37:0;;;;;;;;-1:-1:-1;3786:1:0;3776:11;;;;;3704:3;;;:::i;:::-;;;3664:135;;;-1:-1:-1;3817:10:0;;3809:55;;;;-1:-1:-1;;;3809:55:0;;21391:2:1;3809:55:0;;;21373:21:1;;;21410:18;;;21403:30;21469:34;21449:18;;;21442:62;21521:18;;3809:55:0;21189:356:1;2565:532:0;2621:13;2651:5;2660:1;2651:10;2647:53;;-1:-1:-1;;2678:10:0;;;;;;;;;;;;-1:-1:-1;;;2678:10:0;;;;;2565:532::o;2647:53::-;2725:5;2710:12;2766:78;2773:9;;2766:78;;2799:8;;;;:::i;:::-;;-1:-1:-1;2822:10:0;;-1:-1:-1;2830:2:0;2822:10;;:::i;:::-;;;2766:78;;;2854:19;2886:6;2876:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2876:17:0;;2854:39;;2904:154;2911:10;;2904:154;;2938:11;2948:1;2938:11;;:::i;:::-;;-1:-1:-1;3007:10:0;3015:2;3007:5;:10;:::i;:::-;2994:24;;:2;:24;:::i;:::-;2981:39;;2964:6;2971;2964:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2964:56:0;;;;;;;;-1:-1:-1;3035:11:0;3044:2;3035:11;;:::i;:::-;;;2904:154;;;3082:6;2565:532;-1:-1:-1;;;;2565:532:0:o;20705:174::-;20780:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;20780:29:0;-1:-1:-1;;;;;20780:29:0;;;;;;;;:24;;20834:23;20780:24;20834:14;:23::i;:::-;-1:-1:-1;;;;;20825:46:0;;;;;;;;;;;20705:174;;:::o;17017:348::-;17110:4;16812:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16812:16:0;17127:73;;;;-1:-1:-1;;;17127:73:0;;22259:2:1;17127:73:0;;;22241:21:1;22298:2;22278:18;;;22271:30;22337:34;22317:18;;;22310:62;-1:-1:-1;;;22388:18:1;;;22381:42;22440:19;;17127:73:0;22057:408:1;17127:73:0;17211:13;17227:23;17242:7;17227:14;:23::i;:::-;17211:39;;17280:5;-1:-1:-1;;;;;17269:16:0;:7;-1:-1:-1;;;;;17269:16:0;;:51;;;;17313:7;-1:-1:-1;;;;;17289:31:0;:20;17301:7;17289:11;:20::i;:::-;-1:-1:-1;;;;;17289:31:0;;17269:51;:87;;;-1:-1:-1;;;;;;14109:25:0;;;14085:4;14109:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;17324:32;13988:164;20009:578;20168:4;-1:-1:-1;;;;;20141:31:0;:23;20156:7;20141:14;:23::i;:::-;-1:-1:-1;;;;;20141:31:0;;20133:85;;;;-1:-1:-1;;;20133:85:0;;22672:2:1;20133:85:0;;;22654:21:1;22711:2;22691:18;;;22684:30;22750:34;22730:18;;;22723:62;-1:-1:-1;;;22801:18:1;;;22794:39;22850:19;;20133:85:0;22470:405:1;20133:85:0;-1:-1:-1;;;;;20237:16:0;;20229:65;;;;-1:-1:-1;;;20229:65:0;;23082:2:1;20229:65:0;;;23064:21:1;23121:2;23101:18;;;23094:30;23160:34;23140:18;;;23133:62;-1:-1:-1;;;23211:18:1;;;23204:34;23255:19;;20229:65:0;22880:400:1;20229:65:0;20307:39;20328:4;20334:2;20338:7;20307:20;:39::i;:::-;20411:29;20428:1;20432:7;20411:8;:29::i;:::-;-1:-1:-1;;;;;20453:15:0;;;;;;:9;:15;;;;;:20;;20472:1;;20453:15;:20;;20472:1;;20453:20;:::i;:::-;;;;-1:-1:-1;;;;;;;20484:13:0;;;;;;:9;:13;;;;;:18;;20501:1;;20484:13;:18;;20501:1;;20484:18;:::i;:::-;;;;-1:-1:-1;;20513:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;20513:21:0;-1:-1:-1;;;;;20513:21:0;;;;;;;;;20552:27;;20513:16;;20552:27;;;;;;;20009:578;;;:::o;36629:159::-;36696:7;36713:14;36757:5;36740:23;;;;;;;;:::i;:::-;;;;-1:-1:-1;;36740:23:0;;;;;;;;;36730:34;;36740:23;36730:34;;;;;36629:159;-1:-1:-1;;;36629:159:0:o;36790:220::-;36915:66;;23821::1;36915::0;;;23809:79:1;23904:12;;;23897:28;;;36867:7:0;;;;23941:12:1;;36915:66:0;23579:380:1;37014:227:0;37104:7;37130:9;37141;37152:7;37163:11;37169:4;37163:5;:11::i;:::-;37192:41;;;;;;;;;;;;24191:25:1;;;24264:4;24252:17;;24232:18;;;24225:45;;;;24286:18;;;24279:34;;;24329:18;;;24322:34;;;37129:45:0;;-1:-1:-1;37129:45:0;;-1:-1:-1;37129:45:0;-1:-1:-1;37192:41:0;;24163:19:1;;37192:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37192:41:0;;-1:-1:-1;;37192:41:0;;;37014:227;-1:-1:-1;;;;;;;37014:227:0:o;37566:572::-;37625:13;37651:17;37677:3;37651:30;;37692:19;37724:4;:11;37714:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37714:22:0;;37692:44;;37752:6;37747:352;37768:4;:11;37764:1;:15;37747:352;;;37863:2;37851:4;37856:1;37851:7;;;;;;;;:::i;:::-;;;;;;;37845:20;;;;37844:49;;;37889:3;37877:4;37882:1;37877:7;;;;;;;;:::i;:::-;;;;;;;37871:21;;37844:49;37840:248;;;38009:2;37998:4;38003:1;37998:7;;;;;;;;:::i;:::-;;;;;37992:19;;;37998:7;;37992:19;:::i;:::-;37985:27;;37973:6;37980:1;37973:9;;;;;;;;:::i;:::-;;;;:39;-1:-1:-1;;;;;37973:39:0;;;;;;;;;37840:248;;;38065:4;38070:1;38065:7;;;;;;;;:::i;:::-;;;;;;;;;38053:6;38060:1;38053:9;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;38053:19:0;;;;;;;;;37840:248;37781:3;;;;:::i;:::-;;;;37747:352;;17707:110;17783:26;17793:2;17797:7;17783:26;;;;;;;;;;;;:9;:26::i;30803:173::-;30878:6;;;-1:-1:-1;;;;;30895:17:0;;;-1:-1:-1;;;;;;30895:17:0;;;;;;;30928:40;;30878:6;;;30895:17;30878:6;;30928:40;;30859:16;;30928:40;30848:128;30803:173;:::o;16095:315::-;16252:28;16262:4;16268:2;16272:7;16252:9;:28::i;:::-;16299:48;16322:4;16328:2;16332:7;16341:5;16299:22;:48::i;:::-;16291:111;;;;-1:-1:-1;;;16291:111:0;;;;;;;:::i;31948:102::-;32008:13;32037:7;32030:14;;;;;:::i;25546:589::-;-1:-1:-1;;;;;25752:18:0;;25748:187;;25787:40;25819:7;26962:10;:17;;26935:24;;;;:15;:24;;;;;:44;;;26990:24;;;;;;;;;;;;26858:164;25787:40;25748:187;;;25857:2;-1:-1:-1;;;;;25849:10:0;:4;-1:-1:-1;;;;;25849:10:0;;25845:90;;25876:47;25909:4;25915:7;25876:32;:47::i;:::-;-1:-1:-1;;;;;25949:16:0;;25945:183;;25982:45;26019:7;25982:36;:45::i;25945:183::-;26055:4;-1:-1:-1;;;;;26049:10:0;:2;-1:-1:-1;;;;;26049:10:0;;26045:83;;26076:40;26104:2;26108:7;26076:27;:40::i;37245:317::-;37302:9;37313;37324:7;37356:4;:11;37371:2;37356:17;37348:54;;;;-1:-1:-1;;;37348:54:0;;25144:2:1;37348:54:0;;;25126:21:1;25183:2;25163:18;;;25156:30;25222:26;25202:18;;;25195:54;25266:18;;37348:54:0;24942:348:1;37348:54:0;-1:-1:-1;;;37456:2:0;37446:13;;37440:20;37494:2;37484:13;;37478:20;37540:2;37530:13;;;37524:20;37440;;37521:1;37516:29;;;;;37245:317::o;18044:321::-;18174:18;18180:2;18184:7;18174:5;:18::i;:::-;18225:54;18256:1;18260:2;18264:7;18273:5;18225:22;:54::i;:::-;18203:154;;;;-1:-1:-1;;;18203:154:0;;;;;;;:::i;21444:799::-;21599:4;-1:-1:-1;;;;;21620:13:0;;4091:20;4139:8;21616:620;;21656:72;;-1:-1:-1;;;21656:72:0;;-1:-1:-1;;;;;21656:36:0;;;;;:72;;9379:10;;21707:4;;21713:7;;21722:5;;21656:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21656:72:0;;;;;;;;-1:-1:-1;;21656:72:0;;;;;;;;;;;;:::i;:::-;;;21652:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21898:6;:13;21915:1;21898:18;21894:272;;21941:60;;-1:-1:-1;;;21941:60:0;;;;;;;:::i;21894:272::-;22116:6;22110:13;22101:6;22097:2;22093:15;22086:38;21652:529;-1:-1:-1;;;;;;21779:51:0;-1:-1:-1;;;21779:51:0;;-1:-1:-1;21772:58:0;;21616:620;-1:-1:-1;22220:4:0;21444:799;;;;;;:::o;27649:988::-;27915:22;27965:1;27940:22;27957:4;27940:16;:22::i;:::-;:26;;;;:::i;:::-;27977:18;27998:26;;;:17;:26;;;;;;27915:51;;-1:-1:-1;28131:28:0;;;28127:328;;-1:-1:-1;;;;;28198:18:0;;28176:19;28198:18;;;:12;:18;;;;;;;;:34;;;;;;;;;28249:30;;;;;;:44;;;28366:30;;:17;:30;;;;;:43;;;28127:328;-1:-1:-1;28551:26:0;;;;:17;:26;;;;;;;;28544:33;;;-1:-1:-1;;;;;28595:18:0;;;;;:12;:18;;;;;:34;;;;;;;28588:41;27649:988::o;28932:1079::-;29210:10;:17;29185:22;;29210:21;;29230:1;;29210:21;:::i;:::-;29242:18;29263:24;;;:15;:24;;;;;;29636:10;:26;;29185:46;;-1:-1:-1;29263:24:0;;29185:46;;29636:26;;;;;;:::i;:::-;;;;;;;;;29614:48;;29700:11;29675:10;29686;29675:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;29780:28;;;:15;:28;;;;;;;:41;;;29952:24;;;;;29945:31;29987:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;29003:1008;;;28932:1079;:::o;26436:221::-;26521:14;26538:20;26555:2;26538:16;:20::i;:::-;-1:-1:-1;;;;;26569:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;26614:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;26436:221:0:o;18701:382::-;-1:-1:-1;;;;;18781:16:0;;18773:61;;;;-1:-1:-1;;;18773:61:0;;26377:2:1;18773:61:0;;;26359:21:1;;;26396:18;;;26389:30;26455:34;26435:18;;;26428:62;26507:18;;18773:61:0;26175:356:1;18773:61:0;16788:4;16812:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16812:16:0;:30;18845:58;;;;-1:-1:-1;;;18845:58:0;;26738:2:1;18845:58:0;;;26720:21:1;26777:2;26757:18;;;26750:30;26816;26796:18;;;26789:58;26864:18;;18845:58:0;26536:352:1;18845:58:0;18916:45;18945:1;18949:2;18953:7;18916:20;:45::i;:::-;-1:-1:-1;;;;;18974:13:0;;;;;;:9;:13;;;;;:18;;18991:1;;18974:13;:18;;18991:1;;18974:18;:::i;:::-;;;;-1:-1:-1;;19003:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;19003:21:0;-1:-1:-1;;;;;19003:21:0;;;;;;;;19042:33;;19003:16;;;19042:33;;19003:16;;19042:33;18701:382;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:250::-;1027:1;1037:113;1051:6;1048:1;1045:13;1037:113;;;1127:11;;;1121:18;1108:11;;;1101:39;1073:2;1066:10;1037:113;;;-1:-1:-1;;1184:1:1;1166:16;;1159:27;942:250::o;1197:271::-;1239:3;1277:5;1271:12;1304:6;1299:3;1292:19;1320:76;1389:6;1382:4;1377:3;1373:14;1366:4;1359:5;1355:16;1320:76;:::i;:::-;1450:2;1429:15;-1:-1:-1;;1425:29:1;1416:39;;;;1457:4;1412:50;;1197:271;-1:-1:-1;;1197:271:1:o;1473:220::-;1622:2;1611:9;1604:21;1585:4;1642:45;1683:2;1672:9;1668:18;1660:6;1642:45;:::i;1698:180::-;1757:6;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;-1:-1:-1;1849:23:1;;1698:180;-1:-1:-1;1698:180:1:o;2091:173::-;2159:20;;-1:-1:-1;;;;;2208:31:1;;2198:42;;2188:70;;2254:1;2251;2244:12;2269:254;2337:6;2345;2398:2;2386:9;2377:7;2373:23;2369:32;2366:52;;;2414:1;2411;2404:12;2366:52;2437:29;2456:9;2437:29;:::i;:::-;2427:39;2513:2;2498:18;;;;2485:32;;-1:-1:-1;;;2269:254:1:o;2710:328::-;2787:6;2795;2803;2856:2;2844:9;2835:7;2831:23;2827:32;2824:52;;;2872:1;2869;2862:12;2824:52;2895:29;2914:9;2895:29;:::i;:::-;2885:39;;2943:38;2977:2;2966:9;2962:18;2943:38;:::i;:::-;2933:48;;3028:2;3017:9;3013:18;3000:32;2990:42;;2710:328;;;;;:::o;3043:127::-;3104:10;3099:3;3095:20;3092:1;3085:31;3135:4;3132:1;3125:15;3159:4;3156:1;3149:15;3175:719;3218:5;3271:3;3264:4;3256:6;3252:17;3248:27;3238:55;;3289:1;3286;3279:12;3238:55;3325:6;3312:20;3351:18;3388:2;3384;3381:10;3378:36;;;3394:18;;:::i;:::-;3469:2;3463:9;3437:2;3523:13;;-1:-1:-1;;3519:22:1;;;3543:2;3515:31;3511:40;3499:53;;;3567:18;;;3587:22;;;3564:46;3561:72;;;3613:18;;:::i;:::-;3653:10;3649:2;3642:22;3688:2;3680:6;3673:18;3734:3;3727:4;3722:2;3714:6;3710:15;3706:26;3703:35;3700:55;;;3751:1;3748;3741:12;3700:55;3815:2;3808:4;3800:6;3796:17;3789:4;3781:6;3777:17;3764:54;3862:1;3855:4;3850:2;3842:6;3838:15;3834:26;3827:37;3882:6;3873:15;;;;;;3175:719;;;;:::o;3899:616::-;3995:6;4003;4011;4064:2;4052:9;4043:7;4039:23;4035:32;4032:52;;;4080:1;4077;4070:12;4032:52;4103:29;4122:9;4103:29;:::i;:::-;4093:39;;4183:2;4172:9;4168:18;4155:32;4206:18;4247:2;4239:6;4236:14;4233:34;;;4263:1;4260;4253:12;4233:34;4286:50;4328:7;4319:6;4308:9;4304:22;4286:50;:::i;:::-;4276:60;;4389:2;4378:9;4374:18;4361:32;4345:48;;4418:2;4408:8;4405:16;4402:36;;;4434:1;4431;4424:12;4402:36;;4457:52;4501:7;4490:8;4479:9;4475:24;4457:52;:::i;:::-;4447:62;;;3899:616;;;;;:::o;4520:457::-;4606:6;4614;4622;4675:2;4663:9;4654:7;4650:23;4646:32;4643:52;;;4691:1;4688;4681:12;4643:52;4727:9;4714:23;4704:33;;4788:2;4777:9;4773:18;4760:32;4815:18;4807:6;4804:30;4801:50;;;4847:1;4844;4837:12;4801:50;4870;4912:7;4903:6;4892:9;4888:22;4870:50;:::i;:::-;4860:60;;;4967:2;4956:9;4952:18;4939:32;4929:42;;4520:457;;;;;:::o;4982:186::-;5041:6;5094:2;5082:9;5073:7;5069:23;5065:32;5062:52;;;5110:1;5107;5100:12;5062:52;5133:29;5152:9;5133:29;:::i;5173:632::-;5344:2;5396:21;;;5466:13;;5369:18;;;5488:22;;;5315:4;;5344:2;5567:15;;;;5541:2;5526:18;;;5315:4;5610:169;5624:6;5621:1;5618:13;5610:169;;;5685:13;;5673:26;;5754:15;;;;5719:12;;;;5646:1;5639:9;5610:169;;;-1:-1:-1;5796:3:1;;5173:632;-1:-1:-1;;;;;;5173:632:1:o;5810:248::-;5878:6;5886;5939:2;5927:9;5918:7;5914:23;5910:32;5907:52;;;5955:1;5952;5945:12;5907:52;-1:-1:-1;;5978:23:1;;;6048:2;6033:18;;;6020:32;;-1:-1:-1;5810:248:1:o;6063:322::-;6132:6;6185:2;6173:9;6164:7;6160:23;6156:32;6153:52;;;6201:1;6198;6191:12;6153:52;6241:9;6228:23;6274:18;6266:6;6263:30;6260:50;;;6306:1;6303;6296:12;6260:50;6329;6371:7;6362:6;6351:9;6347:22;6329:50;:::i;6390:254::-;6455:6;6463;6516:2;6504:9;6495:7;6491:23;6487:32;6484:52;;;6532:1;6529;6522:12;6484:52;6555:29;6574:9;6555:29;:::i;:::-;6545:39;;6603:35;6634:2;6623:9;6619:18;6603:35;:::i;:::-;6593:45;;6390:254;;;;;:::o;6649:538::-;6744:6;6752;6760;6768;6821:3;6809:9;6800:7;6796:23;6792:33;6789:53;;;6838:1;6835;6828:12;6789:53;6861:29;6880:9;6861:29;:::i;:::-;6851:39;;6909:38;6943:2;6932:9;6928:18;6909:38;:::i;:::-;6899:48;;6994:2;6983:9;6979:18;6966:32;6956:42;;7049:2;7038:9;7034:18;7021:32;7076:18;7068:6;7065:30;7062:50;;;7108:1;7105;7098:12;7062:50;7131;7173:7;7164:6;7153:9;7149:22;7131:50;:::i;:::-;7121:60;;;6649:538;;;;;;;:::o;7192:260::-;7260:6;7268;7321:2;7309:9;7300:7;7296:23;7292:32;7289:52;;;7337:1;7334;7327:12;7289:52;7360:29;7379:9;7360:29;:::i;:::-;7350:39;;7408:38;7442:2;7431:9;7427:18;7408:38;:::i;7457:356::-;7659:2;7641:21;;;7678:18;;;7671:30;7737:34;7732:2;7717:18;;7710:62;7804:2;7789:18;;7457:356::o;7818:380::-;7897:1;7893:12;;;;7940;;;7961:61;;8015:4;8007:6;8003:17;7993:27;;7961:61;8068:2;8060:6;8057:14;8037:18;8034:38;8031:161;;8114:10;8109:3;8105:20;8102:1;8095:31;8149:4;8146:1;8139:15;8177:4;8174:1;8167:15;8031:161;;7818:380;;;:::o;8203:697::-;8424:3;8462:6;8456:13;8478:66;8537:6;8532:3;8525:4;8517:6;8513:17;8478:66;:::i;:::-;8607:13;;8566:16;;;;8629:70;8607:13;8566:16;8676:4;8664:17;;8629:70;:::i;:::-;8766:13;;8721:20;;;8788:70;8766:13;8721:20;8835:4;8823:17;;8788:70;:::i;:::-;8874:20;;8203:697;-1:-1:-1;;;;;8203:697:1:o;10145:413::-;10347:2;10329:21;;;10386:2;10366:18;;;10359:30;10425:34;10420:2;10405:18;;10398:62;-1:-1:-1;;;10491:2:1;10476:18;;10469:47;10548:3;10533:19;;10145:413::o;13029:127::-;13090:10;13085:3;13081:20;13078:1;13071:31;13121:4;13118:1;13111:15;13145:4;13142:1;13135:15;13161:125;13226:9;;;13247:10;;;13244:36;;;13260:18;;:::i;13700:168::-;13773:9;;;13804;;13821:15;;;13815:22;;13801:37;13791:71;;13842:18;;:::i;14278:135::-;14317:3;14338:17;;;14335:43;;14358:18;;:::i;:::-;-1:-1:-1;14405:1:1;14394:13;;14278:135::o;15040:127::-;15101:10;15096:3;15092:20;15089:1;15082:31;15132:4;15129:1;15122:15;15156:4;15153:1;15146:15;15711:545;15813:2;15808:3;15805:11;15802:448;;;15849:1;15874:5;15870:2;15863:17;15919:4;15915:2;15905:19;15989:2;15977:10;15973:19;15970:1;15966:27;15960:4;15956:38;16025:4;16013:10;16010:20;16007:47;;;-1:-1:-1;16048:4:1;16007:47;16103:2;16098:3;16094:12;16091:1;16087:20;16081:4;16077:31;16067:41;;16158:82;16176:2;16169:5;16166:13;16158:82;;;16221:17;;;16202:1;16191:13;16158:82;;;16162:3;;;15711:545;;;:::o;16432:1352::-;16558:3;16552:10;16585:18;16577:6;16574:30;16571:56;;;16607:18;;:::i;:::-;16636:97;16726:6;16686:38;16718:4;16712:11;16686:38;:::i;:::-;16680:4;16636:97;:::i;:::-;16788:4;;16852:2;16841:14;;16869:1;16864:663;;;;17571:1;17588:6;17585:89;;;-1:-1:-1;17640:19:1;;;17634:26;17585:89;-1:-1:-1;;16389:1:1;16385:11;;;16381:24;16377:29;16367:40;16413:1;16409:11;;;16364:57;17687:81;;16834:944;;16864:663;15658:1;15651:14;;;15695:4;15682:18;;-1:-1:-1;;16900:20:1;;;17018:236;17032:7;17029:1;17026:14;17018:236;;;17121:19;;;17115:26;17100:42;;17213:27;;;;17181:1;17169:14;;;;17048:19;;17018:236;;;17022:3;17282:6;17273:7;17270:19;17267:201;;;17343:19;;;17337:26;-1:-1:-1;;17426:1:1;17422:14;;;17438:3;17418:24;17414:37;17410:42;17395:58;17380:74;;17267:201;-1:-1:-1;;;;;17514:1:1;17498:14;;;17494:22;17481:36;;-1:-1:-1;16432:1352:1:o;19380:1256::-;19604:3;19642:6;19636:13;19668:4;19681:64;19738:6;19733:3;19728:2;19720:6;19716:15;19681:64;:::i;:::-;19808:13;;19767:16;;;;19830:68;19808:13;19767:16;19865:15;;;19830:68;:::i;:::-;19987:13;;19920:20;;;19960:1;;20025:36;19987:13;20025:36;:::i;:::-;20080:1;20097:18;;;20124:141;;;;20279:1;20274:337;;;;20090:521;;20124:141;-1:-1:-1;;20159:24:1;;20145:39;;20236:16;;20229:24;20215:39;;20204:51;;;-1:-1:-1;20124:141:1;;20274:337;20305:6;20302:1;20295:17;20353:2;20350:1;20340:16;20378:1;20392:169;20406:8;20403:1;20400:15;20392:169;;;20488:14;;20473:13;;;20466:37;20531:16;;;;20423:10;;20392:169;;;20396:3;;20592:8;20585:5;20581:20;20574:27;;20090:521;-1:-1:-1;20627:3:1;;19380:1256;-1:-1:-1;;;;;;;;;;19380:1256:1:o;21048:136::-;21087:3;21115:5;21105:39;;21124:18;;:::i;:::-;-1:-1:-1;;;21160:18:1;;21048:136::o;21550:127::-;21611:10;21606:3;21602:20;21599:1;21592:31;21642:4;21639:1;21632:15;21666:4;21663:1;21656:15;21682:120;21722:1;21748;21738:35;;21753:18;;:::i;:::-;-1:-1:-1;21787:9:1;;21682:120::o;21807:128::-;21874:9;;;21895:11;;;21892:37;;;21909:18;;:::i;21940:112::-;21972:1;21998;21988:35;;22003:18;;:::i;:::-;-1:-1:-1;22037:9:1;;21940:112::o;23285:289::-;23416:3;23454:6;23448:13;23470:66;23529:6;23524:3;23517:4;23509:6;23505:17;23470:66;:::i;:::-;23552:16;;;;;23285:289;-1:-1:-1;;23285:289:1:o;24367:151::-;24457:4;24450:12;;;24436;;;24432:31;;24475:14;;24472:40;;;24492:18;;:::i;24523:414::-;24725:2;24707:21;;;24764:2;24744:18;;;24737:30;24803:34;24798:2;24783:18;;24776:62;-1:-1:-1;;;24869:2:1;24854:18;;24847:48;24927:3;24912:19;;24523:414::o;25295:489::-;-1:-1:-1;;;;;25564:15:1;;;25546:34;;25616:15;;25611:2;25596:18;;25589:43;25663:2;25648:18;;25641:34;;;25711:3;25706:2;25691:18;;25684:31;;;25489:4;;25732:46;;25758:19;;25750:6;25732:46;:::i;:::-;25724:54;25295:489;-1:-1:-1;;;;;;25295:489:1:o;25789:249::-;25858:6;25911:2;25899:9;25890:7;25886:23;25882:32;25879:52;;;25927:1;25924;25917:12;25879:52;25959:9;25953:16;25978:30;26002:5;25978:30;:::i;26043:127::-;26104:10;26099:3;26095:20;26092:1;26085:31;26135:4;26132:1;26125:15;26159:4;26156:1;26149:15
Swarm Source
ipfs://1a795e0636f9b10a6194dec32904de44329fe3a664cde692ca7d0d8782d15aea
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.