Overview
TokenID
3128
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LordSocietyNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-11 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_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 { _transferOwnership(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" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts v4.4.1 (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/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (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/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/Lord.sol pragma solidity >=0.7.0 <0.9.0; contract LordSocietyNFT is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 270000000000000000; uint256 public maxSupply = 7777; uint256 public maxMintAmount = 2; uint256 public reservedForTeam = 15; string private signature; bool public paused = false; bool public revealed = false; bool private whitelistedSale = true; string public notRevealedUri; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function presaleMint(uint256 _mintAmount, string memory _signature) public payable { require(!paused, "Contract is paused"); require(whitelistedSale); require( keccak256(abi.encodePacked((signature))) == keccak256(abi.encodePacked((_signature))), "Invalid signature" ); require(msg.sender != owner()); uint256 supply = totalSupply(); uint256 totalAmount; uint256 tokenCount = balanceOf(msg.sender); require( tokenCount + _mintAmount <= maxMintAmount, string(abi.encodePacked("Limit token ", tokenCount.toString())) ); require( supply + _mintAmount <= maxSupply - reservedForTeam, "Max Supply" ); totalAmount = cost * _mintAmount; require( msg.value >= totalAmount, string( abi.encodePacked( "Incorrect amount ", totalAmount.toString(), " ", msg.value.toString() ) ) ); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); uint256 totalAmount; require(!paused); require(_mintAmount > 0); // Owner if (msg.sender == owner()) { require(reservedForTeam >= _mintAmount); reservedForTeam -= _mintAmount; } if (msg.sender != owner()) { require(!whitelistedSale); uint256 tokenCount = balanceOf(msg.sender); require( tokenCount + _mintAmount <= maxMintAmount, string(abi.encodePacked("Limit token ", tokenCount.toString())) ); require( supply + _mintAmount <= maxSupply - reservedForTeam, "Max Supply" ); totalAmount = cost * _mintAmount; require( msg.value >= totalAmount, string( abi.encodePacked( "Incorrect amount ", totalAmount.toString(), " ", msg.value.toString() ) ) ); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setReserved(uint256 _reserved) public onlyOwner { reservedForTeam = _reserved; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistSale(bool _state) public onlyOwner { whitelistedSale = _state; } function setSignature(string memory _signature) public onlyOwner { signature = _signature; } function withdraw() public payable onlyOwner { // (bool sa, ) = payable(/*addresstobeupdatedlater*/).call{value: address(this).balance * 5 / 100}(""); // require(sa); (bool oa, ) = payable(owner()).call{value: address(this).balance}(""); require(oa); } function partialWithdraw(uint256 _amount) public payable onlyOwner { uint256 splt_amount = (_amount * 5) / 1000; (bool sa, ) = payable(0x689f96DF01126339851AD0D276C7baCD0Cbe78ed).call{value: splt_amount}(""); require(sa); (bool success, ) = payable(owner()).call{value: _amount - splt_amount}(""); require(success); } function getBalance() public view onlyOwner returns (uint256) { return address(this).balance; } function isWhitelisted() public view returns (bool) { return whitelistedSale; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"partialWithdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"string","name":"_signature","type":"string"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_signature","type":"string"}],"name":"setSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"whitelistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c91906200020b565b506703bf3b91c95b0000600d55611e61600e556002600f9081556010556012805462ffffff1916620100001790553480156200006357600080fd5b50604051620030a7380380620030a7833981016040819052620000869162000368565b8351849084906200009f9060009060208501906200020b565b508051620000b59060019060208401906200020b565b505050620000d2620000cc620000f260201b60201c565b620000f6565b620000dd8262000148565b620000e881620001b0565b5050505062000474565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001975760405162461bcd60e51b815260206004820181905260248201526000805160206200308783398151915260448201526064015b60405180910390fd5b8051620001ac90600b9060208401906200020b565b5050565b600a546001600160a01b03163314620001fb5760405162461bcd60e51b815260206004820181905260248201526000805160206200308783398151915260448201526064016200018e565b8051620001ac9060139060208401905b828054620002199062000421565b90600052602060002090601f0160209004810192826200023d576000855562000288565b82601f106200025857805160ff191683800117855562000288565b8280016001018555821562000288579182015b82811115620002885782518255916020019190600101906200026b565b50620002969291506200029a565b5090565b5b808211156200029657600081556001016200029b565b600082601f830112620002c357600080fd5b81516001600160401b0380821115620002e057620002e06200045e565b604051601f8301601f19908116603f011681019082821181831017156200030b576200030b6200045e565b816040528381526020925086838588010111156200032857600080fd5b600091505b838210156200034c57858201830151818301840152908201906200032d565b838211156200035e5760008385830101525b9695505050505050565b600080600080608085870312156200037f57600080fd5b84516001600160401b03808211156200039757600080fd5b620003a588838901620002b1565b95506020870151915080821115620003bc57600080fd5b620003ca88838901620002b1565b94506040870151915080821115620003e157600080fd5b620003ef88838901620002b1565b935060608701519150808211156200040657600080fd5b506200041587828801620002b1565b91505092959194509250565b600181811c908216806200043657607f821691505b602082108114156200045857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612c0380620004846000396000f3fe6080604052600436106102675760003560e01c806355f804b311610144578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd146106c3578063d5abeb01146106e3578063da3ef23f146106f9578063e985e9c514610719578063f2c4ce1e14610762578063f2fde38b1461078257600080fd5b8063a22cb46514610646578063a3d078a614610666578063a475b5dd14610679578063b88d4fde1461068e578063c6682862146106ae57600080fd5b8063715018a611610108578063715018a6146105c257806371d2ee6c146105d75780638da5cb5b146105ea578063930079a21461060857806395d89b411461061e578063a0712d681461063357600080fd5b806355f804b31461052a5780635c975abb1461054a578063611b4095146105645780636352211e1461058257806370a08231146105a257600080fd5b806323b872dd116101dd5780633ccfd60b116101a15780633ccfd60b1461047657806342842e0e1461047e578063438b63001461049e57806344a0d68a146104cb5780634f6ccce7146104eb578063518302271461050b57600080fd5b806323b872dd146103d65780632782fb22146103f657806329d80c84146104165780632d6e71b6146104365780632f745c591461045657600080fd5b8063088a4ed01161022f578063088a4ed014610332578063095ea7b31461035257806312065fe01461037257806313faede61461039557806318160ddd146103ab578063239c70ae146103c057600080fd5b806301ffc9a71461026c57806302329a29146102a157806306fdde03146102c3578063081812fc146102e5578063081c8c441461031d575b600080fd5b34801561027857600080fd5b5061028c61028736600461265e565b6107a2565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004612643565b6107cd565b005b3480156102cf57600080fd5b506102d8610813565b6040516102989190612966565b3480156102f157600080fd5b506103056103003660046126cd565b6108a5565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102d861093a565b34801561033e57600080fd5b506102c161034d3660046126cd565b6109c8565b34801561035e57600080fd5b506102c161036d366004612619565b6109f7565b34801561037e57600080fd5b50610387610b0d565b604051908152602001610298565b3480156103a157600080fd5b50610387600d5481565b3480156103b757600080fd5b50600854610387565b3480156103cc57600080fd5b50610387600f5481565b3480156103e257600080fd5b506102c16103f1366004612537565b610b3f565b34801561040257600080fd5b506102c1610411366004612698565b610b70565b34801561042257600080fd5b506102c1610431366004612643565b610bb1565b34801561044257600080fd5b506102c16104513660046126cd565b610bf7565b34801561046257600080fd5b50610387610471366004612619565b610c26565b6102c1610cbc565b34801561048a57600080fd5b506102c1610499366004612537565b610d5a565b3480156104aa57600080fd5b506104be6104b93660046124e9565b610d75565b6040516102989190612922565b3480156104d757600080fd5b506102c16104e63660046126cd565b610e17565b3480156104f757600080fd5b506103876105063660046126cd565b610e46565b34801561051757600080fd5b5060125461028c90610100900460ff1681565b34801561053657600080fd5b506102c1610545366004612698565b610ed9565b34801561055657600080fd5b5060125461028c9060ff1681565b34801561057057600080fd5b5060125462010000900460ff1661028c565b34801561058e57600080fd5b5061030561059d3660046126cd565b610f16565b3480156105ae57600080fd5b506103876105bd3660046124e9565b610f8d565b3480156105ce57600080fd5b506102c1611014565b6102c16105e53660046126cd565b61104a565b3480156105f657600080fd5b50600a546001600160a01b0316610305565b34801561061457600080fd5b5061038760105481565b34801561062a57600080fd5b506102d8611176565b6102c16106413660046126cd565b611185565b34801561065257600080fd5b506102c16106613660046125ef565b611364565b6102c16106743660046126e6565b61136f565b34801561068557600080fd5b506102c16115d2565b34801561069a57600080fd5b506102c16106a9366004612573565b61160d565b3480156106ba57600080fd5b506102d861163f565b3480156106cf57600080fd5b506102d86106de3660046126cd565b61164c565b3480156106ef57600080fd5b50610387600e5481565b34801561070557600080fd5b506102c1610714366004612698565b6117cb565b34801561072557600080fd5b5061028c610734366004612504565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561076e57600080fd5b506102c161077d366004612698565b611808565b34801561078e57600080fd5b506102c161079d3660046124e9565b611845565b60006001600160e01b0319821663780e9d6360e01b14806107c757506107c7826118dd565b92915050565b600a546001600160a01b031633146108005760405162461bcd60e51b81526004016107f7906129cb565b60405180910390fd5b6012805460ff1916911515919091179055565b60606000805461082290612adf565b80601f016020809104026020016040519081016040528092919081815260200182805461084e90612adf565b801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661091e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b506000908152600460205260409020546001600160a01b031690565b6013805461094790612adf565b80601f016020809104026020016040519081016040528092919081815260200182805461097390612adf565b80156109c05780601f10610995576101008083540402835291602001916109c0565b820191906000526020600020905b8154815290600101906020018083116109a357829003601f168201915b505050505081565b600a546001600160a01b031633146109f25760405162461bcd60e51b81526004016107f7906129cb565b600f55565b6000610a0282610f16565b9050806001600160a01b0316836001600160a01b03161415610a705760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f7565b336001600160a01b0382161480610a8c5750610a8c8133610734565b610afe5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f7565b610b08838361192d565b505050565b600a546000906001600160a01b03163314610b3a5760405162461bcd60e51b81526004016107f7906129cb565b504790565b610b49338261199b565b610b655760405162461bcd60e51b81526004016107f790612a00565b610b08838383611a92565b600a546001600160a01b03163314610b9a5760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90601190602084019061238e565b5050565b600a546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016107f7906129cb565b60128054911515620100000262ff000019909216919091179055565b600a546001600160a01b03163314610c215760405162461bcd60e51b81526004016107f7906129cb565b601055565b6000610c3183610f8d565b8210610c935760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107f7565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ce65760405162461bcd60e51b81526004016107f7906129cb565b6000610cfa600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610d44576040519150601f19603f3d011682016040523d82523d6000602084013e610d49565b606091505b5050905080610d5757600080fd5b50565b610b088383836040518060200160405280600081525061160d565b60606000610d8283610f8d565b905060008167ffffffffffffffff811115610d9f57610d9f612ba1565b604051908082528060200260200182016040528015610dc8578160200160208202803683370190505b50905060005b82811015610e0f57610de08582610c26565b828281518110610df257610df2612b8b565b602090810291909101015280610e0781612b1a565b915050610dce565b509392505050565b600a546001600160a01b03163314610e415760405162461bcd60e51b81526004016107f7906129cb565b600d55565b6000610e5160085490565b8210610eb45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107f7565b60088281548110610ec757610ec7612b8b565b90600052602060002001549050919050565b600a546001600160a01b03163314610f035760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90600b90602084019061238e565b6000818152600260205260408120546001600160a01b0316806107c75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107f7565b60006001600160a01b038216610ff85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107f7565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461103e5760405162461bcd60e51b81526004016107f7906129cb565b6110486000611c3d565b565b600a546001600160a01b031633146110745760405162461bcd60e51b81526004016107f7906129cb565b60006103e8611084836005612a7d565b61108e9190612a69565b60405190915060009073689f96df01126339851ad0d276c7bacd0cbe78ed9083908381818185875af1925050503d80600081146110e7576040519150601f19603f3d011682016040523d82523d6000602084013e6110ec565b606091505b50509050806110fa57600080fd5b600061110e600a546001600160a01b031690565b6001600160a01b03166111218486612a9c565b604051600081818185875af1925050503d806000811461115d576040519150601f19603f3d011682016040523d82523d6000602084013e611162565b606091505b505090508061117057600080fd5b50505050565b60606001805461082290612adf565b600061119060085490565b60125490915060009060ff16156111a657600080fd5b600083116111b357600080fd5b600a546001600160a01b03163314156111ed578260105410156111d557600080fd5b82601060008282546111e79190612a9c565b90915550505b600a546001600160a01b031633146113355760125462010000900460ff161561121557600080fd5b600061122033610f8d565b600f549091506112308583612a51565b111561123b82611c8f565b60405160200161124b9190612858565b604051602081830303815290604052906112785760405162461bcd60e51b81526004016107f79190612966565b50601054600e546112899190612a9c565b6112938585612a51565b11156112ce5760405162461bcd60e51b815260206004820152600a6024820152694d617820537570706c7960b01b60448201526064016107f7565b83600d546112dc9190612a7d565b9150813410156112eb83611c8f565b6112f434611c8f565b60405160200161130592919061288c565b604051602081830303815290604052906113325760405162461bcd60e51b81526004016107f79190612966565b50505b60015b838111611170576113523361134d8386612a51565b611d8d565b8061135c81612b1a565b915050611338565b610bad338383611da7565b60125460ff16156113b75760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107f7565b60125462010000900460ff166113cc57600080fd5b806040516020016113dd91906127f3565b604051602081830303815290604052805190602001206011604051602001611405919061284c565b604051602081830303815290604052805190602001201461145c5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016107f7565b600a546001600160a01b031633141561147457600080fd5b600061147f60085490565b905060008061148d33610f8d565b600f5490915061149d8683612a51565b11156114a882611c8f565b6040516020016114b89190612858565b604051602081830303815290604052906114e55760405162461bcd60e51b81526004016107f79190612966565b50601054600e546114f69190612a9c565b6115008685612a51565b111561153b5760405162461bcd60e51b815260206004820152600a6024820152694d617820537570706c7960b01b60448201526064016107f7565b84600d546115499190612a7d565b91508134101561155883611c8f565b61156134611c8f565b60405160200161157292919061288c565b6040516020818303038152906040529061159f5760405162461bcd60e51b81526004016107f79190612966565b5060015b8581116115ca576115b83361134d8387612a51565b806115c281612b1a565b9150506115a3565b505050505050565b600a546001600160a01b031633146115fc5760405162461bcd60e51b81526004016107f7906129cb565b6012805461ff001916610100179055565b611617338361199b565b6116335760405162461bcd60e51b81526004016107f790612a00565b61117084848484611e76565b600c805461094790612adf565b6000818152600260205260409020546060906001600160a01b03166116cb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107f7565b601254610100900460ff1661176c57601380546116e790612adf565b80601f016020809104026020016040519081016040528092919081815260200182805461171390612adf565b80156117605780601f1061173557610100808354040283529160200191611760565b820191906000526020600020905b81548152906001019060200180831161174357829003601f168201915b50505050509050919050565b6000611776611ea9565b9050600081511161179657604051806020016040528060008152506117c4565b806117a084611c8f565b600c6040516020016117b49392919061280f565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146117f55760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90600c90602084019061238e565b600a546001600160a01b031633146118325760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90601390602084019061238e565b600a546001600160a01b0316331461186f5760405162461bcd60e51b81526004016107f7906129cb565b6001600160a01b0381166118d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b610d5781611c3d565b60006001600160e01b031982166380ac58cd60e01b148061190e57506001600160e01b03198216635b5e139f60e01b145b806107c757506301ffc9a760e01b6001600160e01b03198316146107c7565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061196282610f16565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a145760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b6000611a1f83610f16565b9050806001600160a01b0316846001600160a01b03161480611a5a5750836001600160a01b0316611a4f846108a5565b6001600160a01b0316145b80611a8a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611aa582610f16565b6001600160a01b031614611b0d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107f7565b6001600160a01b038216611b6f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b611b7a838383611eb8565b611b8560008261192d565b6001600160a01b0383166000908152600360205260408120805460019290611bae908490612a9c565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bdc908490612a51565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081611cb35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cdd5780611cc781612b1a565b9150611cd69050600a83612a69565b9150611cb7565b60008167ffffffffffffffff811115611cf857611cf8612ba1565b6040519080825280601f01601f191660200182016040528015611d22576020820181803683370190505b5090505b8415611a8a57611d37600183612a9c565b9150611d44600a86612b35565b611d4f906030612a51565b60f81b818381518110611d6457611d64612b8b565b60200101906001600160f81b031916908160001a905350611d86600a86612a69565b9450611d26565b610bad828260405180602001604052806000815250611f70565b816001600160a01b0316836001600160a01b03161415611e095760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e81848484611a92565b611e8d84848484611fa3565b6111705760405162461bcd60e51b81526004016107f790612979565b6060600b805461082290612adf565b6001600160a01b038316611f1357611f0e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611f36565b816001600160a01b0316836001600160a01b031614611f3657611f3683826120b0565b6001600160a01b038216611f4d57610b088161214d565b826001600160a01b0316826001600160a01b031614610b0857610b0882826121fc565b611f7a8383612240565b611f876000848484611fa3565b610b085760405162461bcd60e51b81526004016107f790612979565b60006001600160a01b0384163b156120a557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611fe79033908990889088906004016128e5565b602060405180830381600087803b15801561200157600080fd5b505af1925050508015612031575060408051601f3d908101601f1916820190925261202e9181019061267b565b60015b61208b573d80801561205f576040519150601f19603f3d011682016040523d82523d6000602084013e612064565b606091505b5080516120835760405162461bcd60e51b81526004016107f790612979565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a8a565b506001949350505050565b600060016120bd84610f8d565b6120c79190612a9c565b60008381526007602052604090205490915080821461211a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061215f90600190612a9c565b6000838152600960205260408120546008805493945090928490811061218757612187612b8b565b9060005260206000200154905080600883815481106121a8576121a8612b8b565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806121e0576121e0612b75565b6001900381819060005260206000200160009055905550505050565b600061220783610f8d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166122965760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107f7565b6000818152600260205260409020546001600160a01b0316156122fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f7565b61230760008383611eb8565b6001600160a01b0382166000908152600360205260408120805460019290612330908490612a51565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461239a90612adf565b90600052602060002090601f0160209004810192826123bc5760008555612402565b82601f106123d557805160ff1916838001178555612402565b82800160010185558215612402579182015b828111156124025782518255916020019190600101906123e7565b5061240e929150612412565b5090565b5b8082111561240e5760008155600101612413565b600067ffffffffffffffff8084111561244257612442612ba1565b604051601f8501601f19908116603f0116810190828211818310171561246a5761246a612ba1565b8160405280935085815286868601111561248357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146124b457600080fd5b919050565b803580151581146124b457600080fd5b600082601f8301126124da57600080fd5b6117c483833560208501612427565b6000602082840312156124fb57600080fd5b6117c48261249d565b6000806040838503121561251757600080fd5b6125208361249d565b915061252e6020840161249d565b90509250929050565b60008060006060848603121561254c57600080fd5b6125558461249d565b92506125636020850161249d565b9150604084013590509250925092565b6000806000806080858703121561258957600080fd5b6125928561249d565b93506125a06020860161249d565b925060408501359150606085013567ffffffffffffffff8111156125c357600080fd5b8501601f810187136125d457600080fd5b6125e387823560208401612427565b91505092959194509250565b6000806040838503121561260257600080fd5b61260b8361249d565b915061252e602084016124b9565b6000806040838503121561262c57600080fd5b6126358361249d565b946020939093013593505050565b60006020828403121561265557600080fd5b6117c4826124b9565b60006020828403121561267057600080fd5b81356117c481612bb7565b60006020828403121561268d57600080fd5b81516117c481612bb7565b6000602082840312156126aa57600080fd5b813567ffffffffffffffff8111156126c157600080fd5b611a8a848285016124c9565b6000602082840312156126df57600080fd5b5035919050565b600080604083850312156126f957600080fd5b82359150602083013567ffffffffffffffff81111561271757600080fd5b612723858286016124c9565b9150509250929050565b60008151808452612745816020860160208601612ab3565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061277357607f831692505b602080841082141561279557634e487b7160e01b600052602260045260246000fd5b8180156127a957600181146127ba576127e7565b60ff198616895284890196506127e7565b60008881526020902060005b868110156127df5781548b8201529085019083016127c6565b505084890196505b50505050505092915050565b60008251612805818460208701612ab3565b9190910192915050565b60008451612821818460208901612ab3565b845190830190612835818360208901612ab3565b61284181830186612759565b979650505050505050565b60006117c48284612759565b6b02634b6b4ba103a37b5b2b7160a51b81526000825161287f81600c850160208701612ab3565b91909101600c0192915050565b70024b731b7b93932b1ba1030b6b7bab73a1607d1b8152600083516128b8816011850160208801612ab3565b600160fd1b60119184019182015283516128d9816012840160208801612ab3565b01601201949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129189083018461272d565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561295a5783518352928401929184019160010161293e565b50909695505050505050565b6020815260006117c4602083018461272d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612a6457612a64612b49565b500190565b600082612a7857612a78612b5f565b500490565b6000816000190483118215151615612a9757612a97612b49565b500290565b600082821015612aae57612aae612b49565b500390565b60005b83811015612ace578181015183820152602001612ab6565b838111156111705750506000910152565b600181811c90821680612af357607f821691505b60208210811415612b1457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b2e57612b2e612b49565b5060010190565b600082612b4457612b44612b5f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d5757600080fdfea2646970667358221220c2bdac47ca97cd548611a7bf07fc0266667f22bc18ed6028ca56f93be8283ead64736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e4c6f7264536f63696574794e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074c4f52444e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6339594135385a417266437059614d6876616565644c396674584370516e7659637a4d3539774657743953512f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6339594135385a417266437059614d6876616565644c396674584370516e7659637a4d3539774657743953512f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c806355f804b311610144578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd146106c3578063d5abeb01146106e3578063da3ef23f146106f9578063e985e9c514610719578063f2c4ce1e14610762578063f2fde38b1461078257600080fd5b8063a22cb46514610646578063a3d078a614610666578063a475b5dd14610679578063b88d4fde1461068e578063c6682862146106ae57600080fd5b8063715018a611610108578063715018a6146105c257806371d2ee6c146105d75780638da5cb5b146105ea578063930079a21461060857806395d89b411461061e578063a0712d681461063357600080fd5b806355f804b31461052a5780635c975abb1461054a578063611b4095146105645780636352211e1461058257806370a08231146105a257600080fd5b806323b872dd116101dd5780633ccfd60b116101a15780633ccfd60b1461047657806342842e0e1461047e578063438b63001461049e57806344a0d68a146104cb5780634f6ccce7146104eb578063518302271461050b57600080fd5b806323b872dd146103d65780632782fb22146103f657806329d80c84146104165780632d6e71b6146104365780632f745c591461045657600080fd5b8063088a4ed01161022f578063088a4ed014610332578063095ea7b31461035257806312065fe01461037257806313faede61461039557806318160ddd146103ab578063239c70ae146103c057600080fd5b806301ffc9a71461026c57806302329a29146102a157806306fdde03146102c3578063081812fc146102e5578063081c8c441461031d575b600080fd5b34801561027857600080fd5b5061028c61028736600461265e565b6107a2565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004612643565b6107cd565b005b3480156102cf57600080fd5b506102d8610813565b6040516102989190612966565b3480156102f157600080fd5b506103056103003660046126cd565b6108a5565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102d861093a565b34801561033e57600080fd5b506102c161034d3660046126cd565b6109c8565b34801561035e57600080fd5b506102c161036d366004612619565b6109f7565b34801561037e57600080fd5b50610387610b0d565b604051908152602001610298565b3480156103a157600080fd5b50610387600d5481565b3480156103b757600080fd5b50600854610387565b3480156103cc57600080fd5b50610387600f5481565b3480156103e257600080fd5b506102c16103f1366004612537565b610b3f565b34801561040257600080fd5b506102c1610411366004612698565b610b70565b34801561042257600080fd5b506102c1610431366004612643565b610bb1565b34801561044257600080fd5b506102c16104513660046126cd565b610bf7565b34801561046257600080fd5b50610387610471366004612619565b610c26565b6102c1610cbc565b34801561048a57600080fd5b506102c1610499366004612537565b610d5a565b3480156104aa57600080fd5b506104be6104b93660046124e9565b610d75565b6040516102989190612922565b3480156104d757600080fd5b506102c16104e63660046126cd565b610e17565b3480156104f757600080fd5b506103876105063660046126cd565b610e46565b34801561051757600080fd5b5060125461028c90610100900460ff1681565b34801561053657600080fd5b506102c1610545366004612698565b610ed9565b34801561055657600080fd5b5060125461028c9060ff1681565b34801561057057600080fd5b5060125462010000900460ff1661028c565b34801561058e57600080fd5b5061030561059d3660046126cd565b610f16565b3480156105ae57600080fd5b506103876105bd3660046124e9565b610f8d565b3480156105ce57600080fd5b506102c1611014565b6102c16105e53660046126cd565b61104a565b3480156105f657600080fd5b50600a546001600160a01b0316610305565b34801561061457600080fd5b5061038760105481565b34801561062a57600080fd5b506102d8611176565b6102c16106413660046126cd565b611185565b34801561065257600080fd5b506102c16106613660046125ef565b611364565b6102c16106743660046126e6565b61136f565b34801561068557600080fd5b506102c16115d2565b34801561069a57600080fd5b506102c16106a9366004612573565b61160d565b3480156106ba57600080fd5b506102d861163f565b3480156106cf57600080fd5b506102d86106de3660046126cd565b61164c565b3480156106ef57600080fd5b50610387600e5481565b34801561070557600080fd5b506102c1610714366004612698565b6117cb565b34801561072557600080fd5b5061028c610734366004612504565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561076e57600080fd5b506102c161077d366004612698565b611808565b34801561078e57600080fd5b506102c161079d3660046124e9565b611845565b60006001600160e01b0319821663780e9d6360e01b14806107c757506107c7826118dd565b92915050565b600a546001600160a01b031633146108005760405162461bcd60e51b81526004016107f7906129cb565b60405180910390fd5b6012805460ff1916911515919091179055565b60606000805461082290612adf565b80601f016020809104026020016040519081016040528092919081815260200182805461084e90612adf565b801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661091e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b506000908152600460205260409020546001600160a01b031690565b6013805461094790612adf565b80601f016020809104026020016040519081016040528092919081815260200182805461097390612adf565b80156109c05780601f10610995576101008083540402835291602001916109c0565b820191906000526020600020905b8154815290600101906020018083116109a357829003601f168201915b505050505081565b600a546001600160a01b031633146109f25760405162461bcd60e51b81526004016107f7906129cb565b600f55565b6000610a0282610f16565b9050806001600160a01b0316836001600160a01b03161415610a705760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107f7565b336001600160a01b0382161480610a8c5750610a8c8133610734565b610afe5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107f7565b610b08838361192d565b505050565b600a546000906001600160a01b03163314610b3a5760405162461bcd60e51b81526004016107f7906129cb565b504790565b610b49338261199b565b610b655760405162461bcd60e51b81526004016107f790612a00565b610b08838383611a92565b600a546001600160a01b03163314610b9a5760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90601190602084019061238e565b5050565b600a546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016107f7906129cb565b60128054911515620100000262ff000019909216919091179055565b600a546001600160a01b03163314610c215760405162461bcd60e51b81526004016107f7906129cb565b601055565b6000610c3183610f8d565b8210610c935760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107f7565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ce65760405162461bcd60e51b81526004016107f7906129cb565b6000610cfa600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610d44576040519150601f19603f3d011682016040523d82523d6000602084013e610d49565b606091505b5050905080610d5757600080fd5b50565b610b088383836040518060200160405280600081525061160d565b60606000610d8283610f8d565b905060008167ffffffffffffffff811115610d9f57610d9f612ba1565b604051908082528060200260200182016040528015610dc8578160200160208202803683370190505b50905060005b82811015610e0f57610de08582610c26565b828281518110610df257610df2612b8b565b602090810291909101015280610e0781612b1a565b915050610dce565b509392505050565b600a546001600160a01b03163314610e415760405162461bcd60e51b81526004016107f7906129cb565b600d55565b6000610e5160085490565b8210610eb45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107f7565b60088281548110610ec757610ec7612b8b565b90600052602060002001549050919050565b600a546001600160a01b03163314610f035760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90600b90602084019061238e565b6000818152600260205260408120546001600160a01b0316806107c75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107f7565b60006001600160a01b038216610ff85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107f7565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461103e5760405162461bcd60e51b81526004016107f7906129cb565b6110486000611c3d565b565b600a546001600160a01b031633146110745760405162461bcd60e51b81526004016107f7906129cb565b60006103e8611084836005612a7d565b61108e9190612a69565b60405190915060009073689f96df01126339851ad0d276c7bacd0cbe78ed9083908381818185875af1925050503d80600081146110e7576040519150601f19603f3d011682016040523d82523d6000602084013e6110ec565b606091505b50509050806110fa57600080fd5b600061110e600a546001600160a01b031690565b6001600160a01b03166111218486612a9c565b604051600081818185875af1925050503d806000811461115d576040519150601f19603f3d011682016040523d82523d6000602084013e611162565b606091505b505090508061117057600080fd5b50505050565b60606001805461082290612adf565b600061119060085490565b60125490915060009060ff16156111a657600080fd5b600083116111b357600080fd5b600a546001600160a01b03163314156111ed578260105410156111d557600080fd5b82601060008282546111e79190612a9c565b90915550505b600a546001600160a01b031633146113355760125462010000900460ff161561121557600080fd5b600061122033610f8d565b600f549091506112308583612a51565b111561123b82611c8f565b60405160200161124b9190612858565b604051602081830303815290604052906112785760405162461bcd60e51b81526004016107f79190612966565b50601054600e546112899190612a9c565b6112938585612a51565b11156112ce5760405162461bcd60e51b815260206004820152600a6024820152694d617820537570706c7960b01b60448201526064016107f7565b83600d546112dc9190612a7d565b9150813410156112eb83611c8f565b6112f434611c8f565b60405160200161130592919061288c565b604051602081830303815290604052906113325760405162461bcd60e51b81526004016107f79190612966565b50505b60015b838111611170576113523361134d8386612a51565b611d8d565b8061135c81612b1a565b915050611338565b610bad338383611da7565b60125460ff16156113b75760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107f7565b60125462010000900460ff166113cc57600080fd5b806040516020016113dd91906127f3565b604051602081830303815290604052805190602001206011604051602001611405919061284c565b604051602081830303815290604052805190602001201461145c5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016107f7565b600a546001600160a01b031633141561147457600080fd5b600061147f60085490565b905060008061148d33610f8d565b600f5490915061149d8683612a51565b11156114a882611c8f565b6040516020016114b89190612858565b604051602081830303815290604052906114e55760405162461bcd60e51b81526004016107f79190612966565b50601054600e546114f69190612a9c565b6115008685612a51565b111561153b5760405162461bcd60e51b815260206004820152600a6024820152694d617820537570706c7960b01b60448201526064016107f7565b84600d546115499190612a7d565b91508134101561155883611c8f565b61156134611c8f565b60405160200161157292919061288c565b6040516020818303038152906040529061159f5760405162461bcd60e51b81526004016107f79190612966565b5060015b8581116115ca576115b83361134d8387612a51565b806115c281612b1a565b9150506115a3565b505050505050565b600a546001600160a01b031633146115fc5760405162461bcd60e51b81526004016107f7906129cb565b6012805461ff001916610100179055565b611617338361199b565b6116335760405162461bcd60e51b81526004016107f790612a00565b61117084848484611e76565b600c805461094790612adf565b6000818152600260205260409020546060906001600160a01b03166116cb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107f7565b601254610100900460ff1661176c57601380546116e790612adf565b80601f016020809104026020016040519081016040528092919081815260200182805461171390612adf565b80156117605780601f1061173557610100808354040283529160200191611760565b820191906000526020600020905b81548152906001019060200180831161174357829003601f168201915b50505050509050919050565b6000611776611ea9565b9050600081511161179657604051806020016040528060008152506117c4565b806117a084611c8f565b600c6040516020016117b49392919061280f565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146117f55760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90600c90602084019061238e565b600a546001600160a01b031633146118325760405162461bcd60e51b81526004016107f7906129cb565b8051610bad90601390602084019061238e565b600a546001600160a01b0316331461186f5760405162461bcd60e51b81526004016107f7906129cb565b6001600160a01b0381166118d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b610d5781611c3d565b60006001600160e01b031982166380ac58cd60e01b148061190e57506001600160e01b03198216635b5e139f60e01b145b806107c757506301ffc9a760e01b6001600160e01b03198316146107c7565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061196282610f16565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a145760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107f7565b6000611a1f83610f16565b9050806001600160a01b0316846001600160a01b03161480611a5a5750836001600160a01b0316611a4f846108a5565b6001600160a01b0316145b80611a8a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611aa582610f16565b6001600160a01b031614611b0d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107f7565b6001600160a01b038216611b6f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b611b7a838383611eb8565b611b8560008261192d565b6001600160a01b0383166000908152600360205260408120805460019290611bae908490612a9c565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bdc908490612a51565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606081611cb35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cdd5780611cc781612b1a565b9150611cd69050600a83612a69565b9150611cb7565b60008167ffffffffffffffff811115611cf857611cf8612ba1565b6040519080825280601f01601f191660200182016040528015611d22576020820181803683370190505b5090505b8415611a8a57611d37600183612a9c565b9150611d44600a86612b35565b611d4f906030612a51565b60f81b818381518110611d6457611d64612b8b565b60200101906001600160f81b031916908160001a905350611d86600a86612a69565b9450611d26565b610bad828260405180602001604052806000815250611f70565b816001600160a01b0316836001600160a01b03161415611e095760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107f7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611e81848484611a92565b611e8d84848484611fa3565b6111705760405162461bcd60e51b81526004016107f790612979565b6060600b805461082290612adf565b6001600160a01b038316611f1357611f0e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611f36565b816001600160a01b0316836001600160a01b031614611f3657611f3683826120b0565b6001600160a01b038216611f4d57610b088161214d565b826001600160a01b0316826001600160a01b031614610b0857610b0882826121fc565b611f7a8383612240565b611f876000848484611fa3565b610b085760405162461bcd60e51b81526004016107f790612979565b60006001600160a01b0384163b156120a557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611fe79033908990889088906004016128e5565b602060405180830381600087803b15801561200157600080fd5b505af1925050508015612031575060408051601f3d908101601f1916820190925261202e9181019061267b565b60015b61208b573d80801561205f576040519150601f19603f3d011682016040523d82523d6000602084013e612064565b606091505b5080516120835760405162461bcd60e51b81526004016107f790612979565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a8a565b506001949350505050565b600060016120bd84610f8d565b6120c79190612a9c565b60008381526007602052604090205490915080821461211a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061215f90600190612a9c565b6000838152600960205260408120546008805493945090928490811061218757612187612b8b565b9060005260206000200154905080600883815481106121a8576121a8612b8b565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806121e0576121e0612b75565b6001900381819060005260206000200160009055905550505050565b600061220783610f8d565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166122965760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107f7565b6000818152600260205260409020546001600160a01b0316156122fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107f7565b61230760008383611eb8565b6001600160a01b0382166000908152600360205260408120805460019290612330908490612a51565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461239a90612adf565b90600052602060002090601f0160209004810192826123bc5760008555612402565b82601f106123d557805160ff1916838001178555612402565b82800160010185558215612402579182015b828111156124025782518255916020019190600101906123e7565b5061240e929150612412565b5090565b5b8082111561240e5760008155600101612413565b600067ffffffffffffffff8084111561244257612442612ba1565b604051601f8501601f19908116603f0116810190828211818310171561246a5761246a612ba1565b8160405280935085815286868601111561248357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146124b457600080fd5b919050565b803580151581146124b457600080fd5b600082601f8301126124da57600080fd5b6117c483833560208501612427565b6000602082840312156124fb57600080fd5b6117c48261249d565b6000806040838503121561251757600080fd5b6125208361249d565b915061252e6020840161249d565b90509250929050565b60008060006060848603121561254c57600080fd5b6125558461249d565b92506125636020850161249d565b9150604084013590509250925092565b6000806000806080858703121561258957600080fd5b6125928561249d565b93506125a06020860161249d565b925060408501359150606085013567ffffffffffffffff8111156125c357600080fd5b8501601f810187136125d457600080fd5b6125e387823560208401612427565b91505092959194509250565b6000806040838503121561260257600080fd5b61260b8361249d565b915061252e602084016124b9565b6000806040838503121561262c57600080fd5b6126358361249d565b946020939093013593505050565b60006020828403121561265557600080fd5b6117c4826124b9565b60006020828403121561267057600080fd5b81356117c481612bb7565b60006020828403121561268d57600080fd5b81516117c481612bb7565b6000602082840312156126aa57600080fd5b813567ffffffffffffffff8111156126c157600080fd5b611a8a848285016124c9565b6000602082840312156126df57600080fd5b5035919050565b600080604083850312156126f957600080fd5b82359150602083013567ffffffffffffffff81111561271757600080fd5b612723858286016124c9565b9150509250929050565b60008151808452612745816020860160208601612ab3565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061277357607f831692505b602080841082141561279557634e487b7160e01b600052602260045260246000fd5b8180156127a957600181146127ba576127e7565b60ff198616895284890196506127e7565b60008881526020902060005b868110156127df5781548b8201529085019083016127c6565b505084890196505b50505050505092915050565b60008251612805818460208701612ab3565b9190910192915050565b60008451612821818460208901612ab3565b845190830190612835818360208901612ab3565b61284181830186612759565b979650505050505050565b60006117c48284612759565b6b02634b6b4ba103a37b5b2b7160a51b81526000825161287f81600c850160208701612ab3565b91909101600c0192915050565b70024b731b7b93932b1ba1030b6b7bab73a1607d1b8152600083516128b8816011850160208801612ab3565b600160fd1b60119184019182015283516128d9816012840160208801612ab3565b01601201949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906129189083018461272d565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561295a5783518352928401929184019160010161293e565b50909695505050505050565b6020815260006117c4602083018461272d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612a6457612a64612b49565b500190565b600082612a7857612a78612b5f565b500490565b6000816000190483118215151615612a9757612a97612b49565b500290565b600082821015612aae57612aae612b49565b500390565b60005b83811015612ace578181015183820152602001612ab6565b838111156111705750506000910152565b600181811c90821680612af357607f821691505b60208210811415612b1457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b2e57612b2e612b49565b5060010190565b600082612b4457612b44612b5f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d5757600080fdfea2646970667358221220c2bdac47ca97cd548611a7bf07fc0266667f22bc18ed6028ca56f93be8283ead64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000e4c6f7264536f63696574794e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074c4f52444e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6339594135385a417266437059614d6876616565644c396674584370516e7659637a4d3539774657743953512f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6339594135385a417266437059614d6876616565644c396674584370516e7659637a4d3539774657743953512f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): LordSocietyNFT
Arg [1] : _symbol (string): LORDNFT
Arg [2] : _initBaseURI (string): ipfs://Qmc9YA58ZArfCpYaMhvaeedL9ftXCpQnvYczM59wFWt9SQ/
Arg [3] : _initNotRevealedUri (string): ipfs://Qmc9YA58ZArfCpYaMhvaeedL9ftXCpQnvYczM59wFWt9SQ/hidden.json
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 4c6f7264536f63696574794e4654000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 4c4f52444e465400000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d6339594135385a417266437059614d6876616565644c39
Arg [10] : 6674584370516e7659637a4d3539774657743953512f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d6339594135385a417266437059614d6876616565644c39
Arg [13] : 6674584370516e7659637a4d3539774657743953512f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46485:6785:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40007:300;;;;;;;;;;-1:-1:-1;40007:300:0;;;;;:::i;:::-;;:::i;:::-;;;9989:14:1;;9982:22;9964:41;;9952:2;9937:18;40007:300:0;;;;;;;;52073:79;;;;;;;;;;-1:-1:-1;52073:79:0;;;;;:::i;:::-;;:::i;:::-;;26771:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28464:308::-;;;;;;;;;;-1:-1:-1;28464:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8650:32:1;;;8632:51;;8620:2;8605:18;28464:308:0;8486:203:1;46957:28:0;;;;;;;;;;;;;:::i;51538:122::-;;;;;;;;;;-1:-1:-1;51538:122:0;;;;;:::i;:::-;;:::i;27987:411::-;;;;;;;;;;-1:-1:-1;27987:411:0;;;;;:::i;:::-;;:::i;53057:109::-;;;;;;;;;;;;;:::i;:::-;;;18625:25:1;;;18613:2;18598:18;53057:109:0;18479:177:1;46644:40:0;;;;;;;;;;;;;;;;40810:113;;;;;;;;;;-1:-1:-1;40898:10:0;:17;40810:113;;46729:32;;;;;;;;;;;;;;;;29383:376;;;;;;;;;;-1:-1:-1;29383:376:0;;;;;:::i;:::-;;:::i;52264:106::-;;;;;;;;;;-1:-1:-1;52264:106:0;;;;;:::i;:::-;;:::i;52160:96::-;;;;;;;;;;-1:-1:-1;52160:96:0;;;;;:::i;:::-;;:::i;51333:103::-;;;;;;;;;;-1:-1:-1;51333:103:0;;;;;:::i;:::-;;:::i;40391:343::-;;;;;;;;;;-1:-1:-1;40391:343:0;;;;;:::i;:::-;;:::i;52378:295::-;;;:::i;29830:185::-;;;;;;;;;;-1:-1:-1;29830:185:0;;;;;:::i;:::-;;:::i;50105:392::-;;;;;;;;;;-1:-1:-1;50105:392:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;51444:86::-;;;;;;;;;;-1:-1:-1;51444:86:0;;;;;:::i;:::-;;:::i;41000:320::-;;;;;;;;;;-1:-1:-1;41000:320:0;;;;;:::i;:::-;;:::i;46878:28::-;;;;;;;;;;-1:-1:-1;46878:28:0;;;;;;;;;;;51802:104;;;;;;;;;;-1:-1:-1;51802:104:0;;;;;:::i;:::-;;:::i;46845:26::-;;;;;;;;;;-1:-1:-1;46845:26:0;;;;;;;;53174:93;;;;;;;;;;-1:-1:-1;53244:15:0;;;;;;;53174:93;;26378:326;;;;;;;;;;-1:-1:-1;26378:326:0;;;;;:::i;:::-;;:::i;26021:295::-;;;;;;;;;;-1:-1:-1;26021:295:0;;;;;:::i;:::-;;:::i;4818:103::-;;;;;;;;;;;;;:::i;52681:368::-;;;;;;:::i;:::-;;:::i;4167:87::-;;;;;;;;;;-1:-1:-1;4240:6:0;;-1:-1:-1;;;;;4240:6:0;4167:87;;46768:35;;;;;;;;;;;;;;;;26940:104;;;;;;;;;;;;;:::i;48745:1352::-;;;;;;:::i;:::-;;:::i;28844:187::-;;;;;;;;;;-1:-1:-1;28844:187:0;;;;;:::i;:::-;;:::i;47412:1310::-;;;;;;:::i;:::-;;:::i;51256:69::-;;;;;;;;;;;;;:::i;30086:365::-;;;;;;;;;;-1:-1:-1;30086:365:0;;;;;:::i;:::-;;:::i;46600:37::-;;;;;;;;;;;;;:::i;50505:725::-;;;;;;;;;;-1:-1:-1;50505:725:0;;;;;:::i;:::-;;:::i;46691:31::-;;;;;;;;;;;;;;;;51914:151;;;;;;;;;;-1:-1:-1;51914:151:0;;;;;:::i;:::-;;:::i;29102:214::-;;;;;;;;;;-1:-1:-1;29102:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;29273:25:0;;;29244:4;29273:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29102:214;51668:126;;;;;;;;;;-1:-1:-1;51668:126:0;;;;;:::i;:::-;;:::i;5076:238::-;;;;;;;;;;-1:-1:-1;5076:238:0;;;;;:::i;:::-;;:::i;40007:300::-;40154:4;-1:-1:-1;;;;;;40196:50:0;;-1:-1:-1;;;40196:50:0;;:103;;;40263:36;40287:11;40263:23;:36::i;:::-;40176:123;40007:300;-1:-1:-1;;40007:300:0:o;52073:79::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;;;;;;;;;52129:6:::1;:15:::0;;-1:-1:-1;;52129:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52073:79::o;26771:100::-;26825:13;26858:5;26851:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26771:100;:::o;28464:308::-;28585:7;32087:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32087:16:0;28610:110;;;;-1:-1:-1;;;28610:110:0;;15162:2:1;28610:110:0;;;15144:21:1;15201:2;15181:18;;;15174:30;15240:34;15220:18;;;15213:62;-1:-1:-1;;;15291:18:1;;;15284:42;15343:19;;28610:110:0;14960:408:1;28610:110:0;-1:-1:-1;28740:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28740:24:0;;28464:308::o;46957:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51538:122::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;51619:13:::1;:33:::0;51538:122::o;27987:411::-;28068:13;28084:23;28099:7;28084:14;:23::i;:::-;28068:39;;28132:5;-1:-1:-1;;;;;28126:11:0;:2;-1:-1:-1;;;;;28126:11:0;;;28118:57;;;;-1:-1:-1;;;28118:57:0;;16762:2:1;28118:57:0;;;16744:21:1;16801:2;16781:18;;;16774:30;16840:34;16820:18;;;16813:62;-1:-1:-1;;;16891:18:1;;;16884:31;16932:19;;28118:57:0;16560:397:1;28118:57:0;2950:10;-1:-1:-1;;;;;28210:21:0;;;;:62;;-1:-1:-1;28235:37:0;28252:5;2950:10;29102:214;:::i;28235:37::-;28188:168;;;;-1:-1:-1;;;28188:168:0;;13555:2:1;28188:168:0;;;13537:21:1;13594:2;13574:18;;;13567:30;13633:34;13613:18;;;13606:62;13704:26;13684:18;;;13677:54;13748:19;;28188:168:0;13353:420:1;28188:168:0;28369:21;28378:2;28382:7;28369:8;:21::i;:::-;28057:341;27987:411;;:::o;53057:109::-;4240:6;;53110:7;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;-1:-1:-1;53137:21:0::1;53057:109:::0;:::o;29383:376::-;29592:41;2950:10;29625:7;29592:18;:41::i;:::-;29570:140;;;;-1:-1:-1;;;29570:140:0;;;;;;;:::i;:::-;29723:28;29733:4;29739:2;29743:7;29723:9;:28::i;52264:106::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;52340:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52264:106:::0;:::o;52160:96::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;52224:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;52224:24:0;;::::1;::::0;;;::::1;::::0;;52160:96::o;51333:103::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;51401:15:::1;:27:::0;51333:103::o;40391:343::-;40533:7;40588:23;40605:5;40588:16;:23::i;:::-;40580:5;:31;40558:124;;;;-1:-1:-1;;;40558:124:0;;10442:2:1;40558:124:0;;;10424:21:1;10481:2;10461:18;;;10454:30;10520:34;10500:18;;;10493:62;-1:-1:-1;;;10571:18:1;;;10564:41;10622:19;;40558:124:0;10240:407:1;40558:124:0;-1:-1:-1;;;;;;40700:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;40391:343::o;52378:295::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;52575:7:::1;52596;4240:6:::0;;-1:-1:-1;;;;;4240:6:0;;4167:87;52596:7:::1;-1:-1:-1::0;;;;;52588:21:0::1;52617;52588:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52574:69;;;52662:2;52654:11;;;::::0;::::1;;52423:250;52378:295::o:0;29830:185::-;29968:39;29985:4;29991:2;29995:7;29968:39;;;;;;;;;;;;:16;:39::i;50105:392::-;50192:16;50226:23;50252:17;50262:6;50252:9;:17::i;:::-;50226:43;;50280:25;50322:15;50308:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50308:30:0;;50280:58;;50356:9;50351:113;50371:15;50367:1;:19;50351:113;;;50422:30;50442:6;50450:1;50422:19;:30::i;:::-;50408:8;50417:1;50408:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;50388:3;;;;:::i;:::-;;;;50351:113;;;-1:-1:-1;50481:8:0;50105:392;-1:-1:-1;;;50105:392:0:o;51444:86::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;51507:4:::1;:15:::0;51444:86::o;41000:320::-;41120:7;41175:30;40898:10;:17;;40810:113;41175:30;41167:5;:38;41145:132;;;;-1:-1:-1;;;41145:132:0;;17582:2:1;41145:132:0;;;17564:21:1;17621:2;17601:18;;;17594:30;17660:34;17640:18;;;17633:62;-1:-1:-1;;;17711:18:1;;;17704:42;17763:19;;41145:132:0;17380:408:1;41145:132:0;41295:10;41306:5;41295:17;;;;;;;;:::i;:::-;;;;;;;;;41288:24;;41000:320;;;:::o;51802:104::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;51877:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;26378:326::-:0;26495:7;26536:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26536:16:0;26585:19;26563:110;;;;-1:-1:-1;;;26563:110:0;;14391:2:1;26563:110:0;;;14373:21:1;14430:2;14410:18;;;14403:30;14469:34;14449:18;;;14442:62;-1:-1:-1;;;14520:18:1;;;14513:39;14569:19;;26563:110:0;14189:405:1;26021:295:0;26138:7;-1:-1:-1;;;;;26185:19:0;;26163:111;;;;-1:-1:-1;;;26163:111:0;;13980:2:1;26163:111:0;;;13962:21:1;14019:2;13999:18;;;13992:30;14058:34;14038:18;;;14031:62;-1:-1:-1;;;14109:18:1;;;14102:40;14159:19;;26163:111:0;13778:406:1;26163:111:0;-1:-1:-1;;;;;;26292:16:0;;;;;:9;:16;;;;;;;26021:295::o;4818:103::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;4883:30:::1;4910:1;4883:18;:30::i;:::-;4818:103::o:0;52681:368::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;52759:19:::1;52797:4;52782:11;:7:::0;52792:1:::1;52782:11;:::i;:::-;52781:20;;;;:::i;:::-;52828:80;::::0;52759:42;;-1:-1:-1;52815:7:0::1;::::0;52836:42:::1;::::0;52759;;52815:7;52828:80;52815:7;52828:80;52759:42;52836;52828:80:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52814:94;;;52924:2;52916:11;;;::::0;::::1;;52941:12;52967:7;4240:6:::0;;-1:-1:-1;;;;;4240:6:0;;4167:87;52967:7:::1;-1:-1:-1::0;;;;;52959:21:0::1;52988;52998:11:::0;52988:7;:21:::1;:::i;:::-;52959:55;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52940:74;;;53033:7;53025:16;;;::::0;::::1;;52748:301;;;52681:368:::0;:::o;26940:104::-;26996:13;27029:7;27022:14;;;;;:::i;48745:1352::-;48806:14;48823:13;40898:10;:17;;40810:113;48823:13;48888:6;;48806:30;;-1:-1:-1;48847:19:0;;48888:6;;48887:7;48879:16;;;;;;48928:1;48914:11;:15;48906:24;;;;;;4240:6;;-1:-1:-1;;;;;4240:6:0;48965:10;:21;48961:138;;;49030:11;49011:15;;:30;;49003:39;;;;;;49076:11;49057:15;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;48961:138:0;4240:6;;-1:-1:-1;;;;;4240:6:0;49115:10;:21;49111:864;;49162:15;;;;;;;49161:16;49153:25;;;;;;49193:18;49214:21;49224:10;49214:9;:21::i;:::-;49306:13;;49193:42;;-1:-1:-1;49278:24:0;49291:11;49193:42;49278:24;:::i;:::-;:41;;49378:21;:10;:19;:21::i;:::-;49345:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;49252:164;;;;;-1:-1:-1;;;49252:164:0;;;;;;;;:::i;:::-;;49493:15;;49481:9;;:27;;;;:::i;:::-;49457:20;49466:11;49457:6;:20;:::i;:::-;:51;;49431:123;;;;-1:-1:-1;;;49431:123:0;;18342:2:1;49431:123:0;;;18324:21:1;18381:2;18361:18;;;18354:30;-1:-1:-1;;;18400:18:1;;;18393:40;18450:18;;49431:123:0;18140:334:1;49431:123:0;49592:11;49585:4;;:18;;;;:::i;:::-;49571:32;;49659:11;49646:9;:24;;49807:22;:11;:20;:22::i;:::-;49886:20;:9;:18;:20::i;:::-;49718:211;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49620:343;;;;;-1:-1:-1;;;49620:343:0;;;;;;;;:::i;:::-;;49138:837;49111:864;50004:1;49987:103;50012:11;50007:1;:16;49987:103;;50045:33;50055:10;50067;50076:1;50067:6;:10;:::i;:::-;50045:9;:33::i;:::-;50025:3;;;;:::i;:::-;;;;49987:103;;28844:187;28971:52;2950:10;29004:8;29014;28971:18;:52::i;47412:1310::-;47538:6;;;;47537:7;47529:38;;;;-1:-1:-1;;;47529:38:0;;17995:2:1;47529:38:0;;;17977:21:1;18034:2;18014:18;;;18007:30;-1:-1:-1;;;18053:18:1;;;18046:48;18111:18;;47529:38:0;17793:342:1;47529:38:0;47586:15;;;;;;;47578:24;;;;;;47724:10;47706:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;47696:41;;;;;;47663:9;47645:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;47635:40;;;;;;:102;47613:169;;;;-1:-1:-1;;;47613:169:0;;12796:2:1;47613:169:0;;;12778:21:1;12835:2;12815:18;;;12808:30;-1:-1:-1;;;12854:18:1;;;12847:47;12911:18;;47613:169:0;12594:341:1;47613:169:0;4240:6;;-1:-1:-1;;;;;4240:6:0;47801:10;:21;;47793:30;;;;;;47836:14;47853:13;40898:10;:17;;40810:113;47853:13;47836:30;;47877:19;47909:18;47930:21;47940:10;47930:9;:21::i;:::-;48014:13;;47909:42;;-1:-1:-1;47986:24:0;47999:11;47909:42;47986:24;:::i;:::-;:41;;48082:21;:10;:19;:21::i;:::-;48049:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;47964:152;;;;;-1:-1:-1;;;47964:152:0;;;;;;;;:::i;:::-;;48185:15;;48173:9;;:27;;;;:::i;:::-;48149:20;48158:11;48149:6;:20;:::i;:::-;:51;;48127:111;;;;-1:-1:-1;;;48127:111:0;;18342:2:1;48127:111:0;;;18324:21:1;18381:2;18361:18;;;18354:30;-1:-1:-1;;;18400:18:1;;;18393:40;18450:18;;48127:111:0;18140:334:1;48127:111:0;48272:11;48265:4;;:18;;;;:::i;:::-;48251:32;;48331:11;48318:9;:24;;48463:22;:11;:20;:22::i;:::-;48534:20;:9;:18;:20::i;:::-;48382:191;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48296:303;;;;;-1:-1:-1;;;48296:303:0;;;;;;;;:::i;:::-;-1:-1:-1;48629:1:0;48612:103;48637:11;48632:1;:16;48612:103;;48670:33;48680:10;48692;48701:1;48692:6;:10;:::i;48670:33::-;48650:3;;;;:::i;:::-;;;;48612:103;;;;47518:1204;;;47412:1310;;:::o;51256:69::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;51302:8:::1;:15:::0;;-1:-1:-1;;51302:15:0::1;;;::::0;;51256:69::o;30086:365::-;30275:41;2950:10;30308:7;30275:18;:41::i;:::-;30253:140;;;;-1:-1:-1;;;30253:140:0;;;;;;;:::i;:::-;30404:39;30418:4;30424:2;30428:7;30437:5;30404:13;:39::i;46600:37::-;;;;;;;:::i;50505:725::-;32063:4;32087:16;;;:7;:16;;;;;;50623:13;;-1:-1:-1;;;;;32087:16:0;50654:113;;;;-1:-1:-1;;;50654:113:0;;16346:2:1;50654:113:0;;;16328:21:1;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:1;;;16468:45;16530:19;;50654:113:0;16144:411:1;50654:113:0;50784:8;;;;;;;50780:71;;50825:14;50818:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50505:725;;;:::o;50780:71::-;50863:28;50894:10;:8;:10::i;:::-;50863:41;;50966:1;50941:14;50935:28;:32;:287;;;;;;;;;;;;;;;;;51059:14;51100:18;:7;:16;:18::i;:::-;51145:13;51016:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50935:287;50915:307;50505:725;-1:-1:-1;;;50505:725:0:o;51914:151::-;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;52024:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;51668:126::-:0;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;51754:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;5076:238::-:0;4240:6;;-1:-1:-1;;;;;4240:6:0;2950:10;4387:23;4379:68;;;;-1:-1:-1;;;4379:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5179:22:0;::::1;5157:110;;;::::0;-1:-1:-1;;;5157:110:0;;11273:2:1;5157:110:0::1;::::0;::::1;11255:21:1::0;11312:2;11292:18;;;11285:30;11351:34;11331:18;;;11324:62;-1:-1:-1;;;11402:18:1;;;11395:36;11448:19;;5157:110:0::1;11071:402:1::0;5157:110:0::1;5278:28;5297:8;5278:18;:28::i;25602:355::-:0;25749:4;-1:-1:-1;;;;;;25791:40:0;;-1:-1:-1;;;25791:40:0;;:105;;-1:-1:-1;;;;;;;25848:48:0;;-1:-1:-1;;;25848:48:0;25791:105;:158;;;-1:-1:-1;;;;;;;;;;17252:40:0;;;25913:36;17093:207;36121:174;36196:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36196:29:0;-1:-1:-1;;;;;36196:29:0;;;;;;;;:24;;36250:23;36196:24;36250:14;:23::i;:::-;-1:-1:-1;;;;;36241:46:0;;;;;;;;;;;36121:174;;:::o;32292:452::-;32421:4;32087:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32087:16:0;32443:110;;;;-1:-1:-1;;;32443:110:0;;13142:2:1;32443:110:0;;;13124:21:1;13181:2;13161:18;;;13154:30;13220:34;13200:18;;;13193:62;-1:-1:-1;;;13271:18:1;;;13264:42;13323:19;;32443:110:0;12940:408:1;32443:110:0;32564:13;32580:23;32595:7;32580:14;:23::i;:::-;32564:39;;32633:5;-1:-1:-1;;;;;32622:16:0;:7;-1:-1:-1;;;;;32622:16:0;;:64;;;;32679:7;-1:-1:-1;;;;;32655:31:0;:20;32667:7;32655:11;:20::i;:::-;-1:-1:-1;;;;;32655:31:0;;32622:64;:113;;;-1:-1:-1;;;;;;29273:25:0;;;29244:4;29273:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32703:32;32614:122;32292:452;-1:-1:-1;;;;32292:452:0:o;35388:615::-;35561:4;-1:-1:-1;;;;;35534:31:0;:23;35549:7;35534:14;:23::i;:::-;-1:-1:-1;;;;;35534:31:0;;35512:122;;;;-1:-1:-1;;;35512:122:0;;15936:2:1;35512:122:0;;;15918:21:1;15975:2;15955:18;;;15948:30;16014:34;15994:18;;;15987:62;-1:-1:-1;;;16065:18:1;;;16058:39;16114:19;;35512:122:0;15734:405:1;35512:122:0;-1:-1:-1;;;;;35653:16:0;;35645:65;;;;-1:-1:-1;;;35645:65:0;;12037:2:1;35645:65:0;;;12019:21:1;12076:2;12056:18;;;12049:30;12115:34;12095:18;;;12088:62;-1:-1:-1;;;12166:18:1;;;12159:34;12210:19;;35645:65:0;11835:400:1;35645:65:0;35723:39;35744:4;35750:2;35754:7;35723:20;:39::i;:::-;35827:29;35844:1;35848:7;35827:8;:29::i;:::-;-1:-1:-1;;;;;35869:15:0;;;;;;:9;:15;;;;;:20;;35888:1;;35869:15;:20;;35888:1;;35869:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35900:13:0;;;;;;:9;:13;;;;;:18;;35917:1;;35900:13;:18;;35917:1;;35900:18;:::i;:::-;;;;-1:-1:-1;;35929:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35929:21:0;-1:-1:-1;;;;;35929:21:0;;;;;;;;;35968:27;;35929:16;;35968:27;;;;;;;35388:615;;;:::o;5474:191::-;5567:6;;;-1:-1:-1;;;;;5584:17:0;;;-1:-1:-1;;;;;;5584:17:0;;;;;;;5617:40;;5567:6;;;5584:17;5567:6;;5617:40;;5548:16;;5617:40;5537:128;5474:191;:::o;402:723::-;458:13;679:10;675:53;;-1:-1:-1;;706:10:0;;;;;;;;;;;;-1:-1:-1;;;706:10:0;;;;;402:723::o;675:53::-;753:5;738:12;794:78;801:9;;794:78;;827:8;;;;:::i;:::-;;-1:-1:-1;850:10:0;;-1:-1:-1;858:2:0;850:10;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;904:17:0;;882:39;;932:154;939:10;;932:154;;966:11;976:1;966:11;;:::i;:::-;;-1:-1:-1;1035:10:0;1043:2;1035:5;:10;:::i;:::-;1022:24;;:2;:24;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;992:56:0;;;;;;;;-1:-1:-1;1063:11:0;1072:2;1063:11;;:::i;:::-;;;932:154;;33086:110;33162:26;33172:2;33176:7;33162:26;;;;;;;;;;;;:9;:26::i;36437:315::-;36592:8;-1:-1:-1;;;;;36583:17:0;:5;-1:-1:-1;;;;;36583:17:0;;;36575:55;;;;-1:-1:-1;;;36575:55:0;;12442:2:1;36575:55:0;;;12424:21:1;12481:2;12461:18;;;12454:30;12520:27;12500:18;;;12493:55;12565:18;;36575:55:0;12240:349:1;36575:55:0;-1:-1:-1;;;;;36641:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36641:46:0;;;;;;;;;;36703:41;;9964::1;;;36703::0;;9937:18:1;36703:41:0;;;;;;;36437:315;;;:::o;31333:352::-;31490:28;31500:4;31506:2;31510:7;31490:9;:28::i;:::-;31551:48;31574:4;31580:2;31584:7;31593:5;31551:22;:48::i;:::-;31529:148;;;;-1:-1:-1;;;31529:148:0;;;;;;;:::i;47296:108::-;47356:13;47389:7;47382:14;;;;;:::i;41933:589::-;-1:-1:-1;;;;;42139:18:0;;42135:187;;42174:40;42206:7;43349:10;:17;;43322:24;;;;:15;:24;;;;;:44;;;43377:24;;;;;;;;;;;;43245:164;42174:40;42135:187;;;42244:2;-1:-1:-1;;;;;42236:10:0;:4;-1:-1:-1;;;;;42236:10:0;;42232:90;;42263:47;42296:4;42302:7;42263:32;:47::i;:::-;-1:-1:-1;;;;;42336:16:0;;42332:183;;42369:45;42406:7;42369:36;:45::i;42332:183::-;42442:4;-1:-1:-1;;;;;42436:10:0;:2;-1:-1:-1;;;;;42436:10:0;;42432:83;;42463:40;42491:2;42495:7;42463:27;:40::i;33423:321::-;33553:18;33559:2;33563:7;33553:5;:18::i;:::-;33604:54;33635:1;33639:2;33643:7;33652:5;33604:22;:54::i;:::-;33582:154;;;;-1:-1:-1;;;33582:154:0;;;;;;;:::i;37317:980::-;37472:4;-1:-1:-1;;;;;37493:13:0;;6813:20;6861:8;37489:801;;37546:175;;-1:-1:-1;;;37546:175:0;;-1:-1:-1;;;;;37546:36:0;;;;;:175;;2950:10;;37640:4;;37667:7;;37697:5;;37546:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37546:175:0;;;;;;;;-1:-1:-1;;37546:175:0;;;;;;;;;;;;:::i;:::-;;;37525:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37904:13:0;;37900:320;;37947:108;;-1:-1:-1;;;37947:108:0;;;;;;;:::i;37900:320::-;38170:6;38164:13;38155:6;38151:2;38147:15;38140:38;37525:710;-1:-1:-1;;;;;;37785:51:0;-1:-1:-1;;;37785:51:0;;-1:-1:-1;37778:58:0;;37489:801;-1:-1:-1;38274:4:0;37317:980;;;;;;:::o;44036:1002::-;44316:22;44366:1;44341:22;44358:4;44341:16;:22::i;:::-;:26;;;;:::i;:::-;44378:18;44399:26;;;:17;:26;;;;;;44316:51;;-1:-1:-1;44532:28:0;;;44528:328;;-1:-1:-1;;;;;44599:18:0;;44577:19;44599:18;;;:12;:18;;;;;;;;:34;;;;;;;;;44650:30;;;;;;:44;;;44767:30;;:17;:30;;;;;:43;;;44528:328;-1:-1:-1;44952:26:0;;;;:17;:26;;;;;;;;44945:33;;;-1:-1:-1;;;;;44996:18:0;;;;;:12;:18;;;;;:34;;;;;;;44989:41;44036:1002::o;45333:1079::-;45611:10;:17;45586:22;;45611:21;;45631:1;;45611:21;:::i;:::-;45643:18;45664:24;;;:15;:24;;;;;;46037:10;:26;;45586:46;;-1:-1:-1;45664:24:0;;45586:46;;46037:26;;;;;;:::i;:::-;;;;;;;;;46015:48;;46101:11;46076:10;46087;46076:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;46181:28;;;:15;:28;;;;;;;:41;;;46353:24;;;;;46346:31;46388:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45404:1008;;;45333:1079;:::o;42823:221::-;42908:14;42925:20;42942:2;42925:16;:20::i;:::-;-1:-1:-1;;;;;42956:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;43001:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;42823:221:0:o;34080:382::-;-1:-1:-1;;;;;34160:16:0;;34152:61;;;;-1:-1:-1;;;34152:61:0;;14801:2:1;34152:61:0;;;14783:21:1;;;14820:18;;;14813:30;14879:34;14859:18;;;14852:62;14931:18;;34152:61:0;14599:356:1;34152:61:0;32063:4;32087:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32087:16:0;:30;34224:58;;;;-1:-1:-1;;;34224:58:0;;11680:2:1;34224:58:0;;;11662:21:1;11719:2;11699:18;;;11692:30;11758;11738:18;;;11731:58;11806:18;;34224:58:0;11478:352:1;34224:58:0;34295:45;34324:1;34328:2;34332:7;34295:20;:45::i;:::-;-1:-1:-1;;;;;34353:13:0;;;;;;:9;:13;;;;;:18;;34370:1;;34353:13;:18;;34370:1;;34353:18;:::i;:::-;;;;-1:-1:-1;;34382:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34382:21:0;-1:-1:-1;;;;;34382:21:0;;;;;;;;34421:33;;34382:16;;;34421:33;;34382:16;;34421:33;34080:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:221;1036:5;1089:3;1082:4;1074:6;1070:17;1066:27;1056:55;;1107:1;1104;1097:12;1056:55;1129:79;1204:3;1195:6;1182:20;1175:4;1167:6;1163:17;1129:79;:::i;1219:186::-;1278:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:52;;;1347:1;1344;1337:12;1299:52;1370:29;1389:9;1370:29;:::i;1410:260::-;1478:6;1486;1539:2;1527:9;1518:7;1514:23;1510:32;1507:52;;;1555:1;1552;1545:12;1507:52;1578:29;1597:9;1578:29;:::i;:::-;1568:39;;1626:38;1660:2;1649:9;1645:18;1626:38;:::i;:::-;1616:48;;1410:260;;;;;:::o;1675:328::-;1752:6;1760;1768;1821:2;1809:9;1800:7;1796:23;1792:32;1789:52;;;1837:1;1834;1827:12;1789:52;1860:29;1879:9;1860:29;:::i;:::-;1850:39;;1908:38;1942:2;1931:9;1927:18;1908:38;:::i;:::-;1898:48;;1993:2;1982:9;1978:18;1965:32;1955:42;;1675:328;;;;;:::o;2008:666::-;2103:6;2111;2119;2127;2180:3;2168:9;2159:7;2155:23;2151:33;2148:53;;;2197:1;2194;2187:12;2148:53;2220:29;2239:9;2220:29;:::i;:::-;2210:39;;2268:38;2302:2;2291:9;2287:18;2268:38;:::i;:::-;2258:48;;2353:2;2342:9;2338:18;2325:32;2315:42;;2408:2;2397:9;2393:18;2380:32;2435:18;2427:6;2424:30;2421:50;;;2467:1;2464;2457:12;2421:50;2490:22;;2543:4;2535:13;;2531:27;-1:-1:-1;2521:55:1;;2572:1;2569;2562:12;2521:55;2595:73;2660:7;2655:2;2642:16;2637:2;2633;2629:11;2595:73;:::i;:::-;2585:83;;;2008:666;;;;;;;:::o;2679:254::-;2744:6;2752;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;:::-;2834:39;;2892:35;2923:2;2912:9;2908:18;2892:35;:::i;2938:254::-;3006:6;3014;3067:2;3055:9;3046:7;3042:23;3038:32;3035:52;;;3083:1;3080;3073:12;3035:52;3106:29;3125:9;3106:29;:::i;:::-;3096:39;3182:2;3167:18;;;;3154:32;;-1:-1:-1;;;2938:254:1:o;3197:180::-;3253:6;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3345:26;3361:9;3345:26;:::i;3382:245::-;3440:6;3493:2;3481:9;3472:7;3468:23;3464:32;3461:52;;;3509:1;3506;3499:12;3461:52;3548:9;3535:23;3567:30;3591:5;3567:30;:::i;3632:249::-;3701:6;3754:2;3742:9;3733:7;3729:23;3725:32;3722:52;;;3770:1;3767;3760:12;3722:52;3802:9;3796:16;3821:30;3845:5;3821:30;:::i;3886:322::-;3955:6;4008:2;3996:9;3987:7;3983:23;3979:32;3976:52;;;4024:1;4021;4014:12;3976:52;4064:9;4051:23;4097:18;4089:6;4086:30;4083:50;;;4129:1;4126;4119:12;4083:50;4152;4194:7;4185:6;4174:9;4170:22;4152:50;:::i;4213:180::-;4272:6;4325:2;4313:9;4304:7;4300:23;4296:32;4293:52;;;4341:1;4338;4331:12;4293:52;-1:-1:-1;4364:23:1;;4213:180;-1:-1:-1;4213:180:1:o;4398:390::-;4476:6;4484;4537:2;4525:9;4516:7;4512:23;4508:32;4505:52;;;4553:1;4550;4543:12;4505:52;4589:9;4576:23;4566:33;;4650:2;4639:9;4635:18;4622:32;4677:18;4669:6;4666:30;4663:50;;;4709:1;4706;4699:12;4663:50;4732;4774:7;4765:6;4754:9;4750:22;4732:50;:::i;:::-;4722:60;;;4398:390;;;;;:::o;4793:257::-;4834:3;4872:5;4866:12;4899:6;4894:3;4887:19;4915:63;4971:6;4964:4;4959:3;4955:14;4948:4;4941:5;4937:16;4915:63;:::i;:::-;5032:2;5011:15;-1:-1:-1;;5007:29:1;4998:39;;;;5039:4;4994:50;;4793:257;-1:-1:-1;;4793:257:1:o;5055:973::-;5140:12;;5105:3;;5195:1;5215:18;;;;5268;;;;5295:61;;5349:4;5341:6;5337:17;5327:27;;5295:61;5375:2;5423;5415:6;5412:14;5392:18;5389:38;5386:161;;;5469:10;5464:3;5460:20;5457:1;5450:31;5504:4;5501:1;5494:15;5532:4;5529:1;5522:15;5386:161;5563:18;5590:104;;;;5708:1;5703:319;;;;5556:466;;5590:104;-1:-1:-1;;5623:24:1;;5611:37;;5668:16;;;;-1:-1:-1;5590:104:1;;5703:319;18734:1;18727:14;;;18771:4;18758:18;;5797:1;5811:165;5825:6;5822:1;5819:13;5811:165;;;5903:14;;5890:11;;;5883:35;5946:16;;;;5840:10;;5811:165;;;5815:3;;6005:6;6000:3;5996:16;5989:23;;5556:466;;;;;;;5055:973;;;;:::o;6033:276::-;6164:3;6202:6;6196:13;6218:53;6264:6;6259:3;6252:4;6244:6;6240:17;6218:53;:::i;:::-;6287:16;;;;;6033:276;-1:-1:-1;;6033:276:1:o;6314:550::-;6538:3;6576:6;6570:13;6592:53;6638:6;6633:3;6626:4;6618:6;6614:17;6592:53;:::i;:::-;6708:13;;6667:16;;;;6730:57;6708:13;6667:16;6764:4;6752:17;;6730:57;:::i;:::-;6803:55;6848:8;6841:5;6837:20;6829:6;6803:55;:::i;:::-;6796:62;6314:550;-1:-1:-1;;;;;;;6314:550:1:o;6869:197::-;6997:3;7022:38;7056:3;7048:6;7022:38;:::i;7071:431::-;-1:-1:-1;;;7328:3:1;7321:27;7303:3;7377:6;7371:13;7393:62;7448:6;7443:2;7438:3;7434:12;7427:4;7419:6;7415:17;7393:62;:::i;:::-;7475:16;;;;7493:2;7471:25;;7071:431;-1:-1:-1;;7071:431:1:o;7507:764::-;-1:-1:-1;;;7913:3:1;7906:32;7888:3;7967:6;7961:13;7983:62;8038:6;8033:2;8028:3;8024:12;8017:4;8009:6;8005:17;7983:62;:::i;:::-;-1:-1:-1;;;8104:2:1;8064:16;;;8096:11;;;8089:24;8138:13;;8160:63;8138:13;8209:2;8201:11;;8194:4;8182:17;;8160:63;:::i;:::-;8243:17;8262:2;8239:26;;7507:764;-1:-1:-1;;;;7507:764:1:o;8694:488::-;-1:-1:-1;;;;;8963:15:1;;;8945:34;;9015:15;;9010:2;8995:18;;8988:43;9062:2;9047:18;;9040:34;;;9110:3;9105:2;9090:18;;9083:31;;;8888:4;;9131:45;;9156:19;;9148:6;9131:45;:::i;:::-;9123:53;8694:488;-1:-1:-1;;;;;;8694:488:1:o;9187:632::-;9358:2;9410:21;;;9480:13;;9383:18;;;9502:22;;;9329:4;;9358:2;9581:15;;;;9555:2;9540:18;;;9329:4;9624:169;9638:6;9635:1;9632:13;9624:169;;;9699:13;;9687:26;;9768:15;;;;9733:12;;;;9660:1;9653:9;9624:169;;;-1:-1:-1;9810:3:1;;9187:632;-1:-1:-1;;;;;;9187:632:1:o;10016:219::-;10165:2;10154:9;10147:21;10128:4;10185:44;10225:2;10214:9;10210:18;10202:6;10185:44;:::i;10652:414::-;10854:2;10836:21;;;10893:2;10873:18;;;10866:30;10932:34;10927:2;10912:18;;10905:62;-1:-1:-1;;;10998:2:1;10983:18;;10976:48;11056:3;11041:19;;10652:414::o;15373:356::-;15575:2;15557:21;;;15594:18;;;15587:30;15653:34;15648:2;15633:18;;15626:62;15720:2;15705:18;;15373:356::o;16962:413::-;17164:2;17146:21;;;17203:2;17183:18;;;17176:30;17242:34;17237:2;17222:18;;17215:62;-1:-1:-1;;;17308:2:1;17293:18;;17286:47;17365:3;17350:19;;16962:413::o;18787:128::-;18827:3;18858:1;18854:6;18851:1;18848:13;18845:39;;;18864:18;;:::i;:::-;-1:-1:-1;18900:9:1;;18787:128::o;18920:120::-;18960:1;18986;18976:35;;18991:18;;:::i;:::-;-1:-1:-1;19025:9:1;;18920:120::o;19045:168::-;19085:7;19151:1;19147;19143:6;19139:14;19136:1;19133:21;19128:1;19121:9;19114:17;19110:45;19107:71;;;19158:18;;:::i;:::-;-1:-1:-1;19198:9:1;;19045:168::o;19218:125::-;19258:4;19286:1;19283;19280:8;19277:34;;;19291:18;;:::i;:::-;-1:-1:-1;19328:9:1;;19218:125::o;19348:258::-;19420:1;19430:113;19444:6;19441:1;19438:13;19430:113;;;19520:11;;;19514:18;19501:11;;;19494:39;19466:2;19459:10;19430:113;;;19561:6;19558:1;19555:13;19552:48;;;-1:-1:-1;;19596:1:1;19578:16;;19571:27;19348:258::o;19611:380::-;19690:1;19686:12;;;;19733;;;19754:61;;19808:4;19800:6;19796:17;19786:27;;19754:61;19861:2;19853:6;19850:14;19830:18;19827:38;19824:161;;;19907:10;19902:3;19898:20;19895:1;19888:31;19942:4;19939:1;19932:15;19970:4;19967:1;19960:15;19824:161;;19611:380;;;:::o;19996:135::-;20035:3;-1:-1:-1;;20056:17:1;;20053:43;;;20076:18;;:::i;:::-;-1:-1:-1;20123:1:1;20112:13;;19996:135::o;20136:112::-;20168:1;20194;20184:35;;20199:18;;:::i;:::-;-1:-1:-1;20233:9:1;;20136:112::o;20253:127::-;20314:10;20309:3;20305:20;20302:1;20295:31;20345:4;20342:1;20335:15;20369:4;20366:1;20359:15;20385:127;20446:10;20441:3;20437:20;20434:1;20427:31;20477:4;20474:1;20467:15;20501:4;20498:1;20491:15;20517:127;20578:10;20573:3;20569:20;20566:1;20559:31;20609:4;20606:1;20599:15;20633:4;20630:1;20623:15;20649:127;20710:10;20705:3;20701:20;20698:1;20691:31;20741:4;20738:1;20731:15;20765:4;20762:1;20755:15;20781:127;20842:10;20837:3;20833:20;20830:1;20823:31;20873:4;20870:1;20863:15;20897:4;20894:1;20887:15;20913:131;-1:-1:-1;;;;;;20987:32:1;;20977:43;;20967:71;;21034:1;21031;21024:12
Swarm Source
ipfs://c2bdac47ca97cd548611a7bf07fc0266667f22bc18ed6028ca56f93be8283ead
Loading...
Loading
Loading...
Loading
[ 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.