Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
499 NOONEGROUNDZERO
Holders
198
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 NOONEGROUNDZEROLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NooneGroundZero
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-27 */ /** *Submitted for verification at Etherscan.io on 2021-10-06 */ // SPDX-License-Identifier: Unlicensed 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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); } /** * @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; } /** * @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); } /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` 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 { } } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; contract NooneGroundZero is ERC721Enumerable, Ownable { using Strings for uint256; string _baseTokenURI = ""; uint256 private _price = 0.03 ether; bool public _paused = true; uint256 public _minAmount = 250 * 10e6 * 10e9; IERC20 private _noone; uint256 public _maxSupply = 499; uint256 public _maxMintable = 1; // withdraw addresses address t1 = 0x3f955CdA88ab1de002451766138857C123867bff; modifier canWithdraw(){ require(address(this).balance > 0.01 ether); _; } struct ContractOwners { address payable addr; uint percent; } struct Holder { address addr; uint256 tokenId; } ContractOwners[] contractOnwers; constructor() ERC721("NooneGroundZero", "NOONEGROUNDZERO") { contractOnwers.push(ContractOwners(payable(address(t1)), 100)); _noone = IERC20(0x296233E84c1D7bfF11121BF6D60f0FFA39C3f0cf); } function buyNoone(uint256 num) public payable { uint256 supply = totalSupply(); require( !_paused, "Sale paused" ); require( num <= _maxMintable, "You can buy a maximum of 1 NOONENFT" ); require(_noone.balanceOf(_msgSender()) >= _minAmount, "Not enough NOONE tokens"); require( supply + num < _maxSupply, "Exceeds maximum NOONENFT supply" ); require( msg.value >= _price * num, "Ether sent is not correct" ); for(uint256 i; i < num; i++){ _safeMint( msg.sender, supply + i ); } } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function setNoone(address newNoone) external onlyOwner { _noone = IERC20(newNoone); } function setMaxSupply(uint256 newSupply) external onlyOwner { require(newSupply > totalSupply() && newSupply < 2000, "Supply exceeds limits"); _maxSupply = newSupply; } function setMaxMintable(uint256 newMaxMintable) external onlyOwner { require(newMaxMintable > 0, "total amount needs to be greater than 0"); _maxMintable = newMaxMintable; } function setPrice(uint256 _newPrice) public onlyOwner() { _price = _newPrice; } function setMinAmount(uint256 _newMinAmount) public onlyOwner() { _minAmount = _newMinAmount; } function getMinAmount() public view returns (uint256){ return _minAmount; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function getPrice() public view returns (uint256){ return _price; } function pause(bool val) public onlyOwner { _paused = val; } function withdraw() external payable onlyOwner() canWithdraw() { uint nbalance = address(this).balance; for(uint i = 0; i < contractOnwers.length; i++){ ContractOwners storage o = contractOnwers[i]; o.addr.transfer((nbalance * o.percent) / 100); } } function airdrop(Holder[] calldata toHolders) external onlyOwner() { for(uint i = 0; i < toHolders.length; i++){ _safeMint(toHolders[i].addr, toHolders[i].tokenId); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct NooneGroundZero.Holder[]","name":"toHolders","type":"tuple[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"buyNoone","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintable","type":"uint256"}],"name":"setMaxMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinAmount","type":"uint256"}],"name":"setMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNoone","type":"address"}],"name":"setNoone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600b9162000224565b50666a94d74f430000600c55600d805460ff1916600190811790915568015af1d78b58c40000600e556101f3601055601155601280546001600160a01b031916733f955cda88ab1de002451766138857c123867bff1790553480156200008057600080fd5b506040518060400160405280600f81526020016e4e6f6f6e6547726f756e645a65726f60881b8152506040518060400160405280600f81526020016e4e4f4f4e4547524f554e445a45524f60881b8152508160009080519060200190620000e992919062000224565b508051620000ff90600190602084019062000224565b5050506000620001146200022060201b60201c565b600a80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604080518082019091526012546001600160a01b03908116825260646020830190815260138054600181018255600091909152925160029093027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09081018054949093166001600160a01b031994851617909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155600f805490911673296233e84c1d7bff11121bf6d60f0ffa39c3f0cf17905562000307565b3390565b8280546200023290620002ca565b90600052602060002090601f016020900481019282620002565760008555620002a1565b82601f106200027157805160ff1916838001178555620002a1565b82800160010185558215620002a1579182015b82811115620002a157825182559160200191906001019062000284565b50620002af929150620002b3565b5090565b5b80821115620002af5760008155600101620002b4565b600281046001821680620002df57607f821691505b602082108114156200030157634e487b7160e01b600052602260045260246000fd5b50919050565b6128c280620003176000396000f3fe60806040526004361061020f5760003560e01c80636352211e11610118578063a22cb465116100a0578063cfc7e2da1161006f578063cfc7e2da146105b8578063e0c9ffc6146105cd578063e80a3558146105ed578063e985e9c514610602578063f2fde38b146106225761020f565b8063a22cb46514610538578063b88d4fde14610558578063c81d233b14610578578063c87b56dd146105985761020f565b8063897b0637116100e7578063897b0637146104b95780638da5cb5b146104d957806391b7f5ed146104ee57806395d89b411461050e57806398d5fdca146105235761020f565b80636352211e146104445780636f8b44b01461046457806370a0823114610484578063715018a6146104a45761020f565b806323b872dd1161019b57806342842e0e1161016a57806342842e0e146103a4578063438b6300146103c45780634f6ccce7146103f157806355f804b3146104115780635ebd612f146104315761020f565b806323b872dd1461033c57806325d387b51461035c5780632f745c591461037c5780633ccfd60b1461039c5761020f565b8063081812fc116101e2578063081812fc146102b0578063095ea7b3146102dd57806316c61ccc146102fd57806318160ddd1461031257806322f4596f146103275761020f565b806301ffc9a71461021457806302329a291461024a578063064d4d7c1461026c57806306fdde031461028e575b600080fd5b34801561022057600080fd5b5061023461022f366004611ef4565b610642565b6040516102419190612092565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611eda565b61066f565b005b34801561027857600080fd5b506102816106ca565b6040516102419190612730565b34801561029a57600080fd5b506102a36106d0565b604051610241919061209d565b3480156102bc57600080fd5b506102d06102cb366004611f72565b610762565b6040516102419190611ffd565b3480156102e957600080fd5b5061026a6102f8366004611e41565b6107a5565b34801561030957600080fd5b5061023461083d565b34801561031e57600080fd5b50610281610846565b34801561033357600080fd5b5061028161084c565b34801561034857600080fd5b5061026a610357366004611d64565b610852565b34801561036857600080fd5b5061026a610377366004611f72565b61088a565b34801561038857600080fd5b50610281610397366004611e41565b6108ee565b61026a610940565b3480156103b057600080fd5b5061026a6103bf366004611d64565b610a43565b3480156103d057600080fd5b506103e46103df366004611d18565b610a5e565b604051610241919061204e565b3480156103fd57600080fd5b5061028161040c366004611f72565b610b1c565b34801561041d57600080fd5b5061026a61042c366004611f2c565b610b77565b61026a61043f366004611f72565b610bc9565b34801561045057600080fd5b506102d061045f366004611f72565b610d48565b34801561047057600080fd5b5061026a61047f366004611f72565b610d7d565b34801561049057600080fd5b5061028161049f366004611d18565b610df4565b3480156104b057600080fd5b5061026a610e38565b3480156104c557600080fd5b5061026a6104d4366004611f72565b610ec1565b3480156104e557600080fd5b506102d0610f05565b3480156104fa57600080fd5b5061026a610509366004611f72565b610f14565b34801561051a57600080fd5b506102a3610f58565b34801561052f57600080fd5b50610281610f67565b34801561054457600080fd5b5061026a610553366004611e18565b610f6d565b34801561056457600080fd5b5061026a610573366004611d9f565b61103b565b34801561058457600080fd5b5061026a610593366004611d18565b61107a565b3480156105a457600080fd5b506102a36105b3366004611f72565b6110db565b3480156105c457600080fd5b5061028161115e565b3480156105d957600080fd5b5061026a6105e8366004611e6a565b611164565b3480156105f957600080fd5b50610281611228565b34801561060e57600080fd5b5061023461061d366004611d32565b61122e565b34801561062e57600080fd5b5061026a61063d366004611d18565b61125c565b60006001600160e01b0319821663780e9d6360e01b148061066757506106678261131d565b90505b919050565b61067761135d565b6001600160a01b0316610688610f05565b6001600160a01b0316146106b75760405162461bcd60e51b81526004016106ae90612507565b60405180910390fd5b600d805460ff1916911515919091179055565b600e5481565b6060600080546106df906127c7565b80601f016020809104026020016040519081016040528092919081815260200182805461070b906127c7565b80156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b600061076d82611361565b6107895760405162461bcd60e51b81526004016106ae906124bb565b506000908152600460205260409020546001600160a01b031690565b60006107b082610d48565b9050806001600160a01b0316836001600160a01b031614156107e45760405162461bcd60e51b81526004016106ae9061261b565b806001600160a01b03166107f661135d565b6001600160a01b0316148061081257506108128161061d61135d565b61082e5760405162461bcd60e51b81526004016106ae90612396565b610838838361137e565b505050565b600d5460ff1681565b60085490565b60105481565b61086361085d61135d565b826113ec565b61087f5760405162461bcd60e51b81526004016106ae90612693565b610838838383611471565b61089261135d565b6001600160a01b03166108a3610f05565b6001600160a01b0316146108c95760405162461bcd60e51b81526004016106ae90612507565b600081116108e95760405162461bcd60e51b81526004016106ae906125d4565b601155565b60006108f983610df4565b82106109175760405162461bcd60e51b81526004016106ae90612104565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61094861135d565b6001600160a01b0316610959610f05565b6001600160a01b03161461097f5760405162461bcd60e51b81526004016106ae90612507565b662386f26fc10000471161099257600080fd5b4760005b601354811015610a3f576000601382815481106109c357634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201805460018201549192506001600160a01b0316906108fc906064906109f89087612765565b610a029190612751565b6040518115909202916000818181858888f19350505050158015610a2a573d6000803e3d6000fd5b50508080610a3790612802565b915050610996565b5050565b6108388383836040518060200160405280600081525061103b565b60606000610a6b83610df4565b905060008167ffffffffffffffff811115610a9657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610abf578160200160208202803683370190505b50905060005b82811015610b1457610ad785826108ee565b828281518110610af757634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610b0c81612802565b915050610ac5565b509392505050565b6000610b26610846565b8210610b445760405162461bcd60e51b81526004016106ae906126e4565b60088281548110610b6557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b610b7f61135d565b6001600160a01b0316610b90610f05565b6001600160a01b031614610bb65760405162461bcd60e51b81526004016106ae90612507565b8051610a3f90600b906020840190611be8565b6000610bd3610846565b600d5490915060ff1615610bf95760405162461bcd60e51b81526004016106ae906120b0565b601154821115610c1b5760405162461bcd60e51b81526004016106ae9061221e565b600e54600f546001600160a01b03166370a08231610c3761135d565b6040518263ffffffff1660e01b8152600401610c539190611ffd565b60206040518083038186803b158015610c6b57600080fd5b505afa158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190611f8a565b1015610cc15760405162461bcd60e51b81526004016106ae9061235f565b601054610cce8383612739565b10610ceb5760405162461bcd60e51b81526004016106ae90612328565b81600c54610cf99190612765565b341015610d185760405162461bcd60e51b81526004016106ae9061265c565b60005b8281101561083857610d3633610d318385612739565b61159e565b80610d4081612802565b915050610d1b565b6000818152600260205260408120546001600160a01b0316806106675760405162461bcd60e51b81526004016106ae9061243d565b610d8561135d565b6001600160a01b0316610d96610f05565b6001600160a01b031614610dbc5760405162461bcd60e51b81526004016106ae90612507565b610dc4610846565b81118015610dd357506107d081105b610def5760405162461bcd60e51b81526004016106ae906120d5565b601055565b60006001600160a01b038216610e1c5760405162461bcd60e51b81526004016106ae906123f3565b506001600160a01b031660009081526003602052604090205490565b610e4061135d565b6001600160a01b0316610e51610f05565b6001600160a01b031614610e775760405162461bcd60e51b81526004016106ae90612507565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b610ec961135d565b6001600160a01b0316610eda610f05565b6001600160a01b031614610f005760405162461bcd60e51b81526004016106ae90612507565b600e55565b600a546001600160a01b031690565b610f1c61135d565b6001600160a01b0316610f2d610f05565b6001600160a01b031614610f535760405162461bcd60e51b81526004016106ae90612507565b600c55565b6060600180546106df906127c7565b600c5490565b610f7561135d565b6001600160a01b0316826001600160a01b03161415610fa65760405162461bcd60e51b81526004016106ae906122a5565b8060056000610fb361135d565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610ff761135d565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161102f9190612092565b60405180910390a35050565b61104c61104661135d565b836113ec565b6110685760405162461bcd60e51b81526004016106ae90612693565b611074848484846115b8565b50505050565b61108261135d565b6001600160a01b0316611093610f05565b6001600160a01b0316146110b95760405162461bcd60e51b81526004016106ae90612507565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60606110e682611361565b6111025760405162461bcd60e51b81526004016106ae90612585565b600061110c6115eb565b9050600081511161112c5760405180602001604052806000815250611157565b80611136846115fa565b604051602001611147929190611fce565b6040516020818303038152906040525b9392505050565b600e5490565b61116c61135d565b6001600160a01b031661117d610f05565b6001600160a01b0316146111a35760405162461bcd60e51b81526004016106ae90612507565b60005b81811015610838576112168383838181106111d157634e487b7160e01b600052603260045260246000fd5b6111e79260206040909202019081019150611d18565b84848481811061120757634e487b7160e01b600052603260045260246000fd5b9050604002016020013561159e565b8061122081612802565b9150506111a6565b60115481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61126461135d565b6001600160a01b0316611275610f05565b6001600160a01b03161461129b5760405162461bcd60e51b81526004016106ae90612507565b6001600160a01b0381166112c15760405162461bcd60e51b81526004016106ae906121a1565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061134e57506001600160e01b03198216635b5e139f60e01b145b80610667575061066782611715565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113b382610d48565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113f782611361565b6114135760405162461bcd60e51b81526004016106ae906122dc565b600061141e83610d48565b9050806001600160a01b0316846001600160a01b031614806114595750836001600160a01b031661144e84610762565b6001600160a01b0316145b806114695750611469818561122e565b949350505050565b826001600160a01b031661148482610d48565b6001600160a01b0316146114aa5760405162461bcd60e51b81526004016106ae9061253c565b6001600160a01b0382166114d05760405162461bcd60e51b81526004016106ae90612261565b6114db83838361172e565b6114e660008261137e565b6001600160a01b038316600090815260036020526040812080546001929061150f908490612784565b90915550506001600160a01b038216600090815260036020526040812080546001929061153d908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610a3f8282604051806020016040528060008152506117b7565b6115c3848484611471565b6115cf848484846117ea565b6110745760405162461bcd60e51b81526004016106ae9061214f565b6060600b80546106df906127c7565b60608161161f57506040805180820190915260018152600360fc1b602082015261066a565b8160005b8115611649578061163381612802565b91506116429050600a83612751565b9150611623565b60008167ffffffffffffffff81111561167257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561169c576020820181803683370190505b5090505b8415611469576116b1600183612784565b91506116be600a8661281d565b6116c9906030612739565b60f81b8183815181106116ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061170e600a86612751565b94506116a0565b6001600160e01b031981166301ffc9a760e01b14919050565b611739838383610838565b6001600160a01b0383166117555761175081611905565b611778565b816001600160a01b0316836001600160a01b031614611778576117788382611949565b6001600160a01b0382166117945761178f816119e6565b610838565b826001600160a01b0316826001600160a01b031614610838576108388282611abf565b6117c18383611b03565b6117ce60008484846117ea565b6108385760405162461bcd60e51b81526004016106ae9061214f565b60006117fe846001600160a01b0316611be2565b156118fa57836001600160a01b031663150b7a0261181a61135d565b8786866040518563ffffffff1660e01b815260040161183c9493929190612011565b602060405180830381600087803b15801561185657600080fd5b505af1925050508015611886575060408051601f3d908101601f1916820190925261188391810190611f10565b60015b6118e0573d8080156118b4576040519150601f19603f3d011682016040523d82523d6000602084013e6118b9565b606091505b5080516118d85760405162461bcd60e51b81526004016106ae9061214f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611469565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161195684610df4565b6119609190612784565b6000838152600760205260409020549091508082146119b3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906119f890600190612784565b60008381526009602052604081205460088054939450909284908110611a2e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611a5d57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611aa357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611aca83610df4565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611b295760405162461bcd60e51b81526004016106ae90612486565b611b3281611361565b15611b4f5760405162461bcd60e51b81526004016106ae906121e7565b611b5b6000838361172e565b6001600160a01b0382166000908152600360205260408120805460019290611b84908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611bf4906127c7565b90600052602060002090601f016020900481019282611c165760008555611c5c565b82601f10611c2f57805160ff1916838001178555611c5c565b82800160010185558215611c5c579182015b82811115611c5c578251825591602001919060010190611c41565b50611c68929150611c6c565b5090565b5b80821115611c685760008155600101611c6d565b600067ffffffffffffffff80841115611c9c57611c9c61285d565b604051601f8501601f191681016020018281118282101715611cc057611cc061285d565b604052848152915081838501861015611cd857600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461066a57600080fd5b8035801515811461066a57600080fd5b600060208284031215611d29578081fd5b61115782611cf1565b60008060408385031215611d44578081fd5b611d4d83611cf1565b9150611d5b60208401611cf1565b90509250929050565b600080600060608486031215611d78578081fd5b611d8184611cf1565b9250611d8f60208501611cf1565b9150604084013590509250925092565b60008060008060808587031215611db4578081fd5b611dbd85611cf1565b9350611dcb60208601611cf1565b925060408501359150606085013567ffffffffffffffff811115611ded578182fd5b8501601f81018713611dfd578182fd5b611e0c87823560208401611c81565b91505092959194509250565b60008060408385031215611e2a578182fd5b611e3383611cf1565b9150611d5b60208401611d08565b60008060408385031215611e53578182fd5b611e5c83611cf1565b946020939093013593505050565b60008060208385031215611e7c578182fd5b823567ffffffffffffffff80821115611e93578384fd5b818501915085601f830112611ea6578384fd5b813581811115611eb4578485fd5b866020604083028501011115611ec8578485fd5b60209290920196919550909350505050565b600060208284031215611eeb578081fd5b61115782611d08565b600060208284031215611f05578081fd5b813561115781612873565b600060208284031215611f21578081fd5b815161115781612873565b600060208284031215611f3d578081fd5b813567ffffffffffffffff811115611f53578182fd5b8201601f81018413611f63578182fd5b61146984823560208401611c81565b600060208284031215611f83578081fd5b5035919050565b600060208284031215611f9b578081fd5b5051919050565b60008151808452611fba81602086016020860161279b565b601f01601f19169290920160200192915050565b60008351611fe081846020880161279b565b835190830190611ff481836020880161279b565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061204490830184611fa2565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120865783518352928401929184019160010161206a565b50909695505050505050565b901515815260200190565b6000602082526111576020830184611fa2565b6020808252600b908201526a14d85b19481c185d5cd95960aa1b604082015260600190565b602080825260159082015274537570706c792065786365656473206c696d69747360581b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526023908201527f596f752063616e206275792061206d6178696d756d206f662031204e4f4f4e4560408201526213919560ea1b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601f908201527f45786365656473206d6178696d756d204e4f4f4e454e465420737570706c7900604082015260600190565b60208082526017908201527f4e6f7420656e6f756768204e4f4f4e4520746f6b656e73000000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526027908201527f746f74616c20616d6f756e74206e6565647320746f20626520677265617465726040820152660207468616e20360cc1b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526019908201527f45746865722073656e74206973206e6f7420636f727265637400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b6000821982111561274c5761274c612831565b500190565b60008261276057612760612847565b500490565b600081600019048311821515161561277f5761277f612831565b500290565b60008282101561279657612796612831565b500390565b60005b838110156127b657818101518382015260200161279e565b838111156110745750506000910152565b6002810460018216806127db57607f821691505b602082108114156127fc57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561281657612816612831565b5060010190565b60008261282c5761282c612847565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461288957600080fd5b5056fea26469706673582212206a9f5b85b595aba3275e839a1a570e2224fd2ab7d0322325e8f18378b7ab4df464736f6c63430008000033
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80636352211e11610118578063a22cb465116100a0578063cfc7e2da1161006f578063cfc7e2da146105b8578063e0c9ffc6146105cd578063e80a3558146105ed578063e985e9c514610602578063f2fde38b146106225761020f565b8063a22cb46514610538578063b88d4fde14610558578063c81d233b14610578578063c87b56dd146105985761020f565b8063897b0637116100e7578063897b0637146104b95780638da5cb5b146104d957806391b7f5ed146104ee57806395d89b411461050e57806398d5fdca146105235761020f565b80636352211e146104445780636f8b44b01461046457806370a0823114610484578063715018a6146104a45761020f565b806323b872dd1161019b57806342842e0e1161016a57806342842e0e146103a4578063438b6300146103c45780634f6ccce7146103f157806355f804b3146104115780635ebd612f146104315761020f565b806323b872dd1461033c57806325d387b51461035c5780632f745c591461037c5780633ccfd60b1461039c5761020f565b8063081812fc116101e2578063081812fc146102b0578063095ea7b3146102dd57806316c61ccc146102fd57806318160ddd1461031257806322f4596f146103275761020f565b806301ffc9a71461021457806302329a291461024a578063064d4d7c1461026c57806306fdde031461028e575b600080fd5b34801561022057600080fd5b5061023461022f366004611ef4565b610642565b6040516102419190612092565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611eda565b61066f565b005b34801561027857600080fd5b506102816106ca565b6040516102419190612730565b34801561029a57600080fd5b506102a36106d0565b604051610241919061209d565b3480156102bc57600080fd5b506102d06102cb366004611f72565b610762565b6040516102419190611ffd565b3480156102e957600080fd5b5061026a6102f8366004611e41565b6107a5565b34801561030957600080fd5b5061023461083d565b34801561031e57600080fd5b50610281610846565b34801561033357600080fd5b5061028161084c565b34801561034857600080fd5b5061026a610357366004611d64565b610852565b34801561036857600080fd5b5061026a610377366004611f72565b61088a565b34801561038857600080fd5b50610281610397366004611e41565b6108ee565b61026a610940565b3480156103b057600080fd5b5061026a6103bf366004611d64565b610a43565b3480156103d057600080fd5b506103e46103df366004611d18565b610a5e565b604051610241919061204e565b3480156103fd57600080fd5b5061028161040c366004611f72565b610b1c565b34801561041d57600080fd5b5061026a61042c366004611f2c565b610b77565b61026a61043f366004611f72565b610bc9565b34801561045057600080fd5b506102d061045f366004611f72565b610d48565b34801561047057600080fd5b5061026a61047f366004611f72565b610d7d565b34801561049057600080fd5b5061028161049f366004611d18565b610df4565b3480156104b057600080fd5b5061026a610e38565b3480156104c557600080fd5b5061026a6104d4366004611f72565b610ec1565b3480156104e557600080fd5b506102d0610f05565b3480156104fa57600080fd5b5061026a610509366004611f72565b610f14565b34801561051a57600080fd5b506102a3610f58565b34801561052f57600080fd5b50610281610f67565b34801561054457600080fd5b5061026a610553366004611e18565b610f6d565b34801561056457600080fd5b5061026a610573366004611d9f565b61103b565b34801561058457600080fd5b5061026a610593366004611d18565b61107a565b3480156105a457600080fd5b506102a36105b3366004611f72565b6110db565b3480156105c457600080fd5b5061028161115e565b3480156105d957600080fd5b5061026a6105e8366004611e6a565b611164565b3480156105f957600080fd5b50610281611228565b34801561060e57600080fd5b5061023461061d366004611d32565b61122e565b34801561062e57600080fd5b5061026a61063d366004611d18565b61125c565b60006001600160e01b0319821663780e9d6360e01b148061066757506106678261131d565b90505b919050565b61067761135d565b6001600160a01b0316610688610f05565b6001600160a01b0316146106b75760405162461bcd60e51b81526004016106ae90612507565b60405180910390fd5b600d805460ff1916911515919091179055565b600e5481565b6060600080546106df906127c7565b80601f016020809104026020016040519081016040528092919081815260200182805461070b906127c7565b80156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050905090565b600061076d82611361565b6107895760405162461bcd60e51b81526004016106ae906124bb565b506000908152600460205260409020546001600160a01b031690565b60006107b082610d48565b9050806001600160a01b0316836001600160a01b031614156107e45760405162461bcd60e51b81526004016106ae9061261b565b806001600160a01b03166107f661135d565b6001600160a01b0316148061081257506108128161061d61135d565b61082e5760405162461bcd60e51b81526004016106ae90612396565b610838838361137e565b505050565b600d5460ff1681565b60085490565b60105481565b61086361085d61135d565b826113ec565b61087f5760405162461bcd60e51b81526004016106ae90612693565b610838838383611471565b61089261135d565b6001600160a01b03166108a3610f05565b6001600160a01b0316146108c95760405162461bcd60e51b81526004016106ae90612507565b600081116108e95760405162461bcd60e51b81526004016106ae906125d4565b601155565b60006108f983610df4565b82106109175760405162461bcd60e51b81526004016106ae90612104565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61094861135d565b6001600160a01b0316610959610f05565b6001600160a01b03161461097f5760405162461bcd60e51b81526004016106ae90612507565b662386f26fc10000471161099257600080fd5b4760005b601354811015610a3f576000601382815481106109c357634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201805460018201549192506001600160a01b0316906108fc906064906109f89087612765565b610a029190612751565b6040518115909202916000818181858888f19350505050158015610a2a573d6000803e3d6000fd5b50508080610a3790612802565b915050610996565b5050565b6108388383836040518060200160405280600081525061103b565b60606000610a6b83610df4565b905060008167ffffffffffffffff811115610a9657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610abf578160200160208202803683370190505b50905060005b82811015610b1457610ad785826108ee565b828281518110610af757634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610b0c81612802565b915050610ac5565b509392505050565b6000610b26610846565b8210610b445760405162461bcd60e51b81526004016106ae906126e4565b60088281548110610b6557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b610b7f61135d565b6001600160a01b0316610b90610f05565b6001600160a01b031614610bb65760405162461bcd60e51b81526004016106ae90612507565b8051610a3f90600b906020840190611be8565b6000610bd3610846565b600d5490915060ff1615610bf95760405162461bcd60e51b81526004016106ae906120b0565b601154821115610c1b5760405162461bcd60e51b81526004016106ae9061221e565b600e54600f546001600160a01b03166370a08231610c3761135d565b6040518263ffffffff1660e01b8152600401610c539190611ffd565b60206040518083038186803b158015610c6b57600080fd5b505afa158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190611f8a565b1015610cc15760405162461bcd60e51b81526004016106ae9061235f565b601054610cce8383612739565b10610ceb5760405162461bcd60e51b81526004016106ae90612328565b81600c54610cf99190612765565b341015610d185760405162461bcd60e51b81526004016106ae9061265c565b60005b8281101561083857610d3633610d318385612739565b61159e565b80610d4081612802565b915050610d1b565b6000818152600260205260408120546001600160a01b0316806106675760405162461bcd60e51b81526004016106ae9061243d565b610d8561135d565b6001600160a01b0316610d96610f05565b6001600160a01b031614610dbc5760405162461bcd60e51b81526004016106ae90612507565b610dc4610846565b81118015610dd357506107d081105b610def5760405162461bcd60e51b81526004016106ae906120d5565b601055565b60006001600160a01b038216610e1c5760405162461bcd60e51b81526004016106ae906123f3565b506001600160a01b031660009081526003602052604090205490565b610e4061135d565b6001600160a01b0316610e51610f05565b6001600160a01b031614610e775760405162461bcd60e51b81526004016106ae90612507565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b610ec961135d565b6001600160a01b0316610eda610f05565b6001600160a01b031614610f005760405162461bcd60e51b81526004016106ae90612507565b600e55565b600a546001600160a01b031690565b610f1c61135d565b6001600160a01b0316610f2d610f05565b6001600160a01b031614610f535760405162461bcd60e51b81526004016106ae90612507565b600c55565b6060600180546106df906127c7565b600c5490565b610f7561135d565b6001600160a01b0316826001600160a01b03161415610fa65760405162461bcd60e51b81526004016106ae906122a5565b8060056000610fb361135d565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610ff761135d565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161102f9190612092565b60405180910390a35050565b61104c61104661135d565b836113ec565b6110685760405162461bcd60e51b81526004016106ae90612693565b611074848484846115b8565b50505050565b61108261135d565b6001600160a01b0316611093610f05565b6001600160a01b0316146110b95760405162461bcd60e51b81526004016106ae90612507565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60606110e682611361565b6111025760405162461bcd60e51b81526004016106ae90612585565b600061110c6115eb565b9050600081511161112c5760405180602001604052806000815250611157565b80611136846115fa565b604051602001611147929190611fce565b6040516020818303038152906040525b9392505050565b600e5490565b61116c61135d565b6001600160a01b031661117d610f05565b6001600160a01b0316146111a35760405162461bcd60e51b81526004016106ae90612507565b60005b81811015610838576112168383838181106111d157634e487b7160e01b600052603260045260246000fd5b6111e79260206040909202019081019150611d18565b84848481811061120757634e487b7160e01b600052603260045260246000fd5b9050604002016020013561159e565b8061122081612802565b9150506111a6565b60115481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61126461135d565b6001600160a01b0316611275610f05565b6001600160a01b03161461129b5760405162461bcd60e51b81526004016106ae90612507565b6001600160a01b0381166112c15760405162461bcd60e51b81526004016106ae906121a1565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061134e57506001600160e01b03198216635b5e139f60e01b145b80610667575061066782611715565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113b382610d48565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113f782611361565b6114135760405162461bcd60e51b81526004016106ae906122dc565b600061141e83610d48565b9050806001600160a01b0316846001600160a01b031614806114595750836001600160a01b031661144e84610762565b6001600160a01b0316145b806114695750611469818561122e565b949350505050565b826001600160a01b031661148482610d48565b6001600160a01b0316146114aa5760405162461bcd60e51b81526004016106ae9061253c565b6001600160a01b0382166114d05760405162461bcd60e51b81526004016106ae90612261565b6114db83838361172e565b6114e660008261137e565b6001600160a01b038316600090815260036020526040812080546001929061150f908490612784565b90915550506001600160a01b038216600090815260036020526040812080546001929061153d908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610a3f8282604051806020016040528060008152506117b7565b6115c3848484611471565b6115cf848484846117ea565b6110745760405162461bcd60e51b81526004016106ae9061214f565b6060600b80546106df906127c7565b60608161161f57506040805180820190915260018152600360fc1b602082015261066a565b8160005b8115611649578061163381612802565b91506116429050600a83612751565b9150611623565b60008167ffffffffffffffff81111561167257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561169c576020820181803683370190505b5090505b8415611469576116b1600183612784565b91506116be600a8661281d565b6116c9906030612739565b60f81b8183815181106116ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061170e600a86612751565b94506116a0565b6001600160e01b031981166301ffc9a760e01b14919050565b611739838383610838565b6001600160a01b0383166117555761175081611905565b611778565b816001600160a01b0316836001600160a01b031614611778576117788382611949565b6001600160a01b0382166117945761178f816119e6565b610838565b826001600160a01b0316826001600160a01b031614610838576108388282611abf565b6117c18383611b03565b6117ce60008484846117ea565b6108385760405162461bcd60e51b81526004016106ae9061214f565b60006117fe846001600160a01b0316611be2565b156118fa57836001600160a01b031663150b7a0261181a61135d565b8786866040518563ffffffff1660e01b815260040161183c9493929190612011565b602060405180830381600087803b15801561185657600080fd5b505af1925050508015611886575060408051601f3d908101601f1916820190925261188391810190611f10565b60015b6118e0573d8080156118b4576040519150601f19603f3d011682016040523d82523d6000602084013e6118b9565b606091505b5080516118d85760405162461bcd60e51b81526004016106ae9061214f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611469565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161195684610df4565b6119609190612784565b6000838152600760205260409020549091508082146119b3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906119f890600190612784565b60008381526009602052604081205460088054939450909284908110611a2e57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060088381548110611a5d57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611aa357634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611aca83610df4565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611b295760405162461bcd60e51b81526004016106ae90612486565b611b3281611361565b15611b4f5760405162461bcd60e51b81526004016106ae906121e7565b611b5b6000838361172e565b6001600160a01b0382166000908152600360205260408120805460019290611b84908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611bf4906127c7565b90600052602060002090601f016020900481019282611c165760008555611c5c565b82601f10611c2f57805160ff1916838001178555611c5c565b82800160010185558215611c5c579182015b82811115611c5c578251825591602001919060010190611c41565b50611c68929150611c6c565b5090565b5b80821115611c685760008155600101611c6d565b600067ffffffffffffffff80841115611c9c57611c9c61285d565b604051601f8501601f191681016020018281118282101715611cc057611cc061285d565b604052848152915081838501861015611cd857600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461066a57600080fd5b8035801515811461066a57600080fd5b600060208284031215611d29578081fd5b61115782611cf1565b60008060408385031215611d44578081fd5b611d4d83611cf1565b9150611d5b60208401611cf1565b90509250929050565b600080600060608486031215611d78578081fd5b611d8184611cf1565b9250611d8f60208501611cf1565b9150604084013590509250925092565b60008060008060808587031215611db4578081fd5b611dbd85611cf1565b9350611dcb60208601611cf1565b925060408501359150606085013567ffffffffffffffff811115611ded578182fd5b8501601f81018713611dfd578182fd5b611e0c87823560208401611c81565b91505092959194509250565b60008060408385031215611e2a578182fd5b611e3383611cf1565b9150611d5b60208401611d08565b60008060408385031215611e53578182fd5b611e5c83611cf1565b946020939093013593505050565b60008060208385031215611e7c578182fd5b823567ffffffffffffffff80821115611e93578384fd5b818501915085601f830112611ea6578384fd5b813581811115611eb4578485fd5b866020604083028501011115611ec8578485fd5b60209290920196919550909350505050565b600060208284031215611eeb578081fd5b61115782611d08565b600060208284031215611f05578081fd5b813561115781612873565b600060208284031215611f21578081fd5b815161115781612873565b600060208284031215611f3d578081fd5b813567ffffffffffffffff811115611f53578182fd5b8201601f81018413611f63578182fd5b61146984823560208401611c81565b600060208284031215611f83578081fd5b5035919050565b600060208284031215611f9b578081fd5b5051919050565b60008151808452611fba81602086016020860161279b565b601f01601f19169290920160200192915050565b60008351611fe081846020880161279b565b835190830190611ff481836020880161279b565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061204490830184611fa2565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120865783518352928401929184019160010161206a565b50909695505050505050565b901515815260200190565b6000602082526111576020830184611fa2565b6020808252600b908201526a14d85b19481c185d5cd95960aa1b604082015260600190565b602080825260159082015274537570706c792065786365656473206c696d69747360581b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526023908201527f596f752063616e206275792061206d6178696d756d206f662031204e4f4f4e4560408201526213919560ea1b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601f908201527f45786365656473206d6178696d756d204e4f4f4e454e465420737570706c7900604082015260600190565b60208082526017908201527f4e6f7420656e6f756768204e4f4f4e4520746f6b656e73000000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526027908201527f746f74616c20616d6f756e74206e6565647320746f20626520677265617465726040820152660207468616e20360cc1b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526019908201527f45746865722073656e74206973206e6f7420636f727265637400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b6000821982111561274c5761274c612831565b500190565b60008261276057612760612847565b500490565b600081600019048311821515161561277f5761277f612831565b500290565b60008282101561279657612796612831565b500390565b60005b838110156127b657818101518382015260200161279e565b838111156110745750506000910152565b6002810460018216806127db57607f821691505b602082108114156127fc57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561281657612816612831565b5060010190565b60008261282c5761282c612847565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461288957600080fd5b5056fea26469706673582212206a9f5b85b595aba3275e839a1a570e2224fd2ab7d0322325e8f18378b7ab4df464736f6c63430008000033
Deployed Bytecode Sourcemap
43877:3794:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37723:237;;;;;;;;;;-1:-1:-1;37723:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47051:74;;;;;;;;;;-1:-1:-1;47051:74:0;;;;;:::i;:::-;;:::i;:::-;;44081:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26035:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27495:221::-;;;;;;;;;;-1:-1:-1;27495:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27032:397::-;;;;;;;;;;-1:-1:-1;27032:397:0;;;;;:::i;:::-;;:::i;44048:26::-;;;;;;;;;;;;;:::i;38376:113::-;;;;;;;;;;;;;:::i;44161:31::-;;;;;;;;;;;;;:::i;28385:305::-;;;;;;;;;;-1:-1:-1;28385:305:0;;;;;:::i;:::-;;:::i;46201:196::-;;;;;;;;;;-1:-1:-1;46201:196:0;;;;;:::i;:::-;;:::i;38044:256::-;;;;;;;;;;-1:-1:-1;38044:256:0;;;;;:::i;:::-;;:::i;47133:307::-;;;:::i;28761:151::-;;;;;;;;;;-1:-1:-1;28761:151:0;;;;;:::i;:::-;;:::i;45543:342::-;;;;;;;;;;-1:-1:-1;45543:342:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38566:233::-;;;;;;;;;;-1:-1:-1;38566:233:0;;;;;:::i;:::-;;:::i;46850:102::-;;;;;;;;;;-1:-1:-1;46850:102:0;;;;;:::i;:::-;;:::i;44872:661::-;;;;;;:::i;:::-;;:::i;25729:239::-;;;;;;;;;;-1:-1:-1;25729:239:0;;;;;:::i;:::-;;:::i;46002:191::-;;;;;;;;;;-1:-1:-1;46002:191:0;;;;;:::i;:::-;;:::i;25459:208::-;;;;;;;;;;-1:-1:-1;25459:208:0;;;;;:::i;:::-;;:::i;19687:148::-;;;;;;;;;;;;;:::i;46510:109::-;;;;;;;;;;-1:-1:-1;46510:109:0;;;;;:::i;:::-;;:::i;19036:87::-;;;;;;;;;;;;;:::i;46405:93::-;;;;;;;;;;-1:-1:-1;46405:93:0;;;;;:::i;:::-;;:::i;26204:104::-;;;;;;;;;;;;;:::i;46960:81::-;;;;;;;;;;;;;:::i;27788:295::-;;;;;;;;;;-1:-1:-1;27788:295:0;;;;;:::i;:::-;;:::i;28983:285::-;;;;;;;;;;-1:-1:-1;28983:285:0;;;;;:::i;:::-;;:::i;45895:99::-;;;;;;;;;;-1:-1:-1;45895:99:0;;;;;:::i;:::-;;:::i;26379:360::-;;;;;;;;;;-1:-1:-1;26379:360:0;;;;;:::i;:::-;;:::i;46631:89::-;;;;;;;;;;;;;:::i;47448:220::-;;;;;;;;;;-1:-1:-1;47448:220:0;;;;;:::i;:::-;;:::i;44199:31::-;;;;;;;;;;;;;:::i;28154:164::-;;;;;;;;;;-1:-1:-1;28154:164:0;;;;;:::i;:::-;;:::i;19990:244::-;;;;;;;;;;-1:-1:-1;19990:244:0;;;;;:::i;:::-;;:::i;37723:237::-;37825:4;-1:-1:-1;;;;;;37849:50:0;;-1:-1:-1;;;37849:50:0;;:103;;;37916:36;37940:11;37916:23;:36::i;:::-;37842:110;;37723:237;;;;:::o;47051:74::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;;;;;;;;;47104:7:::1;:13:::0;;-1:-1:-1;;47104:13:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47051:74::o;44081:45::-;;;;:::o;26035:100::-;26089:13;26122:5;26115:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26035:100;:::o;27495:221::-;27571:7;27599:16;27607:7;27599;:16::i;:::-;27591:73;;;;-1:-1:-1;;;27591:73:0;;;;;;;:::i;:::-;-1:-1:-1;27684:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27684:24:0;;27495:221::o;27032:397::-;27113:13;27129:23;27144:7;27129:14;:23::i;:::-;27113:39;;27177:5;-1:-1:-1;;;;;27171:11:0;:2;-1:-1:-1;;;;;27171:11:0;;;27163:57;;;;-1:-1:-1;;;27163:57:0;;;;;;;:::i;:::-;27257:5;-1:-1:-1;;;;;27241:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;27241:21:0;;:62;;;;27266:37;27283:5;27290:12;:10;:12::i;27266:37::-;27233:154;;;;-1:-1:-1;;;27233:154:0;;;;;;;:::i;:::-;27400:21;27409:2;27413:7;27400:8;:21::i;:::-;27032:397;;;:::o;44048:26::-;;;;;;:::o;38376:113::-;38464:10;:17;38376:113;:::o;44161:31::-;;;;:::o;28385:305::-;28546:41;28565:12;:10;:12::i;:::-;28579:7;28546:18;:41::i;:::-;28538:103;;;;-1:-1:-1;;;28538:103:0;;;;;;;:::i;:::-;28654:28;28664:4;28670:2;28674:7;28654:9;:28::i;46201:196::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;46304:1:::1;46287:14;:18;46279:70;;;;-1:-1:-1::0;;;46279:70:0::1;;;;;;;:::i;:::-;46360:12;:29:::0;46201:196::o;38044:256::-;38141:7;38177:23;38194:5;38177:16;:23::i;:::-;38169:5;:31;38161:87;;;;-1:-1:-1;;;38161:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;38266:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38044:256::o;47133:307::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;44403:10:::1;44379:21;:34;44371:43;;;::::0;::::1;;47223:21:::2;47207:13;47255:178;47275:14;:21:::0;47271:25;::::2;47255:178;;;47317:24;47344:14;47359:1;47344:17;;;;;;-1:-1:-1::0;;;47344:17:0::2;;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;47376:6:::0;;;47404:9;::::2;::::0;47344:17;;-1:-1:-1;;;;;;47376:6:0::2;::::0;:45:::2;::::0;47417:3:::2;::::0;47393:20:::2;::::0;:8;:20:::2;:::i;:::-;47392:28;;;;:::i;:::-;47376:45;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;47255:178;47298:3;;;;;:::i;:::-;;;;47255:178;;;;44425:1;47133:307::o:0;28761:151::-;28865:39;28882:4;28888:2;28892:7;28865:39;;;;;;;;;;;;:16;:39::i;45543:342::-;45602:16;45631:18;45652:17;45662:6;45652:9;:17::i;:::-;45631:38;;45682:25;45724:10;45710:25;;;;;;-1:-1:-1;;;45710:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45710:25:0;;45682:53;;45750:9;45746:106;45765:10;45761:1;:14;45746:106;;;45810:30;45830:6;45838:1;45810:19;:30::i;:::-;45796:8;45805:1;45796:11;;;;;;-1:-1:-1;;;45796:11:0;;;;;;;;;;;;;;;;;;:44;45777:3;;;;:::i;:::-;;;;45746:106;;;-1:-1:-1;45869:8:0;45543:342;-1:-1:-1;;;45543:342:0:o;38566:233::-;38641:7;38677:30;:28;:30::i;:::-;38669:5;:38;38661:95;;;;-1:-1:-1;;;38661:95:0;;;;;;;:::i;:::-;38774:10;38785:5;38774:17;;;;;;-1:-1:-1;;;38774:17:0;;;;;;;;;;;;;;;;;38767:24;;38566:233;;;:::o;46850:102::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;46921:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;44872:661::-:0;44929:14;44946:13;:11;:13::i;:::-;44980:7;;44929:30;;-1:-1:-1;44980:7:0;;44979:8;44970:63;;;;-1:-1:-1;;;44970:63:0;;;;;;;:::i;:::-;45060:12;;45053:3;:19;;45044:99;;;;-1:-1:-1;;;45044:99:0;;;;;;;:::i;:::-;45196:10;;45162:6;;-1:-1:-1;;;;;45162:6:0;:16;45179:12;:10;:12::i;:::-;45162:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;45154:80;;;;-1:-1:-1;;;45154:80:0;;;;;;;:::i;:::-;45269:10;;45254:12;45263:3;45254:6;:12;:::i;:::-;:25;45245:90;;;;-1:-1:-1;;;45245:90:0;;;;;;;:::i;:::-;45377:3;45368:6;;:12;;;;:::i;:::-;45355:9;:25;;45346:77;;;;-1:-1:-1;;;45346:77:0;;;;;;;:::i;:::-;45440:9;45436:90;45455:3;45451:1;:7;45436:90;;;45479:35;45490:10;45502;45511:1;45502:6;:10;:::i;:::-;45479:9;:35::i;:::-;45460:3;;;;:::i;:::-;;;;45436:90;;25729:239;25801:7;25837:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25837:16:0;25872:19;25864:73;;;;-1:-1:-1;;;25864:73:0;;;;;;;:::i;46002:191::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;46093:13:::1;:11;:13::i;:::-;46081:9;:25;:45;;;;;46122:4;46110:9;:16;46081:45;46073:79;;;;-1:-1:-1::0;;;46073:79:0::1;;;;;;;:::i;:::-;46163:10;:22:::0;46002:191::o;25459:208::-;25531:7;-1:-1:-1;;;;;25559:19:0;;25551:74;;;;-1:-1:-1;;;25551:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25643:16:0;;;;;:9;:16;;;;;;;25459:208::o;19687:148::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;19778:6:::1;::::0;19757:40:::1;::::0;19794:1:::1;::::0;-1:-1:-1;;;;;19778:6:0::1;::::0;19757:40:::1;::::0;19794:1;;19757:40:::1;19808:6;:19:::0;;-1:-1:-1;;;;;;19808:19:0::1;::::0;;19687:148::o;46510:109::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;46585:10:::1;:26:::0;46510:109::o;19036:87::-;19109:6;;-1:-1:-1;;;;;19109:6:0;19036:87;:::o;46405:93::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;46472:6:::1;:18:::0;46405:93::o;26204:104::-;26260:13;26293:7;26286:14;;;;;:::i;46960:81::-;47027:6;;46960:81;:::o;27788:295::-;27903:12;:10;:12::i;:::-;-1:-1:-1;;;;;27891:24:0;:8;-1:-1:-1;;;;;27891:24:0;;;27883:62;;;;-1:-1:-1;;;27883:62:0;;;;;;;:::i;:::-;28003:8;27958:18;:32;27977:12;:10;:12::i;:::-;-1:-1:-1;;;;;27958:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;27958:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;27958:53:0;;;;;;;;;;;28042:12;:10;:12::i;:::-;-1:-1:-1;;;;;28027:48:0;;28066:8;28027:48;;;;;;:::i;:::-;;;;;;;;27788:295;;:::o;28983:285::-;29115:41;29134:12;:10;:12::i;:::-;29148:7;29115:18;:41::i;:::-;29107:103;;;;-1:-1:-1;;;29107:103:0;;;;;;;:::i;:::-;29221:39;29235:4;29241:2;29245:7;29254:5;29221:13;:39::i;:::-;28983:285;;;;:::o;45895:99::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;45961:6:::1;:25:::0;;-1:-1:-1;;;;;;45961:25:0::1;-1:-1:-1::0;;;;;45961:25:0;;;::::1;::::0;;;::::1;::::0;;45895:99::o;26379:360::-;26452:13;26486:16;26494:7;26486;:16::i;:::-;26478:76;;;;-1:-1:-1;;;26478:76:0;;;;;;;:::i;:::-;26567:21;26591:10;:8;:10::i;:::-;26567:34;;26643:1;26625:7;26619:21;:25;:112;;;;;;;;;;;;;;;;;26684:7;26693:18;:7;:16;:18::i;:::-;26667:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26619:112;26612:119;26379:360;-1:-1:-1;;;26379:360:0:o;46631:89::-;46702:10;;46631:89;:::o;47448:220::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;47538:6:::1;47534:127;47550:20:::0;;::::1;47534:127;;;47595:50;47605:9;;47615:1;47605:12;;;;;-1:-1:-1::0;;;47605:12:0::1;;;;;;;;;:17;::::0;::::1;:12;::::0;;::::1;;:17:::0;;::::1;::::0;-1:-1:-1;47605:17:0::1;:::i;:::-;47624:9;;47634:1;47624:12;;;;;-1:-1:-1::0;;;47624:12:0::1;;;;;;;;;;;;;;:20;;;47595:9;:50::i;:::-;47572:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47534:127;;44199:31:::0;;;;:::o;28154:164::-;-1:-1:-1;;;;;28275:25:0;;;28251:4;28275:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28154:164::o;19990:244::-;19267:12;:10;:12::i;:::-;-1:-1:-1;;;;;19256:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;19256:23:0;;19248:68;;;;-1:-1:-1;;;19248:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20079:22:0;::::1;20071:73;;;;-1:-1:-1::0;;;20071:73:0::1;;;;;;;:::i;:::-;20181:6;::::0;20160:38:::1;::::0;-1:-1:-1;;;;;20160:38:0;;::::1;::::0;20181:6:::1;::::0;20160:38:::1;::::0;20181:6:::1;::::0;20160:38:::1;20209:6;:17:::0;;-1:-1:-1;;;;;;20209:17:0::1;-1:-1:-1::0;;;;;20209:17:0;;;::::1;::::0;;;::::1;::::0;;19990:244::o;25103:292::-;25205:4;-1:-1:-1;;;;;;25229:40:0;;-1:-1:-1;;;25229:40:0;;:105;;-1:-1:-1;;;;;;;25286:48:0;;-1:-1:-1;;;25286:48:0;25229:105;:158;;;;25351:36;25375:11;25351:23;:36::i;3685:98::-;3765:10;3685:98;:::o;30735:127::-;30800:4;30824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30824:16:0;:30;;;30735:127::o;34612:174::-;34687:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34687:29:0;-1:-1:-1;;;;;34687:29:0;;;;;;;;:24;;34741:23;34687:24;34741:14;:23::i;:::-;-1:-1:-1;;;;;34732:46:0;;;;;;;;;;;34612:174;;:::o;31029:348::-;31122:4;31147:16;31155:7;31147;:16::i;:::-;31139:73;;;;-1:-1:-1;;;31139:73:0;;;;;;;:::i;:::-;31223:13;31239:23;31254:7;31239:14;:23::i;:::-;31223:39;;31292:5;-1:-1:-1;;;;;31281:16:0;:7;-1:-1:-1;;;;;31281:16:0;;:51;;;;31325:7;-1:-1:-1;;;;;31301:31:0;:20;31313:7;31301:11;:20::i;:::-;-1:-1:-1;;;;;31301:31:0;;31281:51;:87;;;;31336:32;31353:5;31360:7;31336:16;:32::i;:::-;31273:96;31029:348;-1:-1:-1;;;;31029:348:0:o;33950:544::-;34075:4;-1:-1:-1;;;;;34048:31:0;:23;34063:7;34048:14;:23::i;:::-;-1:-1:-1;;;;;34048:31:0;;34040:85;;;;-1:-1:-1;;;34040:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34144:16:0;;34136:65;;;;-1:-1:-1;;;34136:65:0;;;;;;;:::i;:::-;34214:39;34235:4;34241:2;34245:7;34214:20;:39::i;:::-;34318:29;34335:1;34339:7;34318:8;:29::i;:::-;-1:-1:-1;;;;;34360:15:0;;;;;;:9;:15;;;;;:20;;34379:1;;34360:15;:20;;34379:1;;34360:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34391:13:0;;;;;;:9;:13;;;;;:18;;34408:1;;34391:13;:18;;34408:1;;34391:18;:::i;:::-;;;;-1:-1:-1;;34420:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34420:21:0;-1:-1:-1;;;;;34420:21:0;;;;;;;;;34459:27;;34420:16;;34459:27;;;;;;;33950:544;;;:::o;31719:110::-;31795:26;31805:2;31809:7;31795:26;;;;;;;;;;;;:9;:26::i;30150:272::-;30264:28;30274:4;30280:2;30284:7;30264:9;:28::i;:::-;30311:48;30334:4;30340:2;30344:7;30353:5;30311:22;:48::i;:::-;30303:111;;;;-1:-1:-1;;;30303:111:0;;;;;;;:::i;46728:114::-;46788:13;46821;46814:20;;;;;:::i;1387:723::-;1443:13;1664:10;1660:53;;-1:-1:-1;1691:10:0;;;;;;;;;;;;-1:-1:-1;;;1691:10:0;;;;;;1660:53;1738:5;1723:12;1779:78;1786:9;;1779:78;;1812:8;;;;:::i;:::-;;-1:-1:-1;1835:10:0;;-1:-1:-1;1843:2:0;1835:10;;:::i;:::-;;;1779:78;;;1867:19;1899:6;1889:17;;;;;;-1:-1:-1;;;1889:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1889:17:0;;1867:39;;1917:154;1924:10;;1917:154;;1951:11;1961:1;1951:11;;:::i;:::-;;-1:-1:-1;2020:10:0;2028:2;2020:5;:10;:::i;:::-;2007:24;;:2;:24;:::i;:::-;1994:39;;1977:6;1984;1977:14;;;;;;-1:-1:-1;;;1977:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;1977:56:0;;;;;;;;-1:-1:-1;2048:11:0;2057:2;2048:11;;:::i;:::-;;;1917:154;;999:157;-1:-1:-1;;;;;;1108:40:0;;-1:-1:-1;;;1108:40:0;999:157;;;:::o;39412:555::-;39522:45;39549:4;39555:2;39559:7;39522:26;:45::i;:::-;-1:-1:-1;;;;;39584:18:0;;39580:187;;39619:40;39651:7;39619:31;:40::i;:::-;39580:187;;;39689:2;-1:-1:-1;;;;;39681:10:0;:4;-1:-1:-1;;;;;39681:10:0;;39677:90;;39708:47;39741:4;39747:7;39708:32;:47::i;:::-;-1:-1:-1;;;;;39781:16:0;;39777:183;;39814:45;39851:7;39814:36;:45::i;:::-;39777:183;;;39887:4;-1:-1:-1;;;;;39881:10:0;:2;-1:-1:-1;;;;;39881:10:0;;39877:83;;39908:40;39936:2;39940:7;39908:27;:40::i;32056:250::-;32152:18;32158:2;32162:7;32152:5;:18::i;:::-;32189:54;32220:1;32224:2;32228:7;32237:5;32189:22;:54::i;:::-;32181:117;;;;-1:-1:-1;;;32181:117:0;;;;;;;:::i;35351:843::-;35472:4;35498:15;:2;-1:-1:-1;;;;;35498:13:0;;:15::i;:::-;35494:693;;;35550:2;-1:-1:-1;;;;;35534:36:0;;35571:12;:10;:12::i;:::-;35585:4;35591:7;35600:5;35534:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35534:72:0;;;;;;;;-1:-1:-1;;35534:72:0;;;;;;;;;;;;:::i;:::-;;;35530:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35780:13:0;;35776:341;;35823:60;;-1:-1:-1;;;35823:60:0;;;;;;;:::i;35776:341::-;36067:6;36061:13;36052:6;36048:2;36044:15;36037:38;35530:602;-1:-1:-1;;;;;;35657:55:0;-1:-1:-1;;;35657:55:0;;-1:-1:-1;35650:62:0;;35494:693;-1:-1:-1;36171:4:0;35351:843;;;;;;:::o;40690:164::-;40794:10;:17;;40767:24;;;;:15;:24;;;;;:44;;;40822:24;;;;;;;;;;;;40690:164::o;41481:988::-;41747:22;41797:1;41772:22;41789:4;41772:16;:22::i;:::-;:26;;;;:::i;:::-;41809:18;41830:26;;;:17;:26;;;;;;41747:51;;-1:-1:-1;41963:28:0;;;41959:328;;-1:-1:-1;;;;;42030:18:0;;42008:19;42030:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42081:30;;;;;;:44;;;42198:30;;:17;:30;;;;;:43;;;41959:328;-1:-1:-1;42383:26:0;;;;:17;:26;;;;;;;;42376:33;;;-1:-1:-1;;;;;42427:18:0;;;;;:12;:18;;;;;:34;;;;;;;42420:41;41481:988::o;42764:1079::-;43042:10;:17;43017:22;;43042:21;;43062:1;;43042:21;:::i;:::-;43074:18;43095:24;;;:15;:24;;;;;;43468:10;:26;;43017:46;;-1:-1:-1;43095:24:0;;43017:46;;43468:26;;;;-1:-1:-1;;;43468:26:0;;;;;;;;;;;;;;;;;43446:48;;43532:11;43507:10;43518;43507:22;;;;;;-1:-1:-1;;;43507:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;43612:28;;;:15;:28;;;;;;;:41;;;43784:24;;;;;43777:31;43819:10;:16;;;;;-1:-1:-1;;;43819:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;42764:1079;;;;:::o;40268:221::-;40353:14;40370:20;40387:2;40370:16;:20::i;:::-;-1:-1:-1;;;;;40401:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40446:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40268:221:0:o;32642:382::-;-1:-1:-1;;;;;32722:16:0;;32714:61;;;;-1:-1:-1;;;32714:61:0;;;;;;;:::i;:::-;32795:16;32803:7;32795;:16::i;:::-;32794:17;32786:58;;;;-1:-1:-1;;;32786:58:0;;;;;;;:::i;:::-;32857:45;32886:1;32890:2;32894:7;32857:20;:45::i;:::-;-1:-1:-1;;;;;32915:13:0;;;;;;:9;:13;;;;;:18;;32932:1;;32915:13;:18;;32932:1;;32915:18;:::i;:::-;;;;-1:-1:-1;;32944:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32944:21:0;-1:-1:-1;;;;;32944:21:0;;;;;;;;32983:33;;32944:16;;;32983:33;;32944:16;;32983:33;32642:382;;:::o;4716:422::-;5083:20;5122:8;;;4716:422::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:1;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:1:o;3053:694::-;;;3226:2;3214:9;3205:7;3201:23;3197:32;3194:2;;;3247:6;3239;3232:22;3194:2;3292:9;3279:23;3321:18;3362:2;3354:6;3351:14;3348:2;;;3383:6;3375;3368:22;3348:2;3426:6;3415:9;3411:22;3401:32;;3471:7;3464:4;3460:2;3456:13;3452:27;3442:2;;3498:6;3490;3483:22;3442:2;3543;3530:16;3569:2;3561:6;3558:14;3555:2;;;3590:6;3582;3575:22;3555:2;3651:7;3646:2;3638:4;3630:6;3626:17;3622:2;3618:26;3614:35;3611:48;3608:2;;;3677:6;3669;3662:22;3608:2;3713;3705:11;;;;;3735:6;;-1:-1:-1;3184:563:1;;-1:-1:-1;;;;3184:563:1:o;3752:192::-;;3861:2;3849:9;3840:7;3836:23;3832:32;3829:2;;;3882:6;3874;3867:22;3829:2;3910:28;3928:9;3910:28;:::i;3949:257::-;;4060:2;4048:9;4039:7;4035:23;4031:32;4028:2;;;4081:6;4073;4066:22;4028:2;4125:9;4112:23;4144:32;4170:5;4144:32;:::i;4211:261::-;;4333:2;4321:9;4312:7;4308:23;4304:32;4301:2;;;4354:6;4346;4339:22;4301:2;4391:9;4385:16;4410:32;4436:5;4410:32;:::i;4477:482::-;;4599:2;4587:9;4578:7;4574:23;4570:32;4567:2;;;4620:6;4612;4605:22;4567:2;4665:9;4652:23;4698:18;4690:6;4687:30;4684:2;;;4735:6;4727;4720:22;4684:2;4763:22;;4816:4;4808:13;;4804:27;-1:-1:-1;4794:2:1;;4850:6;4842;4835:22;4794:2;4878:75;4945:7;4940:2;4927:16;4922:2;4918;4914:11;4878:75;:::i;4964:190::-;;5076:2;5064:9;5055:7;5051:23;5047:32;5044:2;;;5097:6;5089;5082:22;5044:2;-1:-1:-1;5125:23:1;;5034:120;-1:-1:-1;5034:120:1:o;5159:194::-;;5282:2;5270:9;5261:7;5257:23;5253:32;5250:2;;;5303:6;5295;5288:22;5250:2;-1:-1:-1;5331:16:1;;5240:113;-1:-1:-1;5240:113:1:o;5358:259::-;;5439:5;5433:12;5466:6;5461:3;5454:19;5482:63;5538:6;5531:4;5526:3;5522:14;5515:4;5508:5;5504:16;5482:63;:::i;:::-;5599:2;5578:15;-1:-1:-1;;5574:29:1;5565:39;;;;5606:4;5561:50;;5409:208;-1:-1:-1;;5409:208:1:o;5622:470::-;;5839:6;5833:13;5855:53;5901:6;5896:3;5889:4;5881:6;5877:17;5855:53;:::i;:::-;5971:13;;5930:16;;;;5993:57;5971:13;5930:16;6027:4;6015:17;;5993:57;:::i;:::-;6066:20;;5809:283;-1:-1:-1;;;;5809:283:1:o;6097:203::-;-1:-1:-1;;;;;6261:32:1;;;;6243:51;;6231:2;6216:18;;6198:102::o;6305:490::-;-1:-1:-1;;;;;6574:15:1;;;6556:34;;6626:15;;6621:2;6606:18;;6599:43;6673:2;6658:18;;6651:34;;;6721:3;6716:2;6701:18;;6694:31;;;6305:490;;6742:47;;6769:19;;6761:6;6742:47;:::i;:::-;6734:55;6508:287;-1:-1:-1;;;;;;6508:287:1:o;6800:635::-;6971:2;7023:21;;;7093:13;;6996:18;;;7115:22;;;6800:635;;6971:2;7194:15;;;;7168:2;7153:18;;;6800:635;7240:169;7254:6;7251:1;7248:13;7240:169;;;7315:13;;7303:26;;7384:15;;;;7349:12;;;;7276:1;7269:9;7240:169;;;-1:-1:-1;7426:3:1;;6951:484;-1:-1:-1;;;;;;6951:484:1:o;7440:187::-;7605:14;;7598:22;7580:41;;7568:2;7553:18;;7535:92::o;7632:221::-;;7781:2;7770:9;7763:21;7801:46;7843:2;7832:9;7828:18;7820:6;7801:46;:::i;7858:335::-;8060:2;8042:21;;;8099:2;8079:18;;;8072:30;-1:-1:-1;;;8133:2:1;8118:18;;8111:41;8184:2;8169:18;;8032:161::o;8198:345::-;8400:2;8382:21;;;8439:2;8419:18;;;8412:30;-1:-1:-1;;;8473:2:1;8458:18;;8451:51;8534:2;8519:18;;8372:171::o;8548:407::-;8750:2;8732:21;;;8789:2;8769:18;;;8762:30;8828:34;8823:2;8808:18;;8801:62;-1:-1:-1;;;8894:2:1;8879:18;;8872:41;8945:3;8930:19;;8722:233::o;8960:414::-;9162:2;9144:21;;;9201:2;9181:18;;;9174:30;9240:34;9235:2;9220:18;;9213:62;-1:-1:-1;;;9306:2:1;9291:18;;9284:48;9364:3;9349:19;;9134:240::o;9379:402::-;9581:2;9563:21;;;9620:2;9600:18;;;9593:30;9659:34;9654:2;9639:18;;9632:62;-1:-1:-1;;;9725:2:1;9710:18;;9703:36;9771:3;9756:19;;9553:228::o;9786:352::-;9988:2;9970:21;;;10027:2;10007:18;;;10000:30;10066;10061:2;10046:18;;10039:58;10129:2;10114:18;;9960:178::o;10143:399::-;10345:2;10327:21;;;10384:2;10364:18;;;10357:30;10423:34;10418:2;10403:18;;10396:62;-1:-1:-1;;;10489:2:1;10474:18;;10467:33;10532:3;10517:19;;10317:225::o;10547:400::-;10749:2;10731:21;;;10788:2;10768:18;;;10761:30;10827:34;10822:2;10807:18;;10800:62;-1:-1:-1;;;10893:2:1;10878:18;;10871:34;10937:3;10922:19;;10721:226::o;10952:349::-;11154:2;11136:21;;;11193:2;11173:18;;;11166:30;11232:27;11227:2;11212:18;;11205:55;11292:2;11277:18;;11126:175::o;11306:408::-;11508:2;11490:21;;;11547:2;11527:18;;;11520:30;11586:34;11581:2;11566:18;;11559:62;-1:-1:-1;;;11652:2:1;11637:18;;11630:42;11704:3;11689:19;;11480:234::o;11719:355::-;11921:2;11903:21;;;11960:2;11940:18;;;11933:30;11999:33;11994:2;11979:18;;11972:61;12065:2;12050:18;;11893:181::o;12079:347::-;12281:2;12263:21;;;12320:2;12300:18;;;12293:30;12359:25;12354:2;12339:18;;12332:53;12417:2;12402:18;;12253:173::o;12431:420::-;12633:2;12615:21;;;12672:2;12652:18;;;12645:30;12711:34;12706:2;12691:18;;12684:62;12782:26;12777:2;12762:18;;12755:54;12841:3;12826:19;;12605:246::o;12856:406::-;13058:2;13040:21;;;13097:2;13077:18;;;13070:30;13136:34;13131:2;13116:18;;13109:62;-1:-1:-1;;;13202:2:1;13187:18;;13180:40;13252:3;13237:19;;13030:232::o;13267:405::-;13469:2;13451:21;;;13508:2;13488:18;;;13481:30;13547:34;13542:2;13527:18;;13520:62;-1:-1:-1;;;13613:2:1;13598:18;;13591:39;13662:3;13647:19;;13441:231::o;13677:356::-;13879:2;13861:21;;;13898:18;;;13891:30;13957:34;13952:2;13937:18;;13930:62;14024:2;14009:18;;13851:182::o;14038:408::-;14240:2;14222:21;;;14279:2;14259:18;;;14252:30;14318:34;14313:2;14298:18;;14291:62;-1:-1:-1;;;14384:2:1;14369:18;;14362:42;14436:3;14421:19;;14212:234::o;14451:356::-;14653:2;14635:21;;;14672:18;;;14665:30;14731:34;14726:2;14711:18;;14704:62;14798:2;14783:18;;14625:182::o;14812:405::-;15014:2;14996:21;;;15053:2;15033:18;;;15026:30;15092:34;15087:2;15072:18;;15065:62;-1:-1:-1;;;15158:2:1;15143:18;;15136:39;15207:3;15192:19;;14986:231::o;15222:411::-;15424:2;15406:21;;;15463:2;15443:18;;;15436:30;15502:34;15497:2;15482:18;;15475:62;-1:-1:-1;;;15568:2:1;15553:18;;15546:45;15623:3;15608:19;;15396:237::o;15638:403::-;15840:2;15822:21;;;15879:2;15859:18;;;15852:30;15918:34;15913:2;15898:18;;15891:62;-1:-1:-1;;;15984:2:1;15969:18;;15962:37;16031:3;16016:19;;15812:229::o;16046:397::-;16248:2;16230:21;;;16287:2;16267:18;;;16260:30;16326:34;16321:2;16306:18;;16299:62;-1:-1:-1;;;16392:2:1;16377:18;;16370:31;16433:3;16418:19;;16220:223::o;16448:349::-;16650:2;16632:21;;;16689:2;16669:18;;;16662:30;16728:27;16723:2;16708:18;;16701:55;16788:2;16773:18;;16622:175::o;16802:413::-;17004:2;16986:21;;;17043:2;17023:18;;;17016:30;17082:34;17077:2;17062:18;;17055:62;-1:-1:-1;;;17148:2:1;17133:18;;17126:47;17205:3;17190:19;;16976:239::o;17220:408::-;17422:2;17404:21;;;17461:2;17441:18;;;17434:30;17500:34;17495:2;17480:18;;17473:62;-1:-1:-1;;;17566:2:1;17551:18;;17544:42;17618:3;17603:19;;17394:234::o;17633:177::-;17779:25;;;17767:2;17752:18;;17734:76::o;17815:128::-;;17886:1;17882:6;17879:1;17876:13;17873:2;;;17892:18;;:::i;:::-;-1:-1:-1;17928:9:1;;17863:80::o;17948:120::-;;18014:1;18004:2;;18019:18;;:::i;:::-;-1:-1:-1;18053:9:1;;17994:74::o;18073:168::-;;18179:1;18175;18171:6;18167:14;18164:1;18161:21;18156:1;18149:9;18142:17;18138:45;18135:2;;;18186:18;;:::i;:::-;-1:-1:-1;18226:9:1;;18125:116::o;18246:125::-;;18314:1;18311;18308:8;18305:2;;;18319:18;;:::i;:::-;-1:-1:-1;18356:9:1;;18295:76::o;18376:258::-;18448:1;18458:113;18472:6;18469:1;18466:13;18458:113;;;18548:11;;;18542:18;18529:11;;;18522:39;18494:2;18487:10;18458:113;;;18589:6;18586:1;18583:13;18580:2;;;-1:-1:-1;;18624:1:1;18606:16;;18599:27;18429:205::o;18639:380::-;18724:1;18714:12;;18771:1;18761:12;;;18782:2;;18836:4;18828:6;18824:17;18814:27;;18782:2;18889;18881:6;18878:14;18858:18;18855:38;18852:2;;;18935:10;18930:3;18926:20;18923:1;18916:31;18970:4;18967:1;18960:15;18998:4;18995:1;18988:15;18852:2;;18694:325;;;:::o;19024:135::-;;-1:-1:-1;;19084:17:1;;19081:2;;;19104:18;;:::i;:::-;-1:-1:-1;19151:1:1;19140:13;;19071:88::o;19164:112::-;;19222:1;19212:2;;19227:18;;:::i;:::-;-1:-1:-1;19261:9:1;;19202:74::o;19281:127::-;19342:10;19337:3;19333:20;19330:1;19323:31;19373:4;19370:1;19363:15;19397:4;19394:1;19387:15;19413:127;19474:10;19469:3;19465:20;19462:1;19455:31;19505:4;19502:1;19495:15;19529:4;19526:1;19519:15;19545:127;19606:10;19601:3;19597:20;19594:1;19587:31;19637:4;19634:1;19627:15;19661:4;19658:1;19651:15;19677:133;-1:-1:-1;;;;;;19753:32:1;;19743:43;;19733:2;;19800:1;19797;19790:12;19733:2;19723:87;:::o
Swarm Source
ipfs://6a9f5b85b595aba3275e839a1a570e2224fd2ab7d0322325e8f18378b7ab4df4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.