Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,679 DSSL
Holders
834
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DSSLLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DesktopStatusSystemsLimited
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-11 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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); } /** * @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 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); } /** * @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 Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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 the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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 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(); } } contract DesktopStatusSystemsLimited is ERC721Enumerable, Ownable { using SafeMath for uint256; bool public mintingActive; uint256 public mintingPrice = .08 ether; uint256 public mintingPerTxLimit = 20; uint256 public mintingStartTimestamp; mapping(address => uint256) public numPurchased; uint256 public maxSupply = 11111; address public creator = 0x26e76280F0C4477726B8a1Dd9AC4996c5c7bADf8; string public baseURI; constructor(uint256 mintingStart, string memory _uri) ERC721("Desktop Statue Systems Limited", "DSSL") { mintingActive = false; mintingStartTimestamp = mintingStart; baseURI = _uri; } function amtPurchased(address buyer) public view returns (uint256){ return numPurchased[buyer]; } function mint(uint256 _amount) public payable { require(mintingActive == true, "Minting is currently inactive"); require(mintingStartTimestamp <= block.timestamp, "Sale not started yet"); require(_amount <= mintingPerTxLimit, "Amount exceeded tx limit"); require(totalSupply().add(_amount) <= maxSupply, "This tx would exceed max supply"); require(msg.value >= mintingPrice.mul(_amount), "Not enough ETH sent"); require(amtPurchased(msg.sender) + _amount <= mintingPerTxLimit, "Cannot buy: Exceeds purchase limit!"); uint256 tsupply = totalSupply(); for(uint256 i = 0; i < _amount; i++) { _safeMint(msg.sender, tsupply + i); } numPurchased[msg.sender] += _amount; } function adminMint(address receiver, uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) <= maxSupply, "This tx would exceed max supply"); uint256 tsupply = totalSupply(); for(uint256 i = 0; i < _amount; i++) { _safeMint(receiver, tsupply + i); } } /** * Set Base URI */ function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } /** * Get the metadata for a given tokenId */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId + 1), ".json")) : ""; } function setMintingPrice(uint256 newMintingPrice) public onlyOwner { mintingPrice = newMintingPrice; } function setMintingActive(bool newMintingState) public onlyOwner { mintingActive = newMintingState; } function setMintingStart(uint256 mintingStart) public onlyOwner { mintingStartTimestamp = mintingStart; } function setMintingPerTxLimit(uint256 mintLimit) public onlyOwner { mintingPerTxLimit = mintLimit; } /** * Withdraw all funds from contract (Owner only) */ function withdrawFunds(address recipient) public onlyOwner { uint toCreator = address(this).balance.div(10); payable(creator).transfer(toCreator); payable(recipient).transfer(address(this).balance); } function withdrawTokens(address _token,address _to,uint256 _amount) public onlyOwner { IERC20 token = IERC20(_token); token.transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"mintingStart","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"amtPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPerTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newMintingState","type":"bool"}],"name":"setMintingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintLimit","type":"uint256"}],"name":"setMintingPerTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintingPrice","type":"uint256"}],"name":"setMintingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintingStart","type":"uint256"}],"name":"setMintingStart","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":"recipient","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405267011c37937e080000600b556014600c55612b67600f557326e76280f0c4477726b8a1dd9ac4996c5c7badf8601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200007d57600080fd5b5060405162004d9d38038062004d9d8339818101604052810190620000a39190620003b9565b6040518060400160405280601e81526020017f4465736b746f70205374617475652053797374656d73204c696d6974656400008152506040518060400160405280600481526020017f4453534c0000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012792919062000274565b5080600190805190602001906200014092919062000274565b5050506200016362000157620001a660201b60201c565b620001ae60201b60201c565b6000600a60146101000a81548160ff02191690831515021790555081600d8190555080601190805190602001906200019d92919062000274565b505050620005c7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028290620004be565b90600052602060002090601f016020900481019282620002a65760008555620002f2565b82601f10620002c157805160ff1916838001178555620002f2565b82800160010185558215620002f2579182015b82811115620002f1578251825591602001919060010190620002d4565b5b50905062000301919062000305565b5090565b5b808211156200032057600081600090555060010162000306565b5090565b60006200033b620003358462000448565b6200041f565b9050828152602081018484840111156200035a57620003596200058d565b5b6200036784828562000488565b509392505050565b600082601f83011262000387576200038662000588565b5b81516200039984826020860162000324565b91505092915050565b600081519050620003b381620005ad565b92915050565b60008060408385031215620003d357620003d262000597565b5b6000620003e385828601620003a2565b925050602083015167ffffffffffffffff81111562000407576200040662000592565b5b62000415858286016200036f565b9150509250929050565b60006200042b6200043e565b9050620004398282620004f4565b919050565b6000604051905090565b600067ffffffffffffffff82111562000466576200046562000559565b5b62000471826200059c565b9050602081019050919050565b6000819050919050565b60005b83811015620004a85780820151818401526020810190506200048b565b83811115620004b8576000848401525b50505050565b60006002820490506001821680620004d757607f821691505b60208210811415620004ee57620004ed6200052a565b5b50919050565b620004ff826200059c565b810181811067ffffffffffffffff8211171562000521576200052062000559565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005b8816200047e565b8114620005c457600080fd5b50565b6147c680620005d76000396000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063b7877ed4116100ab578063d5abeb011161006f578063d5abeb01146107e8578063e58306f914610813578063e985e9c51461083c578063f2fde38b14610879578063fe0eee38146108a25761021a565b8063b7877ed414610703578063b88d4fde1461072e578063c87b56dd14610757578063ca08d3d114610794578063d04ef285146107bf5761021a565b806390218652116100f2578063902186521461062d57806395d89b41146106565780639f4120fd14610681578063a0712d68146106be578063a22cb465146106da5761021a565b806370a0823114610585578063715018a6146105c25780638417b47f146105d95780638da5cb5b146106025761021a565b806335db70b5116101a657806355f804b31161017557806355f804b3146104a25780635e35359e146104cb5780636352211e146104f457806368742da6146105315780636c0360eb1461055a5761021a565b806335db70b5146103d457806342842e0e146103ff5780634f6ccce71461042857806353685b30146104655761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd1461031857806323b872dd146103435780632f745c591461036c57806331f9c919146103a95761021a565b806301ffc9a71461021f57806302d05d3f1461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613292565b6108cb565b60405161025391906138db565b60405180910390f35b34801561026857600080fd5b50610271610945565b60405161027e919061384b565b60405180910390f35b34801561029357600080fd5b5061029c61096b565b6040516102a991906138f6565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613335565b6109fd565b6040516102e6919061384b565b60405180910390f35b3480156102fb57600080fd5b50610316600480360381019061031191906131f8565b610a82565b005b34801561032457600080fd5b5061032d610b9a565b60405161033a9190613c18565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906130e2565b610ba7565b005b34801561037857600080fd5b50610393600480360381019061038e91906131f8565b610c07565b6040516103a09190613c18565b60405180910390f35b3480156103b557600080fd5b506103be610cac565b6040516103cb91906138db565b60405180910390f35b3480156103e057600080fd5b506103e9610cbf565b6040516103f69190613c18565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906130e2565b610cc5565b005b34801561043457600080fd5b5061044f600480360381019061044a9190613335565b610ce5565b60405161045c9190613c18565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613075565b610d56565b6040516104999190613c18565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906132ec565b610d9f565b005b3480156104d757600080fd5b506104f260048036038101906104ed91906130e2565b610e35565b005b34801561050057600080fd5b5061051b60048036038101906105169190613335565b610f4a565b604051610528919061384b565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613075565b610ffc565b005b34801561056657600080fd5b5061056f611144565b60405161057c91906138f6565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613075565b6111d2565b6040516105b99190613c18565b60405180910390f35b3480156105ce57600080fd5b506105d761128a565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190613335565b611312565b005b34801561060e57600080fd5b50610617611398565b604051610624919061384b565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613335565b6113c2565b005b34801561066257600080fd5b5061066b611448565b60405161067891906138f6565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613075565b6114da565b6040516106b59190613c18565b60405180910390f35b6106d860048036038101906106d39190613335565b6114f2565b005b3480156106e657600080fd5b5061070160048036038101906106fc91906131b8565b611779565b005b34801561070f57600080fd5b506107186118fa565b6040516107259190613c18565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613135565b611900565b005b34801561076357600080fd5b5061077e60048036038101906107799190613335565b611962565b60405161078b91906138f6565b60405180910390f35b3480156107a057600080fd5b506107a9611a16565b6040516107b69190613c18565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613238565b611a1c565b005b3480156107f457600080fd5b506107fd611ab5565b60405161080a9190613c18565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906131f8565b611abb565b005b34801561084857600080fd5b50610863600480360381019061085e91906130a2565b611bda565b60405161087091906138db565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190613075565b611c6e565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190613335565b611d66565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093e575061093d82611dec565b5b9050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000805461097a90613edd565b80601f01602080910402602001604051908101604052809291908181526020018280546109a690613edd565b80156109f35780601f106109c8576101008083540402835291602001916109f3565b820191906000526020600020905b8154815290600101906020018083116109d657829003601f168201915b5050505050905090565b6000610a0882611ece565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613af8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8d82610f4a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613b98565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1d611f3a565b73ffffffffffffffffffffffffffffffffffffffff161480610b4c5750610b4b81610b46611f3a565b611bda565b5b610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613a78565b60405180910390fd5b610b958383611f42565b505050565b6000600880549050905090565b610bb8610bb2611f3a565b82611ffb565b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613bb8565b60405180910390fd5b610c028383836120d9565b505050565b6000610c12836111d2565b8210610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90613938565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60149054906101000a900460ff1681565b600b5481565b610ce083838360405180602001604052806000815250611900565b505050565b6000610cef610b9a565b8210610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790613bf8565b60405180910390fd5b60088281548110610d4457610d43614076565b5b90600052602060002001549050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610da7611f3a565b73ffffffffffffffffffffffffffffffffffffffff16610dc5611398565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613b18565b60405180910390fd5b8060119080519060200190610e31929190612e74565b5050565b610e3d611f3a565b73ffffffffffffffffffffffffffffffffffffffff16610e5b611398565b73ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613b18565b60405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ef19291906138b2565b602060405180830381600087803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f439190613265565b5050505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90613ab8565b60405180910390fd5b80915050919050565b611004611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611022611398565b73ffffffffffffffffffffffffffffffffffffffff1614611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90613b18565b60405180910390fd5b600061108e600a4761233590919063ffffffff16565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f8573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561113f573d6000803e3d6000fd5b505050565b6011805461115190613edd565b80601f016020809104026020016040519081016040528092919081815260200182805461117d90613edd565b80156111ca5780601f1061119f576101008083540402835291602001916111ca565b820191906000526020600020905b8154815290600101906020018083116111ad57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a90613a98565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611292611f3a565b73ffffffffffffffffffffffffffffffffffffffff166112b0611398565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613b18565b60405180910390fd5b611310600061234b565b565b61131a611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611338611398565b73ffffffffffffffffffffffffffffffffffffffff161461138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590613b18565b60405180910390fd5b80600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113ca611f3a565b73ffffffffffffffffffffffffffffffffffffffff166113e8611398565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590613b18565b60405180910390fd5b80600d8190555050565b60606001805461145790613edd565b80601f016020809104026020016040519081016040528092919081815260200182805461148390613edd565b80156114d05780601f106114a5576101008083540402835291602001916114d0565b820191906000526020600020905b8154815290600101906020018083116114b357829003601f168201915b5050505050905090565b600e6020528060005260406000206000915090505481565b60011515600a60149054906101000a900460ff16151514611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90613a58565b60405180910390fd5b42600d54111561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613918565b60405180910390fd5b600c548111156115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906139b8565b60405180910390fd5b600f546115ef826115e1610b9a565b61241190919063ffffffff16565b1115611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613a18565b60405180910390fd5b61164581600b5461242790919063ffffffff16565b341015611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613b78565b60405180910390fd5b600c548161169433610d56565b61169e9190613d12565b11156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613bd8565b60405180910390fd5b60006116e9610b9a565b905060005b8281101561171e5761170b3382846117069190613d12565b61243d565b808061171690613f40565b9150506116ee565b5081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176e9190613d12565b925050819055505050565b611781611f3a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e6906139f8565b60405180910390fd5b80600560006117fc611f3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118a9611f3a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118ee91906138db565b60405180910390a35050565b600d5481565b61191161190b611f3a565b83611ffb565b611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613bb8565b60405180910390fd5b61195c8484848461245b565b50505050565b606061196d82611ece565b6119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390613b58565b60405180910390fd5b6000601180546119bb90613edd565b9050116119d75760405180602001604052806000815250611a0f565b60116119ee6001846119e99190613d12565b6124b7565b6040516020016119ff92919061381c565b6040516020818303038152906040525b9050919050565b600c5481565b611a24611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611a42611398565b73ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613b18565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600f5481565b611ac3611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611ae1611398565b73ffffffffffffffffffffffffffffffffffffffff1614611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90613b18565b60405180910390fd5b600f54611b5482611b46610b9a565b61241190919063ffffffff16565b1115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90613a18565b60405180910390fd5b6000611b9f610b9a565b905060005b82811015611bd457611bc1848284611bbc9190613d12565b61243d565b8080611bcc90613f40565b915050611ba4565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c76611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611c94611398565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce190613b18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613978565b60405180910390fd5b611d638161234b565b50565b611d6e611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611d8c611398565b73ffffffffffffffffffffffffffffffffffffffff1614611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990613b18565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611eb757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ec75750611ec682612618565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fb583610f4a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200682611ece565b612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c90613a38565b60405180910390fd5b600061205083610f4a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120bf57508373ffffffffffffffffffffffffffffffffffffffff166120a7846109fd565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d057506120cf8185611bda565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120f982610f4a565b73ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690613b38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b6906139d8565b60405180910390fd5b6121ca838383612682565b6121d5600082611f42565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122259190613df3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227c9190613d12565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836123439190613d68565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361241f9190613d12565b905092915050565b600081836124359190613d99565b905092915050565b612457828260405180602001604052806000815250612796565b5050565b6124668484846120d9565b612472848484846127f1565b6124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890613958565b60405180910390fd5b50505050565b606060008214156124ff576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612613565b600082905060005b6000821461253157808061251a90613f40565b915050600a8261252a9190613d68565b9150612507565b60008167ffffffffffffffff81111561254d5761254c6140a5565b5b6040519080825280601f01601f19166020018201604052801561257f5781602001600182028036833780820191505090505b5090505b6000851461260c576001826125989190613df3565b9150600a856125a79190613f89565b60306125b39190613d12565b60f81b8183815181106125c9576125c8614076565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126059190613d68565b9450612583565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268d838383612988565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d0576126cb8161298d565b61270f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461270e5761270d83826129d6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127525761274d81612b43565b612791565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127905761278f8282612c14565b5b5b505050565b6127a08383612c93565b6127ad60008484846127f1565b6127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390613958565b60405180910390fd5b505050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612e61565b1561297b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283b611f3a565b8786866040518563ffffffff1660e01b815260040161285d9493929190613866565b602060405180830381600087803b15801561287757600080fd5b505af19250505080156128a857506040513d601f19601f820116820180604052508101906128a591906132bf565b60015b61292b573d80600081146128d8576040519150601f19603f3d011682016040523d82523d6000602084013e6128dd565b606091505b50600081511415612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a90613958565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612980565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129e3846111d2565b6129ed9190613df3565b9050600060076000848152602001908152602001600020549050818114612ad2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b579190613df3565b9050600060096000848152602001908152602001600020549050600060088381548110612b8757612b86614076565b5b906000526020600020015490508060088381548110612ba957612ba8614076565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bf857612bf7614047565b5b6001900381819060005260206000200160009055905550505050565b6000612c1f836111d2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfa90613ad8565b60405180910390fd5b612d0c81611ece565b15612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390613998565b60405180910390fd5b612d5860008383612682565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da89190613d12565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e8090613edd565b90600052602060002090601f016020900481019282612ea25760008555612ee9565b82601f10612ebb57805160ff1916838001178555612ee9565b82800160010185558215612ee9579182015b82811115612ee8578251825591602001919060010190612ecd565b5b509050612ef69190612efa565b5090565b5b80821115612f13576000816000905550600101612efb565b5090565b6000612f2a612f2584613c58565b613c33565b905082815260208101848484011115612f4657612f456140d9565b5b612f51848285613e9b565b509392505050565b6000612f6c612f6784613c89565b613c33565b905082815260208101848484011115612f8857612f876140d9565b5b612f93848285613e9b565b509392505050565b600081359050612faa81614734565b92915050565b600081359050612fbf8161474b565b92915050565b600081519050612fd48161474b565b92915050565b600081359050612fe981614762565b92915050565b600081519050612ffe81614762565b92915050565b600082601f830112613019576130186140d4565b5b8135613029848260208601612f17565b91505092915050565b600082601f830112613047576130466140d4565b5b8135613057848260208601612f59565b91505092915050565b60008135905061306f81614779565b92915050565b60006020828403121561308b5761308a6140e3565b5b600061309984828501612f9b565b91505092915050565b600080604083850312156130b9576130b86140e3565b5b60006130c785828601612f9b565b92505060206130d885828601612f9b565b9150509250929050565b6000806000606084860312156130fb576130fa6140e3565b5b600061310986828701612f9b565b935050602061311a86828701612f9b565b925050604061312b86828701613060565b9150509250925092565b6000806000806080858703121561314f5761314e6140e3565b5b600061315d87828801612f9b565b945050602061316e87828801612f9b565b935050604061317f87828801613060565b925050606085013567ffffffffffffffff8111156131a05761319f6140de565b5b6131ac87828801613004565b91505092959194509250565b600080604083850312156131cf576131ce6140e3565b5b60006131dd85828601612f9b565b92505060206131ee85828601612fb0565b9150509250929050565b6000806040838503121561320f5761320e6140e3565b5b600061321d85828601612f9b565b925050602061322e85828601613060565b9150509250929050565b60006020828403121561324e5761324d6140e3565b5b600061325c84828501612fb0565b91505092915050565b60006020828403121561327b5761327a6140e3565b5b600061328984828501612fc5565b91505092915050565b6000602082840312156132a8576132a76140e3565b5b60006132b684828501612fda565b91505092915050565b6000602082840312156132d5576132d46140e3565b5b60006132e384828501612fef565b91505092915050565b600060208284031215613302576133016140e3565b5b600082013567ffffffffffffffff8111156133205761331f6140de565b5b61332c84828501613032565b91505092915050565b60006020828403121561334b5761334a6140e3565b5b600061335984828501613060565b91505092915050565b61336b81613e27565b82525050565b61337a81613e39565b82525050565b600061338b82613ccf565b6133958185613ce5565b93506133a5818560208601613eaa565b6133ae816140e8565b840191505092915050565b60006133c482613cda565b6133ce8185613cf6565b93506133de818560208601613eaa565b6133e7816140e8565b840191505092915050565b60006133fd82613cda565b6134078185613d07565b9350613417818560208601613eaa565b80840191505092915050565b6000815461343081613edd565b61343a8186613d07565b94506001821660008114613455576001811461346657613499565b60ff19831686528186019350613499565b61346f85613cba565b60005b8381101561349157815481890152600182019150602081019050613472565b838801955050505b50505092915050565b60006134af601483613cf6565b91506134ba826140f9565b602082019050919050565b60006134d2602b83613cf6565b91506134dd82614122565b604082019050919050565b60006134f5603283613cf6565b915061350082614171565b604082019050919050565b6000613518602683613cf6565b9150613523826141c0565b604082019050919050565b600061353b601c83613cf6565b91506135468261420f565b602082019050919050565b600061355e601883613cf6565b915061356982614238565b602082019050919050565b6000613581602483613cf6565b915061358c82614261565b604082019050919050565b60006135a4601983613cf6565b91506135af826142b0565b602082019050919050565b60006135c7601f83613cf6565b91506135d2826142d9565b602082019050919050565b60006135ea602c83613cf6565b91506135f582614302565b604082019050919050565b600061360d601d83613cf6565b915061361882614351565b602082019050919050565b6000613630603883613cf6565b915061363b8261437a565b604082019050919050565b6000613653602a83613cf6565b915061365e826143c9565b604082019050919050565b6000613676602983613cf6565b915061368182614418565b604082019050919050565b6000613699602083613cf6565b91506136a482614467565b602082019050919050565b60006136bc602c83613cf6565b91506136c782614490565b604082019050919050565b60006136df600583613d07565b91506136ea826144df565b600582019050919050565b6000613702602083613cf6565b915061370d82614508565b602082019050919050565b6000613725602983613cf6565b915061373082614531565b604082019050919050565b6000613748602f83613cf6565b915061375382614580565b604082019050919050565b600061376b601383613cf6565b9150613776826145cf565b602082019050919050565b600061378e602183613cf6565b9150613799826145f8565b604082019050919050565b60006137b1603183613cf6565b91506137bc82614647565b604082019050919050565b60006137d4602383613cf6565b91506137df82614696565b604082019050919050565b60006137f7602c83613cf6565b9150613802826146e5565b604082019050919050565b61381681613e91565b82525050565b60006138288285613423565b915061383482846133f2565b915061383f826136d2565b91508190509392505050565b60006020820190506138606000830184613362565b92915050565b600060808201905061387b6000830187613362565b6138886020830186613362565b613895604083018561380d565b81810360608301526138a78184613380565b905095945050505050565b60006040820190506138c76000830185613362565b6138d4602083018461380d565b9392505050565b60006020820190506138f06000830184613371565b92915050565b6000602082019050818103600083015261391081846133b9565b905092915050565b60006020820190508181036000830152613931816134a2565b9050919050565b60006020820190508181036000830152613951816134c5565b9050919050565b60006020820190508181036000830152613971816134e8565b9050919050565b600060208201905081810360008301526139918161350b565b9050919050565b600060208201905081810360008301526139b18161352e565b9050919050565b600060208201905081810360008301526139d181613551565b9050919050565b600060208201905081810360008301526139f181613574565b9050919050565b60006020820190508181036000830152613a1181613597565b9050919050565b60006020820190508181036000830152613a31816135ba565b9050919050565b60006020820190508181036000830152613a51816135dd565b9050919050565b60006020820190508181036000830152613a7181613600565b9050919050565b60006020820190508181036000830152613a9181613623565b9050919050565b60006020820190508181036000830152613ab181613646565b9050919050565b60006020820190508181036000830152613ad181613669565b9050919050565b60006020820190508181036000830152613af18161368c565b9050919050565b60006020820190508181036000830152613b11816136af565b9050919050565b60006020820190508181036000830152613b31816136f5565b9050919050565b60006020820190508181036000830152613b5181613718565b9050919050565b60006020820190508181036000830152613b718161373b565b9050919050565b60006020820190508181036000830152613b918161375e565b9050919050565b60006020820190508181036000830152613bb181613781565b9050919050565b60006020820190508181036000830152613bd1816137a4565b9050919050565b60006020820190508181036000830152613bf1816137c7565b9050919050565b60006020820190508181036000830152613c11816137ea565b9050919050565b6000602082019050613c2d600083018461380d565b92915050565b6000613c3d613c4e565b9050613c498282613f0f565b919050565b6000604051905090565b600067ffffffffffffffff821115613c7357613c726140a5565b5b613c7c826140e8565b9050602081019050919050565b600067ffffffffffffffff821115613ca457613ca36140a5565b5b613cad826140e8565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d1d82613e91565b9150613d2883613e91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d5d57613d5c613fba565b5b828201905092915050565b6000613d7382613e91565b9150613d7e83613e91565b925082613d8e57613d8d613fe9565b5b828204905092915050565b6000613da482613e91565b9150613daf83613e91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613de857613de7613fba565b5b828202905092915050565b6000613dfe82613e91565b9150613e0983613e91565b925082821015613e1c57613e1b613fba565b5b828203905092915050565b6000613e3282613e71565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ec8578082015181840152602081019050613ead565b83811115613ed7576000848401525b50505050565b60006002820490506001821680613ef557607f821691505b60208210811415613f0957613f08614018565b5b50919050565b613f18826140e8565b810181811067ffffffffffffffff82111715613f3757613f366140a5565b5b80604052505050565b6000613f4b82613e91565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f7e57613f7d613fba565b5b600182019050919050565b6000613f9482613e91565b9150613f9f83613e91565b925082613faf57613fae613fe9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206e6f74207374617274656420796574000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416d6f756e74206578636565646564207478206c696d69740000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320747820776f756c6420657863656564206d617820737570706c7900600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672069732063757272656e746c7920696e616374697665000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206275793a2045786365656473207075726368617365206c696d60008201527f6974210000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61473d81613e27565b811461474857600080fd5b50565b61475481613e39565b811461475f57600080fd5b50565b61476b81613e45565b811461477657600080fd5b50565b61478281613e91565b811461478d57600080fd5b5056fea26469706673582212206b3feb349293bf850febd9c431196fab4a31076a67855c9761a09adff925413464736f6c6343000807003300000000000000000000000000000000000000000000000000000000627bfc3f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d6241616a63544a6578644757314a59625177326648456a356d7565736f5864476743564254683745594e57642f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c806370a0823111610123578063b7877ed4116100ab578063d5abeb011161006f578063d5abeb01146107e8578063e58306f914610813578063e985e9c51461083c578063f2fde38b14610879578063fe0eee38146108a25761021a565b8063b7877ed414610703578063b88d4fde1461072e578063c87b56dd14610757578063ca08d3d114610794578063d04ef285146107bf5761021a565b806390218652116100f2578063902186521461062d57806395d89b41146106565780639f4120fd14610681578063a0712d68146106be578063a22cb465146106da5761021a565b806370a0823114610585578063715018a6146105c25780638417b47f146105d95780638da5cb5b146106025761021a565b806335db70b5116101a657806355f804b31161017557806355f804b3146104a25780635e35359e146104cb5780636352211e146104f457806368742da6146105315780636c0360eb1461055a5761021a565b806335db70b5146103d457806342842e0e146103ff5780634f6ccce71461042857806353685b30146104655761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd1461031857806323b872dd146103435780632f745c591461036c57806331f9c919146103a95761021a565b806301ffc9a71461021f57806302d05d3f1461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613292565b6108cb565b60405161025391906138db565b60405180910390f35b34801561026857600080fd5b50610271610945565b60405161027e919061384b565b60405180910390f35b34801561029357600080fd5b5061029c61096b565b6040516102a991906138f6565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613335565b6109fd565b6040516102e6919061384b565b60405180910390f35b3480156102fb57600080fd5b50610316600480360381019061031191906131f8565b610a82565b005b34801561032457600080fd5b5061032d610b9a565b60405161033a9190613c18565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906130e2565b610ba7565b005b34801561037857600080fd5b50610393600480360381019061038e91906131f8565b610c07565b6040516103a09190613c18565b60405180910390f35b3480156103b557600080fd5b506103be610cac565b6040516103cb91906138db565b60405180910390f35b3480156103e057600080fd5b506103e9610cbf565b6040516103f69190613c18565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906130e2565b610cc5565b005b34801561043457600080fd5b5061044f600480360381019061044a9190613335565b610ce5565b60405161045c9190613c18565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613075565b610d56565b6040516104999190613c18565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906132ec565b610d9f565b005b3480156104d757600080fd5b506104f260048036038101906104ed91906130e2565b610e35565b005b34801561050057600080fd5b5061051b60048036038101906105169190613335565b610f4a565b604051610528919061384b565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613075565b610ffc565b005b34801561056657600080fd5b5061056f611144565b60405161057c91906138f6565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613075565b6111d2565b6040516105b99190613c18565b60405180910390f35b3480156105ce57600080fd5b506105d761128a565b005b3480156105e557600080fd5b5061060060048036038101906105fb9190613335565b611312565b005b34801561060e57600080fd5b50610617611398565b604051610624919061384b565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613335565b6113c2565b005b34801561066257600080fd5b5061066b611448565b60405161067891906138f6565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613075565b6114da565b6040516106b59190613c18565b60405180910390f35b6106d860048036038101906106d39190613335565b6114f2565b005b3480156106e657600080fd5b5061070160048036038101906106fc91906131b8565b611779565b005b34801561070f57600080fd5b506107186118fa565b6040516107259190613c18565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613135565b611900565b005b34801561076357600080fd5b5061077e60048036038101906107799190613335565b611962565b60405161078b91906138f6565b60405180910390f35b3480156107a057600080fd5b506107a9611a16565b6040516107b69190613c18565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613238565b611a1c565b005b3480156107f457600080fd5b506107fd611ab5565b60405161080a9190613c18565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906131f8565b611abb565b005b34801561084857600080fd5b50610863600480360381019061085e91906130a2565b611bda565b60405161087091906138db565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190613075565b611c6e565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190613335565b611d66565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093e575061093d82611dec565b5b9050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000805461097a90613edd565b80601f01602080910402602001604051908101604052809291908181526020018280546109a690613edd565b80156109f35780601f106109c8576101008083540402835291602001916109f3565b820191906000526020600020905b8154815290600101906020018083116109d657829003601f168201915b5050505050905090565b6000610a0882611ece565b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613af8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8d82610f4a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613b98565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1d611f3a565b73ffffffffffffffffffffffffffffffffffffffff161480610b4c5750610b4b81610b46611f3a565b611bda565b5b610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613a78565b60405180910390fd5b610b958383611f42565b505050565b6000600880549050905090565b610bb8610bb2611f3a565b82611ffb565b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613bb8565b60405180910390fd5b610c028383836120d9565b505050565b6000610c12836111d2565b8210610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90613938565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60149054906101000a900460ff1681565b600b5481565b610ce083838360405180602001604052806000815250611900565b505050565b6000610cef610b9a565b8210610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790613bf8565b60405180910390fd5b60088281548110610d4457610d43614076565b5b90600052602060002001549050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610da7611f3a565b73ffffffffffffffffffffffffffffffffffffffff16610dc5611398565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613b18565b60405180910390fd5b8060119080519060200190610e31929190612e74565b5050565b610e3d611f3a565b73ffffffffffffffffffffffffffffffffffffffff16610e5b611398565b73ffffffffffffffffffffffffffffffffffffffff1614610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea890613b18565b60405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ef19291906138b2565b602060405180830381600087803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f439190613265565b5050505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90613ab8565b60405180910390fd5b80915050919050565b611004611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611022611398565b73ffffffffffffffffffffffffffffffffffffffff1614611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90613b18565b60405180910390fd5b600061108e600a4761233590919063ffffffff16565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f8573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561113f573d6000803e3d6000fd5b505050565b6011805461115190613edd565b80601f016020809104026020016040519081016040528092919081815260200182805461117d90613edd565b80156111ca5780601f1061119f576101008083540402835291602001916111ca565b820191906000526020600020905b8154815290600101906020018083116111ad57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a90613a98565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611292611f3a565b73ffffffffffffffffffffffffffffffffffffffff166112b0611398565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613b18565b60405180910390fd5b611310600061234b565b565b61131a611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611338611398565b73ffffffffffffffffffffffffffffffffffffffff161461138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590613b18565b60405180910390fd5b80600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113ca611f3a565b73ffffffffffffffffffffffffffffffffffffffff166113e8611398565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143590613b18565b60405180910390fd5b80600d8190555050565b60606001805461145790613edd565b80601f016020809104026020016040519081016040528092919081815260200182805461148390613edd565b80156114d05780601f106114a5576101008083540402835291602001916114d0565b820191906000526020600020905b8154815290600101906020018083116114b357829003601f168201915b5050505050905090565b600e6020528060005260406000206000915090505481565b60011515600a60149054906101000a900460ff16151514611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90613a58565b60405180910390fd5b42600d54111561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613918565b60405180910390fd5b600c548111156115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906139b8565b60405180910390fd5b600f546115ef826115e1610b9a565b61241190919063ffffffff16565b1115611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613a18565b60405180910390fd5b61164581600b5461242790919063ffffffff16565b341015611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613b78565b60405180910390fd5b600c548161169433610d56565b61169e9190613d12565b11156116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690613bd8565b60405180910390fd5b60006116e9610b9a565b905060005b8281101561171e5761170b3382846117069190613d12565b61243d565b808061171690613f40565b9150506116ee565b5081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176e9190613d12565b925050819055505050565b611781611f3a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e6906139f8565b60405180910390fd5b80600560006117fc611f3a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118a9611f3a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118ee91906138db565b60405180910390a35050565b600d5481565b61191161190b611f3a565b83611ffb565b611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613bb8565b60405180910390fd5b61195c8484848461245b565b50505050565b606061196d82611ece565b6119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390613b58565b60405180910390fd5b6000601180546119bb90613edd565b9050116119d75760405180602001604052806000815250611a0f565b60116119ee6001846119e99190613d12565b6124b7565b6040516020016119ff92919061381c565b6040516020818303038152906040525b9050919050565b600c5481565b611a24611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611a42611398565b73ffffffffffffffffffffffffffffffffffffffff1614611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613b18565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600f5481565b611ac3611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611ae1611398565b73ffffffffffffffffffffffffffffffffffffffff1614611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90613b18565b60405180910390fd5b600f54611b5482611b46610b9a565b61241190919063ffffffff16565b1115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c90613a18565b60405180910390fd5b6000611b9f610b9a565b905060005b82811015611bd457611bc1848284611bbc9190613d12565b61243d565b8080611bcc90613f40565b915050611ba4565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c76611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611c94611398565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce190613b18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613978565b60405180910390fd5b611d638161234b565b50565b611d6e611f3a565b73ffffffffffffffffffffffffffffffffffffffff16611d8c611398565b73ffffffffffffffffffffffffffffffffffffffff1614611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990613b18565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611eb757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ec75750611ec682612618565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fb583610f4a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200682611ece565b612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c90613a38565b60405180910390fd5b600061205083610f4a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120bf57508373ffffffffffffffffffffffffffffffffffffffff166120a7846109fd565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d057506120cf8185611bda565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120f982610f4a565b73ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690613b38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b6906139d8565b60405180910390fd5b6121ca838383612682565b6121d5600082611f42565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122259190613df3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461227c9190613d12565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836123439190613d68565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361241f9190613d12565b905092915050565b600081836124359190613d99565b905092915050565b612457828260405180602001604052806000815250612796565b5050565b6124668484846120d9565b612472848484846127f1565b6124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890613958565b60405180910390fd5b50505050565b606060008214156124ff576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612613565b600082905060005b6000821461253157808061251a90613f40565b915050600a8261252a9190613d68565b9150612507565b60008167ffffffffffffffff81111561254d5761254c6140a5565b5b6040519080825280601f01601f19166020018201604052801561257f5781602001600182028036833780820191505090505b5090505b6000851461260c576001826125989190613df3565b9150600a856125a79190613f89565b60306125b39190613d12565b60f81b8183815181106125c9576125c8614076565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126059190613d68565b9450612583565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61268d838383612988565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d0576126cb8161298d565b61270f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461270e5761270d83826129d6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127525761274d81612b43565b612791565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127905761278f8282612c14565b5b5b505050565b6127a08383612c93565b6127ad60008484846127f1565b6127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390613958565b60405180910390fd5b505050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612e61565b1561297b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283b611f3a565b8786866040518563ffffffff1660e01b815260040161285d9493929190613866565b602060405180830381600087803b15801561287757600080fd5b505af19250505080156128a857506040513d601f19601f820116820180604052508101906128a591906132bf565b60015b61292b573d80600081146128d8576040519150601f19603f3d011682016040523d82523d6000602084013e6128dd565b606091505b50600081511415612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a90613958565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612980565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129e3846111d2565b6129ed9190613df3565b9050600060076000848152602001908152602001600020549050818114612ad2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b579190613df3565b9050600060096000848152602001908152602001600020549050600060088381548110612b8757612b86614076565b5b906000526020600020015490508060088381548110612ba957612ba8614076565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bf857612bf7614047565b5b6001900381819060005260206000200160009055905550505050565b6000612c1f836111d2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfa90613ad8565b60405180910390fd5b612d0c81611ece565b15612d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4390613998565b60405180910390fd5b612d5860008383612682565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da89190613d12565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e8090613edd565b90600052602060002090601f016020900481019282612ea25760008555612ee9565b82601f10612ebb57805160ff1916838001178555612ee9565b82800160010185558215612ee9579182015b82811115612ee8578251825591602001919060010190612ecd565b5b509050612ef69190612efa565b5090565b5b80821115612f13576000816000905550600101612efb565b5090565b6000612f2a612f2584613c58565b613c33565b905082815260208101848484011115612f4657612f456140d9565b5b612f51848285613e9b565b509392505050565b6000612f6c612f6784613c89565b613c33565b905082815260208101848484011115612f8857612f876140d9565b5b612f93848285613e9b565b509392505050565b600081359050612faa81614734565b92915050565b600081359050612fbf8161474b565b92915050565b600081519050612fd48161474b565b92915050565b600081359050612fe981614762565b92915050565b600081519050612ffe81614762565b92915050565b600082601f830112613019576130186140d4565b5b8135613029848260208601612f17565b91505092915050565b600082601f830112613047576130466140d4565b5b8135613057848260208601612f59565b91505092915050565b60008135905061306f81614779565b92915050565b60006020828403121561308b5761308a6140e3565b5b600061309984828501612f9b565b91505092915050565b600080604083850312156130b9576130b86140e3565b5b60006130c785828601612f9b565b92505060206130d885828601612f9b565b9150509250929050565b6000806000606084860312156130fb576130fa6140e3565b5b600061310986828701612f9b565b935050602061311a86828701612f9b565b925050604061312b86828701613060565b9150509250925092565b6000806000806080858703121561314f5761314e6140e3565b5b600061315d87828801612f9b565b945050602061316e87828801612f9b565b935050604061317f87828801613060565b925050606085013567ffffffffffffffff8111156131a05761319f6140de565b5b6131ac87828801613004565b91505092959194509250565b600080604083850312156131cf576131ce6140e3565b5b60006131dd85828601612f9b565b92505060206131ee85828601612fb0565b9150509250929050565b6000806040838503121561320f5761320e6140e3565b5b600061321d85828601612f9b565b925050602061322e85828601613060565b9150509250929050565b60006020828403121561324e5761324d6140e3565b5b600061325c84828501612fb0565b91505092915050565b60006020828403121561327b5761327a6140e3565b5b600061328984828501612fc5565b91505092915050565b6000602082840312156132a8576132a76140e3565b5b60006132b684828501612fda565b91505092915050565b6000602082840312156132d5576132d46140e3565b5b60006132e384828501612fef565b91505092915050565b600060208284031215613302576133016140e3565b5b600082013567ffffffffffffffff8111156133205761331f6140de565b5b61332c84828501613032565b91505092915050565b60006020828403121561334b5761334a6140e3565b5b600061335984828501613060565b91505092915050565b61336b81613e27565b82525050565b61337a81613e39565b82525050565b600061338b82613ccf565b6133958185613ce5565b93506133a5818560208601613eaa565b6133ae816140e8565b840191505092915050565b60006133c482613cda565b6133ce8185613cf6565b93506133de818560208601613eaa565b6133e7816140e8565b840191505092915050565b60006133fd82613cda565b6134078185613d07565b9350613417818560208601613eaa565b80840191505092915050565b6000815461343081613edd565b61343a8186613d07565b94506001821660008114613455576001811461346657613499565b60ff19831686528186019350613499565b61346f85613cba565b60005b8381101561349157815481890152600182019150602081019050613472565b838801955050505b50505092915050565b60006134af601483613cf6565b91506134ba826140f9565b602082019050919050565b60006134d2602b83613cf6565b91506134dd82614122565b604082019050919050565b60006134f5603283613cf6565b915061350082614171565b604082019050919050565b6000613518602683613cf6565b9150613523826141c0565b604082019050919050565b600061353b601c83613cf6565b91506135468261420f565b602082019050919050565b600061355e601883613cf6565b915061356982614238565b602082019050919050565b6000613581602483613cf6565b915061358c82614261565b604082019050919050565b60006135a4601983613cf6565b91506135af826142b0565b602082019050919050565b60006135c7601f83613cf6565b91506135d2826142d9565b602082019050919050565b60006135ea602c83613cf6565b91506135f582614302565b604082019050919050565b600061360d601d83613cf6565b915061361882614351565b602082019050919050565b6000613630603883613cf6565b915061363b8261437a565b604082019050919050565b6000613653602a83613cf6565b915061365e826143c9565b604082019050919050565b6000613676602983613cf6565b915061368182614418565b604082019050919050565b6000613699602083613cf6565b91506136a482614467565b602082019050919050565b60006136bc602c83613cf6565b91506136c782614490565b604082019050919050565b60006136df600583613d07565b91506136ea826144df565b600582019050919050565b6000613702602083613cf6565b915061370d82614508565b602082019050919050565b6000613725602983613cf6565b915061373082614531565b604082019050919050565b6000613748602f83613cf6565b915061375382614580565b604082019050919050565b600061376b601383613cf6565b9150613776826145cf565b602082019050919050565b600061378e602183613cf6565b9150613799826145f8565b604082019050919050565b60006137b1603183613cf6565b91506137bc82614647565b604082019050919050565b60006137d4602383613cf6565b91506137df82614696565b604082019050919050565b60006137f7602c83613cf6565b9150613802826146e5565b604082019050919050565b61381681613e91565b82525050565b60006138288285613423565b915061383482846133f2565b915061383f826136d2565b91508190509392505050565b60006020820190506138606000830184613362565b92915050565b600060808201905061387b6000830187613362565b6138886020830186613362565b613895604083018561380d565b81810360608301526138a78184613380565b905095945050505050565b60006040820190506138c76000830185613362565b6138d4602083018461380d565b9392505050565b60006020820190506138f06000830184613371565b92915050565b6000602082019050818103600083015261391081846133b9565b905092915050565b60006020820190508181036000830152613931816134a2565b9050919050565b60006020820190508181036000830152613951816134c5565b9050919050565b60006020820190508181036000830152613971816134e8565b9050919050565b600060208201905081810360008301526139918161350b565b9050919050565b600060208201905081810360008301526139b18161352e565b9050919050565b600060208201905081810360008301526139d181613551565b9050919050565b600060208201905081810360008301526139f181613574565b9050919050565b60006020820190508181036000830152613a1181613597565b9050919050565b60006020820190508181036000830152613a31816135ba565b9050919050565b60006020820190508181036000830152613a51816135dd565b9050919050565b60006020820190508181036000830152613a7181613600565b9050919050565b60006020820190508181036000830152613a9181613623565b9050919050565b60006020820190508181036000830152613ab181613646565b9050919050565b60006020820190508181036000830152613ad181613669565b9050919050565b60006020820190508181036000830152613af18161368c565b9050919050565b60006020820190508181036000830152613b11816136af565b9050919050565b60006020820190508181036000830152613b31816136f5565b9050919050565b60006020820190508181036000830152613b5181613718565b9050919050565b60006020820190508181036000830152613b718161373b565b9050919050565b60006020820190508181036000830152613b918161375e565b9050919050565b60006020820190508181036000830152613bb181613781565b9050919050565b60006020820190508181036000830152613bd1816137a4565b9050919050565b60006020820190508181036000830152613bf1816137c7565b9050919050565b60006020820190508181036000830152613c11816137ea565b9050919050565b6000602082019050613c2d600083018461380d565b92915050565b6000613c3d613c4e565b9050613c498282613f0f565b919050565b6000604051905090565b600067ffffffffffffffff821115613c7357613c726140a5565b5b613c7c826140e8565b9050602081019050919050565b600067ffffffffffffffff821115613ca457613ca36140a5565b5b613cad826140e8565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d1d82613e91565b9150613d2883613e91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d5d57613d5c613fba565b5b828201905092915050565b6000613d7382613e91565b9150613d7e83613e91565b925082613d8e57613d8d613fe9565b5b828204905092915050565b6000613da482613e91565b9150613daf83613e91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613de857613de7613fba565b5b828202905092915050565b6000613dfe82613e91565b9150613e0983613e91565b925082821015613e1c57613e1b613fba565b5b828203905092915050565b6000613e3282613e71565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ec8578082015181840152602081019050613ead565b83811115613ed7576000848401525b50505050565b60006002820490506001821680613ef557607f821691505b60208210811415613f0957613f08614018565b5b50919050565b613f18826140e8565b810181811067ffffffffffffffff82111715613f3757613f366140a5565b5b80604052505050565b6000613f4b82613e91565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f7e57613f7d613fba565b5b600182019050919050565b6000613f9482613e91565b9150613f9f83613e91565b925082613faf57613fae613fe9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206e6f74207374617274656420796574000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416d6f756e74206578636565646564207478206c696d69740000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320747820776f756c6420657863656564206d617820737570706c7900600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672069732063757272656e746c7920696e616374697665000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206275793a2045786365656473207075726368617365206c696d60008201527f6974210000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61473d81613e27565b811461474857600080fd5b50565b61475481613e39565b811461475f57600080fd5b50565b61476b81613e45565b811461477657600080fd5b50565b61478281613e91565b811461478d57600080fd5b5056fea26469706673582212206b3feb349293bf850febd9c431196fab4a31076a67855c9761a09adff925413464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000627bfc3f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d6241616a63544a6578644757314a59625177326648456a356d7565736f5864476743564254683745594e57642f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : mintingStart (uint256): 1652292671
Arg [1] : _uri (string): https://ipfs.io/ipfs/QmbAajcTJexdGW1JYbQw2fHEj5muesoXdGgCVBTh7EYNWd/
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000627bfc3f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [3] : 68747470733a2f2f697066732e696f2f697066732f516d6241616a63544a6578
Arg [4] : 644757314a59625177326648456a356d7565736f586447674356425468374559
Arg [5] : 4e57642f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
51515:3538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45367:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51893:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34056:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33579:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46007:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34946:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45675:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51633:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51665:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35356:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46197:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52240:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53538:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54878:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32191:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54638:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51973:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31921:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2383:94;;;;;;;;;;;;;:::i;:::-;;54062:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1732:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54313:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32666:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51798:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52359:775;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34349:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51755:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35612:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53715:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51711:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54186:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51854:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53146:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34715:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2632:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54440:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45367:224;45469:4;45508:35;45493:50;;;:11;:50;;;;:90;;;;45547:36;45571:11;45547:23;:36::i;:::-;45493:90;45486:97;;45367:224;;;:::o;51893:67::-;;;;;;;;;;;;;:::o;32497:100::-;32551:13;32584:5;32577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32497:100;:::o;34056:221::-;34132:7;34160:16;34168:7;34160;:16::i;:::-;34152:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34245:15;:24;34261:7;34245:24;;;;;;;;;;;;;;;;;;;;;34238:31;;34056:221;;;:::o;33579:411::-;33660:13;33676:23;33691:7;33676:14;:23::i;:::-;33660:39;;33724:5;33718:11;;:2;:11;;;;33710:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33818:5;33802:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33827:37;33844:5;33851:12;:10;:12::i;:::-;33827:16;:37::i;:::-;33802:62;33780:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33961:21;33970:2;33974:7;33961:8;:21::i;:::-;33649:341;33579:411;;:::o;46007:113::-;46068:7;46095:10;:17;;;;46088:24;;46007:113;:::o;34946:339::-;35141:41;35160:12;:10;:12::i;:::-;35174:7;35141:18;:41::i;:::-;35133:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35249:28;35259:4;35265:2;35269:7;35249:9;:28::i;:::-;34946:339;;;:::o;45675:256::-;45772:7;45808:23;45825:5;45808:16;:23::i;:::-;45800:5;:31;45792:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45897:12;:19;45910:5;45897:19;;;;;;;;;;;;;;;:26;45917:5;45897:26;;;;;;;;;;;;45890:33;;45675:256;;;;:::o;51633:25::-;;;;;;;;;;;;;:::o;51665:39::-;;;;:::o;35356:185::-;35494:39;35511:4;35517:2;35521:7;35494:39;;;;;;;;;;;;:16;:39::i;:::-;35356:185;;;:::o;46197:233::-;46272:7;46308:30;:28;:30::i;:::-;46300:5;:38;46292:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;46405:10;46416:5;46405:17;;;;;;;;:::i;:::-;;;;;;;;;;46398:24;;46197:233;;;:::o;52240:111::-;52298:7;52324:12;:19;52337:5;52324:19;;;;;;;;;;;;;;;;52317:26;;52240:111;;;:::o;53538:102::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53622:10:::1;53612:7;:20;;;;;;;;;;;;:::i;:::-;;53538:102:::0;:::o;54878:172::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54974:12:::1;54996:6;54974:29;;55014:5;:14;;;55029:3;55034:7;55014:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54963:87;54878:172:::0;;;:::o;32191:239::-;32263:7;32283:13;32299:7;:16;32307:7;32299:16;;;;;;;;;;;;;;;;;;;;;32283:32;;32351:1;32334:19;;:5;:19;;;;32326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32417:5;32410:12;;;32191:239;;;:::o;54638:232::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54708:14:::1;54725:29;54751:2;54725:21;:25;;:29;;;;:::i;:::-;54708:46;;54773:7;;;;;;;;;;;54765:25;;:36;54791:9;54765:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54820:9;54812:27;;:50;54840:21;54812:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54697:173;54638:232:::0;:::o;51973:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31921:208::-;31993:7;32038:1;32021:19;;:5;:19;;;;32013:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32105:9;:16;32115:5;32105:16;;;;;;;;;;;;;;;;32098:23;;31921:208;;;:::o;2383:94::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2448:21:::1;2466:1;2448:9;:21::i;:::-;2383:94::o:0;54062:116::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54155:15:::1;54140:12;:30;;;;54062:116:::0;:::o;1732:87::-;1778:7;1805:6;;;;;;;;;;;1798:13;;1732:87;:::o;54313:119::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54412:12:::1;54388:21;:36;;;;54313:119:::0;:::o;32666:104::-;32722:13;32755:7;32748:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32666:104;:::o;51798:47::-;;;;;;;;;;;;;;;;;:::o;52359:775::-;52441:4;52424:21;;:13;;;;;;;;;;;:21;;;52416:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52523:15;52498:21;;:40;;52490:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52593:17;;52582:7;:28;;52574:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;52688:9;;52658:26;52676:7;52658:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;52650:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;52765:25;52782:7;52765:12;;:16;;:25;;;;:::i;:::-;52752:9;:38;;52744:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;52871:17;;52860:7;52833:24;52846:10;52833:12;:24::i;:::-;:34;;;;:::i;:::-;:55;;52825:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;52939:15;52957:13;:11;:13::i;:::-;52939:31;;52987:9;52983:98;53006:7;53002:1;:11;52983:98;;;53035:34;53045:10;53067:1;53057:7;:11;;;;:::i;:::-;53035:9;:34::i;:::-;53015:3;;;;;:::i;:::-;;;;52983:98;;;;53119:7;53091:12;:24;53104:10;53091:24;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;52405:729;52359:775;:::o;34349:295::-;34464:12;:10;:12::i;:::-;34452:24;;:8;:24;;;;34444:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34564:8;34519:18;:32;34538:12;:10;:12::i;:::-;34519:32;;;;;;;;;;;;;;;:42;34552:8;34519:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34617:8;34588:48;;34603:12;:10;:12::i;:::-;34588:48;;;34627:8;34588:48;;;;;;:::i;:::-;;;;;;;;34349:295;;:::o;51755:36::-;;;;:::o;35612:328::-;35787:41;35806:12;:10;:12::i;:::-;35820:7;35787:18;:41::i;:::-;35779:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35893:39;35907:4;35913:2;35917:7;35926:5;35893:13;:39::i;:::-;35612:328;;;;:::o;53715:335::-;53788:13;53822:16;53830:7;53822;:16::i;:::-;53814:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53934:1;53916:7;53910:21;;;;;:::i;:::-;;;:25;:132;;;;;;;;;;;;;;;;;53975:7;53984:29;54011:1;54001:7;:11;;;;:::i;:::-;53984:16;:29::i;:::-;53958:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53910:132;53903:139;;53715:335;;;:::o;51711:37::-;;;;:::o;54186:115::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54278:15:::1;54262:13;;:31;;;;;;;;;;;;;;;;;;54186:115:::0;:::o;51854:32::-;;;;:::o;53146:341::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53266:9:::1;;53236:26;53254:7;53236:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;53228:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;53332:15;53350:13;:11;:13::i;:::-;53332:31;;53378:9;53374:96;53397:7;53393:1;:11;53374:96;;;53426:32;53436:8;53456:1;53446:7;:11;;;;:::i;:::-;53426:9;:32::i;:::-;53406:3;;;;;:::i;:::-;;;;53374:96;;;;53217:270;53146:341:::0;;:::o;34715:164::-;34812:4;34836:18;:25;34855:5;34836:25;;;;;;;;;;;;;;;:35;34862:8;34836:35;;;;;;;;;;;;;;;;;;;;;;;;;34829:42;;34715:164;;;;:::o;2632:192::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2741:1:::1;2721:22;;:8;:22;;;;2713:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2797:19;2807:8;2797:9;:19::i;:::-;2632:192:::0;:::o;54440:114::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54537:9:::1;54517:17;:29;;;;54440:114:::0;:::o;31552:305::-;31654:4;31706:25;31691:40;;;:11;:40;;;;:105;;;;31763:33;31748:48;;;:11;:48;;;;31691:105;:158;;;;31813:36;31837:11;31813:23;:36::i;:::-;31691:158;31671:178;;31552:305;;;:::o;37450:127::-;37515:4;37567:1;37539:30;;:7;:16;37547:7;37539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37532:37;;37450:127;;;:::o;604:98::-;657:7;684:10;677:17;;604:98;:::o;41432:174::-;41534:2;41507:15;:24;41523:7;41507:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41590:7;41586:2;41552:46;;41561:23;41576:7;41561:14;:23::i;:::-;41552:46;;;;;;;;;;;;41432:174;;:::o;37744:348::-;37837:4;37862:16;37870:7;37862;:16::i;:::-;37854:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37938:13;37954:23;37969:7;37954:14;:23::i;:::-;37938:39;;38007:5;37996:16;;:7;:16;;;:51;;;;38040:7;38016:31;;:20;38028:7;38016:11;:20::i;:::-;:31;;;37996:51;:87;;;;38051:32;38068:5;38075:7;38051:16;:32::i;:::-;37996:87;37988:96;;;37744:348;;;;:::o;40736:578::-;40895:4;40868:31;;:23;40883:7;40868:14;:23::i;:::-;:31;;;40860:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40978:1;40964:16;;:2;:16;;;;40956:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41034:39;41055:4;41061:2;41065:7;41034:20;:39::i;:::-;41138:29;41155:1;41159:7;41138:8;:29::i;:::-;41199:1;41180:9;:15;41190:4;41180:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41228:1;41211:9;:13;41221:2;41211:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41259:2;41240:7;:16;41248:7;41240:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41298:7;41294:2;41279:27;;41288:4;41279:27;;;;;;;;;;;;40736:578;;;:::o;6695:98::-;6753:7;6784:1;6780;:5;;;;:::i;:::-;6773:12;;6695:98;;;;:::o;2832:173::-;2888:16;2907:6;;;;;;;;;;;2888:25;;2933:8;2924:6;;:17;;;;;;;;;;;;;;;;;;2988:8;2957:40;;2978:8;2957:40;;;;;;;;;;;;2877:128;2832:173;:::o;5558:98::-;5616:7;5647:1;5643;:5;;;;:::i;:::-;5636:12;;5558:98;;;;:::o;6296:::-;6354:7;6385:1;6381;:5;;;;:::i;:::-;6374:12;;6296:98;;;;:::o;38434:110::-;38510:26;38520:2;38524:7;38510:26;;;;;;;;;;;;:9;:26::i;:::-;38434:110;;:::o;36822:315::-;36979:28;36989:4;36995:2;36999:7;36979:9;:28::i;:::-;37026:48;37049:4;37055:2;37059:7;37068:5;37026:22;:48::i;:::-;37018:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36822:315;;;;:::o;24908:723::-;24964:13;25194:1;25185:5;:10;25181:53;;;25212:10;;;;;;;;;;;;;;;;;;;;;25181:53;25244:12;25259:5;25244:20;;25275:14;25300:78;25315:1;25307:4;:9;25300:78;;25333:8;;;;;:::i;:::-;;;;25364:2;25356:10;;;;;:::i;:::-;;;25300:78;;;25388:19;25420:6;25410:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25388:39;;25438:154;25454:1;25445:5;:10;25438:154;;25482:1;25472:11;;;;;:::i;:::-;;;25549:2;25541:5;:10;;;;:::i;:::-;25528:2;:24;;;;:::i;:::-;25515:39;;25498:6;25505;25498:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;25578:2;25569:11;;;;;:::i;:::-;;;25438:154;;;25616:6;25602:21;;;;;24908:723;;;;:::o;30159:157::-;30244:4;30283:25;30268:40;;;:11;:40;;;;30261:47;;30159:157;;;:::o;47043:589::-;47187:45;47214:4;47220:2;47224:7;47187:26;:45::i;:::-;47265:1;47249:18;;:4;:18;;;47245:187;;;47284:40;47316:7;47284:31;:40::i;:::-;47245:187;;;47354:2;47346:10;;:4;:10;;;47342:90;;47373:47;47406:4;47412:7;47373:32;:47::i;:::-;47342:90;47245:187;47460:1;47446:16;;:2;:16;;;47442:183;;;47479:45;47516:7;47479:36;:45::i;:::-;47442:183;;;47552:4;47546:10;;:2;:10;;;47542:83;;47573:40;47601:2;47605:7;47573:27;:40::i;:::-;47542:83;47442:183;47043:589;;;:::o;38771:321::-;38901:18;38907:2;38911:7;38901:5;:18::i;:::-;38952:54;38983:1;38987:2;38991:7;39000:5;38952:22;:54::i;:::-;38930:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38771:321;;;:::o;42171:799::-;42326:4;42347:15;:2;:13;;;:15::i;:::-;42343:620;;;42399:2;42383:36;;;42420:12;:10;:12::i;:::-;42434:4;42440:7;42449:5;42383:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42379:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42642:1;42625:6;:13;:18;42621:272;;;42668:60;;;;;;;;;;:::i;:::-;;;;;;;;42621:272;42843:6;42837:13;42828:6;42824:2;42820:15;42813:38;42379:529;42516:41;;;42506:51;;;:6;:51;;;;42499:58;;;;;42343:620;42947:4;42940:11;;42171:799;;;;;;;:::o;43542:126::-;;;;:::o;48355:164::-;48459:10;:17;;;;48432:15;:24;48448:7;48432:24;;;;;;;;;;;:44;;;;48487:10;48503:7;48487:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48355:164;:::o;49146:988::-;49412:22;49462:1;49437:22;49454:4;49437:16;:22::i;:::-;:26;;;;:::i;:::-;49412:51;;49474:18;49495:17;:26;49513:7;49495:26;;;;;;;;;;;;49474:47;;49642:14;49628:10;:28;49624:328;;49673:19;49695:12;:18;49708:4;49695:18;;;;;;;;;;;;;;;:34;49714:14;49695:34;;;;;;;;;;;;49673:56;;49779:11;49746:12;:18;49759:4;49746:18;;;;;;;;;;;;;;;:30;49765:10;49746:30;;;;;;;;;;;:44;;;;49896:10;49863:17;:30;49881:11;49863:30;;;;;;;;;;;:43;;;;49658:294;49624:328;50048:17;:26;50066:7;50048:26;;;;;;;;;;;50041:33;;;50092:12;:18;50105:4;50092:18;;;;;;;;;;;;;;;:34;50111:14;50092:34;;;;;;;;;;;50085:41;;;49227:907;;49146:988;;:::o;50429:1079::-;50682:22;50727:1;50707:10;:17;;;;:21;;;;:::i;:::-;50682:46;;50739:18;50760:15;:24;50776:7;50760:24;;;;;;;;;;;;50739:45;;51111:19;51133:10;51144:14;51133:26;;;;;;;;:::i;:::-;;;;;;;;;;51111:48;;51197:11;51172:10;51183;51172:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;51308:10;51277:15;:28;51293:11;51277:28;;;;;;;;;;;:41;;;;51449:15;:24;51465:7;51449:24;;;;;;;;;;;51442:31;;;51484:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50500:1008;;;50429:1079;:::o;47933:221::-;48018:14;48035:20;48052:2;48035:16;:20::i;:::-;48018:37;;48093:7;48066:12;:16;48079:2;48066:16;;;;;;;;;;;;;;;:24;48083:6;48066:24;;;;;;;;;;;:34;;;;48140:6;48111:17;:26;48129:7;48111:26;;;;;;;;;;;:35;;;;48007:147;47933:221;;:::o;39428:382::-;39522:1;39508:16;;:2;:16;;;;39500:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39581:16;39589:7;39581;:16::i;:::-;39580:17;39572:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39643:45;39672:1;39676:2;39680:7;39643:20;:45::i;:::-;39718:1;39701:9;:13;39711:2;39701:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39749:2;39730:7;:16;39738:7;39730:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39794:7;39790:2;39769:33;;39786:1;39769:33;;;;;;;;;;;;39428:382;;:::o;17349:387::-;17409:4;17617:12;17684:7;17672:20;17664:28;;17727:1;17720:4;:8;17713:15;;;17349:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:329::-;2479:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:119;;;2534:79;;:::i;:::-;2496:119;2654:1;2679:53;2724:7;2715:6;2704:9;2700:22;2679:53;:::i;:::-;2669:63;;2625:117;2420:329;;;;:::o;2755:474::-;2823:6;2831;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:53;3076:7;3067:6;3056:9;3052:22;3031:53;:::i;:::-;3021:63;;2977:117;3133:2;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3104:118;2755:474;;;;;:::o;3235:619::-;3312:6;3320;3328;3377:2;3365:9;3356:7;3352:23;3348:32;3345:119;;;3383:79;;:::i;:::-;3345:119;3503:1;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3474:117;3630:2;3656:53;3701:7;3692:6;3681:9;3677:22;3656:53;:::i;:::-;3646:63;;3601:118;3758:2;3784:53;3829:7;3820:6;3809:9;3805:22;3784:53;:::i;:::-;3774:63;;3729:118;3235:619;;;;;:::o;3860:943::-;3955:6;3963;3971;3979;4028:3;4016:9;4007:7;4003:23;3999:33;3996:120;;;4035:79;;:::i;:::-;3996:120;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4410:2;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4381:118;4566:2;4555:9;4551:18;4538:32;4597:18;4589:6;4586:30;4583:117;;;4619:79;;:::i;:::-;4583:117;4724:62;4778:7;4769:6;4758:9;4754:22;4724:62;:::i;:::-;4714:72;;4509:287;3860:943;;;;;;;:::o;4809:468::-;4874:6;4882;4931:2;4919:9;4910:7;4906:23;4902:32;4899:119;;;4937:79;;:::i;:::-;4899:119;5057:1;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5028:117;5184:2;5210:50;5252:7;5243:6;5232:9;5228:22;5210:50;:::i;:::-;5200:60;;5155:115;4809:468;;;;;:::o;5283:474::-;5351:6;5359;5408:2;5396:9;5387:7;5383:23;5379:32;5376:119;;;5414:79;;:::i;:::-;5376:119;5534:1;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5505:117;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5283:474;;;;;:::o;5763:323::-;5819:6;5868:2;5856:9;5847:7;5843:23;5839:32;5836:119;;;5874:79;;:::i;:::-;5836:119;5994:1;6019:50;6061:7;6052:6;6041:9;6037:22;6019:50;:::i;:::-;6009:60;;5965:114;5763:323;;;;:::o;6092:345::-;6159:6;6208:2;6196:9;6187:7;6183:23;6179:32;6176:119;;;6214:79;;:::i;:::-;6176:119;6334:1;6359:61;6412:7;6403:6;6392:9;6388:22;6359:61;:::i;:::-;6349:71;;6305:125;6092:345;;;;:::o;6443:327::-;6501:6;6550:2;6538:9;6529:7;6525:23;6521:32;6518:119;;;6556:79;;:::i;:::-;6518:119;6676:1;6701:52;6745:7;6736:6;6725:9;6721:22;6701:52;:::i;:::-;6691:62;;6647:116;6443:327;;;;:::o;6776:349::-;6845:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:119;;;6900:79;;:::i;:::-;6862:119;7020:1;7045:63;7100:7;7091:6;7080:9;7076:22;7045:63;:::i;:::-;7035:73;;6991:127;6776:349;;;;:::o;7131:509::-;7200:6;7249:2;7237:9;7228:7;7224:23;7220:32;7217:119;;;7255:79;;:::i;:::-;7217:119;7403:1;7392:9;7388:17;7375:31;7433:18;7425:6;7422:30;7419:117;;;7455:79;;:::i;:::-;7419:117;7560:63;7615:7;7606:6;7595:9;7591:22;7560:63;:::i;:::-;7550:73;;7346:287;7131:509;;;;:::o;7646:329::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7851:117;7646:329;;;;:::o;7981:118::-;8068:24;8086:5;8068:24;:::i;:::-;8063:3;8056:37;7981:118;;:::o;8105:109::-;8186:21;8201:5;8186:21;:::i;:::-;8181:3;8174:34;8105:109;;:::o;8220:360::-;8306:3;8334:38;8366:5;8334:38;:::i;:::-;8388:70;8451:6;8446:3;8388:70;:::i;:::-;8381:77;;8467:52;8512:6;8507:3;8500:4;8493:5;8489:16;8467:52;:::i;:::-;8544:29;8566:6;8544:29;:::i;:::-;8539:3;8535:39;8528:46;;8310:270;8220:360;;;;:::o;8586:364::-;8674:3;8702:39;8735:5;8702:39;:::i;:::-;8757:71;8821:6;8816:3;8757:71;:::i;:::-;8750:78;;8837:52;8882:6;8877:3;8870:4;8863:5;8859:16;8837:52;:::i;:::-;8914:29;8936:6;8914:29;:::i;:::-;8909:3;8905:39;8898:46;;8678:272;8586:364;;;;:::o;8956:377::-;9062:3;9090:39;9123:5;9090:39;:::i;:::-;9145:89;9227:6;9222:3;9145:89;:::i;:::-;9138:96;;9243:52;9288:6;9283:3;9276:4;9269:5;9265:16;9243:52;:::i;:::-;9320:6;9315:3;9311:16;9304:23;;9066:267;8956:377;;;;:::o;9363:845::-;9466:3;9503:5;9497:12;9532:36;9558:9;9532:36;:::i;:::-;9584:89;9666:6;9661:3;9584:89;:::i;:::-;9577:96;;9704:1;9693:9;9689:17;9720:1;9715:137;;;;9866:1;9861:341;;;;9682:520;;9715:137;9799:4;9795:9;9784;9780:25;9775:3;9768:38;9835:6;9830:3;9826:16;9819:23;;9715:137;;9861:341;9928:38;9960:5;9928:38;:::i;:::-;9988:1;10002:154;10016:6;10013:1;10010:13;10002:154;;;10090:7;10084:14;10080:1;10075:3;10071:11;10064:35;10140:1;10131:7;10127:15;10116:26;;10038:4;10035:1;10031:12;10026:17;;10002:154;;;10185:6;10180:3;10176:16;10169:23;;9868:334;;9682:520;;9470:738;;9363:845;;;;:::o;10214:366::-;10356:3;10377:67;10441:2;10436:3;10377:67;:::i;:::-;10370:74;;10453:93;10542:3;10453:93;:::i;:::-;10571:2;10566:3;10562:12;10555:19;;10214:366;;;:::o;10586:::-;10728:3;10749:67;10813:2;10808:3;10749:67;:::i;:::-;10742:74;;10825:93;10914:3;10825:93;:::i;:::-;10943:2;10938:3;10934:12;10927:19;;10586:366;;;:::o;10958:::-;11100:3;11121:67;11185:2;11180:3;11121:67;:::i;:::-;11114:74;;11197:93;11286:3;11197:93;:::i;:::-;11315:2;11310:3;11306:12;11299:19;;10958:366;;;:::o;11330:::-;11472:3;11493:67;11557:2;11552:3;11493:67;:::i;:::-;11486:74;;11569:93;11658:3;11569:93;:::i;:::-;11687:2;11682:3;11678:12;11671:19;;11330:366;;;:::o;11702:::-;11844:3;11865:67;11929:2;11924:3;11865:67;:::i;:::-;11858:74;;11941:93;12030:3;11941:93;:::i;:::-;12059:2;12054:3;12050:12;12043:19;;11702:366;;;:::o;12074:::-;12216:3;12237:67;12301:2;12296:3;12237:67;:::i;:::-;12230:74;;12313:93;12402:3;12313:93;:::i;:::-;12431:2;12426:3;12422:12;12415:19;;12074:366;;;:::o;12446:::-;12588:3;12609:67;12673:2;12668:3;12609:67;:::i;:::-;12602:74;;12685:93;12774:3;12685:93;:::i;:::-;12803:2;12798:3;12794:12;12787:19;;12446:366;;;:::o;12818:::-;12960:3;12981:67;13045:2;13040:3;12981:67;:::i;:::-;12974:74;;13057:93;13146:3;13057:93;:::i;:::-;13175:2;13170:3;13166:12;13159:19;;12818:366;;;:::o;13190:::-;13332:3;13353:67;13417:2;13412:3;13353:67;:::i;:::-;13346:74;;13429:93;13518:3;13429:93;:::i;:::-;13547:2;13542:3;13538:12;13531:19;;13190:366;;;:::o;13562:::-;13704:3;13725:67;13789:2;13784:3;13725:67;:::i;:::-;13718:74;;13801:93;13890:3;13801:93;:::i;:::-;13919:2;13914:3;13910:12;13903:19;;13562:366;;;:::o;13934:::-;14076:3;14097:67;14161:2;14156:3;14097:67;:::i;:::-;14090:74;;14173:93;14262:3;14173:93;:::i;:::-;14291:2;14286:3;14282:12;14275:19;;13934:366;;;:::o;14306:::-;14448:3;14469:67;14533:2;14528:3;14469:67;:::i;:::-;14462:74;;14545:93;14634:3;14545:93;:::i;:::-;14663:2;14658:3;14654:12;14647:19;;14306:366;;;:::o;14678:::-;14820:3;14841:67;14905:2;14900:3;14841:67;:::i;:::-;14834:74;;14917:93;15006:3;14917:93;:::i;:::-;15035:2;15030:3;15026:12;15019:19;;14678:366;;;:::o;15050:::-;15192:3;15213:67;15277:2;15272:3;15213:67;:::i;:::-;15206:74;;15289:93;15378:3;15289:93;:::i;:::-;15407:2;15402:3;15398:12;15391:19;;15050:366;;;:::o;15422:::-;15564:3;15585:67;15649:2;15644:3;15585:67;:::i;:::-;15578:74;;15661:93;15750:3;15661:93;:::i;:::-;15779:2;15774:3;15770:12;15763:19;;15422:366;;;:::o;15794:::-;15936:3;15957:67;16021:2;16016:3;15957:67;:::i;:::-;15950:74;;16033:93;16122:3;16033:93;:::i;:::-;16151:2;16146:3;16142:12;16135:19;;15794:366;;;:::o;16166:400::-;16326:3;16347:84;16429:1;16424:3;16347:84;:::i;:::-;16340:91;;16440:93;16529:3;16440:93;:::i;:::-;16558:1;16553:3;16549:11;16542:18;;16166:400;;;:::o;16572:366::-;16714:3;16735:67;16799:2;16794:3;16735:67;:::i;:::-;16728:74;;16811:93;16900:3;16811:93;:::i;:::-;16929:2;16924:3;16920:12;16913:19;;16572:366;;;:::o;16944:::-;17086:3;17107:67;17171:2;17166:3;17107:67;:::i;:::-;17100:74;;17183:93;17272:3;17183:93;:::i;:::-;17301:2;17296:3;17292:12;17285:19;;16944:366;;;:::o;17316:::-;17458:3;17479:67;17543:2;17538:3;17479:67;:::i;:::-;17472:74;;17555:93;17644:3;17555:93;:::i;:::-;17673:2;17668:3;17664:12;17657:19;;17316:366;;;:::o;17688:::-;17830:3;17851:67;17915:2;17910:3;17851:67;:::i;:::-;17844:74;;17927:93;18016:3;17927:93;:::i;:::-;18045:2;18040:3;18036:12;18029:19;;17688:366;;;:::o;18060:::-;18202:3;18223:67;18287:2;18282:3;18223:67;:::i;:::-;18216:74;;18299:93;18388:3;18299:93;:::i;:::-;18417:2;18412:3;18408:12;18401:19;;18060:366;;;:::o;18432:::-;18574:3;18595:67;18659:2;18654:3;18595:67;:::i;:::-;18588:74;;18671:93;18760:3;18671:93;:::i;:::-;18789:2;18784:3;18780:12;18773:19;;18432:366;;;:::o;18804:::-;18946:3;18967:67;19031:2;19026:3;18967:67;:::i;:::-;18960:74;;19043:93;19132:3;19043:93;:::i;:::-;19161:2;19156:3;19152:12;19145:19;;18804:366;;;:::o;19176:::-;19318:3;19339:67;19403:2;19398:3;19339:67;:::i;:::-;19332:74;;19415:93;19504:3;19415:93;:::i;:::-;19533:2;19528:3;19524:12;19517:19;;19176:366;;;:::o;19548:118::-;19635:24;19653:5;19635:24;:::i;:::-;19630:3;19623:37;19548:118;;:::o;19672:695::-;19950:3;19972:92;20060:3;20051:6;19972:92;:::i;:::-;19965:99;;20081:95;20172:3;20163:6;20081:95;:::i;:::-;20074:102;;20193:148;20337:3;20193:148;:::i;:::-;20186:155;;20358:3;20351:10;;19672:695;;;;;:::o;20373:222::-;20466:4;20504:2;20493:9;20489:18;20481:26;;20517:71;20585:1;20574:9;20570:17;20561:6;20517:71;:::i;:::-;20373:222;;;;:::o;20601:640::-;20796:4;20834:3;20823:9;20819:19;20811:27;;20848:71;20916:1;20905:9;20901:17;20892:6;20848:71;:::i;:::-;20929:72;20997:2;20986:9;20982:18;20973:6;20929:72;:::i;:::-;21011;21079:2;21068:9;21064:18;21055:6;21011:72;:::i;:::-;21130:9;21124:4;21120:20;21115:2;21104:9;21100:18;21093:48;21158:76;21229:4;21220:6;21158:76;:::i;:::-;21150:84;;20601:640;;;;;;;:::o;21247:332::-;21368:4;21406:2;21395:9;21391:18;21383:26;;21419:71;21487:1;21476:9;21472:17;21463:6;21419:71;:::i;:::-;21500:72;21568:2;21557:9;21553:18;21544:6;21500:72;:::i;:::-;21247:332;;;;;:::o;21585:210::-;21672:4;21710:2;21699:9;21695:18;21687:26;;21723:65;21785:1;21774:9;21770:17;21761:6;21723:65;:::i;:::-;21585:210;;;;:::o;21801:313::-;21914:4;21952:2;21941:9;21937:18;21929:26;;22001:9;21995:4;21991:20;21987:1;21976:9;21972:17;21965:47;22029:78;22102:4;22093:6;22029:78;:::i;:::-;22021:86;;21801:313;;;;:::o;22120:419::-;22286:4;22324:2;22313:9;22309:18;22301:26;;22373:9;22367:4;22363:20;22359:1;22348:9;22344:17;22337:47;22401:131;22527:4;22401:131;:::i;:::-;22393:139;;22120:419;;;:::o;22545:::-;22711:4;22749:2;22738:9;22734:18;22726:26;;22798:9;22792:4;22788:20;22784:1;22773:9;22769:17;22762:47;22826:131;22952:4;22826:131;:::i;:::-;22818:139;;22545:419;;;:::o;22970:::-;23136:4;23174:2;23163:9;23159:18;23151:26;;23223:9;23217:4;23213:20;23209:1;23198:9;23194:17;23187:47;23251:131;23377:4;23251:131;:::i;:::-;23243:139;;22970:419;;;:::o;23395:::-;23561:4;23599:2;23588:9;23584:18;23576:26;;23648:9;23642:4;23638:20;23634:1;23623:9;23619:17;23612:47;23676:131;23802:4;23676:131;:::i;:::-;23668:139;;23395:419;;;:::o;23820:::-;23986:4;24024:2;24013:9;24009:18;24001:26;;24073:9;24067:4;24063:20;24059:1;24048:9;24044:17;24037:47;24101:131;24227:4;24101:131;:::i;:::-;24093:139;;23820:419;;;:::o;24245:::-;24411:4;24449:2;24438:9;24434:18;24426:26;;24498:9;24492:4;24488:20;24484:1;24473:9;24469:17;24462:47;24526:131;24652:4;24526:131;:::i;:::-;24518:139;;24245:419;;;:::o;24670:::-;24836:4;24874:2;24863:9;24859:18;24851:26;;24923:9;24917:4;24913:20;24909:1;24898:9;24894:17;24887:47;24951:131;25077:4;24951:131;:::i;:::-;24943:139;;24670:419;;;:::o;25095:::-;25261:4;25299:2;25288:9;25284:18;25276:26;;25348:9;25342:4;25338:20;25334:1;25323:9;25319:17;25312:47;25376:131;25502:4;25376:131;:::i;:::-;25368:139;;25095:419;;;:::o;25520:::-;25686:4;25724:2;25713:9;25709:18;25701:26;;25773:9;25767:4;25763:20;25759:1;25748:9;25744:17;25737:47;25801:131;25927:4;25801:131;:::i;:::-;25793:139;;25520:419;;;:::o;25945:::-;26111:4;26149:2;26138:9;26134:18;26126:26;;26198:9;26192:4;26188:20;26184:1;26173:9;26169:17;26162:47;26226:131;26352:4;26226:131;:::i;:::-;26218:139;;25945:419;;;:::o;26370:::-;26536:4;26574:2;26563:9;26559:18;26551:26;;26623:9;26617:4;26613:20;26609:1;26598:9;26594:17;26587:47;26651:131;26777:4;26651:131;:::i;:::-;26643:139;;26370:419;;;:::o;26795:::-;26961:4;26999:2;26988:9;26984:18;26976:26;;27048:9;27042:4;27038:20;27034:1;27023:9;27019:17;27012:47;27076:131;27202:4;27076:131;:::i;:::-;27068:139;;26795:419;;;:::o;27220:::-;27386:4;27424:2;27413:9;27409:18;27401:26;;27473:9;27467:4;27463:20;27459:1;27448:9;27444:17;27437:47;27501:131;27627:4;27501:131;:::i;:::-;27493:139;;27220:419;;;:::o;27645:::-;27811:4;27849:2;27838:9;27834:18;27826:26;;27898:9;27892:4;27888:20;27884:1;27873:9;27869:17;27862:47;27926:131;28052:4;27926:131;:::i;:::-;27918:139;;27645:419;;;:::o;28070:::-;28236:4;28274:2;28263:9;28259:18;28251:26;;28323:9;28317:4;28313:20;28309:1;28298:9;28294:17;28287:47;28351:131;28477:4;28351:131;:::i;:::-;28343:139;;28070:419;;;:::o;28495:::-;28661:4;28699:2;28688:9;28684:18;28676:26;;28748:9;28742:4;28738:20;28734:1;28723:9;28719:17;28712:47;28776:131;28902:4;28776:131;:::i;:::-;28768:139;;28495:419;;;:::o;28920:::-;29086:4;29124:2;29113:9;29109:18;29101:26;;29173:9;29167:4;29163:20;29159:1;29148:9;29144:17;29137:47;29201:131;29327:4;29201:131;:::i;:::-;29193:139;;28920:419;;;:::o;29345:::-;29511:4;29549:2;29538:9;29534:18;29526:26;;29598:9;29592:4;29588:20;29584:1;29573:9;29569:17;29562:47;29626:131;29752:4;29626:131;:::i;:::-;29618:139;;29345:419;;;:::o;29770:::-;29936:4;29974:2;29963:9;29959:18;29951:26;;30023:9;30017:4;30013:20;30009:1;29998:9;29994:17;29987:47;30051:131;30177:4;30051:131;:::i;:::-;30043:139;;29770:419;;;:::o;30195:::-;30361:4;30399:2;30388:9;30384:18;30376:26;;30448:9;30442:4;30438:20;30434:1;30423:9;30419:17;30412:47;30476:131;30602:4;30476:131;:::i;:::-;30468:139;;30195:419;;;:::o;30620:::-;30786:4;30824:2;30813:9;30809:18;30801:26;;30873:9;30867:4;30863:20;30859:1;30848:9;30844:17;30837:47;30901:131;31027:4;30901:131;:::i;:::-;30893:139;;30620:419;;;:::o;31045:::-;31211:4;31249:2;31238:9;31234:18;31226:26;;31298:9;31292:4;31288:20;31284:1;31273:9;31269:17;31262:47;31326:131;31452:4;31326:131;:::i;:::-;31318:139;;31045:419;;;:::o;31470:::-;31636:4;31674:2;31663:9;31659:18;31651:26;;31723:9;31717:4;31713:20;31709:1;31698:9;31694:17;31687:47;31751:131;31877:4;31751:131;:::i;:::-;31743:139;;31470:419;;;:::o;31895:::-;32061:4;32099:2;32088:9;32084:18;32076:26;;32148:9;32142:4;32138:20;32134:1;32123:9;32119:17;32112:47;32176:131;32302:4;32176:131;:::i;:::-;32168:139;;31895:419;;;:::o;32320:222::-;32413:4;32451:2;32440:9;32436:18;32428:26;;32464:71;32532:1;32521:9;32517:17;32508:6;32464:71;:::i;:::-;32320:222;;;;:::o;32548:129::-;32582:6;32609:20;;:::i;:::-;32599:30;;32638:33;32666:4;32658:6;32638:33;:::i;:::-;32548:129;;;:::o;32683:75::-;32716:6;32749:2;32743:9;32733:19;;32683:75;:::o;32764:307::-;32825:4;32915:18;32907:6;32904:30;32901:56;;;32937:18;;:::i;:::-;32901:56;32975:29;32997:6;32975:29;:::i;:::-;32967:37;;33059:4;33053;33049:15;33041:23;;32764:307;;;:::o;33077:308::-;33139:4;33229:18;33221:6;33218:30;33215:56;;;33251:18;;:::i;:::-;33215:56;33289:29;33311:6;33289:29;:::i;:::-;33281:37;;33373:4;33367;33363:15;33355:23;;33077:308;;;:::o;33391:141::-;33440:4;33463:3;33455:11;;33486:3;33483:1;33476:14;33520:4;33517:1;33507:18;33499:26;;33391:141;;;:::o;33538:98::-;33589:6;33623:5;33617:12;33607:22;;33538:98;;;:::o;33642:99::-;33694:6;33728:5;33722:12;33712:22;;33642:99;;;:::o;33747:168::-;33830:11;33864:6;33859:3;33852:19;33904:4;33899:3;33895:14;33880:29;;33747:168;;;;:::o;33921:169::-;34005:11;34039:6;34034:3;34027:19;34079:4;34074:3;34070:14;34055:29;;33921:169;;;;:::o;34096:148::-;34198:11;34235:3;34220:18;;34096:148;;;;:::o;34250:305::-;34290:3;34309:20;34327:1;34309:20;:::i;:::-;34304:25;;34343:20;34361:1;34343:20;:::i;:::-;34338:25;;34497:1;34429:66;34425:74;34422:1;34419:81;34416:107;;;34503:18;;:::i;:::-;34416:107;34547:1;34544;34540:9;34533:16;;34250:305;;;;:::o;34561:185::-;34601:1;34618:20;34636:1;34618:20;:::i;:::-;34613:25;;34652:20;34670:1;34652:20;:::i;:::-;34647:25;;34691:1;34681:35;;34696:18;;:::i;:::-;34681:35;34738:1;34735;34731:9;34726:14;;34561:185;;;;:::o;34752:348::-;34792:7;34815:20;34833:1;34815:20;:::i;:::-;34810:25;;34849:20;34867:1;34849:20;:::i;:::-;34844:25;;35037:1;34969:66;34965:74;34962:1;34959:81;34954:1;34947:9;34940:17;34936:105;34933:131;;;35044:18;;:::i;:::-;34933:131;35092:1;35089;35085:9;35074:20;;34752:348;;;;:::o;35106:191::-;35146:4;35166:20;35184:1;35166:20;:::i;:::-;35161:25;;35200:20;35218:1;35200:20;:::i;:::-;35195:25;;35239:1;35236;35233:8;35230:34;;;35244:18;;:::i;:::-;35230:34;35289:1;35286;35282:9;35274:17;;35106:191;;;;:::o;35303:96::-;35340:7;35369:24;35387:5;35369:24;:::i;:::-;35358:35;;35303:96;;;:::o;35405:90::-;35439:7;35482:5;35475:13;35468:21;35457:32;;35405:90;;;:::o;35501:149::-;35537:7;35577:66;35570:5;35566:78;35555:89;;35501:149;;;:::o;35656:126::-;35693:7;35733:42;35726:5;35722:54;35711:65;;35656:126;;;:::o;35788:77::-;35825:7;35854:5;35843:16;;35788:77;;;:::o;35871:154::-;35955:6;35950:3;35945;35932:30;36017:1;36008:6;36003:3;35999:16;35992:27;35871:154;;;:::o;36031:307::-;36099:1;36109:113;36123:6;36120:1;36117:13;36109:113;;;36208:1;36203:3;36199:11;36193:18;36189:1;36184:3;36180:11;36173:39;36145:2;36142:1;36138:10;36133:15;;36109:113;;;36240:6;36237:1;36234:13;36231:101;;;36320:1;36311:6;36306:3;36302:16;36295:27;36231:101;36080:258;36031:307;;;:::o;36344:320::-;36388:6;36425:1;36419:4;36415:12;36405:22;;36472:1;36466:4;36462:12;36493:18;36483:81;;36549:4;36541:6;36537:17;36527:27;;36483:81;36611:2;36603:6;36600:14;36580:18;36577:38;36574:84;;;36630:18;;:::i;:::-;36574:84;36395:269;36344:320;;;:::o;36670:281::-;36753:27;36775:4;36753:27;:::i;:::-;36745:6;36741:40;36883:6;36871:10;36868:22;36847:18;36835:10;36832:34;36829:62;36826:88;;;36894:18;;:::i;:::-;36826:88;36934:10;36930:2;36923:22;36713:238;36670:281;;:::o;36957:233::-;36996:3;37019:24;37037:5;37019:24;:::i;:::-;37010:33;;37065:66;37058:5;37055:77;37052:103;;;37135:18;;:::i;:::-;37052:103;37182:1;37175:5;37171:13;37164:20;;36957:233;;;:::o;37196:176::-;37228:1;37245:20;37263:1;37245:20;:::i;:::-;37240:25;;37279:20;37297:1;37279:20;:::i;:::-;37274:25;;37318:1;37308:35;;37323:18;;:::i;:::-;37308:35;37364:1;37361;37357:9;37352:14;;37196:176;;;;:::o;37378:180::-;37426:77;37423:1;37416:88;37523:4;37520:1;37513:15;37547:4;37544:1;37537:15;37564:180;37612:77;37609:1;37602:88;37709:4;37706:1;37699:15;37733:4;37730:1;37723:15;37750:180;37798:77;37795:1;37788:88;37895:4;37892:1;37885:15;37919:4;37916:1;37909:15;37936:180;37984:77;37981:1;37974:88;38081:4;38078:1;38071:15;38105:4;38102:1;38095:15;38122:180;38170:77;38167:1;38160:88;38267:4;38264:1;38257:15;38291:4;38288:1;38281:15;38308:180;38356:77;38353:1;38346:88;38453:4;38450:1;38443:15;38477:4;38474:1;38467:15;38494:117;38603:1;38600;38593:12;38617:117;38726:1;38723;38716:12;38740:117;38849:1;38846;38839:12;38863:117;38972:1;38969;38962:12;38986:102;39027:6;39078:2;39074:7;39069:2;39062:5;39058:14;39054:28;39044:38;;38986:102;;;:::o;39094:170::-;39234:22;39230:1;39222:6;39218:14;39211:46;39094:170;:::o;39270:230::-;39410:34;39406:1;39398:6;39394:14;39387:58;39479:13;39474:2;39466:6;39462:15;39455:38;39270:230;:::o;39506:237::-;39646:34;39642:1;39634:6;39630:14;39623:58;39715:20;39710:2;39702:6;39698:15;39691:45;39506:237;:::o;39749:225::-;39889:34;39885:1;39877:6;39873:14;39866:58;39958:8;39953:2;39945:6;39941:15;39934:33;39749:225;:::o;39980:178::-;40120:30;40116:1;40108:6;40104:14;40097:54;39980:178;:::o;40164:174::-;40304:26;40300:1;40292:6;40288:14;40281:50;40164:174;:::o;40344:223::-;40484:34;40480:1;40472:6;40468:14;40461:58;40553:6;40548:2;40540:6;40536:15;40529:31;40344:223;:::o;40573:175::-;40713:27;40709:1;40701:6;40697:14;40690:51;40573:175;:::o;40754:181::-;40894:33;40890:1;40882:6;40878:14;40871:57;40754:181;:::o;40941:231::-;41081:34;41077:1;41069:6;41065:14;41058:58;41150:14;41145:2;41137:6;41133:15;41126:39;40941:231;:::o;41178:179::-;41318:31;41314:1;41306:6;41302:14;41295:55;41178:179;:::o;41363:243::-;41503:34;41499:1;41491:6;41487:14;41480:58;41572:26;41567:2;41559:6;41555:15;41548:51;41363:243;:::o;41612:229::-;41752:34;41748:1;41740:6;41736:14;41729:58;41821:12;41816:2;41808:6;41804:15;41797:37;41612:229;:::o;41847:228::-;41987:34;41983:1;41975:6;41971:14;41964:58;42056:11;42051:2;42043:6;42039:15;42032:36;41847:228;:::o;42081:182::-;42221:34;42217:1;42209:6;42205:14;42198:58;42081:182;:::o;42269:231::-;42409:34;42405:1;42397:6;42393:14;42386:58;42478:14;42473:2;42465:6;42461:15;42454:39;42269:231;:::o;42506:155::-;42646:7;42642:1;42634:6;42630:14;42623:31;42506:155;:::o;42667:182::-;42807:34;42803:1;42795:6;42791:14;42784:58;42667:182;:::o;42855:228::-;42995:34;42991:1;42983:6;42979:14;42972:58;43064:11;43059:2;43051:6;43047:15;43040:36;42855:228;:::o;43089:234::-;43229:34;43225:1;43217:6;43213:14;43206:58;43298:17;43293:2;43285:6;43281:15;43274:42;43089:234;:::o;43329:169::-;43469:21;43465:1;43457:6;43453:14;43446:45;43329:169;:::o;43504:220::-;43644:34;43640:1;43632:6;43628:14;43621:58;43713:3;43708:2;43700:6;43696:15;43689:28;43504:220;:::o;43730:236::-;43870:34;43866:1;43858:6;43854:14;43847:58;43939:19;43934:2;43926:6;43922:15;43915:44;43730:236;:::o;43972:222::-;44112:34;44108:1;44100:6;44096:14;44089:58;44181:5;44176:2;44168:6;44164:15;44157:30;43972:222;:::o;44200:231::-;44340:34;44336:1;44328:6;44324:14;44317:58;44409:14;44404:2;44396:6;44392:15;44385:39;44200:231;:::o;44437:122::-;44510:24;44528:5;44510:24;:::i;:::-;44503:5;44500:35;44490:63;;44549:1;44546;44539:12;44490:63;44437:122;:::o;44565:116::-;44635:21;44650:5;44635:21;:::i;:::-;44628:5;44625:32;44615:60;;44671:1;44668;44661:12;44615:60;44565:116;:::o;44687:120::-;44759:23;44776:5;44759:23;:::i;:::-;44752:5;44749:34;44739:62;;44797:1;44794;44787:12;44739:62;44687:120;:::o;44813:122::-;44886:24;44904:5;44886:24;:::i;:::-;44879:5;44876:35;44866:63;;44925:1;44922;44915:12;44866:63;44813:122;:::o
Swarm Source
ipfs://6b3feb349293bf850febd9c431196fab4a31076a67855c9761a09adff9254134
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.