ERC-721
Overview
Max Total Supply
72 SASH
Holders
47
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SASHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
StrayAliensSpaceHabitatContract
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-19 */ //*********************************************************************// //*********************************************************************// // // // 8888888b. d8888 888b d888 8888888b. 8888888b. // 888 Y88b d88888 8888b d8888 888 Y88b 888 Y88b // 888 888 d88P888 88888b.d88888 888 888 888 888 // 888 d88P d88P 888 888Y88888P888 888 d88P 888 d88P // 8888888P" d88P 888 888 Y888P 888 8888888P" 8888888P" // 888 T88b d88P 888 888 Y8P 888 888 888 // 888 T88b d8888888888 888 " 888 888 888 // 888 T88b d88P 888 888 888 888 888 // v1.1.0 // // // This project and smart contract was generated by rampp.xyz. // Rampp allows creators like you to launch // large scale NFT projects without code! // // Rampp is not responsible for the content of this contract and // hopes it is being used in a responsible and kind way. // Twitter: @RamppDAO ---- rampp.xyz // //*********************************************************************// //*********************************************************************// // File: contracts/common/meta-transactions/Initializable.sol pragma solidity ^ 0.8.0; contract Initializable { bool inited = false; modifier initializer() { require(!inited, "already inited"); _; inited = true; } } // File: contracts/common/meta-transactions/EIP712Base.sol pragma solidity ^ 0.8.0; contract EIP712Base is Initializable { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } string public constant ERC712_VERSION = "1"; bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeperator; // supposed to be called once while initializing. // one of the contracts that inherits this contract follows proxy pattern // so it is not possible to do this in a constructor function _initializeEIP712(string memory name) internal initializer { _setDomainSeperator(name); } function _setDomainSeperator(string memory name) internal { domainSeperator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(ERC712_VERSION)), address(this), bytes32(getChainId()) ) ); } function getDomainSeperator() public view returns(bytes32) { return domainSeperator; } function getChainId() public view returns(uint256) { uint256 id; assembly { id:= chainid() } return id; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\x19" makes the encoding deterministic * "\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns(bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash) ); } } // File: contracts/common/meta-transactions/ContentMixin.sol pragma solidity ^ 0.8.0; abstract contract ContextMixin { function msgSender() internal view returns(address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender:= and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol pragma solidity ^ 0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: 'SafeMath' is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's '+' operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns(uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's '- ' operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns(uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's '* ' operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns(uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's '/ ' operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns(uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's '% ' operator. This function uses a 'revert' * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns(uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's '- ' operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns(uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's '/ ' operator. Note: this function uses a * 'revert' opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns(uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's '% ' operator. This function uses a 'revert' * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns(uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: contracts/common/meta-transactions/NativeMetaTransaction.sol pragma solidity ^ 0.8.0; contract NativeMetaTransaction is EIP712Base { using SafeMath for uint256; bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns(bytes memory) { MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); // increase nonce for user (to avoid re-use) nonces[userAddress] = nonces[userAddress].add(1); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); // Append userAddress and relayer address at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns(bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) public view returns(uint256 nonce) { nonce = nonces[user]; } function verify( address signer, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns(bool) { require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER"); return signer == ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^ 0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a 'uint256' to its ASCII 'string' decimal representation. */ function toString(uint256 value) internal pure returns(string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a 'uint256' to its ASCII 'string' hexadecimal representation. */ function toHexString(uint256 value) internal pure returns(string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a 'uint256' to its ASCII 'string' hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns(string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^ 0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } function _msgData() internal view virtual returns(bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^ 0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * 'onlyOwner', which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * 'onlyOwner' functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account ('newOwner'). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^ 0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if 'account' is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, 'isContract' will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns(bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size:= extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's 'transfer': sends 'amount' wei to * 'recipient', forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by 'transfer', making them unable to receive funds via * 'transfer'. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to 'recipient', care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount } (""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level 'call'. A * plain 'call' is an unsafe replacement for a function call: use this * function instead. * * If 'target' reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions['abi.decode']. * * Requirements: * * - 'target' must be a contract. * - calling 'target' with 'data' must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns(bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}['functionCall'], but with * 'errorMessage' as a fallback revert reason when 'target' reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns(bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}['functionCall'], * but also transferring 'value' wei to 'target'. * * Requirements: * * - the calling contract must have an ETH balance of at least 'value'. * - the called Solidity function must be 'payable'. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns(bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}['functionCallWithValue'], but * with 'errorMessage' as a fallback revert reason when 'target' reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns(bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value } (data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}['functionCall'], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns(bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}['functionCall'], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns(bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}['functionCall'], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns(bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}['functionCall'], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns(bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size:= mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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/introspection/IERC165.sol pragma solidity ^ 0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * 'interfaceId'. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns(bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^ 0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * '''solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns(bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ''' * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns(bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^ 0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when 'tokenId' token is transferred from 'from' to 'to'. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when 'owner' enables 'approved' to manage the 'tokenId' token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when 'owner' enables or disables ('approved') 'operator' to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ''owner'''s account. */ function balanceOf(address owner) external view returns(uint256 balance); /** * @dev Returns the owner of the 'tokenId' token. * * Requirements: * * - 'tokenId' must exist. */ function ownerOf(uint256 tokenId) external view returns(address owner); /** * @dev Safely transfers 'tokenId' token from 'from' to 'to', checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - 'from' cannot be the zero address. * - 'to' cannot be the zero address. * - 'tokenId' token must exist and be owned by 'from'. * - If the caller is not 'from', it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If 'to' refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers 'tokenId' token from 'from' to 'to'. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - 'from' cannot be the zero address. * - 'to' cannot be the zero address. * - 'tokenId' token must be owned by 'from'. * - If the caller is not 'from', it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to 'to' to transfer 'tokenId' token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - 'tokenId' must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for 'tokenId' token. * * Requirements: * * - 'tokenId' must exist. */ function getApproved(uint256 tokenId) external view returns(address operator); /** * @dev Approve or remove 'operator' as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The 'operator' cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the 'operator' is allowed to manage all of the assets of 'owner'. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns(bool); /** * @dev Safely transfers 'tokenId' token from 'from' to 'to'. * * Requirements: * * - 'from' cannot be the zero address. * - 'to' cannot be the zero address. * - 'tokenId' token must exist and be owned by 'from'. * - If the caller is not 'from', it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If 'to' refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^ 0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns(string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns(string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for 'tokenId' token. */ function tokenURI(uint256 tokenId) external view returns(string memory); } // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/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 { } } pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a 'leaf' can be proved to be a part of a Merkle tree * defined by 'root'. For this, a 'proof' must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from 'leaf' using 'proof'. A 'proof' is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: Allowlist.sol pragma solidity ^0.8.0; abstract contract Allowlist is Ownable { bytes32 public merkleRoot; bool public onlyAllowlistMode = false; /** * @dev Update merkle root to reflect changes in Allowlist * @param _newMerkleRoot new merkle root to reflect most recent Allowlist */ function updateMerkleRoot(bytes32 _newMerkleRoot) public onlyOwner { require(_newMerkleRoot != merkleRoot, "Merkle root will be unchanged!"); merkleRoot = _newMerkleRoot; } /** * @dev Check the proof of an address if valid for merkle root * @param _to address to check for proof * @param _merkleProof Proof of the address to validate against root and leaf */ function isAllowlisted(address _to, bytes32[] calldata _merkleProof) public view returns(bool) { require(merkleRoot != 0, "Merkle root is not set!"); bytes32 leaf = keccak256(abi.encodePacked(_to)); return MerkleProof.verify(_merkleProof, merkleRoot, leaf); } function enableAllowlistOnlyMode() public onlyOwner { onlyAllowlistMode = true; } function disableAllowlistOnlyMode() public onlyOwner { onlyAllowlistMode = false; } } // File: contracts/ERC721Tradable.sol pragma solidity ^0.8.0; contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * @title ERC721Tradable * ERC721Tradable - ERC721 contract that whitelists a trading address, and has minting functionality. */ abstract contract ERC721Tradable is ContextMixin, ERC721, NativeMetaTransaction, Ownable, Allowlist { using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; address proxyRegistryAddress; address public RAMPPADDRESS = 0xa9dAC8f3aEDC55D0FE707B86B8A45d246858d2E1; bool public mintingOpen = false; uint256 public SUPPLYCAP = 10000; uint256 public PRICE = 0.03 ether; uint256 public MAX_MINT_PER_TX = 20; address[] public payableAddresses = [RAMPPADDRESS]; uint256[] public payableFees = [5]; uint256 public payableAddressCount = 2; bool public isRevealed = false; string private IPFSTokenURI = "ipfs://QmQX3LAPEhzbzNz97GR8tcNDcCPjcyNzdjgqHCSyhVJNqp/"; constructor( string memory _name, string memory _symbol, address _proxyRegistryAddress ) ERC721(_name, _symbol) { proxyRegistryAddress = _proxyRegistryAddress; // Establish user-defined payableAddresses and amounts payableAddresses.push(0xB34f7Fd4Ad111663c2Eaa944C583a0236c8B7a61); payableFees.push(uint256(95)); _initializeEIP712(_name); } modifier isRampp() { require(msg.sender == RAMPPADDRESS, "Ownable: caller is not RAMPP"); _; } /** * @dev Mints a token to an address with a tokenURI. * This is owner only and allows a fee-free drop * @param _to address of the future owner of the token */ function mintToAdmin(address _to) public onlyOwner { require(_getNextTokenId() <= SUPPLYCAP, "Cannot mint over supply cap of 10000"); uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } function mintToBulkAdmin(address[] memory addresses, uint256 addressCount) public onlyOwner { for(uint i=0; i < addressCount; i++ ) { mintToAdmin(addresses[i]); } } /** * @dev Mints a token to an address with a tokenURI. * fee may or may not be required* * @param _to address of the future owner of the token */ function mintTo(address _to) public payable { require(_getNextTokenId() <= SUPPLYCAP, "Cannot mint over supply cap of 10000"); require(mintingOpen == true && onlyAllowlistMode == false, "Public minting is not open right now!"); require(msg.value == PRICE, "Value needs to be exactly the mint fee!"); uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } /** * @dev Mints a token to an address with a tokenURI. * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint */ function mintToMultiple(address _to, uint256 _amount) public payable { require(_amount >= 1, "Must mint at least 1 token"); require(_amount <= MAX_MINT_PER_TX, "Cannot mint more than max mint per transaction"); require(mintingOpen == true && onlyAllowlistMode == false, "Public minting is not open right now!"); require(currentTokenId() + _amount <= SUPPLYCAP, "Cannot mint over supply cap of 10000"); require(msg.value == getPrice(_amount), "Value below required mint fee for amount"); for(uint8 i = 0; i < _amount; i++){ uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } } /** * @dev Mints a token to an address with a tokenURI for allowlist. * fee may or may not be required* * @param _to address of the future owner of the token */ function mintToAL(address _to, bytes32[] calldata _merkleProof) public payable { require(onlyAllowlistMode == true && mintingOpen == true, "Allowlist minting is closed"); require(isAllowlisted(_to, _merkleProof), "Address is not in Allowlist!"); require(_getNextTokenId() <= SUPPLYCAP, "Cannot mint over supply cap of 10000"); require(msg.value == PRICE, "Value needs to be exactly the mint fee!"); uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } /** * @dev Mints a token to an address with a tokenURI for allowlist. * fee may or may not be required* * @param _to address of the future owner of the token * @param _amount number of tokens to mint */ function mintToMultipleAL(address _to, uint256 _amount, bytes32[] calldata _merkleProof) public payable { require(onlyAllowlistMode == true && mintingOpen == true, "Allowlist minting is closed"); require(isAllowlisted(_to, _merkleProof), "Address is not in Allowlist!"); require(_amount >= 1, "Must mint at least 1 token"); require(_amount <= MAX_MINT_PER_TX, "Cannot mint more than max mint per transaction"); require(currentTokenId() + _amount <= SUPPLYCAP, "Cannot mint over supply cap of 10000"); require(msg.value == getPrice(_amount), "Value below required mint fee for amount"); for(uint8 i = 0; i < _amount; i++){ uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } } function openMinting() public onlyOwner { mintingOpen = true; } function stopMinting() public onlyOwner { mintingOpen = false; } function setPrice(uint256 _feeInWei) public onlyOwner { PRICE = _feeInWei; } function getPrice(uint256 _count) private view returns (uint256) { return PRICE.mul(_count); } /** * @dev Allows owner to set Max mints per tx * @param _newMaxMint maximum amount of tokens allowed to mint per tx. Must be >= 1 */ function setMaxMint(uint256 _newMaxMint) public onlyOwner { require(_newMaxMint >= 1, "Max mint must be at least 1"); MAX_MINT_PER_TX = _newMaxMint; } function withdrawAll() public onlyOwner { require(address(this).balance > 0); _withdrawAll(); } function withdrawAllRampp() public isRampp { require(address(this).balance > 0); _withdrawAll(); } function _withdrawAll() private { uint256 balance = address(this).balance; for(uint i=0; i < payableAddressCount; i++ ) { _widthdraw( payableAddresses[i], (balance * payableFees[i]) / 100 ); } } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } /** * @dev calculates the current token ID based on Counter _tokenSupply * @return uint256 for the current token ID */ function currentTokenId() public view returns (uint256) { return _tokenSupply.current(); } /** * @dev calculates the next token ID based on value of Counter _tokenSupply * @return uint256 for the next token ID */ function _getNextTokenId() private view returns (uint256) { return _tokenSupply.current() + 1; } /** * @dev increments the value of Counter _tokenSupply */ function _incrementTokenId() private { _tokenSupply.increment(); } function baseTokenURI() public view virtual returns (string memory) { return IPFSTokenURI; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string( abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId)) ); } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } /** * This is used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea. */ function _msgSender() internal view override returns (address sender) { return ContextMixin.msgSender(); } function unveil(string memory _updatedTokenURI) public onlyOwner { require(isRevealed == false, "Tokens are already unveiled"); IPFSTokenURI = _updatedTokenURI; isRevealed = true; } /** * @dev returns the currently minted supply of tokens * @return uint256 for the current token ID */ function totalSupply() public view returns(uint256) { return currentTokenId(); } } // File: contracts/strayAliensSpaceHabitatContract.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract StrayAliensSpaceHabitatContract is ERC721Tradable { constructor(address _proxyRegistryAddress) ERC721Tradable("Stray Aliens Space Habitat", "SASH", _proxyRegistryAddress) {} function contractURI() public pure returns (string memory) { return "https://us-central1-nft-rampp.cloudfunctions.net/app/vs4RNrrtHWkumQgbWDGJ/contract-metadata"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ERC712_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RAMPPADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLYCAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAllowlistOnlyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllowlistOnlyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintToAL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintToAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"addressCount","type":"uint256"}],"name":"mintToBulkAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintToMultiple","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintToMultipleAL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyAllowlistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableAddressCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payableAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payableFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeInWei","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_updatedTokenURI","type":"string"}],"name":"unveil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newMerkleRoot","type":"bytes32"}],"name":"updateMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllRampp","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6006805460ff19908116909155600b80549091169055600e80546001600160a81b03191673a9dac8f3aedc55d0fe707b86b8a45d246858d2e1908117909155612710600f55666a94d74f430000601055601460115560a060405260809081526200006e90601290600162000424565b506040805160208101909152600581526200008e9060139060016200048e565b5060026014556015805460ff191690556040805160608101909152603680825262003a6e60208301398051620000cd91601691602090910190620004d1565b50348015620000db57600080fd5b5060405162003aa438038062003aa4833981016040819052620000fe9162000565565b6040518060400160405280601a81526020017f537472617920416c69656e732053706163652048616269746174000000000000815250604051806040016040528060048152602001630a682a6960e31b81525082828281600090805190602001906200016c929190620004d1565b50805162000182906001906020840190620004d1565b5050506200019f620001996200025160201b60201c565b6200026d565b600d80546001600160a01b0383166001600160a01b0319918216179091556012805460018181019092557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401805490921673b34f7fd4ad111663c2eaa944c583a0236c8b7a6117909155601380549182018155600052605f7f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090909101556200024783620002bf565b50505050620005d4565b6000620002686200032360201b62001e191760201c565b905090565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60065460ff1615620003085760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015260640160405180910390fd5b620003138162000382565b506006805460ff19166001179055565b6000333014156200037c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506200037f9050565b50335b90565b6040518060800160405280604f815260200162003a1f604f9139805160209182012082519282019290922060408051808201825260018152603160f81b90840152805180840194909452838101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401523060808401524660a0808501919091528151808503909101815260c090930190528151910120600755565b8280548282559060005260206000209081019282156200047c579160200282015b828111156200047c57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000445565b506200048a9291506200054e565b5090565b8280548282559060005260206000209081019282156200047c579160200282015b828111156200047c578251829060ff16905591602001919060010190620004af565b828054620004df9062000597565b90600052602060002090601f0160209004810192826200050357600085556200047c565b82601f106200051e57805160ff19168380011785556200047c565b828001600101855582156200047c579182015b828111156200047c57825182559160200191906001019062000531565b5b808211156200048a57600081556001016200054f565b6000602082840312156200057857600080fd5b81516001600160a01b03811681146200059057600080fd5b9392505050565b600181811c90821680620005ac57607f821691505b60208210811415620005ce57634e487b7160e01b600052602260045260246000fd5b50919050565b61343b80620005e46000396000f3fe6080604052600436106103195760003560e01c80636d3de806116101ab578063a22cb465116100f7578063d547cfb711610095578063e6c6990a1161006f578063e6c6990a14610895578063e8a3d485146108af578063e985e9c5146108c4578063f2fde38b146108e457600080fd5b8063d547cfb714610858578063dcd4aa8b1461086d578063df213e8a1461088257600080fd5b8063bce3faff116100d1578063bce3faff146107d8578063c5815c41146107f8578063c87b56dd14610818578063cff449231461083857600080fd5b8063a22cb46514610778578063a54dd93c14610798578063b88d4fde146107b857600080fd5b8063891bbe73116101645780638ecad7211161013e5780638ecad7211461070c5780638f4bb4971461072257806391b7f5ed1461074357806395d89b411461076357600080fd5b8063891bbe73146106b85780638d859f3e146106d85780638da5cb5b146106ee57600080fd5b80636d3de8061461063157806370a0823114610646578063715018a614610666578063755edd171461067b57806379ab3c891461068e578063853828b6146106a357600080fd5b80632d0335ab1161026a5780633e3e0b121161022357806354214f69116101fd57806354214f69146105c2578063547520fe146105dc5780636352211e146105fc5780636ba9fd381461061c57600080fd5b80633e3e0b121461056d57806342842e0e146105825780634783f0ef146105a257600080fd5b80632d0335ab146104c55780632eb4a7ab146104fb57806333006786146105115780633408e470146105315780633c003254146105445780633e07311c1461055757600080fd5b80630c53c51c116102d757806320379ee5116102b157806320379ee51461045a57806323b872dd1461046f578063286c81371461048f578063288ac8cb146104af57600080fd5b80630c53c51c146104055780630f7e59701461041857806318160ddd1461044557600080fd5b80629a9b7b1461031e57806301ffc9a7146103465780630644cefa1461037657806306fdde031461038b578063081812fc146103ad578063095ea7b3146103e5575b600080fd5b34801561032a57600080fd5b50610333610904565b6040519081526020015b60405180910390f35b34801561035257600080fd5b50610366610361366004612983565b610914565b604051901515815260200161033d565b6103896103843660046129b5565b610966565b005b34801561039757600080fd5b506103a0610aba565b60405161033d9190612a39565b3480156103b957600080fd5b506103cd6103c8366004612a4c565b610b4c565b6040516001600160a01b03909116815260200161033d565b3480156103f157600080fd5b506103896104003660046129b5565b610be1565b6103a0610413366004612b24565b610d04565b34801561042457600080fd5b506103a0604051806040016040528060018152602001603160f81b81525081565b34801561045157600080fd5b50610333610eee565b34801561046657600080fd5b50600754610333565b34801561047b57600080fd5b5061038961048a366004612ba2565b610ef8565b34801561049b57600080fd5b506103336104aa366004612a4c565b610f30565b3480156104bb57600080fd5b50610333600f5481565b3480156104d157600080fd5b506103336104e0366004612be3565b6001600160a01b031660009081526008602052604090205490565b34801561050757600080fd5b50610333600a5481565b34801561051d57600080fd5b5061036661052c366004612c4c565b610f51565b34801561053d57600080fd5b5046610333565b610389610552366004612ca1565b611027565b34801561056357600080fd5b5061033360145481565b34801561057957600080fd5b50610389611203565b34801561058e57600080fd5b5061038961059d366004612ba2565b61125b565b3480156105ae57600080fd5b506103896105bd366004612a4c565b611276565b3480156105ce57600080fd5b506015546103669060ff1681565b3480156105e857600080fd5b506103896105f7366004612a4c565b611316565b34801561060857600080fd5b506103cd610617366004612a4c565b6113b5565b34801561062857600080fd5b5061038961142c565b34801561063d57600080fd5b5061038961148a565b34801561065257600080fd5b50610333610661366004612be3565b6114df565b34801561067257600080fd5b50610389611566565b610389610689366004612be3565b6115bb565b34801561069a57600080fd5b50610389611664565b3480156106af57600080fd5b506103896116bc565b3480156106c457600080fd5b506103cd6106d3366004612a4c565b61171a565b3480156106e457600080fd5b5061033360105481565b3480156106fa57600080fd5b506009546001600160a01b03166103cd565b34801561071857600080fd5b5061033360115481565b34801561072e57600080fd5b50600e5461036690600160a01b900460ff1681565b34801561074f57600080fd5b5061038961075e366004612a4c565b611744565b34801561076f57600080fd5b506103a0611792565b34801561078457600080fd5b50610389610793366004612cfd565b6117a1565b3480156107a457600080fd5b506103896107b3366004612be3565b6118a3565b3480156107c457600080fd5b506103896107d3366004612d3b565b611915565b3480156107e457600080fd5b506103896107f3366004612da7565b611954565b34801561080457600080fd5b50600e546103cd906001600160a01b031681565b34801561082457600080fd5b506103a0610833366004612a4c565b6119dc565b34801561084457600080fd5b50610389610853366004612e5f565b611a16565b34801561086457600080fd5b506103a0611ad6565b34801561087957600080fd5b50610389611ae5565b610389610890366004612c4c565b611b3f565b3480156108a157600080fd5b50600b546103669060ff1681565b3480156108bb57600080fd5b506103a0611c6f565b3480156108d057600080fd5b506103666108df366004612ea8565b611c8f565b3480156108f057600080fd5b506103896108ff366004612be3565b611d5f565b600061090f600c5490565b905090565b60006001600160e01b031982166380ac58cd60e01b148061094557506001600160e01b03198216635b5e139f60e01b145b8061096057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60018110156109bc5760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e00000000000060448201526064015b60405180910390fd5b6011548111156109de5760405162461bcd60e51b81526004016109b390612ed6565b600e54600160a01b900460ff16151560011480156109ff5750600b5460ff16155b610a1b5760405162461bcd60e51b81526004016109b390612f24565b600f5481610a27610904565b610a319190612f7f565b1115610a4f5760405162461bcd60e51b81526004016109b390612f97565b610a5881611e76565b3414610a765760405162461bcd60e51b81526004016109b390612fdb565b60005b818160ff161015610ab5576000610a8e611e86565b9050610a9a8482611e9c565b610aa2611fde565b5080610aad81613023565b915050610a79565b505050565b606060008054610ac990613043565b80601f0160208091040260200160405190810160405280929190818152602001828054610af590613043565b8015610b425780601f10610b1757610100808354040283529160200191610b42565b820191906000526020600020905b815481529060010190602001808311610b2557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bc55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109b3565b506000908152600460205260409020546001600160a01b031690565b6000610bec826113b5565b9050806001600160a01b0316836001600160a01b03161415610c5a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109b3565b806001600160a01b0316610c6c611fec565b6001600160a01b03161480610c885750610c88816108df611fec565b610cfa5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109b3565b610ab58383611ff6565b60408051606081810183526001600160a01b03881660008181526008602090815290859020548452830152918101869052610d428782878787612064565b610d985760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b60648201526084016109b3565b6001600160a01b038716600090815260086020526040902054610dbc906001612154565b6001600160a01b0388166000908152600860205260409081902091909155517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b90610e0c90899033908a9061307e565b60405180910390a1600080306001600160a01b0316888a604051602001610e349291906130aa565b60408051601f1981840301815290829052610e4e916130e1565b6000604051808303816000865af19150503d8060008114610e8b576040519150601f19603f3d011682016040523d82523d6000602084013e610e90565b606091505b509150915081610ee25760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000060448201526064016109b3565b98975050505050505050565b600061090f610904565b610f09610f03611fec565b82612167565b610f255760405162461bcd60e51b81526004016109b3906130fd565b610ab5838383612236565b60138181548110610f4057600080fd5b600091825260209091200154905081565b600a54600090610fa35760405162461bcd60e51b815260206004820152601760248201527f4d65726b6c6520726f6f74206973206e6f74207365742100000000000000000060448201526064016109b3565b6040516bffffffffffffffffffffffff19606086901b16602082015260009060340160405160208183030381529060405280519060200120905061101e84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a5491508490506123d6565b95945050505050565b600b5460ff161515600114801561104c5750600e54600160a01b900460ff1615156001145b6110985760405162461bcd60e51b815260206004820152601b60248201527f416c6c6f776c697374206d696e74696e6720697320636c6f736564000000000060448201526064016109b3565b6110a3848383610f51565b6110ef5760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c697374210000000060448201526064016109b3565b60018310156111405760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e00000000000060448201526064016109b3565b6011548311156111625760405162461bcd60e51b81526004016109b390612ed6565b600f548361116e610904565b6111789190612f7f565b11156111965760405162461bcd60e51b81526004016109b390612f97565b61119f83611e76565b34146111bd5760405162461bcd60e51b81526004016109b390612fdb565b60005b838160ff1610156111fc5760006111d5611e86565b90506111e18682611e9c565b6111e9611fde565b50806111f481613023565b9150506111c0565b5050505050565b61120b611fec565b6001600160a01b03166112266009546001600160a01b031690565b6001600160a01b03161461124c5760405162461bcd60e51b81526004016109b39061314e565b600e805460ff60a01b19169055565b610ab583838360405180602001604052806000815250611915565b61127e611fec565b6001600160a01b03166112996009546001600160a01b031690565b6001600160a01b0316146112bf5760405162461bcd60e51b81526004016109b39061314e565b600a548114156113115760405162461bcd60e51b815260206004820152601e60248201527f4d65726b6c6520726f6f742077696c6c20626520756e6368616e67656421000060448201526064016109b3565b600a55565b61131e611fec565b6001600160a01b03166113396009546001600160a01b031690565b6001600160a01b03161461135f5760405162461bcd60e51b81526004016109b39061314e565b60018110156113b05760405162461bcd60e51b815260206004820152601b60248201527f4d6178206d696e74206d757374206265206174206c656173742031000000000060448201526064016109b3565b601155565b6000818152600260205260408120546001600160a01b0316806109605760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109b3565b611434611fec565b6001600160a01b031661144f6009546001600160a01b031690565b6001600160a01b0316146114755760405162461bcd60e51b81526004016109b39061314e565b600e805460ff60a01b1916600160a01b179055565b611492611fec565b6001600160a01b03166114ad6009546001600160a01b031690565b6001600160a01b0316146114d35760405162461bcd60e51b81526004016109b39061314e565b600b805460ff19169055565b60006001600160a01b03821661154a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109b3565b506001600160a01b031660009081526003602052604090205490565b61156e611fec565b6001600160a01b03166115896009546001600160a01b031690565b6001600160a01b0316146115af5760405162461bcd60e51b81526004016109b39061314e565b6115b960006123ec565b565b600f546115c6611e86565b11156115e45760405162461bcd60e51b81526004016109b390612f97565b600e54600160a01b900460ff16151560011480156116055750600b5460ff16155b6116215760405162461bcd60e51b81526004016109b390612f24565b60105434146116425760405162461bcd60e51b81526004016109b390613183565b600061164c611e86565b90506116588282611e9c565b611660611fde565b5050565b61166c611fec565b6001600160a01b03166116876009546001600160a01b031690565b6001600160a01b0316146116ad5760405162461bcd60e51b81526004016109b39061314e565b600b805460ff19166001179055565b6116c4611fec565b6001600160a01b03166116df6009546001600160a01b031690565b6001600160a01b0316146117055760405162461bcd60e51b81526004016109b39061314e565b6000471161171257600080fd5b6115b961243e565b6012818154811061172a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61174c611fec565b6001600160a01b03166117676009546001600160a01b031690565b6001600160a01b03161461178d5760405162461bcd60e51b81526004016109b39061314e565b601055565b606060018054610ac990613043565b6117a9611fec565b6001600160a01b0316826001600160a01b0316141561180a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109b3565b8060056000611817611fec565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561185b611fec565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611897911515815260200190565b60405180910390a35050565b6118ab611fec565b6001600160a01b03166118c66009546001600160a01b031690565b6001600160a01b0316146118ec5760405162461bcd60e51b81526004016109b39061314e565b600f546118f7611e86565b11156116425760405162461bcd60e51b81526004016109b390612f97565b611926611920611fec565b83612167565b6119425760405162461bcd60e51b81526004016109b3906130fd565b61194e848484846124cc565b50505050565b61195c611fec565b6001600160a01b03166119776009546001600160a01b031690565b6001600160a01b03161461199d5760405162461bcd60e51b81526004016109b39061314e565b60005b81811015610ab5576119ca8382815181106119bd576119bd6131ca565b60200260200101516118a3565b806119d4816131e0565b9150506119a0565b60606119e6611ad6565b6119ef836124ff565b604051602001611a009291906131fb565b6040516020818303038152906040529050919050565b611a1e611fec565b6001600160a01b0316611a396009546001600160a01b031690565b6001600160a01b031614611a5f5760405162461bcd60e51b81526004016109b39061314e565b60155460ff1615611ab25760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e732061726520616c726561647920756e7665696c6564000000000060448201526064016109b3565b8051611ac59060169060208401906128d4565b50506015805460ff19166001179055565b606060168054610ac990613043565b600e546001600160a01b031633146117055760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a2063616c6c6572206973206e6f742052414d50500000000060448201526064016109b3565b600b5460ff1615156001148015611b645750600e54600160a01b900460ff1615156001145b611bb05760405162461bcd60e51b815260206004820152601b60248201527f416c6c6f776c697374206d696e74696e6720697320636c6f736564000000000060448201526064016109b3565b611bbb838383610f51565b611c075760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c697374210000000060448201526064016109b3565b600f54611c12611e86565b1115611c305760405162461bcd60e51b81526004016109b390612f97565b6010543414611c515760405162461bcd60e51b81526004016109b390613183565b6000611c5b611e86565b9050611c678482611e9c565b61194e611fde565b60606040518060800160405280605b81526020016133ab605b9139905090565b600d5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b158015611cdc57600080fd5b505afa158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d14919061322a565b6001600160a01b03161415611d2d576001915050610960565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b611d67611fec565b6001600160a01b0316611d826009546001600160a01b031690565b6001600160a01b031614611da85760405162461bcd60e51b81526004016109b39061314e565b6001600160a01b038116611e0d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b3565b611e16816123ec565b50565b600033301415611e7057600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150611e739050565b50335b90565b60105460009061096090836125fd565b6000611e91600c5490565b61090f906001612f7f565b6001600160a01b038216611ef25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109b3565b6000818152600260205260409020546001600160a01b031615611f575760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109b3565b6001600160a01b0382166000908152600360205260408120805460019290611f80908490612f7f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6115b9600c80546001019055565b600061090f611e19565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061202b826113b5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006001600160a01b0386166120ca5760405162461bcd60e51b815260206004820152602560248201527f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360448201526424a3a722a960d91b60648201526084016109b3565b60016120dd6120d887612609565b612686565b6040805160008152602081018083529290925260ff851690820152606081018690526080810185905260a0016020604051602081039080840390855afa15801561212b573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b60006121608284612f7f565b9392505050565b6000818152600260205260408120546001600160a01b03166121e05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109b3565b60006121eb836113b5565b9050806001600160a01b0316846001600160a01b031614806122265750836001600160a01b031661221b84610b4c565b6001600160a01b0316145b80611d575750611d578185611c8f565b826001600160a01b0316612249826113b5565b6001600160a01b0316146122b15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109b3565b6001600160a01b0382166123135760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109b3565b61231e600082611ff6565b6001600160a01b0383166000908152600360205260408120805460019290612347908490613247565b90915550506001600160a01b0382166000908152600360205260408120805460019290612375908490612f7f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826123e385846126b6565b14949350505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b4760005b601454811015611660576124ba60128281548110612462576124626131ca565b9060005260206000200160009054906101000a90046001600160a01b0316606460138481548110612495576124956131ca565b9060005260206000200154856124ab919061325e565b6124b59190613293565b61272a565b806124c4816131e0565b915050612442565b6124d7848484612236565b6124e3848484846127c0565b61194e5760405162461bcd60e51b81526004016109b3906132a7565b6060816125235750506040805180820190915260018152600360fc1b602082015290565b8160005b811561254d5780612537816131e0565b91506125469050600a83613293565b9150612527565b60008167ffffffffffffffff81111561256857612568612a65565b6040519080825280601f01601f191660200182016040528015612592576020820181803683370190505b5090505b8415611d57576125a7600183613247565b91506125b4600a866132f9565b6125bf906030612f7f565b60f81b8183815181106125d4576125d46131ca565b60200101906001600160f81b031916908160001a9053506125f6600a86613293565b9450612596565b6000612160828461325e565b60006040518060800160405280604381526020016133686043913980516020918201208351848301516040808701518051908601209051612669950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600061269160075490565b60405161190160f01b6020820152602281019190915260428101839052606201612669565b600081815b84518110156127225760008582815181106126d8576126d86131ca565b602002602001015190508083116126fe576000838152602082905260409020925061270f565b600081815260208490526040902092505b508061271a816131e0565b9150506126bb565b509392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612777576040519150601f19603f3d011682016040523d82523d6000602084013e61277c565b606091505b5050905080610ab55760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016109b3565b60006001600160a01b0384163b156128c957836001600160a01b031663150b7a026127e9611fec565b8786866040518563ffffffff1660e01b815260040161280b949392919061330d565b602060405180830381600087803b15801561282557600080fd5b505af1925050508015612855575060408051601f3d908101601f191682019092526128529181019061334a565b60015b6128af573d808015612883576040519150601f19603f3d011682016040523d82523d6000602084013e612888565b606091505b5080516128a75760405162461bcd60e51b81526004016109b3906132a7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d57565b506001949350505050565b8280546128e090613043565b90600052602060002090601f0160209004810192826129025760008555612948565b82601f1061291b57805160ff1916838001178555612948565b82800160010185558215612948579182015b8281111561294857825182559160200191906001019061292d565b50612954929150612958565b5090565b5b808211156129545760008155600101612959565b6001600160e01b031981168114611e1657600080fd5b60006020828403121561299557600080fd5b81356121608161296d565b6001600160a01b0381168114611e1657600080fd5b600080604083850312156129c857600080fd5b82356129d3816129a0565b946020939093013593505050565b60005b838110156129fc5781810151838201526020016129e4565b8381111561194e5750506000910152565b60008151808452612a258160208601602086016129e1565b601f01601f19169290920160200192915050565b6020815260006121606020830184612a0d565b600060208284031215612a5e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612aa457612aa4612a65565b604052919050565b600067ffffffffffffffff831115612ac657612ac6612a65565b612ad9601f8401601f1916602001612a7b565b9050828152838383011115612aed57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612b1557600080fd5b61216083833560208501612aac565b600080600080600060a08688031215612b3c57600080fd5b8535612b47816129a0565b9450602086013567ffffffffffffffff811115612b6357600080fd5b612b6f88828901612b04565b9450506040860135925060608601359150608086013560ff81168114612b9457600080fd5b809150509295509295909350565b600080600060608486031215612bb757600080fd5b8335612bc2816129a0565b92506020840135612bd2816129a0565b929592945050506040919091013590565b600060208284031215612bf557600080fd5b8135612160816129a0565b60008083601f840112612c1257600080fd5b50813567ffffffffffffffff811115612c2a57600080fd5b6020830191508360208260051b8501011115612c4557600080fd5b9250929050565b600080600060408486031215612c6157600080fd5b8335612c6c816129a0565b9250602084013567ffffffffffffffff811115612c8857600080fd5b612c9486828701612c00565b9497909650939450505050565b60008060008060608587031215612cb757600080fd5b8435612cc2816129a0565b935060208501359250604085013567ffffffffffffffff811115612ce557600080fd5b612cf187828801612c00565b95989497509550505050565b60008060408385031215612d1057600080fd5b8235612d1b816129a0565b915060208301358015158114612d3057600080fd5b809150509250929050565b60008060008060808587031215612d5157600080fd5b8435612d5c816129a0565b93506020850135612d6c816129a0565b925060408501359150606085013567ffffffffffffffff811115612d8f57600080fd5b612d9b87828801612b04565b91505092959194509250565b60008060408385031215612dba57600080fd5b823567ffffffffffffffff80821115612dd257600080fd5b818501915085601f830112612de657600080fd5b8135602082821115612dfa57612dfa612a65565b8160051b9250612e0b818401612a7b565b8281529284018101928181019089851115612e2557600080fd5b948201945b84861015612e4f5785359350612e3f846129a0565b8382529482019490820190612e2a565b9997909101359750505050505050565b600060208284031215612e7157600080fd5b813567ffffffffffffffff811115612e8857600080fd5b8201601f81018413612e9957600080fd5b611d5784823560208401612aac565b60008060408385031215612ebb57600080fd5b8235612ec6816129a0565b91506020830135612d30816129a0565b6020808252602e908201527f43616e6e6f74206d696e74206d6f7265207468616e206d6178206d696e74207060408201526d32b9103a3930b739b0b1ba34b7b760911b606082015260800190565b60208082526025908201527f5075626c6963206d696e74696e67206973206e6f74206f70656e207269676874604082015264206e6f772160d81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f9257612f92612f69565b500190565b60208082526024908201527f43616e6e6f74206d696e74206f76657220737570706c7920636170206f6620316040820152630303030360e41b606082015260800190565b60208082526028908201527f56616c75652062656c6f77207265717569726564206d696e742066656520666f6040820152671c88185b5bdd5b9d60c21b606082015260800190565b600060ff821660ff81141561303a5761303a612f69565b60010192915050565b600181811c9082168061305757607f821691505b6020821081141561307857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b0384811682528316602082015260606040820181905260009061101e90830184612a0d565b600083516130bc8184602088016129e1565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600082516130f38184602087016129e1565b9190910192915050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f56616c7565206e6565647320746f2062652065786163746c7920746865206d696040820152666e74206665652160c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131f4576131f4612f69565b5060010190565b6000835161320d8184602088016129e1565b8351908301906132218183602088016129e1565b01949350505050565b60006020828403121561323c57600080fd5b8151612160816129a0565b60008282101561325957613259612f69565b500390565b600081600019048311821515161561327857613278612f69565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132a2576132a261327d565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826133085761330861327d565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061334090830184612a0d565b9695505050505050565b60006020828403121561335c57600080fd5b81516121608161296d56fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f75732d63656e7472616c312d6e66742d72616d70702e636c6f756466756e6374696f6e732e6e65742f6170702f767334524e72727448576b756d5167625744474a2f636f6e74726163742d6d65746164617461a2646970667358221220953b26809797573604d4717df0c336fd6456f0f1d95809f793b9094c0feb8b4a64736f6c63430008090033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429697066733a2f2f516d5158334c415045687a627a4e7a393747523874634e446343506a63794e7a646a67714843537968564a4e71702f000000000000000000000000b34f7fd4ad111663c2eaa944c583a0236c8b7a61
Deployed Bytecode
0x6080604052600436106103195760003560e01c80636d3de806116101ab578063a22cb465116100f7578063d547cfb711610095578063e6c6990a1161006f578063e6c6990a14610895578063e8a3d485146108af578063e985e9c5146108c4578063f2fde38b146108e457600080fd5b8063d547cfb714610858578063dcd4aa8b1461086d578063df213e8a1461088257600080fd5b8063bce3faff116100d1578063bce3faff146107d8578063c5815c41146107f8578063c87b56dd14610818578063cff449231461083857600080fd5b8063a22cb46514610778578063a54dd93c14610798578063b88d4fde146107b857600080fd5b8063891bbe73116101645780638ecad7211161013e5780638ecad7211461070c5780638f4bb4971461072257806391b7f5ed1461074357806395d89b411461076357600080fd5b8063891bbe73146106b85780638d859f3e146106d85780638da5cb5b146106ee57600080fd5b80636d3de8061461063157806370a0823114610646578063715018a614610666578063755edd171461067b57806379ab3c891461068e578063853828b6146106a357600080fd5b80632d0335ab1161026a5780633e3e0b121161022357806354214f69116101fd57806354214f69146105c2578063547520fe146105dc5780636352211e146105fc5780636ba9fd381461061c57600080fd5b80633e3e0b121461056d57806342842e0e146105825780634783f0ef146105a257600080fd5b80632d0335ab146104c55780632eb4a7ab146104fb57806333006786146105115780633408e470146105315780633c003254146105445780633e07311c1461055757600080fd5b80630c53c51c116102d757806320379ee5116102b157806320379ee51461045a57806323b872dd1461046f578063286c81371461048f578063288ac8cb146104af57600080fd5b80630c53c51c146104055780630f7e59701461041857806318160ddd1461044557600080fd5b80629a9b7b1461031e57806301ffc9a7146103465780630644cefa1461037657806306fdde031461038b578063081812fc146103ad578063095ea7b3146103e5575b600080fd5b34801561032a57600080fd5b50610333610904565b6040519081526020015b60405180910390f35b34801561035257600080fd5b50610366610361366004612983565b610914565b604051901515815260200161033d565b6103896103843660046129b5565b610966565b005b34801561039757600080fd5b506103a0610aba565b60405161033d9190612a39565b3480156103b957600080fd5b506103cd6103c8366004612a4c565b610b4c565b6040516001600160a01b03909116815260200161033d565b3480156103f157600080fd5b506103896104003660046129b5565b610be1565b6103a0610413366004612b24565b610d04565b34801561042457600080fd5b506103a0604051806040016040528060018152602001603160f81b81525081565b34801561045157600080fd5b50610333610eee565b34801561046657600080fd5b50600754610333565b34801561047b57600080fd5b5061038961048a366004612ba2565b610ef8565b34801561049b57600080fd5b506103336104aa366004612a4c565b610f30565b3480156104bb57600080fd5b50610333600f5481565b3480156104d157600080fd5b506103336104e0366004612be3565b6001600160a01b031660009081526008602052604090205490565b34801561050757600080fd5b50610333600a5481565b34801561051d57600080fd5b5061036661052c366004612c4c565b610f51565b34801561053d57600080fd5b5046610333565b610389610552366004612ca1565b611027565b34801561056357600080fd5b5061033360145481565b34801561057957600080fd5b50610389611203565b34801561058e57600080fd5b5061038961059d366004612ba2565b61125b565b3480156105ae57600080fd5b506103896105bd366004612a4c565b611276565b3480156105ce57600080fd5b506015546103669060ff1681565b3480156105e857600080fd5b506103896105f7366004612a4c565b611316565b34801561060857600080fd5b506103cd610617366004612a4c565b6113b5565b34801561062857600080fd5b5061038961142c565b34801561063d57600080fd5b5061038961148a565b34801561065257600080fd5b50610333610661366004612be3565b6114df565b34801561067257600080fd5b50610389611566565b610389610689366004612be3565b6115bb565b34801561069a57600080fd5b50610389611664565b3480156106af57600080fd5b506103896116bc565b3480156106c457600080fd5b506103cd6106d3366004612a4c565b61171a565b3480156106e457600080fd5b5061033360105481565b3480156106fa57600080fd5b506009546001600160a01b03166103cd565b34801561071857600080fd5b5061033360115481565b34801561072e57600080fd5b50600e5461036690600160a01b900460ff1681565b34801561074f57600080fd5b5061038961075e366004612a4c565b611744565b34801561076f57600080fd5b506103a0611792565b34801561078457600080fd5b50610389610793366004612cfd565b6117a1565b3480156107a457600080fd5b506103896107b3366004612be3565b6118a3565b3480156107c457600080fd5b506103896107d3366004612d3b565b611915565b3480156107e457600080fd5b506103896107f3366004612da7565b611954565b34801561080457600080fd5b50600e546103cd906001600160a01b031681565b34801561082457600080fd5b506103a0610833366004612a4c565b6119dc565b34801561084457600080fd5b50610389610853366004612e5f565b611a16565b34801561086457600080fd5b506103a0611ad6565b34801561087957600080fd5b50610389611ae5565b610389610890366004612c4c565b611b3f565b3480156108a157600080fd5b50600b546103669060ff1681565b3480156108bb57600080fd5b506103a0611c6f565b3480156108d057600080fd5b506103666108df366004612ea8565b611c8f565b3480156108f057600080fd5b506103896108ff366004612be3565b611d5f565b600061090f600c5490565b905090565b60006001600160e01b031982166380ac58cd60e01b148061094557506001600160e01b03198216635b5e139f60e01b145b8061096057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60018110156109bc5760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e00000000000060448201526064015b60405180910390fd5b6011548111156109de5760405162461bcd60e51b81526004016109b390612ed6565b600e54600160a01b900460ff16151560011480156109ff5750600b5460ff16155b610a1b5760405162461bcd60e51b81526004016109b390612f24565b600f5481610a27610904565b610a319190612f7f565b1115610a4f5760405162461bcd60e51b81526004016109b390612f97565b610a5881611e76565b3414610a765760405162461bcd60e51b81526004016109b390612fdb565b60005b818160ff161015610ab5576000610a8e611e86565b9050610a9a8482611e9c565b610aa2611fde565b5080610aad81613023565b915050610a79565b505050565b606060008054610ac990613043565b80601f0160208091040260200160405190810160405280929190818152602001828054610af590613043565b8015610b425780601f10610b1757610100808354040283529160200191610b42565b820191906000526020600020905b815481529060010190602001808311610b2557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bc55760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109b3565b506000908152600460205260409020546001600160a01b031690565b6000610bec826113b5565b9050806001600160a01b0316836001600160a01b03161415610c5a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109b3565b806001600160a01b0316610c6c611fec565b6001600160a01b03161480610c885750610c88816108df611fec565b610cfa5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109b3565b610ab58383611ff6565b60408051606081810183526001600160a01b03881660008181526008602090815290859020548452830152918101869052610d428782878787612064565b610d985760405162461bcd60e51b815260206004820152602160248201527f5369676e657220616e64207369676e617475726520646f206e6f74206d6174636044820152600d60fb1b60648201526084016109b3565b6001600160a01b038716600090815260086020526040902054610dbc906001612154565b6001600160a01b0388166000908152600860205260409081902091909155517f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b90610e0c90899033908a9061307e565b60405180910390a1600080306001600160a01b0316888a604051602001610e349291906130aa565b60408051601f1981840301815290829052610e4e916130e1565b6000604051808303816000865af19150503d8060008114610e8b576040519150601f19603f3d011682016040523d82523d6000602084013e610e90565b606091505b509150915081610ee25760405162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c0000000060448201526064016109b3565b98975050505050505050565b600061090f610904565b610f09610f03611fec565b82612167565b610f255760405162461bcd60e51b81526004016109b3906130fd565b610ab5838383612236565b60138181548110610f4057600080fd5b600091825260209091200154905081565b600a54600090610fa35760405162461bcd60e51b815260206004820152601760248201527f4d65726b6c6520726f6f74206973206e6f74207365742100000000000000000060448201526064016109b3565b6040516bffffffffffffffffffffffff19606086901b16602082015260009060340160405160208183030381529060405280519060200120905061101e84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a5491508490506123d6565b95945050505050565b600b5460ff161515600114801561104c5750600e54600160a01b900460ff1615156001145b6110985760405162461bcd60e51b815260206004820152601b60248201527f416c6c6f776c697374206d696e74696e6720697320636c6f736564000000000060448201526064016109b3565b6110a3848383610f51565b6110ef5760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c697374210000000060448201526064016109b3565b60018310156111405760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e00000000000060448201526064016109b3565b6011548311156111625760405162461bcd60e51b81526004016109b390612ed6565b600f548361116e610904565b6111789190612f7f565b11156111965760405162461bcd60e51b81526004016109b390612f97565b61119f83611e76565b34146111bd5760405162461bcd60e51b81526004016109b390612fdb565b60005b838160ff1610156111fc5760006111d5611e86565b90506111e18682611e9c565b6111e9611fde565b50806111f481613023565b9150506111c0565b5050505050565b61120b611fec565b6001600160a01b03166112266009546001600160a01b031690565b6001600160a01b03161461124c5760405162461bcd60e51b81526004016109b39061314e565b600e805460ff60a01b19169055565b610ab583838360405180602001604052806000815250611915565b61127e611fec565b6001600160a01b03166112996009546001600160a01b031690565b6001600160a01b0316146112bf5760405162461bcd60e51b81526004016109b39061314e565b600a548114156113115760405162461bcd60e51b815260206004820152601e60248201527f4d65726b6c6520726f6f742077696c6c20626520756e6368616e67656421000060448201526064016109b3565b600a55565b61131e611fec565b6001600160a01b03166113396009546001600160a01b031690565b6001600160a01b03161461135f5760405162461bcd60e51b81526004016109b39061314e565b60018110156113b05760405162461bcd60e51b815260206004820152601b60248201527f4d6178206d696e74206d757374206265206174206c656173742031000000000060448201526064016109b3565b601155565b6000818152600260205260408120546001600160a01b0316806109605760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109b3565b611434611fec565b6001600160a01b031661144f6009546001600160a01b031690565b6001600160a01b0316146114755760405162461bcd60e51b81526004016109b39061314e565b600e805460ff60a01b1916600160a01b179055565b611492611fec565b6001600160a01b03166114ad6009546001600160a01b031690565b6001600160a01b0316146114d35760405162461bcd60e51b81526004016109b39061314e565b600b805460ff19169055565b60006001600160a01b03821661154a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109b3565b506001600160a01b031660009081526003602052604090205490565b61156e611fec565b6001600160a01b03166115896009546001600160a01b031690565b6001600160a01b0316146115af5760405162461bcd60e51b81526004016109b39061314e565b6115b960006123ec565b565b600f546115c6611e86565b11156115e45760405162461bcd60e51b81526004016109b390612f97565b600e54600160a01b900460ff16151560011480156116055750600b5460ff16155b6116215760405162461bcd60e51b81526004016109b390612f24565b60105434146116425760405162461bcd60e51b81526004016109b390613183565b600061164c611e86565b90506116588282611e9c565b611660611fde565b5050565b61166c611fec565b6001600160a01b03166116876009546001600160a01b031690565b6001600160a01b0316146116ad5760405162461bcd60e51b81526004016109b39061314e565b600b805460ff19166001179055565b6116c4611fec565b6001600160a01b03166116df6009546001600160a01b031690565b6001600160a01b0316146117055760405162461bcd60e51b81526004016109b39061314e565b6000471161171257600080fd5b6115b961243e565b6012818154811061172a57600080fd5b6000918252602090912001546001600160a01b0316905081565b61174c611fec565b6001600160a01b03166117676009546001600160a01b031690565b6001600160a01b03161461178d5760405162461bcd60e51b81526004016109b39061314e565b601055565b606060018054610ac990613043565b6117a9611fec565b6001600160a01b0316826001600160a01b0316141561180a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109b3565b8060056000611817611fec565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561185b611fec565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611897911515815260200190565b60405180910390a35050565b6118ab611fec565b6001600160a01b03166118c66009546001600160a01b031690565b6001600160a01b0316146118ec5760405162461bcd60e51b81526004016109b39061314e565b600f546118f7611e86565b11156116425760405162461bcd60e51b81526004016109b390612f97565b611926611920611fec565b83612167565b6119425760405162461bcd60e51b81526004016109b3906130fd565b61194e848484846124cc565b50505050565b61195c611fec565b6001600160a01b03166119776009546001600160a01b031690565b6001600160a01b03161461199d5760405162461bcd60e51b81526004016109b39061314e565b60005b81811015610ab5576119ca8382815181106119bd576119bd6131ca565b60200260200101516118a3565b806119d4816131e0565b9150506119a0565b60606119e6611ad6565b6119ef836124ff565b604051602001611a009291906131fb565b6040516020818303038152906040529050919050565b611a1e611fec565b6001600160a01b0316611a396009546001600160a01b031690565b6001600160a01b031614611a5f5760405162461bcd60e51b81526004016109b39061314e565b60155460ff1615611ab25760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e732061726520616c726561647920756e7665696c6564000000000060448201526064016109b3565b8051611ac59060169060208401906128d4565b50506015805460ff19166001179055565b606060168054610ac990613043565b600e546001600160a01b031633146117055760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a2063616c6c6572206973206e6f742052414d50500000000060448201526064016109b3565b600b5460ff1615156001148015611b645750600e54600160a01b900460ff1615156001145b611bb05760405162461bcd60e51b815260206004820152601b60248201527f416c6c6f776c697374206d696e74696e6720697320636c6f736564000000000060448201526064016109b3565b611bbb838383610f51565b611c075760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c697374210000000060448201526064016109b3565b600f54611c12611e86565b1115611c305760405162461bcd60e51b81526004016109b390612f97565b6010543414611c515760405162461bcd60e51b81526004016109b390613183565b6000611c5b611e86565b9050611c678482611e9c565b61194e611fde565b60606040518060800160405280605b81526020016133ab605b9139905090565b600d5460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b158015611cdc57600080fd5b505afa158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d14919061322a565b6001600160a01b03161415611d2d576001915050610960565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b611d67611fec565b6001600160a01b0316611d826009546001600160a01b031690565b6001600160a01b031614611da85760405162461bcd60e51b81526004016109b39061314e565b6001600160a01b038116611e0d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b3565b611e16816123ec565b50565b600033301415611e7057600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150611e739050565b50335b90565b60105460009061096090836125fd565b6000611e91600c5490565b61090f906001612f7f565b6001600160a01b038216611ef25760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109b3565b6000818152600260205260409020546001600160a01b031615611f575760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109b3565b6001600160a01b0382166000908152600360205260408120805460019290611f80908490612f7f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6115b9600c80546001019055565b600061090f611e19565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061202b826113b5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006001600160a01b0386166120ca5760405162461bcd60e51b815260206004820152602560248201527f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360448201526424a3a722a960d91b60648201526084016109b3565b60016120dd6120d887612609565b612686565b6040805160008152602081018083529290925260ff851690820152606081018690526080810185905260a0016020604051602081039080840390855afa15801561212b573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b60006121608284612f7f565b9392505050565b6000818152600260205260408120546001600160a01b03166121e05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109b3565b60006121eb836113b5565b9050806001600160a01b0316846001600160a01b031614806122265750836001600160a01b031661221b84610b4c565b6001600160a01b0316145b80611d575750611d578185611c8f565b826001600160a01b0316612249826113b5565b6001600160a01b0316146122b15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109b3565b6001600160a01b0382166123135760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109b3565b61231e600082611ff6565b6001600160a01b0383166000908152600360205260408120805460019290612347908490613247565b90915550506001600160a01b0382166000908152600360205260408120805460019290612375908490612f7f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826123e385846126b6565b14949350505050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b4760005b601454811015611660576124ba60128281548110612462576124626131ca565b9060005260206000200160009054906101000a90046001600160a01b0316606460138481548110612495576124956131ca565b9060005260206000200154856124ab919061325e565b6124b59190613293565b61272a565b806124c4816131e0565b915050612442565b6124d7848484612236565b6124e3848484846127c0565b61194e5760405162461bcd60e51b81526004016109b3906132a7565b6060816125235750506040805180820190915260018152600360fc1b602082015290565b8160005b811561254d5780612537816131e0565b91506125469050600a83613293565b9150612527565b60008167ffffffffffffffff81111561256857612568612a65565b6040519080825280601f01601f191660200182016040528015612592576020820181803683370190505b5090505b8415611d57576125a7600183613247565b91506125b4600a866132f9565b6125bf906030612f7f565b60f81b8183815181106125d4576125d46131ca565b60200101906001600160f81b031916908160001a9053506125f6600a86613293565b9450612596565b6000612160828461325e565b60006040518060800160405280604381526020016133686043913980516020918201208351848301516040808701518051908601209051612669950193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b600061269160075490565b60405161190160f01b6020820152602281019190915260428101839052606201612669565b600081815b84518110156127225760008582815181106126d8576126d86131ca565b602002602001015190508083116126fe576000838152602082905260409020925061270f565b600081815260208490526040902092505b508061271a816131e0565b9150506126bb565b509392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612777576040519150601f19603f3d011682016040523d82523d6000602084013e61277c565b606091505b5050905080610ab55760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016109b3565b60006001600160a01b0384163b156128c957836001600160a01b031663150b7a026127e9611fec565b8786866040518563ffffffff1660e01b815260040161280b949392919061330d565b602060405180830381600087803b15801561282557600080fd5b505af1925050508015612855575060408051601f3d908101601f191682019092526128529181019061334a565b60015b6128af573d808015612883576040519150601f19603f3d011682016040523d82523d6000602084013e612888565b606091505b5080516128a75760405162461bcd60e51b81526004016109b3906132a7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d57565b506001949350505050565b8280546128e090613043565b90600052602060002090601f0160209004810192826129025760008555612948565b82601f1061291b57805160ff1916838001178555612948565b82800160010185558215612948579182015b8281111561294857825182559160200191906001019061292d565b50612954929150612958565b5090565b5b808211156129545760008155600101612959565b6001600160e01b031981168114611e1657600080fd5b60006020828403121561299557600080fd5b81356121608161296d565b6001600160a01b0381168114611e1657600080fd5b600080604083850312156129c857600080fd5b82356129d3816129a0565b946020939093013593505050565b60005b838110156129fc5781810151838201526020016129e4565b8381111561194e5750506000910152565b60008151808452612a258160208601602086016129e1565b601f01601f19169290920160200192915050565b6020815260006121606020830184612a0d565b600060208284031215612a5e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612aa457612aa4612a65565b604052919050565b600067ffffffffffffffff831115612ac657612ac6612a65565b612ad9601f8401601f1916602001612a7b565b9050828152838383011115612aed57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612b1557600080fd5b61216083833560208501612aac565b600080600080600060a08688031215612b3c57600080fd5b8535612b47816129a0565b9450602086013567ffffffffffffffff811115612b6357600080fd5b612b6f88828901612b04565b9450506040860135925060608601359150608086013560ff81168114612b9457600080fd5b809150509295509295909350565b600080600060608486031215612bb757600080fd5b8335612bc2816129a0565b92506020840135612bd2816129a0565b929592945050506040919091013590565b600060208284031215612bf557600080fd5b8135612160816129a0565b60008083601f840112612c1257600080fd5b50813567ffffffffffffffff811115612c2a57600080fd5b6020830191508360208260051b8501011115612c4557600080fd5b9250929050565b600080600060408486031215612c6157600080fd5b8335612c6c816129a0565b9250602084013567ffffffffffffffff811115612c8857600080fd5b612c9486828701612c00565b9497909650939450505050565b60008060008060608587031215612cb757600080fd5b8435612cc2816129a0565b935060208501359250604085013567ffffffffffffffff811115612ce557600080fd5b612cf187828801612c00565b95989497509550505050565b60008060408385031215612d1057600080fd5b8235612d1b816129a0565b915060208301358015158114612d3057600080fd5b809150509250929050565b60008060008060808587031215612d5157600080fd5b8435612d5c816129a0565b93506020850135612d6c816129a0565b925060408501359150606085013567ffffffffffffffff811115612d8f57600080fd5b612d9b87828801612b04565b91505092959194509250565b60008060408385031215612dba57600080fd5b823567ffffffffffffffff80821115612dd257600080fd5b818501915085601f830112612de657600080fd5b8135602082821115612dfa57612dfa612a65565b8160051b9250612e0b818401612a7b565b8281529284018101928181019089851115612e2557600080fd5b948201945b84861015612e4f5785359350612e3f846129a0565b8382529482019490820190612e2a565b9997909101359750505050505050565b600060208284031215612e7157600080fd5b813567ffffffffffffffff811115612e8857600080fd5b8201601f81018413612e9957600080fd5b611d5784823560208401612aac565b60008060408385031215612ebb57600080fd5b8235612ec6816129a0565b91506020830135612d30816129a0565b6020808252602e908201527f43616e6e6f74206d696e74206d6f7265207468616e206d6178206d696e74207060408201526d32b9103a3930b739b0b1ba34b7b760911b606082015260800190565b60208082526025908201527f5075626c6963206d696e74696e67206973206e6f74206f70656e207269676874604082015264206e6f772160d81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f9257612f92612f69565b500190565b60208082526024908201527f43616e6e6f74206d696e74206f76657220737570706c7920636170206f6620316040820152630303030360e41b606082015260800190565b60208082526028908201527f56616c75652062656c6f77207265717569726564206d696e742066656520666f6040820152671c88185b5bdd5b9d60c21b606082015260800190565b600060ff821660ff81141561303a5761303a612f69565b60010192915050565b600181811c9082168061305757607f821691505b6020821081141561307857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b0384811682528316602082015260606040820181905260009061101e90830184612a0d565b600083516130bc8184602088016129e1565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600082516130f38184602087016129e1565b9190910192915050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f56616c7565206e6565647320746f2062652065786163746c7920746865206d696040820152666e74206665652160c81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156131f4576131f4612f69565b5060010190565b6000835161320d8184602088016129e1565b8351908301906132218183602088016129e1565b01949350505050565b60006020828403121561323c57600080fd5b8151612160816129a0565b60008282101561325957613259612f69565b500390565b600081600019048311821515161561327857613278612f69565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826132a2576132a261327d565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826133085761330861327d565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061334090830184612a0d565b9695505050505050565b60006020828403121561335c57600080fd5b81516121608161296d56fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f75732d63656e7472616c312d6e66742d72616d70702e636c6f756466756e6374696f6e732e6e65742f6170702f767334524e72727448576b756d5167625744474a2f636f6e74726163742d6d65746164617461a2646970667358221220953b26809797573604d4717df0c336fd6456f0f1d95809f793b9094c0feb8b4a64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b34f7fd4ad111663c2eaa944c583a0236c8b7a61
-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xB34f7Fd4Ad111663c2Eaa944C583a0236c8B7a61
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b34f7fd4ad111663c2eaa944c583a0236c8b7a61
Deployed Bytecode Sourcemap
64649:430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62000:112;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;62000:112:0;;;;;;;;38565:278;;;;;;;;;;-1:-1:-1;38565:278:0;;;;;:::i;:::-;;:::i;:::-;;;747:14:1;;740:22;722:41;;710:2;695:18;38565:278:0;582:187:1;57304:803:0;;;;;;:::i;:::-;;:::i;:::-;;39441:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40902:210::-;;;;;;;;;;-1:-1:-1;40902:210:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2330:32:1;;;2312:51;;2300:2;2285:18;40902:210:0;2166:203:1;40459:385:0;;;;;;;;;;-1:-1:-1;40459:385:0;;;;;:::i;:::-;;:::i;12542:1082::-;;;;;;:::i;:::-;;:::i;2134:43::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2134:43:0;;;;;64392:102;;;;;;;;;;;;;:::i;3075:98::-;;;;;;;;;;-1:-1:-1;3150:15:0;;3075:98;;41744:311;;;;;;;;;;-1:-1:-1;41744:311:0;;;;;:::i;:::-;;:::i;54701:34::-;;;;;;;;;;-1:-1:-1;54701:34:0;;;;;:::i;:::-;;:::i;54507:32::-;;;;;;;;;;;;;;;;13967:104;;;;;;;;;;-1:-1:-1;13967:104:0;;;;;:::i;:::-;-1:-1:-1;;;;;14051:12:0;14019:13;14051:12;;;:6;:12;;;;;;;13967:104;52501:25;;;;;;;;;;;;;;;;53154:287;;;;;;;;;;-1:-1:-1;53154:287:0;;;;;:::i;:::-;;:::i;3181:159::-;;;;;;;;;;-1:-1:-1;3297:9:0;3181:159;;59199:902;;;;;;:::i;:::-;;:::i;54746:38::-;;;;;;;;;;;;;;;;60214:86;;;;;;;;;;;;;:::i;42118:165::-;;;;;;;;;;-1:-1:-1;42118:165:0;;;;;:::i;:::-;;:::i;52740:191::-;;;;;;;;;;-1:-1:-1;52740:191:0;;;;;:::i;:::-;;:::i;54805:30::-;;;;;;;;;;-1:-1:-1;54805:30:0;;;;;;;;60783:181;;;;;;;;;;-1:-1:-1;60783:181:0;;;;;:::i;:::-;;:::i;39150:232::-;;;;;;;;;;-1:-1:-1;39150:232:0;;;;;:::i;:::-;;:::i;60117:85::-;;;;;;;;;;;;;:::i;53556:97::-;;;;;;;;;;;;;:::i;38899:197::-;;;;;;;;;;-1:-1:-1;38899:197:0;;;;;:::i;:::-;;:::i;19237:96::-;;;;;;;;;;;;;:::i;56531:518::-;;;;;;:::i;:::-;;:::i;53455:93::-;;;;;;;;;;;;;:::i;60986:130::-;;;;;;;;;;;;;:::i;54640:50::-;;;;;;;;;;-1:-1:-1;54640:50:0;;;;;:::i;:::-;;:::i;54550:33::-;;;;;;;;;;;;;;;;18537:91;;;;;;;;;;-1:-1:-1;18612:6:0;;-1:-1:-1;;;;;18612:6:0;18537:91;;54594:35;;;;;;;;;;;;;;;;54465:31;;;;;;;;;;-1:-1:-1;54465:31:0;;;;-1:-1:-1;;;54465:31:0;;;;;;60344:98;;;;;;;;;;-1:-1:-1;60344:98:0;;;;;:::i;:::-;;:::i;39595:97::-;;;;;;;;;;;;;:::i;41176:289::-;;;;;;;;;;-1:-1:-1;41176:289:0;;;;;:::i;:::-;;:::i;55800:281::-;;;;;;;;;;-1:-1:-1;55800:281:0;;;;;:::i;:::-;;:::i;42346:300::-;;;;;;;;;;-1:-1:-1;42346:300:0;;;;;:::i;:::-;;:::i;56093:216::-;;;;;;;;;;-1:-1:-1;56093:216:0;;;;;:::i;:::-;;:::i;54382:72::-;;;;;;;;;;-1:-1:-1;54382:72:0;;;;-1:-1:-1;;;;;54382:72:0;;;62749:301;;;;;;;;;;-1:-1:-1;62749:301:0;;;;;:::i;:::-;;:::i;64001:229::-;;;;;;;;;;-1:-1:-1;64001:229:0;;;;;:::i;:::-;;:::i;62613:114::-;;;;;;;;;;;;;:::i;61136:133::-;;;;;;;;;;;;;:::i;58339:589::-;;;;;;:::i;:::-;;:::i;52533:37::-;;;;;;;;;;-1:-1:-1;52533:37:0;;;;;;;;64886:186;;;;;;;;;;;;;:::i;63198:493::-;;;;;;;;;;-1:-1:-1;63198:493:0;;;;;:::i;:::-;;:::i;19500:198::-;;;;;;;;;;-1:-1:-1;19500:198:0;;;;;:::i;:::-;;:::i;62000:112::-;62047:7;62078:22;:12;36809:14;;36719:112;62078:22;62071:29;;62000:112;:::o;38565:278::-;38666:4;-1:-1:-1;;;;;;38691:40:0;;-1:-1:-1;;;38691:40:0;;:99;;-1:-1:-1;;;;;;;38742:48:0;;-1:-1:-1;;;38742:48:0;38691:99;:146;;;-1:-1:-1;;;;;;;;;;30612:40:0;;;38801:36;38679:158;38565:278;-1:-1:-1;;38565:278:0:o;57304:803::-;57407:1;57396:7;:12;;57388:51;;;;-1:-1:-1;;;57388:51:0;;10319:2:1;57388:51:0;;;10301:21:1;10358:2;10338:18;;;10331:30;10397:28;10377:18;;;10370:56;10443:18;;57388:51:0;;;;;;;;;57473:15;;57462:7;:26;;57454:85;;;;-1:-1:-1;;;57454:85:0;;;;;;;:::i;:::-;57564:11;;-1:-1:-1;;;57564:11:0;;;;:19;;57579:4;57564:19;:49;;;;-1:-1:-1;57587:17:0;;;;:26;57564:49;57556:99;;;;-1:-1:-1;;;57556:99:0;;;;;;;:::i;:::-;57723:9;;57712:7;57693:16;:14;:16::i;:::-;:26;;;;:::i;:::-;:39;;57685:88;;;;-1:-1:-1;;;57685:88:0;;;;;;;:::i;:::-;57809:17;57818:7;57809:8;:17::i;:::-;57796:9;:30;57788:83;;;;-1:-1:-1;;;57788:83:0;;;;;;;:::i;:::-;57904:7;57900:180;57921:7;57917:1;:11;;;57900:180;;;57951:18;57972:17;:15;:17::i;:::-;57951:38;;58006:22;58012:3;58017:10;58006:5;:22::i;:::-;58045:19;:17;:19::i;:::-;-1:-1:-1;57930:3:0;;;;:::i;:::-;;;;57900:180;;;;57304:803;;:::o;39441:93::-;39494:13;39523:5;39516:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39441:93;:::o;40902:210::-;40977:7;44156:16;;;:7;:16;;;;;;-1:-1:-1;;;;;44156:16:0;40993:73;;;;-1:-1:-1;;;40993:73:0;;13139:2:1;40993:73:0;;;13121:21:1;13178:2;13158:18;;;13151:30;13217:34;13197:18;;;13190:62;-1:-1:-1;;;13268:18:1;;;13261:42;13320:19;;40993:73:0;12937:408:1;40993:73:0;-1:-1:-1;41082:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;41082:24:0;;40902:210::o;40459:385::-;40544:13;40560:23;40575:7;40560:14;:23::i;:::-;40544:39;;40604:5;-1:-1:-1;;;;;40598:11:0;:2;-1:-1:-1;;;;;40598:11:0;;;40590:57;;;;-1:-1:-1;;;40590:57:0;;13552:2:1;40590:57:0;;;13534:21:1;13591:2;13571:18;;;13564:30;13630:34;13610:18;;;13603:62;-1:-1:-1;;;13681:18:1;;;13674:31;13722:19;;40590:57:0;13350:397:1;40590:57:0;40688:5;-1:-1:-1;;;;;40672:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;40672:21:0;;:62;;;;40697:37;40714:5;40721:12;:10;:12::i;40697:37::-;40656:152;;;;-1:-1:-1;;;40656:152:0;;13954:2:1;40656:152:0;;;13936:21:1;13993:2;13973:18;;;13966:30;14032:34;14012:18;;;14005:62;14103:26;14083:18;;;14076:54;14147:19;;40656:152:0;13752:420:1;40656:152:0;40817:21;40826:2;40830:7;40817:8;:21::i;12542:1082::-;12793:130;;;12732:12;12793:130;;;;;-1:-1:-1;;;;;12825:19:0;;12761:29;12825:19;;;:6;:19;;;;;;;;;12793:130;;;;;;;;;;;12952:45;12832:11;12793:130;12980:4;12986;12992;12952:6;:45::i;:::-;12934:118;;;;-1:-1:-1;;;12934:118:0;;14379:2:1;12934:118:0;;;14361:21:1;14418:2;14398:18;;;14391:30;14457:34;14437:18;;;14430:62;-1:-1:-1;;;14508:18:1;;;14501:31;14549:19;;12934:118:0;14177:397:1;12934:118:0;-1:-1:-1;;;;;13137:19:0;;;;;;:6;:19;;;;;;:26;;13161:1;13137:23;:26::i;:::-;-1:-1:-1;;;;;13115:19:0;;;;;;:6;:19;;;;;;;:48;;;;13185:112;;;;;13122:11;;13249:10;;13271:17;;13185:112;:::i;:::-;;;;;;;;13404:12;13418:23;13453:4;-1:-1:-1;;;;;13445:18:0;13491:17;13510:11;13474:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;13474:48:0;;;;;;;;;;13445:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13403:128;;;;13548:7;13540:48;;;;-1:-1:-1;;;13540:48:0;;15917:2:1;13540:48:0;;;15899:21:1;15956:2;15936:18;;;15929:30;15995;15975:18;;;15968:58;16043:18;;13540:48:0;15715:352:1;13540:48:0;13606:10;12542:1082;-1:-1:-1;;;;;;;;12542:1082:0:o;64392:102::-;64435:7;64466:16;:14;:16::i;41744:311::-;41917:41;41936:12;:10;:12::i;:::-;41950:7;41917:18;:41::i;:::-;41909:103;;;;-1:-1:-1;;;41909:103:0;;;;;;;:::i;:::-;42021:28;42031:4;42037:2;42041:7;42021:9;:28::i;54701:34::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54701:34:0;:::o;53154:287::-;53266:10;;53243:4;;53258:51;;;;-1:-1:-1;;;53258:51:0;;16692:2:1;53258:51:0;;;16674:21:1;16731:2;16711:18;;;16704:30;16770:25;16750:18;;;16743:53;16813:18;;53258:51:0;16490:347:1;53258:51:0;53343:21;;-1:-1:-1;;16991:2:1;16987:15;;;16983:53;53343:21:0;;;16971:66:1;53318:12:0;;17053::1;;53343:21:0;;;;;;;;;;;;53333:32;;;;;;53318:47;;53383:50;53402:12;;53383:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;53416:10:0;;;-1:-1:-1;53428:4:0;;-1:-1:-1;53383:18:0;:50::i;:::-;53376:57;53154:287;-1:-1:-1;;;;;53154:287:0:o;59199:902::-;59326:17;;;;:25;;:17;:25;:48;;;;-1:-1:-1;59355:11:0;;-1:-1:-1;;;59355:11:0;;;;:19;;59370:4;59355:19;59326:48;59318:88;;;;-1:-1:-1;;;59318:88:0;;17278:2:1;59318:88:0;;;17260:21:1;17317:2;17297:18;;;17290:30;17356:29;17336:18;;;17329:57;17403:18;;59318:88:0;17076:351:1;59318:88:0;59429:32;59443:3;59448:12;;59429:13;:32::i;:::-;59421:73;;;;-1:-1:-1;;;59421:73:0;;17634:2:1;59421:73:0;;;17616:21:1;17673:2;17653:18;;;17646:30;17712;17692:18;;;17685:58;17760:18;;59421:73:0;17432:352:1;59421:73:0;59528:1;59517:7;:12;;59509:51;;;;-1:-1:-1;;;59509:51:0;;10319:2:1;59509:51:0;;;10301:21:1;10358:2;10338:18;;;10331:30;10397:28;10377:18;;;10370:56;10443:18;;59509:51:0;10117:350:1;59509:51:0;59594:15;;59583:7;:26;;59575:85;;;;-1:-1:-1;;;59575:85:0;;;;;;;:::i;:::-;59721:9;;59710:7;59691:16;:14;:16::i;:::-;:26;;;;:::i;:::-;:39;;59683:88;;;;-1:-1:-1;;;59683:88:0;;;;;;;:::i;:::-;59801:17;59810:7;59801:8;:17::i;:::-;59788:9;:30;59780:83;;;;-1:-1:-1;;;59780:83:0;;;;;;;:::i;:::-;59902:7;59898:180;59919:7;59915:1;:11;;;59898:180;;;59949:18;59970:17;:15;:17::i;:::-;59949:38;;60004:22;60010:3;60015:10;60004:5;:22::i;:::-;60043:19;:17;:19::i;:::-;-1:-1:-1;59928:3:0;;;;:::i;:::-;;;;59898:180;;;;59199:902;;;;:::o;60214:86::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;60269:11:::1;:19:::0;;-1:-1:-1;;;;60269:19:0::1;::::0;;60214:86::o;42118:165::-;42238:39;42255:4;42261:2;42265:7;42238:39;;;;;;;;;;;;:16;:39::i;52740:191::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;52842:10:::1;;52824:14;:28;;52816:71;;;::::0;-1:-1:-1;;;52816:71:0;;18352:2:1;52816:71:0::1;::::0;::::1;18334:21:1::0;18391:2;18371:18;;;18364:30;18430:32;18410:18;;;18403:60;18480:18;;52816:71:0::1;18150:354:1::0;52816:71:0::1;52896:10;:27:::0;52740:191::o;60783:181::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;60877:1:::1;60862:11;:16;;60854:56;;;::::0;-1:-1:-1;;;60854:56:0;;18711:2:1;60854:56:0::1;::::0;::::1;18693:21:1::0;18750:2;18730:18;;;18723:30;18789:29;18769:18;;;18762:57;18836:18;;60854:56:0::1;18509:351:1::0;60854:56:0::1;60923:15;:29:::0;60783:181::o;39150:232::-;39221:7;39261:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39261:16:0;39292:19;39284:73;;;;-1:-1:-1;;;39284:73:0;;19067:2:1;39284:73:0;;;19049:21:1;19106:2;19086:18;;;19079:30;19145:34;19125:18;;;19118:62;-1:-1:-1;;;19196:18:1;;;19189:39;19245:19;;39284:73:0;18865:405:1;60117:85:0;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;60172:11:::1;:18:::0;;-1:-1:-1;;;;60172:18:0::1;-1:-1:-1::0;;;60172:18:0::1;::::0;;60117:85::o;53556:97::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;53620:17:::1;:25:::0;;-1:-1:-1;;53620:25:0::1;::::0;;53556:97::o;38899:197::-;38970:7;-1:-1:-1;;;;;38994:19:0;;38986:74;;;;-1:-1:-1;;;38986:74:0;;19477:2:1;38986:74:0;;;19459:21:1;19516:2;19496:18;;;19489:30;19555:34;19535:18;;;19528:62;-1:-1:-1;;;19606:18:1;;;19599:40;19656:19;;38986:74:0;19275:406:1;38986:74:0;-1:-1:-1;;;;;;39074:16:0;;;;;:9;:16;;;;;;;38899:197::o;19237:96::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;19302:21:::1;19320:1;19302:9;:21::i;:::-;19237:96::o:0;56531:518::-;56619:9;;56598:17;:15;:17::i;:::-;:30;;56590:79;;;;-1:-1:-1;;;56590:79:0;;;;;;;:::i;:::-;56691:11;;-1:-1:-1;;;56691:11:0;;;;:19;;56706:4;56691:19;:49;;;;-1:-1:-1;56714:17:0;;;;:26;56691:49;56683:99;;;;-1:-1:-1;;;56683:99:0;;;;;;;:::i;:::-;56850:5;;56837:9;:18;56829:70;;;;-1:-1:-1;;;56829:70:0;;;;;;;:::i;:::-;56914:18;56935:17;:15;:17::i;:::-;56914:38;;56967:22;56973:3;56978:10;56967:5;:22::i;:::-;57004:19;:17;:19::i;:::-;56575:474;56531:518;:::o;53455:93::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;53516:17:::1;:24:::0;;-1:-1:-1;;53516:24:0::1;53536:4;53516:24;::::0;;53455:93::o;60986:130::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;61073:1:::1;61049:21;:25;61041:34;;;::::0;::::1;;61090:14;:12;:14::i;54640:50::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54640:50:0;;-1:-1:-1;54640:50:0;:::o;60344:98::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;60413:5:::1;:17:::0;60344:98::o;39595:97::-;39650:13;39679:7;39672:14;;;;;:::i;41176:289::-;41287:12;:10;:12::i;:::-;-1:-1:-1;;;;;41275:24:0;:8;-1:-1:-1;;;;;41275:24:0;;;41267:62;;;;-1:-1:-1;;;41267:62:0;;20296:2:1;41267:62:0;;;20278:21:1;20335:2;20315:18;;;20308:30;20374:27;20354:18;;;20347:55;20419:18;;41267:62:0;20094:349:1;41267:62:0;41383:8;41338:18;:32;41357:12;:10;:12::i;:::-;-1:-1:-1;;;;;41338:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;41338:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;41338:53:0;;;;;;;;;;;41426:12;:10;:12::i;:::-;-1:-1:-1;;;;;41411:48:0;;41450:8;41411:48;;;;747:14:1;740:22;722:41;;710:2;695:18;;582:187;41411:48:0;;;;;;;;41176:289;;:::o;55800:281::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;55895:9:::1;;55874:17;:15;:17::i;:::-;:30;;55866:79;;;;-1:-1:-1::0;;;55866:79:0::1;;;;;;;:::i;42346:300::-:0;42499:41;42518:12;:10;:12::i;:::-;42532:7;42499:18;:41::i;:::-;42491:103;;;;-1:-1:-1;;;42491:103:0;;;;;;;:::i;:::-;42601:39;42615:4;42621:2;42625:7;42634:5;42601:13;:39::i;:::-;42346:300;;;;:::o;56093:216::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;56204:6:::1;56200:98;56218:12;56214:1;:16;56200:98;;;56257:25;56269:9;56279:1;56269:12;;;;;;;;:::i;:::-;;;;;;;56257:11;:25::i;:::-;56232:3:::0;::::1;::::0;::::1;:::i;:::-;;;;56200:98;;62749:301:::0;62867:13;62976:14;:12;:14::i;:::-;62992:26;63009:8;62992:16;:26::i;:::-;62959:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62906:132;;62749:301;;;:::o;64001:229::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;64089:10:::1;::::0;::::1;;:19;64081:59;;;::::0;-1:-1:-1;;;64081:59:0;;21397:2:1;64081:59:0::1;::::0;::::1;21379:21:1::0;21436:2;21416:18;;;21409:30;21475:29;21455:18;;;21448:57;21522:18;;64081:59:0::1;21195:351:1::0;64081:59:0::1;64155:31:::0;;::::1;::::0;:12:::1;::::0;:31:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;64201:10:0::1;:17:::0;;-1:-1:-1;;64201:17:0::1;64214:4;64201:17;::::0;;64001:229::o;62613:114::-;62666:13;62703:12;62696:19;;;;;:::i;61136:133::-;55499:12;;-1:-1:-1;;;;;55499:12:0;55485:10;:26;55477:67;;;;-1:-1:-1;;;55477:67:0;;21753:2:1;55477:67:0;;;21735:21:1;21792:2;21772:18;;;21765:30;21831;21811:18;;;21804:58;21879:18;;55477:67:0;21551:352:1;58339:589:0;58439:17;;;;:25;;:17;:25;:48;;;;-1:-1:-1;58468:11:0;;-1:-1:-1;;;58468:11:0;;;;:19;;58483:4;58468:19;58439:48;58431:88;;;;-1:-1:-1;;;58431:88:0;;17278:2:1;58431:88:0;;;17260:21:1;17317:2;17297:18;;;17290:30;17356:29;17336:18;;;17329:57;17403:18;;58431:88:0;17076:351:1;58431:88:0;58540:32;58554:3;58559:12;;58540:13;:32::i;:::-;58532:73;;;;-1:-1:-1;;;58532:73:0;;17634:2:1;58532:73:0;;;17616:21:1;17673:2;17653:18;;;17646:30;17712;17692:18;;;17685:58;17760:18;;58532:73:0;17432:352:1;58532:73:0;58645:9;;58624:17;:15;:17::i;:::-;:30;;58616:79;;;;-1:-1:-1;;;58616:79:0;;;;;;;:::i;:::-;58735:5;;58722:9;:18;58714:70;;;;-1:-1:-1;;;58714:70:0;;;;;;;:::i;:::-;58799:18;58820:17;:15;:17::i;:::-;58799:38;;58852:22;58858:3;58863:10;58852:5;:22::i;:::-;58889:19;:17;:19::i;64886:186::-;64930:13;64960:100;;;;;;;;;;;;;;;;;;;64886:186;:::o;63198:493::-;63480:20;;63528:28;;-1:-1:-1;;;63528:28:0;;-1:-1:-1;;;;;2330:32:1;;;63528:28:0;;;2312:51:1;63339:4:0;;63480:20;;;63520:49;;;;63480:20;;63528:21;;2285:18:1;;63528:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;63520:49:0;;63516:101;;;63597:4;63590:11;;;;;63516:101;-1:-1:-1;;;;;41644:25:0;;;41624:4;41644:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;63640:39;63633:46;63198:493;-1:-1:-1;;;;63198:493:0:o;19500:198::-;18784:12;:10;:12::i;:::-;-1:-1:-1;;;;;18773:23:0;:7;18612:6;;-1:-1:-1;;;;;18612:6:0;;18537:91;18773:7;-1:-1:-1;;;;;18773:23:0;;18765:68;;;;-1:-1:-1;;;18765:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19591:22:0;::::1;19583:73;;;::::0;-1:-1:-1;;;19583:73:0;;22395:2:1;19583:73:0::1;::::0;::::1;22377:21:1::0;22434:2;22414:18;;;22407:30;22473:34;22453:18;;;22446:62;-1:-1:-1;;;22524:18:1;;;22517:36;22570:19;;19583:73:0::1;22193:402:1::0;19583:73:0::1;19669:19;19679:8;19669:9;:19::i;:::-;19500:198:::0;:::o;4071:548::-;4114:22;4149:10;4171:4;4149:27;4145:449;;;4195:18;4216:8;;4195:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4257:8:0;4443:17;4437:24;-1:-1:-1;;;;;4421:106:0;;-1:-1:-1;4145:449:0;;-1:-1:-1;4145:449:0;;-1:-1:-1;4575:10:0;4145:449;4071:548;:::o;60454:116::-;60541:5;;60510:7;;60541:17;;60551:6;60541:9;:17::i;62285:118::-;62334:7;62365:22;:12;36809:14;;36719:112;62365:22;:26;;62390:1;62365:26;:::i;45916:364::-;-1:-1:-1;;;;;45992:16:0;;45984:61;;;;-1:-1:-1;;;45984:61:0;;22802:2:1;45984:61:0;;;22784:21:1;;;22821:18;;;22814:30;22880:34;22860:18;;;22853:62;22932:18;;45984:61:0;22600:356:1;45984:61:0;44136:4;44156:16;;;:7;:16;;;;;;-1:-1:-1;;;;;44156:16:0;:30;46052:58;;;;-1:-1:-1;;;46052:58:0;;23163:2:1;46052:58:0;;;23145:21:1;23202:2;23182:18;;;23175:30;23241;23221:18;;;23214:58;23289:18;;46052:58:0;22961:352:1;46052:58:0;-1:-1:-1;;;;;46173:13:0;;;;;;:9;:13;;;;;:18;;46190:1;;46173:13;:18;;46190:1;;46173:18;:::i;:::-;;;;-1:-1:-1;;46198:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;46198:21:0;-1:-1:-1;;;;;46198:21:0;;;;;;;;46241:33;;46198:16;;;46241:33;;46198:16;;46241:33;45916:364;;:::o;62503:88::-;62555:24;:12;36922:19;;36940:1;36922:19;;;36839:119;63851:128;63905:14;63943:24;:22;:24::i;47786:172::-;47857:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;47857:29:0;-1:-1:-1;;;;;47857:29:0;;;;;;;;:24;;47915:23;47857:24;47915:14;:23::i;:::-;-1:-1:-1;;;;;47906:46:0;;;;;;;;;;;47786:172;;:::o;14079:433::-;14246:4;-1:-1:-1;;;;;14269:20:0;;14261:70;;;;-1:-1:-1;;;14261:70:0;;23520:2:1;14261:70:0;;;23502:21:1;23559:2;23539:18;;;23532:30;23598:34;23578:18;;;23571:62;-1:-1:-1;;;23649:18:1;;;23642:35;23694:19;;14261:70:0;23318:401:1;14261:70:0;14373:131;14395:47;14414:27;14434:6;14414:19;:27::i;:::-;14395:18;:47::i;:::-;14373:131;;;;;;;;;;;;23951:25:1;;;;24024:4;24012:17;;23992:18;;;23985:45;24046:18;;;24039:34;;;24089:18;;;24082:34;;;23923:19;;14373:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14354:150:0;:6;-1:-1:-1;;;;;14354:150:0;;14340:164;;14079:433;;;;;;;:::o;7410:95::-;7467:7;7492:5;7496:1;7492;:5;:::i;:::-;7485:12;7410:95;-1:-1:-1;;;7410:95:0:o;44343:341::-;44435:4;44156:16;;;:7;:16;;;;;;-1:-1:-1;;;;;44156:16:0;44448:73;;;;-1:-1:-1;;;44448:73:0;;24329:2:1;44448:73:0;;;24311:21:1;24368:2;24348:18;;;24341:30;24407:34;24387:18;;;24380:62;-1:-1:-1;;;24458:18:1;;;24451:42;24510:19;;44448:73:0;24127:408:1;44448:73:0;44536:13;44552:23;44567:7;44552:14;:23::i;:::-;44536:39;;44601:5;-1:-1:-1;;;;;44590:16:0;:7;-1:-1:-1;;;;;44590:16:0;;:51;;;;44634:7;-1:-1:-1;;;;;44610:31:0;:20;44622:7;44610:11;:20::i;:::-;-1:-1:-1;;;;;44610:31:0;;44590:51;:87;;;;44645:32;44662:5;44669:7;44645:16;:32::i;47146:534::-;47287:4;-1:-1:-1;;;;;47260:31:0;:23;47275:7;47260:14;:23::i;:::-;-1:-1:-1;;;;;47260:31:0;;47252:85;;;;-1:-1:-1;;;47252:85:0;;24742:2:1;47252:85:0;;;24724:21:1;24781:2;24761:18;;;24754:30;24820:34;24800:18;;;24793:62;-1:-1:-1;;;24871:18:1;;;24864:39;24920:19;;47252:85:0;24540:405:1;47252:85:0;-1:-1:-1;;;;;47352:16:0;;47344:65;;;;-1:-1:-1;;;47344:65:0;;25152:2:1;47344:65:0;;;25134:21:1;25191:2;25171:18;;;25164:30;25230:34;25210:18;;;25203:62;-1:-1:-1;;;25281:18:1;;;25274:34;25325:19;;47344:65:0;24950:400:1;47344:65:0;47514:29;47531:1;47535:7;47514:8;:29::i;:::-;-1:-1:-1;;;;;47552:15:0;;;;;;:9;:15;;;;;:20;;47571:1;;47552:15;:20;;47571:1;;47552:20;:::i;:::-;;;;-1:-1:-1;;;;;;;47579:13:0;;;;;;:9;:13;;;;;:18;;47596:1;;47579:13;:18;;47596:1;;47579:18;:::i;:::-;;;;-1:-1:-1;;47604:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;47604:21:0;-1:-1:-1;;;;;47604:21:0;;;;;;;;;47647:27;;47604:16;;47647:27;;;;;;;47146:534;;;:::o;50864:202::-;50997:4;51052;51023:25;51036:5;51043:4;51023:12;:25::i;:::-;:33;;50864:202;-1:-1:-1;;;;50864:202:0:o;19714:181::-;19791:6;;;-1:-1:-1;;;;;19810:17:0;;;-1:-1:-1;;;;;;19810:17:0;;;;;;;19845:40;;19791:6;;;19810:17;19791:6;;19845:40;;19772:16;;19845:40;19759:136;19714:181;:::o;61285:332::-;61350:21;61332:15;61400:206;61418:19;;61414:1;:23;61400:206;;;61464:126;61497:16;61514:1;61497:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;61497:19:0;61568:3;61550:11;61562:1;61550:14;;;;;;;;:::i;:::-;;;;;;;;;61540:7;:24;;;;:::i;:::-;61539:32;;;;:::i;:::-;61464:10;:126::i;:::-;61439:3;;;;:::i;:::-;;;;61400:206;;43490:287;43625:28;43635:4;43641:2;43645:7;43625:9;:28::i;:::-;43668:48;43691:4;43697:2;43701:7;43710:5;43668:22;:48::i;:::-;43660:111;;;;-1:-1:-1;;;43660:111:0;;;;;;;:::i;14861:692::-;14916:13;15131:10;15127:47;;-1:-1:-1;;15154:10:0;;;;;;;;;;;;-1:-1:-1;;;15154:10:0;;;;;14861:692::o;15127:47::-;15203:5;15188:12;15246:68;15253:9;;15246:68;;15275:8;;;;:::i;:::-;;-1:-1:-1;15294:10:0;;-1:-1:-1;15302:2:0;15294:10;;:::i;:::-;;;15246:68;;;15328:19;15360:6;15350:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15350:17:0;;15328:39;;15376:140;15383:10;;15376:140;;15406:11;15416:1;15406:11;;:::i;:::-;;-1:-1:-1;15471:10:0;15479:2;15471:5;:10;:::i;:::-;15458:24;;:2;:24;:::i;:::-;15445:39;;15428:6;15435;15428:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;15428:56:0;;;;;;;;-1:-1:-1;15495:11:0;15504:2;15495:11;;:::i;:::-;;;15376:140;;8144:95;8201:7;8226:5;8230:1;8226;:5;:::i;13632:327::-;13729:7;11826:102;;;;;;;;;;;;;;;;;11804:135;;;;;;;13847:12;;13872:11;;;;13906:24;;;;;13896:35;;;;;;13786:156;;;;;26682:25:1;;;26738:2;26723:18;;26716:34;;;;-1:-1:-1;;;;;26786:32:1;26781:2;26766:18;;26759:60;26850:2;26835:18;;26828:34;26669:3;26654:19;;26451:417;13786:156:0;;;;;;;;;;;;;13766:185;;;;;;13752:199;;13632:327;;;:::o;3707:223::-;3793:7;3879:20;3150:15;;;3075:98;3879:20;3850:63;;-1:-1:-1;;;3850:63:0;;;27131:27:1;27174:11;;;27167:27;;;;27210:12;;;27203:28;;;27247:12;;3850:63:0;26873:392:1;51438:701:0;51521:7;51566:4;51521:7;51583:515;51607:5;:12;51603:1;:16;51583:515;;;51643:20;51666:5;51672:1;51666:8;;;;;;;;:::i;:::-;;;;;;;51643:31;;51711:12;51695;:28;51691:394;;52217:13;52271:15;;;52309:4;52302:15;;;52358:4;52342:21;;51827:57;;51691:394;;;52217:13;52271:15;;;52309:4;52302:15;;;52358:4;52342:21;;52010:57;;51691:394;-1:-1:-1;51621:3:0;;;;:::i;:::-;;;;51583:515;;;-1:-1:-1;52117:12:0;51438:701;-1:-1:-1;;;51438:701:0:o;61637:193::-;61716:12;61734:8;-1:-1:-1;;;;;61734:13:0;61755:7;61734:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61715:52;;;61790:7;61782:36;;;;-1:-1:-1;;;61782:36:0;;27682:2:1;61782:36:0;;;27664:21:1;27721:2;27701:18;;;27694:30;-1:-1:-1;;;27740:18:1;;;27733:46;27796:18;;61782:36:0;27480:340:1;48501:681:0;48637:4;-1:-1:-1;;;;;48654:13:0;;21030:20;21074:8;48650:527;;48700:2;-1:-1:-1;;;;;48684:36:0;;48721:12;:10;:12::i;:::-;48735:4;48741:7;48750:5;48684:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48684:72:0;;;;;;;;-1:-1:-1;;48684:72:0;;;;;;;;;;;;:::i;:::-;;;48680:456;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48903:13:0;;48899:228;;48936:60;;-1:-1:-1;;;48936:60:0;;;;;;;:::i;48899:228::-;49095:6;49089:13;49080:6;49076:2;49072:15;49065:38;48680:456;-1:-1:-1;;;;;;48798:51:0;-1:-1:-1;;;48798:51:0;;-1:-1:-1;48791:58:0;;48650:527;-1:-1:-1;49165:4:0;48501:681;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:131:1;-1:-1:-1;;;;;;270:32:1;;260:43;;250:71;;317:1;314;307:12;332:245;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;498:9;485:23;517:30;541:5;517:30;:::i;774:131::-;-1:-1:-1;;;;;849:31:1;;839:42;;829:70;;895:1;892;885:12;910:315;978:6;986;1039:2;1027:9;1018:7;1014:23;1010:32;1007:52;;;1055:1;1052;1045:12;1007:52;1094:9;1081:23;1113:31;1138:5;1113:31;:::i;:::-;1163:5;1215:2;1200:18;;;;1187:32;;-1:-1:-1;;;910:315:1:o;1230:258::-;1302:1;1312:113;1326:6;1323:1;1320:13;1312:113;;;1402:11;;;1396:18;1383:11;;;1376:39;1348:2;1341:10;1312:113;;;1443:6;1440:1;1437:13;1434:48;;;-1:-1:-1;;1478:1:1;1460:16;;1453:27;1230:258::o;1493:::-;1535:3;1573:5;1567:12;1600:6;1595:3;1588:19;1616:63;1672:6;1665:4;1660:3;1656:14;1649:4;1642:5;1638:16;1616:63;:::i;:::-;1733:2;1712:15;-1:-1:-1;;1708:29:1;1699:39;;;;1740:4;1695:50;;1493:258;-1:-1:-1;;1493:258:1:o;1756:220::-;1905:2;1894:9;1887:21;1868:4;1925:45;1966:2;1955:9;1951:18;1943:6;1925:45;:::i;1981:180::-;2040:6;2093:2;2081:9;2072:7;2068:23;2064:32;2061:52;;;2109:1;2106;2099:12;2061:52;-1:-1:-1;2132:23:1;;1981:180;-1:-1:-1;1981:180:1:o;2374:127::-;2435:10;2430:3;2426:20;2423:1;2416:31;2466:4;2463:1;2456:15;2490:4;2487:1;2480:15;2506:275;2577:2;2571:9;2642:2;2623:13;;-1:-1:-1;;2619:27:1;2607:40;;2677:18;2662:34;;2698:22;;;2659:62;2656:88;;;2724:18;;:::i;:::-;2760:2;2753:22;2506:275;;-1:-1:-1;2506:275:1:o;2786:406::-;2850:5;2884:18;2876:6;2873:30;2870:56;;;2906:18;;:::i;:::-;2944:57;2989:2;2968:15;;-1:-1:-1;;2964:29:1;2995:4;2960:40;2944:57;:::i;:::-;2935:66;;3024:6;3017:5;3010:21;3064:3;3055:6;3050:3;3046:16;3043:25;3040:45;;;3081:1;3078;3071:12;3040:45;3130:6;3125:3;3118:4;3111:5;3107:16;3094:43;3184:1;3177:4;3168:6;3161:5;3157:18;3153:29;3146:40;2786:406;;;;;:::o;3197:220::-;3239:5;3292:3;3285:4;3277:6;3273:17;3269:27;3259:55;;3310:1;3307;3300:12;3259:55;3332:79;3407:3;3398:6;3385:20;3378:4;3370:6;3366:17;3332:79;:::i;3422:758::-;3524:6;3532;3540;3548;3556;3609:3;3597:9;3588:7;3584:23;3580:33;3577:53;;;3626:1;3623;3616:12;3577:53;3665:9;3652:23;3684:31;3709:5;3684:31;:::i;:::-;3734:5;-1:-1:-1;3790:2:1;3775:18;;3762:32;3817:18;3806:30;;3803:50;;;3849:1;3846;3839:12;3803:50;3872:49;3913:7;3904:6;3893:9;3889:22;3872:49;:::i;:::-;3862:59;;;3968:2;3957:9;3953:18;3940:32;3930:42;;4019:2;4008:9;4004:18;3991:32;3981:42;;4075:3;4064:9;4060:19;4047:33;4124:4;4115:7;4111:18;4102:7;4099:31;4089:59;;4144:1;4141;4134:12;4089:59;4167:7;4157:17;;;3422:758;;;;;;;;:::o;4590:456::-;4667:6;4675;4683;4736:2;4724:9;4715:7;4711:23;4707:32;4704:52;;;4752:1;4749;4742:12;4704:52;4791:9;4778:23;4810:31;4835:5;4810:31;:::i;:::-;4860:5;-1:-1:-1;4917:2:1;4902:18;;4889:32;4930:33;4889:32;4930:33;:::i;:::-;4590:456;;4982:7;;-1:-1:-1;;;5036:2:1;5021:18;;;;5008:32;;4590:456::o;5051:247::-;5110:6;5163:2;5151:9;5142:7;5138:23;5134:32;5131:52;;;5179:1;5176;5169:12;5131:52;5218:9;5205:23;5237:31;5262:5;5237:31;:::i;5303:367::-;5366:8;5376:6;5430:3;5423:4;5415:6;5411:17;5407:27;5397:55;;5448:1;5445;5438:12;5397:55;-1:-1:-1;5471:20:1;;5514:18;5503:30;;5500:50;;;5546:1;5543;5536:12;5500:50;5583:4;5575:6;5571:17;5559:29;;5643:3;5636:4;5626:6;5623:1;5619:14;5611:6;5607:27;5603:38;5600:47;5597:67;;;5660:1;5657;5650:12;5597:67;5303:367;;;;;:::o;5675:572::-;5770:6;5778;5786;5839:2;5827:9;5818:7;5814:23;5810:32;5807:52;;;5855:1;5852;5845:12;5807:52;5894:9;5881:23;5913:31;5938:5;5913:31;:::i;:::-;5963:5;-1:-1:-1;6019:2:1;6004:18;;5991:32;6046:18;6035:30;;6032:50;;;6078:1;6075;6068:12;6032:50;6117:70;6179:7;6170:6;6159:9;6155:22;6117:70;:::i;:::-;5675:572;;6206:8;;-1:-1:-1;6091:96:1;;-1:-1:-1;;;;5675:572:1:o;6252:640::-;6356:6;6364;6372;6380;6433:2;6421:9;6412:7;6408:23;6404:32;6401:52;;;6449:1;6446;6439:12;6401:52;6488:9;6475:23;6507:31;6532:5;6507:31;:::i;:::-;6557:5;-1:-1:-1;6609:2:1;6594:18;;6581:32;;-1:-1:-1;6664:2:1;6649:18;;6636:32;6691:18;6680:30;;6677:50;;;6723:1;6720;6713:12;6677:50;6762:70;6824:7;6815:6;6804:9;6800:22;6762:70;:::i;:::-;6252:640;;;;-1:-1:-1;6851:8:1;-1:-1:-1;;;;6252:640:1:o;7082:416::-;7147:6;7155;7208:2;7196:9;7187:7;7183:23;7179:32;7176:52;;;7224:1;7221;7214:12;7176:52;7263:9;7250:23;7282:31;7307:5;7282:31;:::i;:::-;7332:5;-1:-1:-1;7389:2:1;7374:18;;7361:32;7431:15;;7424:23;7412:36;;7402:64;;7462:1;7459;7452:12;7402:64;7485:7;7475:17;;;7082:416;;;;;:::o;7503:665::-;7598:6;7606;7614;7622;7675:3;7663:9;7654:7;7650:23;7646:33;7643:53;;;7692:1;7689;7682:12;7643:53;7731:9;7718:23;7750:31;7775:5;7750:31;:::i;:::-;7800:5;-1:-1:-1;7857:2:1;7842:18;;7829:32;7870:33;7829:32;7870:33;:::i;:::-;7922:7;-1:-1:-1;7976:2:1;7961:18;;7948:32;;-1:-1:-1;8031:2:1;8016:18;;8003:32;8058:18;8047:30;;8044:50;;;8090:1;8087;8080:12;8044:50;8113:49;8154:7;8145:6;8134:9;8130:22;8113:49;:::i;:::-;8103:59;;;7503:665;;;;;;;:::o;8173:1091::-;8266:6;8274;8327:2;8315:9;8306:7;8302:23;8298:32;8295:52;;;8343:1;8340;8333:12;8295:52;8383:9;8370:23;8412:18;8453:2;8445:6;8442:14;8439:34;;;8469:1;8466;8459:12;8439:34;8507:6;8496:9;8492:22;8482:32;;8552:7;8545:4;8541:2;8537:13;8533:27;8523:55;;8574:1;8571;8564:12;8523:55;8610:2;8597:16;8632:4;8655:2;8651;8648:10;8645:36;;;8661:18;;:::i;:::-;8707:2;8704:1;8700:10;8690:20;;8730:28;8754:2;8750;8746:11;8730:28;:::i;:::-;8792:15;;;8862:11;;;8858:20;;;8823:12;;;;8890:19;;;8887:39;;;8922:1;8919;8912:12;8887:39;8946:11;;;;8966:217;8982:6;8977:3;8974:15;8966:217;;;9062:3;9049:17;9036:30;;9079:31;9104:5;9079:31;:::i;:::-;9123:18;;;8999:12;;;;9161;;;;8966:217;;;9202:5;9239:18;;;;9226:32;;-1:-1:-1;;;;;;;8173:1091:1:o;9269:450::-;9338:6;9391:2;9379:9;9370:7;9366:23;9362:32;9359:52;;;9407:1;9404;9397:12;9359:52;9447:9;9434:23;9480:18;9472:6;9469:30;9466:50;;;9512:1;9509;9502:12;9466:50;9535:22;;9588:4;9580:13;;9576:27;-1:-1:-1;9566:55:1;;9617:1;9614;9607:12;9566:55;9640:73;9705:7;9700:2;9687:16;9682:2;9678;9674:11;9640:73;:::i;9724:388::-;9792:6;9800;9853:2;9841:9;9832:7;9828:23;9824:32;9821:52;;;9869:1;9866;9859:12;9821:52;9908:9;9895:23;9927:31;9952:5;9927:31;:::i;:::-;9977:5;-1:-1:-1;10034:2:1;10019:18;;10006:32;10047:33;10006:32;10047:33;:::i;10472:410::-;10674:2;10656:21;;;10713:2;10693:18;;;10686:30;10752:34;10747:2;10732:18;;10725:62;-1:-1:-1;;;10818:2:1;10803:18;;10796:44;10872:3;10857:19;;10472:410::o;10887:401::-;11089:2;11071:21;;;11128:2;11108:18;;;11101:30;11167:34;11162:2;11147:18;;11140:62;-1:-1:-1;;;11233:2:1;11218:18;;11211:35;11278:3;11263:19;;10887:401::o;11293:127::-;11354:10;11349:3;11345:20;11342:1;11335:31;11385:4;11382:1;11375:15;11409:4;11406:1;11399:15;11425:128;11465:3;11496:1;11492:6;11489:1;11486:13;11483:39;;;11502:18;;:::i;:::-;-1:-1:-1;11538:9:1;;11425:128::o;11558:400::-;11760:2;11742:21;;;11799:2;11779:18;;;11772:30;11838:34;11833:2;11818:18;;11811:62;-1:-1:-1;;;11904:2:1;11889:18;;11882:34;11948:3;11933:19;;11558:400::o;11963:404::-;12165:2;12147:21;;;12204:2;12184:18;;;12177:30;12243:34;12238:2;12223:18;;12216:62;-1:-1:-1;;;12309:2:1;12294:18;;12287:38;12357:3;12342:19;;11963:404::o;12372:175::-;12409:3;12453:4;12446:5;12442:16;12482:4;12473:7;12470:17;12467:43;;;12490:18;;:::i;:::-;12539:1;12526:15;;12372:175;-1:-1:-1;;12372:175:1:o;12552:380::-;12631:1;12627:12;;;;12674;;;12695:61;;12749:4;12741:6;12737:17;12727:27;;12695:61;12802:2;12794:6;12791:14;12771:18;12768:38;12765:161;;;12848:10;12843:3;12839:20;12836:1;12829:31;12883:4;12880:1;12873:15;12911:4;12908:1;12901:15;12765:161;;12552:380;;;:::o;14579:432::-;-1:-1:-1;;;;;14836:15:1;;;14818:34;;14888:15;;14883:2;14868:18;;14861:43;14940:2;14935;14920:18;;14913:30;;;14761:4;;14960:45;;14986:18;;14978:6;14960:45;:::i;15016:415::-;15173:3;15211:6;15205:13;15227:53;15273:6;15268:3;15261:4;15253:6;15249:17;15227:53;:::i;:::-;15349:2;15345:15;;;;-1:-1:-1;;15341:53:1;15302:16;;;;15327:68;;;15422:2;15411:14;;15016:415;-1:-1:-1;;15016:415:1:o;15436:274::-;15565:3;15603:6;15597:13;15619:53;15665:6;15660:3;15653:4;15645:6;15641:17;15619:53;:::i;:::-;15688:16;;;;;15436:274;-1:-1:-1;;15436:274:1:o;16072:413::-;16274:2;16256:21;;;16313:2;16293:18;;;16286:30;16352:34;16347:2;16332:18;;16325:62;-1:-1:-1;;;16418:2:1;16403:18;;16396:47;16475:3;16460:19;;16072:413::o;17789:356::-;17991:2;17973:21;;;18010:18;;;18003:30;18069:34;18064:2;18049:18;;18042:62;18136:2;18121:18;;17789:356::o;19686:403::-;19888:2;19870:21;;;19927:2;19907:18;;;19900:30;19966:34;19961:2;19946:18;;19939:62;-1:-1:-1;;;20032:2:1;20017:18;;20010:37;20079:3;20064:19;;19686:403::o;20448:127::-;20509:10;20504:3;20500:20;20497:1;20490:31;20540:4;20537:1;20530:15;20564:4;20561:1;20554:15;20580:135;20619:3;-1:-1:-1;;20640:17:1;;20637:43;;;20660:18;;:::i;:::-;-1:-1:-1;20707:1:1;20696:13;;20580:135::o;20720:470::-;20899:3;20937:6;20931:13;20953:53;20999:6;20994:3;20987:4;20979:6;20975:17;20953:53;:::i;:::-;21069:13;;21028:16;;;;21091:57;21069:13;21028:16;21125:4;21113:17;;21091:57;:::i;:::-;21164:20;;20720:470;-1:-1:-1;;;;20720:470:1:o;21908:280::-;22007:6;22060:2;22048:9;22039:7;22035:23;22031:32;22028:52;;;22076:1;22073;22066:12;22028:52;22108:9;22102:16;22127:31;22152:5;22127:31;:::i;25355:125::-;25395:4;25423:1;25420;25417:8;25414:34;;;25428:18;;:::i;:::-;-1:-1:-1;25465:9:1;;25355:125::o;25485:168::-;25525:7;25591:1;25587;25583:6;25579:14;25576:1;25573:21;25568:1;25561:9;25554:17;25550:45;25547:71;;;25598:18;;:::i;:::-;-1:-1:-1;25638:9:1;;25485:168::o;25658:127::-;25719:10;25714:3;25710:20;25707:1;25700:31;25750:4;25747:1;25740:15;25774:4;25771:1;25764:15;25790:120;25830:1;25856;25846:35;;25861:18;;:::i;:::-;-1:-1:-1;25895:9:1;;25790:120::o;25915:414::-;26117:2;26099:21;;;26156:2;26136:18;;;26129:30;26195:34;26190:2;26175:18;;26168:62;-1:-1:-1;;;26261:2:1;26246:18;;26239:48;26319:3;26304:19;;25915:414::o;26334:112::-;26366:1;26392;26382:35;;26397:18;;:::i;:::-;-1:-1:-1;26431:9:1;;26334:112::o;27825:489::-;-1:-1:-1;;;;;28094:15:1;;;28076:34;;28146:15;;28141:2;28126:18;;28119:43;28193:2;28178:18;;28171:34;;;28241:3;28236:2;28221:18;;28214:31;;;28019:4;;28262:46;;28288:19;;28280:6;28262:46;:::i;:::-;28254:54;27825:489;-1:-1:-1;;;;;;27825:489:1:o;28319:249::-;28388:6;28441:2;28429:9;28420:7;28416:23;28412:32;28409:52;;;28457:1;28454;28447:12;28409:52;28489:9;28483:16;28508:30;28532:5;28508:30;:::i
Swarm Source
ipfs://953b26809797573604d4717df0c336fd6456f0f1d95809f793b9094c0feb8b4a
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.