ETH Price: $2,387.75 (-0.06%)

Token

SinnersSocialClub (SSC)
 

Overview

Max Total Supply

45 SSC

Holders

28

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Ethereum Pro: Deployer 2
Balance
1 SSC
0x0fe60E55a8C0700b47d4a2663079c445Fc4A5893
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SinnersSocialClubNFT

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-14
*/

// File: @openzeppelin/contracts/utils/Counters.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol

pragma solidity ^0.8.0;


// File: @openzeppelin/contracts/utils/introspection/IERC165.sol

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

pragma solidity ^0.8.0;



// File: @openzeppelin/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).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 {}
}


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}


pragma solidity 0.8.3;

contract SinnersSocialClubNFT is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    uint16 public constant maxSupply = 6666;
    string private _baseTokenURI;
    
    uint256 public _startDate = 1629306000;

    constructor() ERC721("SinnersSocialClub", "SSC") {
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = startDate;
    }


    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

    function _baseURI() internal view override returns (string memory) {
        return _baseTokenURI;
    }

    // Get minting limit (for a single transaction) based on current token supply
    function getCurrentMintLimit() public view returns (uint8) {
        return _tokenIds.current() <= 666 ? 20 : (
            block.timestamp < _startDate ? 0 : 20
        );
    }

    // Get ether price based on current token supply
    function getCurrentPrice() public view returns (uint64) {
        return _tokenIds.current() <= 666 ? 60_000_000_000_000_000 : 80_000_000_000_000_000;
    }
    // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        require(_tokenIds.current() <= 666 || _startDate <= block.timestamp, "Sale is not open");
        require(_quantityToMint >= 1, "Must mint at least 1");
        require(
            _quantityToMint <= getCurrentMintLimit(),
            "Maximum current buy limit for individual transaction exceeded"
        );
        require(
            (_quantityToMint + totalSupply()) <= maxSupply,
            "Exceeds maximum supply"
        );
        require(
            msg.value == (getCurrentPrice() * _quantityToMint),
            "Ether submitted does not match current price"
        );

        for (uint8 i = 0; i < _quantityToMint; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }
    }
    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    // Withdraw ether from contract
    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance must be positive");
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success == true, "Failed to withdraw ether");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_startDate","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMintLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"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":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantityToMint","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_newbaseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"setStartDate","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405263611d3c90600e553480156200001957600080fd5b506040518060400160405280601181526020017f53696e6e657273536f6369616c436c75620000000000000000000000000000008152506040518060400160405280600381526020017f535343000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200009e929190620001ae565b508060019080519060200190620000b7929190620001ae565b505050620000da620000ce620000e060201b60201c565b620000e860201b60201c565b620002c3565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001bc906200025e565b90600052602060002090601f016020900481019282620001e057600085556200022c565b82601f10620001fb57805160ff19168380011785556200022c565b828001600101855582156200022c579182015b828111156200022b5782518255916020019190600101906200020e565b5b5090506200023b91906200023f565b5090565b5b808211156200025a57600081600090555060010162000240565b5090565b600060028204905060018216806200027757607f821691505b602082108114156200028e576200028d62000294565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61430a80620002d36000396000f3fe60806040526004361061019c5760003560e01c80636ecd2306116100ec578063ac8daba01161008a578063d5abeb0111610064578063d5abeb01146105b7578063e985e9c5146105e2578063eb91d37e1461061f578063f2fde38b1461064a5761019c565b8063ac8daba014610526578063b88d4fde14610551578063c87b56dd1461057a5761019c565b806382d95df5116100c657806382d95df51461047e5780638da5cb5b146104a757806395d89b41146104d2578063a22cb465146104fd5761019c565b80636ecd23061461040e57806370a082311461042a578063715018a6146104675761019c565b80632f745c591161015957806342842e0e1161013357806342842e0e146103425780634f6ccce71461036b57806355f804b3146103a85780636352211e146103d15761019c565b80632f745c59146102c3578063339181d9146103005780633ccfd60b1461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612d07565b610673565b6040516101d5919061333a565b60405180910390f35b3480156101ea57600080fd5b506101f3610685565b6040516102009190613355565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612d9a565b610717565b60405161023d91906132d3565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612ccb565b61079c565b005b34801561027b57600080fd5b506102846108b4565b60405161029191906136d2565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612bc5565b6108c1565b005b3480156102cf57600080fd5b506102ea60048036038101906102e59190612ccb565b610921565b6040516102f791906136d2565b60405180910390f35b34801561030c57600080fd5b506103156109c6565b6040516103229190613708565b60405180910390f35b34801561033757600080fd5b506103406109fb565b005b34801561034e57600080fd5b5061036960048036038101906103649190612bc5565b610b70565b005b34801561037757600080fd5b50610392600480360381019061038d9190612d9a565b610b90565b60405161039f91906136d2565b60405180910390f35b3480156103b457600080fd5b506103cf60048036038101906103ca9190612d59565b610c27565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612d9a565b610cbd565b60405161040591906132d3565b60405180910390f35b61042860048036038101906104239190612dc3565b610d6f565b005b34801561043657600080fd5b50610451600480360381019061044c9190612b60565b610f6b565b60405161045e91906136d2565b60405180910390f35b34801561047357600080fd5b5061047c611023565b005b34801561048a57600080fd5b506104a560048036038101906104a09190612d9a565b6110ab565b005b3480156104b357600080fd5b506104bc611131565b6040516104c991906132d3565b60405180910390f35b3480156104de57600080fd5b506104e761115b565b6040516104f49190613355565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612c8f565b6111ed565b005b34801561053257600080fd5b5061053b61136e565b60405161054891906136d2565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190612c14565b611374565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612d9a565b6113d6565b6040516105ae9190613355565b60405180910390f35b3480156105c357600080fd5b506105cc6113e8565b6040516105d991906136b7565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612b89565b6113ee565b604051610616919061333a565b60405180910390f35b34801561062b57600080fd5b50610634611482565b60405161064191906136ed565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612b60565b6114b3565b005b600061067e826115ab565b9050919050565b606060008054610694906139da565b80601f01602080910402602001604051908101604052809291908181526020018280546106c0906139da565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b600061072282611625565b610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890613557565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a782610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f906135f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610837611691565b73ffffffffffffffffffffffffffffffffffffffff161480610866575061086581610860611691565b6113ee565b5b6108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c906134b7565b60405180910390fd5b6108af8383611699565b505050565b6000600880549050905090565b6108d26108cc611691565b82611752565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890613677565b60405180910390fd5b61091c838383611830565b505050565b600061092c83610f6b565b821061096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613377565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600061029a6109d5600c611a8c565b11156109f357600e5442106109eb5760146109ee565b60005b6109f6565b60145b905090565b610a03611691565b73ffffffffffffffffffffffffffffffffffffffff16610a21611131565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90613577565b60405180910390fd5b60004711610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190613417565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ae0906132be565b60006040518083038185875af1925050503d8060008114610b1d576040519150601f19603f3d011682016040523d82523d6000602084013e610b22565b606091505b505090506001151581151514610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b64906135d7565b60405180910390fd5b50565b610b8b83838360405180602001604052806000815250611374565b505050565b6000610b9a6108b4565b8210610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613697565b60405180910390fd5b60088281548110610c15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610c2f611691565b73ffffffffffffffffffffffffffffffffffffffff16610c4d611131565b73ffffffffffffffffffffffffffffffffffffffff1614610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90613577565b60405180910390fd5b80600d9080519060200190610cb992919061296f565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d906134f7565b60405180910390fd5b80915050919050565b61029a610d7c600c611a8c565b111580610d8b575042600e5411155b610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190613657565b60405180910390fd5b60018160ff161015610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613637565b60405180910390fd5b610e196109c6565b60ff168160ff161115610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613437565b60405180910390fd5b611a0a61ffff16610e706108b4565b8260ff16610e7e91906137f8565b1115610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690613617565b60405180910390fd5b8060ff16610ecb611482565b610ed5919061387f565b67ffffffffffffffff163414610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613397565b60405180910390fd5b60005b8160ff168160ff161015610f6757610f3b600c611a9a565b6000610f47600c611a8c565b9050610f533382611ab0565b508080610f5f90613a86565b915050610f23565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906134d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102b611691565b73ffffffffffffffffffffffffffffffffffffffff16611049611131565b73ffffffffffffffffffffffffffffffffffffffff161461109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690613577565b60405180910390fd5b6110a96000611c7e565b565b6110b3611691565b73ffffffffffffffffffffffffffffffffffffffff166110d1611131565b73ffffffffffffffffffffffffffffffffffffffff1614611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90613577565b60405180910390fd5b80600e8190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461116a906139da565b80601f0160208091040260200160405190810160405280929190818152602001828054611196906139da565b80156111e35780601f106111b8576101008083540402835291602001916111e3565b820191906000526020600020905b8154815290600101906020018083116111c657829003601f168201915b5050505050905090565b6111f5611691565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613477565b60405180910390fd5b8060056000611270611691565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661131d611691565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611362919061333a565b60405180910390a35050565b600e5481565b61138561137f611691565b83611752565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90613677565b60405180910390fd5b6113d084848484611d44565b50505050565b60606113e182611da0565b9050919050565b611a0a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061029a611491600c611a8c565b11156114a55767011c37937e0800006114ae565b66d529ae9e8600005b905090565b6114bb611691565b73ffffffffffffffffffffffffffffffffffffffff166114d9611131565b73ffffffffffffffffffffffffffffffffffffffff161461152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690613577565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906133d7565b60405180910390fd5b6115a881611c7e565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061161e575061161d82611ef2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170c83610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061175d82611625565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613497565b60405180910390fd5b60006117a783610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061181657508373ffffffffffffffffffffffffffffffffffffffff166117fe84610717565b73ffffffffffffffffffffffffffffffffffffffff16145b80611827575061182681856113ee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185082610cbd565b73ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613597565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d90613457565b60405180910390fd5b611921838383611fd4565b61192c600082611699565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197c91906138c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d391906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790613517565b60405180910390fd5b611b2981611625565b15611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906133f7565b60405180910390fd5b611b7560008383611fd4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bc591906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d4f848484611830565b611d5b84848484611fe4565b611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906133b7565b60405180910390fd5b50505050565b6060611dab82611625565b611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190613537565b60405180910390fd5b6000600a60008481526020019081526020016000208054611e0a906139da565b80601f0160208091040260200160405190810160405280929190818152602001828054611e36906139da565b8015611e835780601f10611e5857610100808354040283529160200191611e83565b820191906000526020600020905b815481529060010190602001808311611e6657829003601f168201915b505050505090506000611e9461217b565b9050600081511415611eaa578192505050611eed565b600082511115611edf578082604051602001611ec792919061329a565b60405160208183030381529060405292505050611eed565b611ee88461220d565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fbd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fcd5750611fcc826122b4565b5b9050919050565b611fdf83838361231e565b505050565b60006120058473ffffffffffffffffffffffffffffffffffffffff16612432565b1561216e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261202e611691565b8786866040518563ffffffff1660e01b815260040161205094939291906132ee565b602060405180830381600087803b15801561206a57600080fd5b505af192505050801561209b57506040513d601f19601f820116820180604052508101906120989190612d30565b60015b61211e573d80600081146120cb576040519150601f19603f3d011682016040523d82523d6000602084013e6120d0565b606091505b50600081511415612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d906133b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612173565b600190505b949350505050565b6060600d805461218a906139da565b80601f01602080910402602001604051908101604052809291908181526020018280546121b6906139da565b80156122035780601f106121d857610100808354040283529160200191612203565b820191906000526020600020905b8154815290600101906020018083116121e657829003601f168201915b5050505050905090565b606061221882611625565b612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e906135b7565b60405180910390fd5b600061226161217b565b9050600081511161228157604051806020016040528060008152506122ac565b8061228b84612445565b60405160200161229c92919061329a565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123298383836125f2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236c57612367816125f7565b6123ab565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123aa576123a98382612640565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123ee576123e9816127ad565b61242d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461242c5761242b82826128f0565b5b5b505050565b600080823b905060008111915050919050565b6060600082141561248d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ed565b600082905060005b600082146124bf5780806124a890613a3d565b915050600a826124b8919061384e565b9150612495565b60008167ffffffffffffffff811115612501577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125335781602001600182028036833780820191505090505b5090505b600085146125e65760018261254c91906138c1565b9150600a8561255b9190613ab0565b603061256791906137f8565b60f81b8183815181106125a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125df919061384e565b9450612537565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161264d84610f6b565b61265791906138c1565b905060006007600084815260200190815260200160002054905081811461273c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127c191906138c1565b9050600060096000848152602001908152602001600020549050600060088381548110612817577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061285f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128fb83610f6b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461297b906139da565b90600052602060002090601f01602090048101928261299d57600085556129e4565b82601f106129b657805160ff19168380011785556129e4565b828001600101855582156129e4579182015b828111156129e35782518255916020019190600101906129c8565b5b5090506129f191906129f5565b5090565b5b80821115612a0e5760008160009055506001016129f6565b5090565b6000612a25612a2084613748565b613723565b905082815260208101848484011115612a3d57600080fd5b612a48848285613998565b509392505050565b6000612a63612a5e84613779565b613723565b905082815260208101848484011115612a7b57600080fd5b612a86848285613998565b509392505050565b600081359050612a9d81614261565b92915050565b600081359050612ab281614278565b92915050565b600081359050612ac78161428f565b92915050565b600081519050612adc8161428f565b92915050565b600082601f830112612af357600080fd5b8135612b03848260208601612a12565b91505092915050565b600082601f830112612b1d57600080fd5b8135612b2d848260208601612a50565b91505092915050565b600081359050612b45816142a6565b92915050565b600081359050612b5a816142bd565b92915050565b600060208284031215612b7257600080fd5b6000612b8084828501612a8e565b91505092915050565b60008060408385031215612b9c57600080fd5b6000612baa85828601612a8e565b9250506020612bbb85828601612a8e565b9150509250929050565b600080600060608486031215612bda57600080fd5b6000612be886828701612a8e565b9350506020612bf986828701612a8e565b9250506040612c0a86828701612b36565b9150509250925092565b60008060008060808587031215612c2a57600080fd5b6000612c3887828801612a8e565b9450506020612c4987828801612a8e565b9350506040612c5a87828801612b36565b925050606085013567ffffffffffffffff811115612c7757600080fd5b612c8387828801612ae2565b91505092959194509250565b60008060408385031215612ca257600080fd5b6000612cb085828601612a8e565b9250506020612cc185828601612aa3565b9150509250929050565b60008060408385031215612cde57600080fd5b6000612cec85828601612a8e565b9250506020612cfd85828601612b36565b9150509250929050565b600060208284031215612d1957600080fd5b6000612d2784828501612ab8565b91505092915050565b600060208284031215612d4257600080fd5b6000612d5084828501612acd565b91505092915050565b600060208284031215612d6b57600080fd5b600082013567ffffffffffffffff811115612d8557600080fd5b612d9184828501612b0c565b91505092915050565b600060208284031215612dac57600080fd5b6000612dba84828501612b36565b91505092915050565b600060208284031215612dd557600080fd5b6000612de384828501612b4b565b91505092915050565b612df5816138f5565b82525050565b612e0481613907565b82525050565b6000612e15826137aa565b612e1f81856137c0565b9350612e2f8185602086016139a7565b612e3881613b9d565b840191505092915050565b6000612e4e826137b5565b612e5881856137dc565b9350612e688185602086016139a7565b612e7181613b9d565b840191505092915050565b6000612e87826137b5565b612e9181856137ed565b9350612ea18185602086016139a7565b80840191505092915050565b6000612eba602b836137dc565b9150612ec582613bae565b604082019050919050565b6000612edd602c836137dc565b9150612ee882613bfd565b604082019050919050565b6000612f006032836137dc565b9150612f0b82613c4c565b604082019050919050565b6000612f236026836137dc565b9150612f2e82613c9b565b604082019050919050565b6000612f46601c836137dc565b9150612f5182613cea565b602082019050919050565b6000612f696018836137dc565b9150612f7482613d13565b602082019050919050565b6000612f8c603d836137dc565b9150612f9782613d3c565b604082019050919050565b6000612faf6024836137dc565b9150612fba82613d8b565b604082019050919050565b6000612fd26019836137dc565b9150612fdd82613dda565b602082019050919050565b6000612ff5602c836137dc565b915061300082613e03565b604082019050919050565b60006130186038836137dc565b915061302382613e52565b604082019050919050565b600061303b602a836137dc565b915061304682613ea1565b604082019050919050565b600061305e6029836137dc565b915061306982613ef0565b604082019050919050565b60006130816020836137dc565b915061308c82613f3f565b602082019050919050565b60006130a46031836137dc565b91506130af82613f68565b604082019050919050565b60006130c7602c836137dc565b91506130d282613fb7565b604082019050919050565b60006130ea6020836137dc565b91506130f582614006565b602082019050919050565b600061310d6029836137dc565b91506131188261402f565b604082019050919050565b6000613130602f836137dc565b915061313b8261407e565b604082019050919050565b60006131536018836137dc565b915061315e826140cd565b602082019050919050565b60006131766021836137dc565b9150613181826140f6565b604082019050919050565b60006131996016836137dc565b91506131a482614145565b602082019050919050565b60006131bc6014836137dc565b91506131c78261416e565b602082019050919050565b60006131df6010836137dc565b91506131ea82614197565b602082019050919050565b60006132026000836137d1565b915061320d826141c0565b600082019050919050565b60006132256031836137dc565b9150613230826141c3565b604082019050919050565b6000613248602c836137dc565b915061325382614212565b604082019050919050565b6132678161393f565b82525050565b6132768161396d565b82525050565b61328581613977565b82525050565b6132948161398b565b82525050565b60006132a68285612e7c565b91506132b28284612e7c565b91508190509392505050565b60006132c9826131f5565b9150819050919050565b60006020820190506132e86000830184612dec565b92915050565b60006080820190506133036000830187612dec565b6133106020830186612dec565b61331d604083018561326d565b818103606083015261332f8184612e0a565b905095945050505050565b600060208201905061334f6000830184612dfb565b92915050565b6000602082019050818103600083015261336f8184612e43565b905092915050565b6000602082019050818103600083015261339081612ead565b9050919050565b600060208201905081810360008301526133b081612ed0565b9050919050565b600060208201905081810360008301526133d081612ef3565b9050919050565b600060208201905081810360008301526133f081612f16565b9050919050565b6000602082019050818103600083015261341081612f39565b9050919050565b6000602082019050818103600083015261343081612f5c565b9050919050565b6000602082019050818103600083015261345081612f7f565b9050919050565b6000602082019050818103600083015261347081612fa2565b9050919050565b6000602082019050818103600083015261349081612fc5565b9050919050565b600060208201905081810360008301526134b081612fe8565b9050919050565b600060208201905081810360008301526134d08161300b565b9050919050565b600060208201905081810360008301526134f08161302e565b9050919050565b6000602082019050818103600083015261351081613051565b9050919050565b6000602082019050818103600083015261353081613074565b9050919050565b6000602082019050818103600083015261355081613097565b9050919050565b60006020820190508181036000830152613570816130ba565b9050919050565b60006020820190508181036000830152613590816130dd565b9050919050565b600060208201905081810360008301526135b081613100565b9050919050565b600060208201905081810360008301526135d081613123565b9050919050565b600060208201905081810360008301526135f081613146565b9050919050565b6000602082019050818103600083015261361081613169565b9050919050565b600060208201905081810360008301526136308161318c565b9050919050565b60006020820190508181036000830152613650816131af565b9050919050565b60006020820190508181036000830152613670816131d2565b9050919050565b6000602082019050818103600083015261369081613218565b9050919050565b600060208201905081810360008301526136b08161323b565b9050919050565b60006020820190506136cc600083018461325e565b92915050565b60006020820190506136e7600083018461326d565b92915050565b6000602082019050613702600083018461327c565b92915050565b600060208201905061371d600083018461328b565b92915050565b600061372d61373e565b90506137398282613a0c565b919050565b6000604051905090565b600067ffffffffffffffff82111561376357613762613b6e565b5b61376c82613b9d565b9050602081019050919050565b600067ffffffffffffffff82111561379457613793613b6e565b5b61379d82613b9d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138038261396d565b915061380e8361396d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561384357613842613ae1565b5b828201905092915050565b60006138598261396d565b91506138648361396d565b92508261387457613873613b10565b5b828204905092915050565b600061388a82613977565b915061389583613977565b92508167ffffffffffffffff04831182151516156138b6576138b5613ae1565b5b828202905092915050565b60006138cc8261396d565b91506138d78361396d565b9250828210156138ea576138e9613ae1565b5b828203905092915050565b60006139008261394d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156139c55780820151818401526020810190506139aa565b838111156139d4576000848401525b50505050565b600060028204905060018216806139f257607f821691505b60208210811415613a0657613a05613b3f565b5b50919050565b613a1582613b9d565b810181811067ffffffffffffffff82111715613a3457613a33613b6e565b5b80604052505050565b6000613a488261396d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7b57613a7a613ae1565b5b600182019050919050565b6000613a918261398b565b915060ff821415613aa557613aa4613ae1565b5b600182019050919050565b6000613abb8261396d565b9150613ac68361396d565b925082613ad657613ad5613b10565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772065746865720000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61426a816138f5565b811461427557600080fd5b50565b61428181613907565b811461428c57600080fd5b50565b61429881613913565b81146142a357600080fd5b50565b6142af8161396d565b81146142ba57600080fd5b50565b6142c68161398b565b81146142d157600080fd5b5056fea2646970667358221220dbb0e88fbcb50d7ddda4e8a101437d589cab4bf15c463b63da718688d3febb2964736f6c63430008030033

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80636ecd2306116100ec578063ac8daba01161008a578063d5abeb0111610064578063d5abeb01146105b7578063e985e9c5146105e2578063eb91d37e1461061f578063f2fde38b1461064a5761019c565b8063ac8daba014610526578063b88d4fde14610551578063c87b56dd1461057a5761019c565b806382d95df5116100c657806382d95df51461047e5780638da5cb5b146104a757806395d89b41146104d2578063a22cb465146104fd5761019c565b80636ecd23061461040e57806370a082311461042a578063715018a6146104675761019c565b80632f745c591161015957806342842e0e1161013357806342842e0e146103425780634f6ccce71461036b57806355f804b3146103a85780636352211e146103d15761019c565b80632f745c59146102c3578063339181d9146103005780633ccfd60b1461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612d07565b610673565b6040516101d5919061333a565b60405180910390f35b3480156101ea57600080fd5b506101f3610685565b6040516102009190613355565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612d9a565b610717565b60405161023d91906132d3565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612ccb565b61079c565b005b34801561027b57600080fd5b506102846108b4565b60405161029191906136d2565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612bc5565b6108c1565b005b3480156102cf57600080fd5b506102ea60048036038101906102e59190612ccb565b610921565b6040516102f791906136d2565b60405180910390f35b34801561030c57600080fd5b506103156109c6565b6040516103229190613708565b60405180910390f35b34801561033757600080fd5b506103406109fb565b005b34801561034e57600080fd5b5061036960048036038101906103649190612bc5565b610b70565b005b34801561037757600080fd5b50610392600480360381019061038d9190612d9a565b610b90565b60405161039f91906136d2565b60405180910390f35b3480156103b457600080fd5b506103cf60048036038101906103ca9190612d59565b610c27565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612d9a565b610cbd565b60405161040591906132d3565b60405180910390f35b61042860048036038101906104239190612dc3565b610d6f565b005b34801561043657600080fd5b50610451600480360381019061044c9190612b60565b610f6b565b60405161045e91906136d2565b60405180910390f35b34801561047357600080fd5b5061047c611023565b005b34801561048a57600080fd5b506104a560048036038101906104a09190612d9a565b6110ab565b005b3480156104b357600080fd5b506104bc611131565b6040516104c991906132d3565b60405180910390f35b3480156104de57600080fd5b506104e761115b565b6040516104f49190613355565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612c8f565b6111ed565b005b34801561053257600080fd5b5061053b61136e565b60405161054891906136d2565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190612c14565b611374565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612d9a565b6113d6565b6040516105ae9190613355565b60405180910390f35b3480156105c357600080fd5b506105cc6113e8565b6040516105d991906136b7565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612b89565b6113ee565b604051610616919061333a565b60405180910390f35b34801561062b57600080fd5b50610634611482565b60405161064191906136ed565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612b60565b6114b3565b005b600061067e826115ab565b9050919050565b606060008054610694906139da565b80601f01602080910402602001604051908101604052809291908181526020018280546106c0906139da565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b600061072282611625565b610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890613557565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a782610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f906135f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610837611691565b73ffffffffffffffffffffffffffffffffffffffff161480610866575061086581610860611691565b6113ee565b5b6108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c906134b7565b60405180910390fd5b6108af8383611699565b505050565b6000600880549050905090565b6108d26108cc611691565b82611752565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890613677565b60405180910390fd5b61091c838383611830565b505050565b600061092c83610f6b565b821061096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613377565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600061029a6109d5600c611a8c565b11156109f357600e5442106109eb5760146109ee565b60005b6109f6565b60145b905090565b610a03611691565b73ffffffffffffffffffffffffffffffffffffffff16610a21611131565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90613577565b60405180910390fd5b60004711610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190613417565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ae0906132be565b60006040518083038185875af1925050503d8060008114610b1d576040519150601f19603f3d011682016040523d82523d6000602084013e610b22565b606091505b505090506001151581151514610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b64906135d7565b60405180910390fd5b50565b610b8b83838360405180602001604052806000815250611374565b505050565b6000610b9a6108b4565b8210610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613697565b60405180910390fd5b60088281548110610c15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610c2f611691565b73ffffffffffffffffffffffffffffffffffffffff16610c4d611131565b73ffffffffffffffffffffffffffffffffffffffff1614610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90613577565b60405180910390fd5b80600d9080519060200190610cb992919061296f565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d906134f7565b60405180910390fd5b80915050919050565b61029a610d7c600c611a8c565b111580610d8b575042600e5411155b610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190613657565b60405180910390fd5b60018160ff161015610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613637565b60405180910390fd5b610e196109c6565b60ff168160ff161115610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613437565b60405180910390fd5b611a0a61ffff16610e706108b4565b8260ff16610e7e91906137f8565b1115610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690613617565b60405180910390fd5b8060ff16610ecb611482565b610ed5919061387f565b67ffffffffffffffff163414610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613397565b60405180910390fd5b60005b8160ff168160ff161015610f6757610f3b600c611a9a565b6000610f47600c611a8c565b9050610f533382611ab0565b508080610f5f90613a86565b915050610f23565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd3906134d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102b611691565b73ffffffffffffffffffffffffffffffffffffffff16611049611131565b73ffffffffffffffffffffffffffffffffffffffff161461109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109690613577565b60405180910390fd5b6110a96000611c7e565b565b6110b3611691565b73ffffffffffffffffffffffffffffffffffffffff166110d1611131565b73ffffffffffffffffffffffffffffffffffffffff1614611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90613577565b60405180910390fd5b80600e8190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461116a906139da565b80601f0160208091040260200160405190810160405280929190818152602001828054611196906139da565b80156111e35780601f106111b8576101008083540402835291602001916111e3565b820191906000526020600020905b8154815290600101906020018083116111c657829003601f168201915b5050505050905090565b6111f5611691565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613477565b60405180910390fd5b8060056000611270611691565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661131d611691565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611362919061333a565b60405180910390a35050565b600e5481565b61138561137f611691565b83611752565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90613677565b60405180910390fd5b6113d084848484611d44565b50505050565b60606113e182611da0565b9050919050565b611a0a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061029a611491600c611a8c565b11156114a55767011c37937e0800006114ae565b66d529ae9e8600005b905090565b6114bb611691565b73ffffffffffffffffffffffffffffffffffffffff166114d9611131565b73ffffffffffffffffffffffffffffffffffffffff161461152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690613577565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906133d7565b60405180910390fd5b6115a881611c7e565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061161e575061161d82611ef2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170c83610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061175d82611625565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613497565b60405180910390fd5b60006117a783610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061181657508373ffffffffffffffffffffffffffffffffffffffff166117fe84610717565b73ffffffffffffffffffffffffffffffffffffffff16145b80611827575061182681856113ee565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185082610cbd565b73ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613597565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d90613457565b60405180910390fd5b611921838383611fd4565b61192c600082611699565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197c91906138c1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119d391906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790613517565b60405180910390fd5b611b2981611625565b15611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b60906133f7565b60405180910390fd5b611b7560008383611fd4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bc591906137f8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d4f848484611830565b611d5b84848484611fe4565b611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906133b7565b60405180910390fd5b50505050565b6060611dab82611625565b611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190613537565b60405180910390fd5b6000600a60008481526020019081526020016000208054611e0a906139da565b80601f0160208091040260200160405190810160405280929190818152602001828054611e36906139da565b8015611e835780601f10611e5857610100808354040283529160200191611e83565b820191906000526020600020905b815481529060010190602001808311611e6657829003601f168201915b505050505090506000611e9461217b565b9050600081511415611eaa578192505050611eed565b600082511115611edf578082604051602001611ec792919061329a565b60405160208183030381529060405292505050611eed565b611ee88461220d565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fbd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fcd5750611fcc826122b4565b5b9050919050565b611fdf83838361231e565b505050565b60006120058473ffffffffffffffffffffffffffffffffffffffff16612432565b1561216e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261202e611691565b8786866040518563ffffffff1660e01b815260040161205094939291906132ee565b602060405180830381600087803b15801561206a57600080fd5b505af192505050801561209b57506040513d601f19601f820116820180604052508101906120989190612d30565b60015b61211e573d80600081146120cb576040519150601f19603f3d011682016040523d82523d6000602084013e6120d0565b606091505b50600081511415612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d906133b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612173565b600190505b949350505050565b6060600d805461218a906139da565b80601f01602080910402602001604051908101604052809291908181526020018280546121b6906139da565b80156122035780601f106121d857610100808354040283529160200191612203565b820191906000526020600020905b8154815290600101906020018083116121e657829003601f168201915b5050505050905090565b606061221882611625565b612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e906135b7565b60405180910390fd5b600061226161217b565b9050600081511161228157604051806020016040528060008152506122ac565b8061228b84612445565b60405160200161229c92919061329a565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6123298383836125f2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236c57612367816125f7565b6123ab565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123aa576123a98382612640565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123ee576123e9816127ad565b61242d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461242c5761242b82826128f0565b5b5b505050565b600080823b905060008111915050919050565b6060600082141561248d576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ed565b600082905060005b600082146124bf5780806124a890613a3d565b915050600a826124b8919061384e565b9150612495565b60008167ffffffffffffffff811115612501577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156125335781602001600182028036833780820191505090505b5090505b600085146125e65760018261254c91906138c1565b9150600a8561255b9190613ab0565b603061256791906137f8565b60f81b8183815181106125a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125df919061384e565b9450612537565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161264d84610f6b565b61265791906138c1565b905060006007600084815260200190815260200160002054905081811461273c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127c191906138c1565b9050600060096000848152602001908152602001600020549050600060088381548110612817577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061285f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128fb83610f6b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461297b906139da565b90600052602060002090601f01602090048101928261299d57600085556129e4565b82601f106129b657805160ff19168380011785556129e4565b828001600101855582156129e4579182015b828111156129e35782518255916020019190600101906129c8565b5b5090506129f191906129f5565b5090565b5b80821115612a0e5760008160009055506001016129f6565b5090565b6000612a25612a2084613748565b613723565b905082815260208101848484011115612a3d57600080fd5b612a48848285613998565b509392505050565b6000612a63612a5e84613779565b613723565b905082815260208101848484011115612a7b57600080fd5b612a86848285613998565b509392505050565b600081359050612a9d81614261565b92915050565b600081359050612ab281614278565b92915050565b600081359050612ac78161428f565b92915050565b600081519050612adc8161428f565b92915050565b600082601f830112612af357600080fd5b8135612b03848260208601612a12565b91505092915050565b600082601f830112612b1d57600080fd5b8135612b2d848260208601612a50565b91505092915050565b600081359050612b45816142a6565b92915050565b600081359050612b5a816142bd565b92915050565b600060208284031215612b7257600080fd5b6000612b8084828501612a8e565b91505092915050565b60008060408385031215612b9c57600080fd5b6000612baa85828601612a8e565b9250506020612bbb85828601612a8e565b9150509250929050565b600080600060608486031215612bda57600080fd5b6000612be886828701612a8e565b9350506020612bf986828701612a8e565b9250506040612c0a86828701612b36565b9150509250925092565b60008060008060808587031215612c2a57600080fd5b6000612c3887828801612a8e565b9450506020612c4987828801612a8e565b9350506040612c5a87828801612b36565b925050606085013567ffffffffffffffff811115612c7757600080fd5b612c8387828801612ae2565b91505092959194509250565b60008060408385031215612ca257600080fd5b6000612cb085828601612a8e565b9250506020612cc185828601612aa3565b9150509250929050565b60008060408385031215612cde57600080fd5b6000612cec85828601612a8e565b9250506020612cfd85828601612b36565b9150509250929050565b600060208284031215612d1957600080fd5b6000612d2784828501612ab8565b91505092915050565b600060208284031215612d4257600080fd5b6000612d5084828501612acd565b91505092915050565b600060208284031215612d6b57600080fd5b600082013567ffffffffffffffff811115612d8557600080fd5b612d9184828501612b0c565b91505092915050565b600060208284031215612dac57600080fd5b6000612dba84828501612b36565b91505092915050565b600060208284031215612dd557600080fd5b6000612de384828501612b4b565b91505092915050565b612df5816138f5565b82525050565b612e0481613907565b82525050565b6000612e15826137aa565b612e1f81856137c0565b9350612e2f8185602086016139a7565b612e3881613b9d565b840191505092915050565b6000612e4e826137b5565b612e5881856137dc565b9350612e688185602086016139a7565b612e7181613b9d565b840191505092915050565b6000612e87826137b5565b612e9181856137ed565b9350612ea18185602086016139a7565b80840191505092915050565b6000612eba602b836137dc565b9150612ec582613bae565b604082019050919050565b6000612edd602c836137dc565b9150612ee882613bfd565b604082019050919050565b6000612f006032836137dc565b9150612f0b82613c4c565b604082019050919050565b6000612f236026836137dc565b9150612f2e82613c9b565b604082019050919050565b6000612f46601c836137dc565b9150612f5182613cea565b602082019050919050565b6000612f696018836137dc565b9150612f7482613d13565b602082019050919050565b6000612f8c603d836137dc565b9150612f9782613d3c565b604082019050919050565b6000612faf6024836137dc565b9150612fba82613d8b565b604082019050919050565b6000612fd26019836137dc565b9150612fdd82613dda565b602082019050919050565b6000612ff5602c836137dc565b915061300082613e03565b604082019050919050565b60006130186038836137dc565b915061302382613e52565b604082019050919050565b600061303b602a836137dc565b915061304682613ea1565b604082019050919050565b600061305e6029836137dc565b915061306982613ef0565b604082019050919050565b60006130816020836137dc565b915061308c82613f3f565b602082019050919050565b60006130a46031836137dc565b91506130af82613f68565b604082019050919050565b60006130c7602c836137dc565b91506130d282613fb7565b604082019050919050565b60006130ea6020836137dc565b91506130f582614006565b602082019050919050565b600061310d6029836137dc565b91506131188261402f565b604082019050919050565b6000613130602f836137dc565b915061313b8261407e565b604082019050919050565b60006131536018836137dc565b915061315e826140cd565b602082019050919050565b60006131766021836137dc565b9150613181826140f6565b604082019050919050565b60006131996016836137dc565b91506131a482614145565b602082019050919050565b60006131bc6014836137dc565b91506131c78261416e565b602082019050919050565b60006131df6010836137dc565b91506131ea82614197565b602082019050919050565b60006132026000836137d1565b915061320d826141c0565b600082019050919050565b60006132256031836137dc565b9150613230826141c3565b604082019050919050565b6000613248602c836137dc565b915061325382614212565b604082019050919050565b6132678161393f565b82525050565b6132768161396d565b82525050565b61328581613977565b82525050565b6132948161398b565b82525050565b60006132a68285612e7c565b91506132b28284612e7c565b91508190509392505050565b60006132c9826131f5565b9150819050919050565b60006020820190506132e86000830184612dec565b92915050565b60006080820190506133036000830187612dec565b6133106020830186612dec565b61331d604083018561326d565b818103606083015261332f8184612e0a565b905095945050505050565b600060208201905061334f6000830184612dfb565b92915050565b6000602082019050818103600083015261336f8184612e43565b905092915050565b6000602082019050818103600083015261339081612ead565b9050919050565b600060208201905081810360008301526133b081612ed0565b9050919050565b600060208201905081810360008301526133d081612ef3565b9050919050565b600060208201905081810360008301526133f081612f16565b9050919050565b6000602082019050818103600083015261341081612f39565b9050919050565b6000602082019050818103600083015261343081612f5c565b9050919050565b6000602082019050818103600083015261345081612f7f565b9050919050565b6000602082019050818103600083015261347081612fa2565b9050919050565b6000602082019050818103600083015261349081612fc5565b9050919050565b600060208201905081810360008301526134b081612fe8565b9050919050565b600060208201905081810360008301526134d08161300b565b9050919050565b600060208201905081810360008301526134f08161302e565b9050919050565b6000602082019050818103600083015261351081613051565b9050919050565b6000602082019050818103600083015261353081613074565b9050919050565b6000602082019050818103600083015261355081613097565b9050919050565b60006020820190508181036000830152613570816130ba565b9050919050565b60006020820190508181036000830152613590816130dd565b9050919050565b600060208201905081810360008301526135b081613100565b9050919050565b600060208201905081810360008301526135d081613123565b9050919050565b600060208201905081810360008301526135f081613146565b9050919050565b6000602082019050818103600083015261361081613169565b9050919050565b600060208201905081810360008301526136308161318c565b9050919050565b60006020820190508181036000830152613650816131af565b9050919050565b60006020820190508181036000830152613670816131d2565b9050919050565b6000602082019050818103600083015261369081613218565b9050919050565b600060208201905081810360008301526136b08161323b565b9050919050565b60006020820190506136cc600083018461325e565b92915050565b60006020820190506136e7600083018461326d565b92915050565b6000602082019050613702600083018461327c565b92915050565b600060208201905061371d600083018461328b565b92915050565b600061372d61373e565b90506137398282613a0c565b919050565b6000604051905090565b600067ffffffffffffffff82111561376357613762613b6e565b5b61376c82613b9d565b9050602081019050919050565b600067ffffffffffffffff82111561379457613793613b6e565b5b61379d82613b9d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138038261396d565b915061380e8361396d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561384357613842613ae1565b5b828201905092915050565b60006138598261396d565b91506138648361396d565b92508261387457613873613b10565b5b828204905092915050565b600061388a82613977565b915061389583613977565b92508167ffffffffffffffff04831182151516156138b6576138b5613ae1565b5b828202905092915050565b60006138cc8261396d565b91506138d78361396d565b9250828210156138ea576138e9613ae1565b5b828203905092915050565b60006139008261394d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156139c55780820151818401526020810190506139aa565b838111156139d4576000848401525b50505050565b600060028204905060018216806139f257607f821691505b60208210811415613a0657613a05613b3f565b5b50919050565b613a1582613b9d565b810181811067ffffffffffffffff82111715613a3457613a33613b6e565b5b80604052505050565b6000613a488261396d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7b57613a7a613ae1565b5b600182019050919050565b6000613a918261398b565b915060ff821415613aa557613aa4613ae1565b5b600182019050919050565b6000613abb8261396d565b9150613ac68361396d565b925082613ad657613ad5613b10565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772065746865720000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61426a816138f5565b811461427557600080fd5b50565b61428181613907565b811461428c57600080fd5b50565b61429881613913565b81146142a357600080fd5b50565b6142af8161396d565b81146142ba57600080fd5b50565b6142c68161398b565b81146142d157600080fd5b5056fea2646970667358221220dbb0e88fbcb50d7ddda4e8a101437d589cab4bf15c463b63da718688d3febb2964736f6c63430008030033

Deployed Bytecode Sourcemap

46248:3210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47089:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26235:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27794:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27317:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38873:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28684:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38541:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47636:182;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49195:260;;;;;;;;;;;;;:::i;:::-;;29094:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39063:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47311:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25929:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48070:872;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25659:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3868:94;;;;;;;;;;;;;:::i;:::-;;46630:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3217:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26404:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28087:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46514:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29350:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48954:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46427:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28453:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47880:158;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4117:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47089:212;47228:4;47257:36;47281:11;47257:23;:36::i;:::-;47250:43;;47089:212;;;:::o;26235:100::-;26289:13;26322:5;26315:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26235:100;:::o;27794:221::-;27870:7;27898:16;27906:7;27898;:16::i;:::-;27890:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:15;:24;27999:7;27983:24;;;;;;;;;;;;;;;;;;;;;27976:31;;27794:221;;;:::o;27317:411::-;27398:13;27414:23;27429:7;27414:14;:23::i;:::-;27398:39;;27462:5;27456:11;;:2;:11;;;;27448:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27556:5;27540:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27565:37;27582:5;27589:12;:10;:12::i;:::-;27565:16;:37::i;:::-;27540:62;27518:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27699:21;27708:2;27712:7;27699:8;:21::i;:::-;27317:411;;;:::o;38873:113::-;38934:7;38961:10;:17;;;;38954:24;;38873:113;:::o;28684:339::-;28879:41;28898:12;:10;:12::i;:::-;28912:7;28879:18;:41::i;:::-;28871:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28987:28;28997:4;29003:2;29007:7;28987:9;:28::i;:::-;28684:339;;;:::o;38541:256::-;38638:7;38674:23;38691:5;38674:16;:23::i;:::-;38666:5;:31;38658:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38763:12;:19;38776:5;38763:19;;;;;;;;;;;;;;;:26;38783:5;38763:26;;;;;;;;;;;;38756:33;;38541:256;;;;:::o;47636:182::-;47688:5;47736:3;47713:19;:9;:17;:19::i;:::-;:26;;:97;;47780:10;;47762:15;:28;:37;;47797:2;47762:37;;;47793:1;47762:37;47713:97;;;47742:2;47713:97;47706:104;;47636:182;:::o;49195:260::-;3448:12;:10;:12::i;:::-;3437:23;;:7;:5;:7::i;:::-;:23;;;3429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49275:1:::1;49251:21;:25;49243:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49317:12;49335:10;:15;;49358:21;49335:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49316:68;;;49414:4;49403:15;;:7;:15;;;49395:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3508:1;49195:260::o:0;29094:185::-;29232:39;29249:4;29255:2;29259:7;29232:39;;;;;;;;;;;;:16;:39::i;:::-;29094:185;;;:::o;39063:233::-;39138:7;39174:30;:28;:30::i;:::-;39166:5;:38;39158:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39271:10;39282:5;39271:17;;;;;;;;;;;;;;;;;;;;;;;;39264:24;;39063:233;;;:::o;47311:120::-;3448:12;:10;:12::i;:::-;3437:23;;:7;:5;:7::i;:::-;:23;;;3429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47407:16:::1;47391:13;:32;;;;;;;;;;;;:::i;:::-;;47311:120:::0;:::o;25929:239::-;26001:7;26021:13;26037:7;:16;26045:7;26037:16;;;;;;;;;;;;;;;;;;;;;26021:32;;26089:1;26072:19;;:5;:19;;;;26064:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26155:5;26148:12;;;25929:239;;;:::o;48070:872::-;48164:3;48141:19;:9;:17;:19::i;:::-;:26;;:59;;;;48185:15;48171:10;;:29;;48141:59;48133:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;48259:1;48240:15;:20;;;;48232:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48337:21;:19;:21::i;:::-;48318:40;;:15;:40;;;;48296:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;46462:4;48480:46;;48499:13;:11;:13::i;:::-;48481:15;:31;;;;;;:::i;:::-;48480:46;;48458:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;48643:15;48623:35;;:17;:15;:17::i;:::-;:35;;;;:::i;:::-;48609:50;;:9;:50;48587:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;48749:7;48744:191;48766:15;48762:19;;:1;:19;;;48744:191;;;48803:21;:9;:19;:21::i;:::-;48841:17;48861:19;:9;:17;:19::i;:::-;48841:39;;48895:28;48901:10;48913:9;48895:5;:28::i;:::-;48744:191;48783:3;;;;;:::i;:::-;;;;48744:191;;;;48070:872;:::o;25659:208::-;25731:7;25776:1;25759:19;;:5;:19;;;;25751:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25843:9;:16;25853:5;25843:16;;;;;;;;;;;;;;;;25836:23;;25659:208;;;:::o;3868:94::-;3448:12;:10;:12::i;:::-;3437:23;;:7;:5;:7::i;:::-;:23;;;3429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3933:21:::1;3951:1;3933:9;:21::i;:::-;3868:94::o:0;46630:99::-;3448:12;:10;:12::i;:::-;3437:23;;:7;:5;:7::i;:::-;:23;;;3429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46712:9:::1;46699:10;:22;;;;46630:99:::0;:::o;3217:87::-;3263:7;3290:6;;;;;;;;;;;3283:13;;3217:87;:::o;26404:104::-;26460:13;26493:7;26486:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26404:104;:::o;28087:295::-;28202:12;:10;:12::i;:::-;28190:24;;:8;:24;;;;28182:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28302:8;28257:18;:32;28276:12;:10;:12::i;:::-;28257:32;;;;;;;;;;;;;;;:42;28290:8;28257:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28355:8;28326:48;;28341:12;:10;:12::i;:::-;28326:48;;;28365:8;28326:48;;;;;;:::i;:::-;;;;;;;;28087:295;;:::o;46514:38::-;;;;:::o;29350:328::-;29525:41;29544:12;:10;:12::i;:::-;29558:7;29525:18;:41::i;:::-;29517:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29631:39;29645:4;29651:2;29655:7;29664:5;29631:13;:39::i;:::-;29350:328;;;;:::o;48954:196::-;49081:13;49119:23;49134:7;49119:14;:23::i;:::-;49112:30;;48954:196;;;:::o;46427:39::-;46462:4;46427:39;:::o;28453:164::-;28550:4;28574:18;:25;28593:5;28574:25;;;;;;;;;;;;;;;:35;28600:8;28574:35;;;;;;;;;;;;;;;;;;;;;;;;;28567:42;;28453:164;;;;:::o;47880:158::-;47928:6;47977:3;47954:19;:9;:17;:19::i;:::-;:26;;:76;;48008:22;47954:76;;;47983:22;47954:76;47947:83;;47880:158;:::o;4117:192::-;3448:12;:10;:12::i;:::-;3437:23;;:7;:5;:7::i;:::-;:23;;;3429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4226:1:::1;4206:22;;:8;:22;;;;4198:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4282:19;4292:8;4282:9;:19::i;:::-;4117:192:::0;:::o;38233:224::-;38335:4;38374:35;38359:50;;;:11;:50;;;;:90;;;;38413:36;38437:11;38413:23;:36::i;:::-;38359:90;38352:97;;38233:224;;;:::o;31188:127::-;31253:4;31305:1;31277:30;;:7;:16;31285:7;31277:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31270:37;;31188:127;;;:::o;2062:98::-;2115:7;2142:10;2135:17;;2062:98;:::o;35170:174::-;35272:2;35245:15;:24;35261:7;35245:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35328:7;35324:2;35290:46;;35299:23;35314:7;35299:14;:23::i;:::-;35290:46;;;;;;;;;;;;35170:174;;:::o;31482:348::-;31575:4;31600:16;31608:7;31600;:16::i;:::-;31592:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31676:13;31692:23;31707:7;31692:14;:23::i;:::-;31676:39;;31745:5;31734:16;;:7;:16;;;:51;;;;31778:7;31754:31;;:20;31766:7;31754:11;:20::i;:::-;:31;;;31734:51;:87;;;;31789:32;31806:5;31813:7;31789:16;:32::i;:::-;31734:87;31726:96;;;31482:348;;;;:::o;34474:578::-;34633:4;34606:31;;:23;34621:7;34606:14;:23::i;:::-;:31;;;34598:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34716:1;34702:16;;:2;:16;;;;34694:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34772:39;34793:4;34799:2;34803:7;34772:20;:39::i;:::-;34876:29;34893:1;34897:7;34876:8;:29::i;:::-;34937:1;34918:9;:15;34928:4;34918:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34966:1;34949:9;:13;34959:2;34949:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34997:2;34978:7;:16;34986:7;34978:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35036:7;35032:2;35017:27;;35026:4;35017:27;;;;;;;;;;;;34474:578;;;:::o;848:114::-;913:7;940;:14;;;933:21;;848:114;;;:::o;970:127::-;1077:1;1059:7;:14;;;:19;;;;;;;;;;;970:127;:::o;33166:382::-;33260:1;33246:16;;:2;:16;;;;33238:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33319:16;33327:7;33319;:16::i;:::-;33318:17;33310:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33381:45;33410:1;33414:2;33418:7;33381:20;:45::i;:::-;33456:1;33439:9;:13;33449:2;33439:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33487:2;33468:7;:16;33476:7;33468:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33532:7;33528:2;33507:33;;33524:1;33507:33;;;;;;;;;;;;33166:382;;:::o;4317:173::-;4373:16;4392:6;;;;;;;;;;;4373:25;;4418:8;4409:6;;:17;;;;;;;;;;;;;;;;;;4473:8;4442:40;;4463:8;4442:40;;;;;;;;;;;;4317:173;;:::o;30560:315::-;30717:28;30727:4;30733:2;30737:7;30717:9;:28::i;:::-;30764:48;30787:4;30793:2;30797:7;30806:5;30764:22;:48::i;:::-;30756:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30560:315;;;;:::o;44726:679::-;44799:13;44833:16;44841:7;44833;:16::i;:::-;44825:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44916:23;44942:10;:19;44953:7;44942:19;;;;;;;;;;;44916:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44972:18;44993:10;:8;:10::i;:::-;44972:31;;45101:1;45085:4;45079:18;:23;45075:72;;;45126:9;45119:16;;;;;;45075:72;45277:1;45257:9;45251:23;:27;45247:108;;;45326:4;45332:9;45309:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45295:48;;;;;;45247:108;45374:23;45389:7;45374:14;:23::i;:::-;45367:30;;;;44726:679;;;;:::o;25290:305::-;25392:4;25444:25;25429:40;;;:11;:40;;;;:105;;;;25501:33;25486:48;;;:11;:48;;;;25429:105;:158;;;;25551:36;25575:11;25551:23;:36::i;:::-;25429:158;25409:178;;25290:305;;;:::o;46739:215::-;46901:45;46928:4;46934:2;46938:7;46901:26;:45::i;:::-;46739:215;;;:::o;35909:803::-;36064:4;36085:15;:2;:13;;;:15::i;:::-;36081:624;;;36137:2;36121:36;;;36158:12;:10;:12::i;:::-;36172:4;36178:7;36187:5;36121:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36117:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36384:1;36367:6;:13;:18;36363:272;;;36410:60;;;;;;;;;;:::i;:::-;;;;;;;;36363:272;36585:6;36579:13;36570:6;36566:2;36562:15;36555:38;36117:533;36254:45;;;36244:55;;;:6;:55;;;;36237:62;;;;;36081:624;36689:4;36682:11;;35909:803;;;;;;;:::o;47439:106::-;47491:13;47524;47517:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47439:106;:::o;26579:334::-;26652:13;26686:16;26694:7;26686;:16::i;:::-;26678:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26767:21;26791:10;:8;:10::i;:::-;26767:34;;26843:1;26825:7;26819:21;:25;:86;;;;;;;;;;;;;;;;;26871:7;26880:18;:7;:16;:18::i;:::-;26854:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26819:86;26812:93;;;26579:334;;;:::o;6328:157::-;6413:4;6452:25;6437:40;;;:11;:40;;;;6430:47;;6328:157;;;:::o;39909:589::-;40053:45;40080:4;40086:2;40090:7;40053:26;:45::i;:::-;40131:1;40115:18;;:4;:18;;;40111:187;;;40150:40;40182:7;40150:31;:40::i;:::-;40111:187;;;40220:2;40212:10;;:4;:10;;;40208:90;;40239:47;40272:4;40278:7;40239:32;:47::i;:::-;40208:90;40111:187;40326:1;40312:16;;:2;:16;;;40308:183;;;40345:45;40382:7;40345:36;:45::i;:::-;40308:183;;;40418:4;40412:10;;:2;:10;;;40408:83;;40439:40;40467:2;40471:7;40439:27;:40::i;:::-;40408:83;40308:183;39909:589;;;:::o;9374:387::-;9434:4;9642:12;9709:7;9697:20;9689:28;;9752:1;9745:4;:8;9738:15;;;9374:387;;;:::o;6799:723::-;6855:13;7085:1;7076:5;:10;7072:53;;;7103:10;;;;;;;;;;;;;;;;;;;;;7072:53;7135:12;7150:5;7135:20;;7166:14;7191:78;7206:1;7198:4;:9;7191:78;;7224:8;;;;;:::i;:::-;;;;7255:2;7247:10;;;;;:::i;:::-;;;7191:78;;;7279:19;7311:6;7301:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7279:39;;7329:154;7345:1;7336:5;:10;7329:154;;7373:1;7363:11;;;;;:::i;:::-;;;7440:2;7432:5;:10;;;;:::i;:::-;7419:2;:24;;;;:::i;:::-;7406:39;;7389:6;7396;7389:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7469:2;7460:11;;;;;:::i;:::-;;;7329:154;;;7507:6;7493:21;;;;;6799:723;;;;:::o;37284:126::-;;;;:::o;41221:164::-;41325:10;:17;;;;41298:15;:24;41314:7;41298:24;;;;;;;;;;;:44;;;;41353:10;41369:7;41353:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41221:164;:::o;42012:988::-;42278:22;42328:1;42303:22;42320:4;42303:16;:22::i;:::-;:26;;;;:::i;:::-;42278:51;;42340:18;42361:17;:26;42379:7;42361:26;;;;;;;;;;;;42340:47;;42508:14;42494:10;:28;42490:328;;42539:19;42561:12;:18;42574:4;42561:18;;;;;;;;;;;;;;;:34;42580:14;42561:34;;;;;;;;;;;;42539:56;;42645:11;42612:12;:18;42625:4;42612:18;;;;;;;;;;;;;;;:30;42631:10;42612:30;;;;;;;;;;;:44;;;;42762:10;42729:17;:30;42747:11;42729:30;;;;;;;;;;;:43;;;;42490:328;;42914:17;:26;42932:7;42914:26;;;;;;;;;;;42907:33;;;42958:12;:18;42971:4;42958:18;;;;;;;;;;;;;;;:34;42977:14;42958:34;;;;;;;;;;;42951:41;;;42012:988;;;;:::o;43295:1079::-;43548:22;43593:1;43573:10;:17;;;;:21;;;;:::i;:::-;43548:46;;43605:18;43626:15;:24;43642:7;43626:24;;;;;;;;;;;;43605:45;;43977:19;43999:10;44010:14;43999:26;;;;;;;;;;;;;;;;;;;;;;;;43977:48;;44063:11;44038:10;44049;44038:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44174:10;44143:15;:28;44159:11;44143:28;;;;;;;;;;;:41;;;;44315:15;:24;44331:7;44315:24;;;;;;;;;;;44308:31;;;44350:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43295:1079;;;;:::o;40799:221::-;40884:14;40901:20;40918:2;40901:16;:20::i;:::-;40884:37;;40959:7;40932:12;:16;40945:2;40932:16;;;;;;;;;;;;;;;:24;40949:6;40932:24;;;;;;;;;;;:34;;;;41006:6;40977:17;:26;40995:7;40977:26;;;;;;;;;;;:35;;;;40799:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:135::-;;2091:6;2078:20;2069:29;;2107:31;2132:5;2107:31;:::i;:::-;2059:85;;;;:::o;2150:262::-;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;2274:1;2271;2264:12;2226:2;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2216:196;;;;:::o;2418:407::-;;;2543:2;2531:9;2522:7;2518:23;2514:32;2511:2;;;2559:1;2556;2549:12;2511:2;2602:1;2627:53;2672:7;2663:6;2652:9;2648:22;2627:53;:::i;:::-;2617:63;;2573:117;2729:2;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2700:118;2501:324;;;;;:::o;2831:552::-;;;;2973:2;2961:9;2952:7;2948:23;2944:32;2941:2;;;2989:1;2986;2979:12;2941:2;3032:1;3057:53;3102:7;3093:6;3082:9;3078:22;3057:53;:::i;:::-;3047:63;;3003:117;3159:2;3185:53;3230:7;3221:6;3210:9;3206:22;3185:53;:::i;:::-;3175:63;;3130:118;3287:2;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3258:118;2931:452;;;;;:::o;3389:809::-;;;;;3557:3;3545:9;3536:7;3532:23;3528:33;3525:2;;;3574:1;3571;3564:12;3525:2;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;4028:2;4017:9;4013:18;4000:32;4059:18;4051:6;4048:30;4045:2;;;4091:1;4088;4081:12;4045:2;4119:62;4173:7;4164:6;4153:9;4149:22;4119:62;:::i;:::-;4109:72;;3971:220;3515:683;;;;;;;:::o;4204:401::-;;;4326:2;4314:9;4305:7;4301:23;4297:32;4294:2;;;4342:1;4339;4332:12;4294:2;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4512:2;4538:50;4580:7;4571:6;4560:9;4556:22;4538:50;:::i;:::-;4528:60;;4483:115;4284:321;;;;;:::o;4611:407::-;;;4736:2;4724:9;4715:7;4711:23;4707:32;4704:2;;;4752:1;4749;4742:12;4704:2;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4694:324;;;;;:::o;5024:260::-;;5131:2;5119:9;5110:7;5106:23;5102:32;5099:2;;;5147:1;5144;5137:12;5099:2;5190:1;5215:52;5259:7;5250:6;5239:9;5235:22;5215:52;:::i;:::-;5205:62;;5161:116;5089:195;;;;:::o;5290:282::-;;5408:2;5396:9;5387:7;5383:23;5379:32;5376:2;;;5424:1;5421;5414:12;5376:2;5467:1;5492:63;5547:7;5538:6;5527:9;5523:22;5492:63;:::i;:::-;5482:73;;5438:127;5366:206;;;;:::o;5578:375::-;;5696:2;5684:9;5675:7;5671:23;5667:32;5664:2;;;5712:1;5709;5702:12;5664:2;5783:1;5772:9;5768:17;5755:31;5813:18;5805:6;5802:30;5799:2;;;5845:1;5842;5835:12;5799:2;5873:63;5928:7;5919:6;5908:9;5904:22;5873:63;:::i;:::-;5863:73;;5726:220;5654:299;;;;:::o;5959:262::-;;6067:2;6055:9;6046:7;6042:23;6038:32;6035:2;;;6083:1;6080;6073:12;6035:2;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6025:196;;;;:::o;6227:258::-;;6333:2;6321:9;6312:7;6308:23;6304:32;6301:2;;;6349:1;6346;6339:12;6301:2;6392:1;6417:51;6460:7;6451:6;6440:9;6436:22;6417:51;:::i;:::-;6407:61;;6363:115;6291:194;;;;:::o;6491:118::-;6578:24;6596:5;6578:24;:::i;:::-;6573:3;6566:37;6556:53;;:::o;6615:109::-;6696:21;6711:5;6696:21;:::i;:::-;6691:3;6684:34;6674:50;;:::o;6730:360::-;;6844:38;6876:5;6844:38;:::i;:::-;6898:70;6961:6;6956:3;6898:70;:::i;:::-;6891:77;;6977:52;7022:6;7017:3;7010:4;7003:5;6999:16;6977:52;:::i;:::-;7054:29;7076:6;7054:29;:::i;:::-;7049:3;7045:39;7038:46;;6820:270;;;;;:::o;7096:364::-;;7212:39;7245:5;7212:39;:::i;:::-;7267:71;7331:6;7326:3;7267:71;:::i;:::-;7260:78;;7347:52;7392:6;7387:3;7380:4;7373:5;7369:16;7347:52;:::i;:::-;7424:29;7446:6;7424:29;:::i;:::-;7419:3;7415:39;7408:46;;7188:272;;;;;:::o;7466:377::-;;7600:39;7633:5;7600:39;:::i;:::-;7655:89;7737:6;7732:3;7655:89;:::i;:::-;7648:96;;7753:52;7798:6;7793:3;7786:4;7779:5;7775:16;7753:52;:::i;:::-;7830:6;7825:3;7821:16;7814:23;;7576:267;;;;;:::o;7849:366::-;;8012:67;8076:2;8071:3;8012:67;:::i;:::-;8005:74;;8088:93;8177:3;8088:93;:::i;:::-;8206:2;8201:3;8197:12;8190:19;;7995:220;;;:::o;8221:366::-;;8384:67;8448:2;8443:3;8384:67;:::i;:::-;8377:74;;8460:93;8549:3;8460:93;:::i;:::-;8578:2;8573:3;8569:12;8562:19;;8367:220;;;:::o;8593:366::-;;8756:67;8820:2;8815:3;8756:67;:::i;:::-;8749:74;;8832:93;8921:3;8832:93;:::i;:::-;8950:2;8945:3;8941:12;8934:19;;8739:220;;;:::o;8965:366::-;;9128:67;9192:2;9187:3;9128:67;:::i;:::-;9121:74;;9204:93;9293:3;9204:93;:::i;:::-;9322:2;9317:3;9313:12;9306:19;;9111:220;;;:::o;9337:366::-;;9500:67;9564:2;9559:3;9500:67;:::i;:::-;9493:74;;9576:93;9665:3;9576:93;:::i;:::-;9694:2;9689:3;9685:12;9678:19;;9483:220;;;:::o;9709:366::-;;9872:67;9936:2;9931:3;9872:67;:::i;:::-;9865:74;;9948:93;10037:3;9948:93;:::i;:::-;10066:2;10061:3;10057:12;10050:19;;9855:220;;;:::o;10081:366::-;;10244:67;10308:2;10303:3;10244:67;:::i;:::-;10237:74;;10320:93;10409:3;10320:93;:::i;:::-;10438:2;10433:3;10429:12;10422:19;;10227:220;;;:::o;10453:366::-;;10616:67;10680:2;10675:3;10616:67;:::i;:::-;10609:74;;10692:93;10781:3;10692:93;:::i;:::-;10810:2;10805:3;10801:12;10794:19;;10599:220;;;:::o;10825:366::-;;10988:67;11052:2;11047:3;10988:67;:::i;:::-;10981:74;;11064:93;11153:3;11064:93;:::i;:::-;11182:2;11177:3;11173:12;11166:19;;10971:220;;;:::o;11197:366::-;;11360:67;11424:2;11419:3;11360:67;:::i;:::-;11353:74;;11436:93;11525:3;11436:93;:::i;:::-;11554:2;11549:3;11545:12;11538:19;;11343:220;;;:::o;11569:366::-;;11732:67;11796:2;11791:3;11732:67;:::i;:::-;11725:74;;11808:93;11897:3;11808:93;:::i;:::-;11926:2;11921:3;11917:12;11910:19;;11715:220;;;:::o;11941:366::-;;12104:67;12168:2;12163:3;12104:67;:::i;:::-;12097:74;;12180:93;12269:3;12180:93;:::i;:::-;12298:2;12293:3;12289:12;12282:19;;12087:220;;;:::o;12313:366::-;;12476:67;12540:2;12535:3;12476:67;:::i;:::-;12469:74;;12552:93;12641:3;12552:93;:::i;:::-;12670:2;12665:3;12661:12;12654:19;;12459:220;;;:::o;12685:366::-;;12848:67;12912:2;12907:3;12848:67;:::i;:::-;12841:74;;12924:93;13013:3;12924:93;:::i;:::-;13042:2;13037:3;13033:12;13026:19;;12831:220;;;:::o;13057:366::-;;13220:67;13284:2;13279:3;13220:67;:::i;:::-;13213:74;;13296:93;13385:3;13296:93;:::i;:::-;13414:2;13409:3;13405:12;13398:19;;13203:220;;;:::o;13429:366::-;;13592:67;13656:2;13651:3;13592:67;:::i;:::-;13585:74;;13668:93;13757:3;13668:93;:::i;:::-;13786:2;13781:3;13777:12;13770:19;;13575:220;;;:::o;13801:366::-;;13964:67;14028:2;14023:3;13964:67;:::i;:::-;13957:74;;14040:93;14129:3;14040:93;:::i;:::-;14158:2;14153:3;14149:12;14142:19;;13947:220;;;:::o;14173:366::-;;14336:67;14400:2;14395:3;14336:67;:::i;:::-;14329:74;;14412:93;14501:3;14412:93;:::i;:::-;14530:2;14525:3;14521:12;14514:19;;14319:220;;;:::o;14545:366::-;;14708:67;14772:2;14767:3;14708:67;:::i;:::-;14701:74;;14784:93;14873:3;14784:93;:::i;:::-;14902:2;14897:3;14893:12;14886:19;;14691:220;;;:::o;14917:366::-;;15080:67;15144:2;15139:3;15080:67;:::i;:::-;15073:74;;15156:93;15245:3;15156:93;:::i;:::-;15274:2;15269:3;15265:12;15258:19;;15063:220;;;:::o;15289:366::-;;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15435:220;;;:::o;15661:366::-;;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15807:220;;;:::o;16033:366::-;;16196:67;16260:2;16255:3;16196:67;:::i;:::-;16189:74;;16272:93;16361:3;16272:93;:::i;:::-;16390:2;16385:3;16381:12;16374:19;;16179:220;;;:::o;16405:366::-;;16568:67;16632:2;16627:3;16568:67;:::i;:::-;16561:74;;16644:93;16733:3;16644:93;:::i;:::-;16762:2;16757:3;16753:12;16746:19;;16551:220;;;:::o;16777:398::-;;16957:83;17038:1;17033:3;16957:83;:::i;:::-;16950:90;;17049:93;17138:3;17049:93;:::i;:::-;17167:1;17162:3;17158:11;17151:18;;16940:235;;;:::o;17181:366::-;;17344:67;17408:2;17403:3;17344:67;:::i;:::-;17337:74;;17420:93;17509:3;17420:93;:::i;:::-;17538:2;17533:3;17529:12;17522:19;;17327:220;;;:::o;17553:366::-;;17716:67;17780:2;17775:3;17716:67;:::i;:::-;17709:74;;17792:93;17881:3;17792:93;:::i;:::-;17910:2;17905:3;17901:12;17894:19;;17699:220;;;:::o;17925:115::-;18010:23;18027:5;18010:23;:::i;:::-;18005:3;17998:36;17988:52;;:::o;18046:118::-;18133:24;18151:5;18133:24;:::i;:::-;18128:3;18121:37;18111:53;;:::o;18170:115::-;18255:23;18272:5;18255:23;:::i;:::-;18250:3;18243:36;18233:52;;:::o;18291:112::-;18374:22;18390:5;18374:22;:::i;:::-;18369:3;18362:35;18352:51;;:::o;18409:435::-;;18611:95;18702:3;18693:6;18611:95;:::i;:::-;18604:102;;18723:95;18814:3;18805:6;18723:95;:::i;:::-;18716:102;;18835:3;18828:10;;18593:251;;;;;:::o;18850:379::-;;19056:147;19199:3;19056:147;:::i;:::-;19049:154;;19220:3;19213:10;;19038:191;;;:::o;19235:222::-;;19366:2;19355:9;19351:18;19343:26;;19379:71;19447:1;19436:9;19432:17;19423:6;19379:71;:::i;:::-;19333:124;;;;:::o;19463:640::-;;19696:3;19685:9;19681:19;19673:27;;19710:71;19778:1;19767:9;19763:17;19754:6;19710:71;:::i;:::-;19791:72;19859:2;19848:9;19844:18;19835:6;19791:72;:::i;:::-;19873;19941:2;19930:9;19926:18;19917:6;19873:72;:::i;:::-;19992:9;19986:4;19982:20;19977:2;19966:9;19962:18;19955:48;20020:76;20091:4;20082:6;20020:76;:::i;:::-;20012:84;;19663:440;;;;;;;:::o;20109:210::-;;20234:2;20223:9;20219:18;20211:26;;20247:65;20309:1;20298:9;20294:17;20285:6;20247:65;:::i;:::-;20201:118;;;;:::o;20325:313::-;;20476:2;20465:9;20461:18;20453:26;;20525:9;20519:4;20515:20;20511:1;20500:9;20496:17;20489:47;20553:78;20626:4;20617:6;20553:78;:::i;:::-;20545:86;;20443:195;;;;:::o;20644:419::-;;20848:2;20837:9;20833:18;20825:26;;20897:9;20891:4;20887:20;20883:1;20872:9;20868:17;20861:47;20925:131;21051:4;20925:131;:::i;:::-;20917:139;;20815:248;;;:::o;21069:419::-;;21273:2;21262:9;21258:18;21250:26;;21322:9;21316:4;21312:20;21308:1;21297:9;21293:17;21286:47;21350:131;21476:4;21350:131;:::i;:::-;21342:139;;21240:248;;;:::o;21494:419::-;;21698:2;21687:9;21683:18;21675:26;;21747:9;21741:4;21737:20;21733:1;21722:9;21718:17;21711:47;21775:131;21901:4;21775:131;:::i;:::-;21767:139;;21665:248;;;:::o;21919:419::-;;22123:2;22112:9;22108:18;22100:26;;22172:9;22166:4;22162:20;22158:1;22147:9;22143:17;22136:47;22200:131;22326:4;22200:131;:::i;:::-;22192:139;;22090:248;;;:::o;22344:419::-;;22548:2;22537:9;22533:18;22525:26;;22597:9;22591:4;22587:20;22583:1;22572:9;22568:17;22561:47;22625:131;22751:4;22625:131;:::i;:::-;22617:139;;22515:248;;;:::o;22769:419::-;;22973:2;22962:9;22958:18;22950:26;;23022:9;23016:4;23012:20;23008:1;22997:9;22993:17;22986:47;23050:131;23176:4;23050:131;:::i;:::-;23042:139;;22940:248;;;:::o;23194:419::-;;23398:2;23387:9;23383:18;23375:26;;23447:9;23441:4;23437:20;23433:1;23422:9;23418:17;23411:47;23475:131;23601:4;23475:131;:::i;:::-;23467:139;;23365:248;;;:::o;23619:419::-;;23823:2;23812:9;23808:18;23800:26;;23872:9;23866:4;23862:20;23858:1;23847:9;23843:17;23836:47;23900:131;24026:4;23900:131;:::i;:::-;23892:139;;23790:248;;;:::o;24044:419::-;;24248:2;24237:9;24233:18;24225:26;;24297:9;24291:4;24287:20;24283:1;24272:9;24268:17;24261:47;24325:131;24451:4;24325:131;:::i;:::-;24317:139;;24215:248;;;:::o;24469:419::-;;24673:2;24662:9;24658:18;24650:26;;24722:9;24716:4;24712:20;24708:1;24697:9;24693:17;24686:47;24750:131;24876:4;24750:131;:::i;:::-;24742:139;;24640:248;;;:::o;24894:419::-;;25098:2;25087:9;25083:18;25075:26;;25147:9;25141:4;25137:20;25133:1;25122:9;25118:17;25111:47;25175:131;25301:4;25175:131;:::i;:::-;25167:139;;25065:248;;;:::o;25319:419::-;;25523:2;25512:9;25508:18;25500:26;;25572:9;25566:4;25562:20;25558:1;25547:9;25543:17;25536:47;25600:131;25726:4;25600:131;:::i;:::-;25592:139;;25490:248;;;:::o;25744:419::-;;25948:2;25937:9;25933:18;25925:26;;25997:9;25991:4;25987:20;25983:1;25972:9;25968:17;25961:47;26025:131;26151:4;26025:131;:::i;:::-;26017:139;;25915:248;;;:::o;26169:419::-;;26373:2;26362:9;26358:18;26350:26;;26422:9;26416:4;26412:20;26408:1;26397:9;26393:17;26386:47;26450:131;26576:4;26450:131;:::i;:::-;26442:139;;26340:248;;;:::o;26594:419::-;;26798:2;26787:9;26783:18;26775:26;;26847:9;26841:4;26837:20;26833:1;26822:9;26818:17;26811:47;26875:131;27001:4;26875:131;:::i;:::-;26867:139;;26765:248;;;:::o;27019:419::-;;27223:2;27212:9;27208:18;27200:26;;27272:9;27266:4;27262:20;27258:1;27247:9;27243:17;27236:47;27300:131;27426:4;27300:131;:::i;:::-;27292:139;;27190:248;;;:::o;27444:419::-;;27648:2;27637:9;27633:18;27625:26;;27697:9;27691:4;27687:20;27683:1;27672:9;27668:17;27661:47;27725:131;27851:4;27725:131;:::i;:::-;27717:139;;27615:248;;;:::o;27869:419::-;;28073:2;28062:9;28058:18;28050:26;;28122:9;28116:4;28112:20;28108:1;28097:9;28093:17;28086:47;28150:131;28276:4;28150:131;:::i;:::-;28142:139;;28040:248;;;:::o;28294:419::-;;28498:2;28487:9;28483:18;28475:26;;28547:9;28541:4;28537:20;28533:1;28522:9;28518:17;28511:47;28575:131;28701:4;28575:131;:::i;:::-;28567:139;;28465:248;;;:::o;28719:419::-;;28923:2;28912:9;28908:18;28900:26;;28972:9;28966:4;28962:20;28958:1;28947:9;28943:17;28936:47;29000:131;29126:4;29000:131;:::i;:::-;28992:139;;28890:248;;;:::o;29144:419::-;;29348:2;29337:9;29333:18;29325:26;;29397:9;29391:4;29387:20;29383:1;29372:9;29368:17;29361:47;29425:131;29551:4;29425:131;:::i;:::-;29417:139;;29315:248;;;:::o;29569:419::-;;29773:2;29762:9;29758:18;29750:26;;29822:9;29816:4;29812:20;29808:1;29797:9;29793:17;29786:47;29850:131;29976:4;29850:131;:::i;:::-;29842:139;;29740:248;;;:::o;29994:419::-;;30198:2;30187:9;30183:18;30175:26;;30247:9;30241:4;30237:20;30233:1;30222:9;30218:17;30211:47;30275:131;30401:4;30275:131;:::i;:::-;30267:139;;30165:248;;;:::o;30419:419::-;;30623:2;30612:9;30608:18;30600:26;;30672:9;30666:4;30662:20;30658:1;30647:9;30643:17;30636:47;30700:131;30826:4;30700:131;:::i;:::-;30692:139;;30590:248;;;:::o;30844:419::-;;31048:2;31037:9;31033:18;31025:26;;31097:9;31091:4;31087:20;31083:1;31072:9;31068:17;31061:47;31125:131;31251:4;31125:131;:::i;:::-;31117:139;;31015:248;;;:::o;31269:419::-;;31473:2;31462:9;31458:18;31450:26;;31522:9;31516:4;31512:20;31508:1;31497:9;31493:17;31486:47;31550:131;31676:4;31550:131;:::i;:::-;31542:139;;31440:248;;;:::o;31694:218::-;;31823:2;31812:9;31808:18;31800:26;;31836:69;31902:1;31891:9;31887:17;31878:6;31836:69;:::i;:::-;31790:122;;;;:::o;31918:222::-;;32049:2;32038:9;32034:18;32026:26;;32062:71;32130:1;32119:9;32115:17;32106:6;32062:71;:::i;:::-;32016:124;;;;:::o;32146:218::-;;32275:2;32264:9;32260:18;32252:26;;32288:69;32354:1;32343:9;32339:17;32330:6;32288:69;:::i;:::-;32242:122;;;;:::o;32370:214::-;;32497:2;32486:9;32482:18;32474:26;;32510:67;32574:1;32563:9;32559:17;32550:6;32510:67;:::i;:::-;32464:120;;;;:::o;32590:129::-;;32651:20;;:::i;:::-;32641:30;;32680:33;32708:4;32700:6;32680:33;:::i;:::-;32631:88;;;:::o;32725:75::-;;32791:2;32785:9;32775:19;;32765:35;:::o;32806:307::-;;32957:18;32949:6;32946:30;32943:2;;;32979:18;;:::i;:::-;32943:2;33017:29;33039:6;33017:29;:::i;:::-;33009:37;;33101:4;33095;33091:15;33083:23;;32872:241;;;:::o;33119:308::-;;33271:18;33263:6;33260:30;33257:2;;;33293:18;;:::i;:::-;33257:2;33331:29;33353:6;33331:29;:::i;:::-;33323:37;;33415:4;33409;33405:15;33397:23;;33186:241;;;:::o;33433:98::-;;33518:5;33512:12;33502:22;;33491:40;;;:::o;33537:99::-;;33623:5;33617:12;33607:22;;33596:40;;;:::o;33642:168::-;;33759:6;33754:3;33747:19;33799:4;33794:3;33790:14;33775:29;;33737:73;;;;:::o;33816:147::-;;33954:3;33939:18;;33929:34;;;;:::o;33969:169::-;;34087:6;34082:3;34075:19;34127:4;34122:3;34118:14;34103:29;;34065:73;;;;:::o;34144:148::-;;34283:3;34268:18;;34258:34;;;;:::o;34298:305::-;;34357:20;34375:1;34357:20;:::i;:::-;34352:25;;34391:20;34409:1;34391:20;:::i;:::-;34386:25;;34545:1;34477:66;34473:74;34470:1;34467:81;34464:2;;;34551:18;;:::i;:::-;34464:2;34595:1;34592;34588:9;34581:16;;34342:261;;;;:::o;34609:185::-;;34666:20;34684:1;34666:20;:::i;:::-;34661:25;;34700:20;34718:1;34700:20;:::i;:::-;34695:25;;34739:1;34729:2;;34744:18;;:::i;:::-;34729:2;34786:1;34783;34779:9;34774:14;;34651:143;;;;:::o;34800:297::-;;34862:19;34879:1;34862:19;:::i;:::-;34857:24;;34895:19;34912:1;34895:19;:::i;:::-;34890:24;;35034:1;35014:18;35010:26;35007:1;35004:33;34999:1;34992:9;34985:17;34981:57;34978:2;;;35041:18;;:::i;:::-;34978:2;35089:1;35086;35082:9;35071:20;;34847:250;;;;:::o;35103:191::-;;35163:20;35181:1;35163:20;:::i;:::-;35158:25;;35197:20;35215:1;35197:20;:::i;:::-;35192:25;;35236:1;35233;35230:8;35227:2;;;35241:18;;:::i;:::-;35227:2;35286:1;35283;35279:9;35271:17;;35148:146;;;;:::o;35300:96::-;;35366:24;35384:5;35366:24;:::i;:::-;35355:35;;35345:51;;;:::o;35402:90::-;;35479:5;35472:13;35465:21;35454:32;;35444:48;;;:::o;35498:149::-;;35574:66;35567:5;35563:78;35552:89;;35542:105;;;:::o;35653:89::-;;35729:6;35722:5;35718:18;35707:29;;35697:45;;;:::o;35748:126::-;;35825:42;35818:5;35814:54;35803:65;;35793:81;;;:::o;35880:77::-;;35946:5;35935:16;;35925:32;;;:::o;35963:101::-;;36039:18;36032:5;36028:30;36017:41;;36007:57;;;:::o;36070:86::-;;36145:4;36138:5;36134:16;36123:27;;36113:43;;;:::o;36162:154::-;36246:6;36241:3;36236;36223:30;36308:1;36299:6;36294:3;36290:16;36283:27;36213:103;;;:::o;36322:307::-;36390:1;36400:113;36414:6;36411:1;36408:13;36400:113;;;36499:1;36494:3;36490:11;36484:18;36480:1;36475:3;36471:11;36464:39;36436:2;36433:1;36429:10;36424:15;;36400:113;;;36531:6;36528:1;36525:13;36522:2;;;36611:1;36602:6;36597:3;36593:16;36586:27;36522:2;36371:258;;;;:::o;36635:320::-;;36716:1;36710:4;36706:12;36696:22;;36763:1;36757:4;36753:12;36784:18;36774:2;;36840:4;36832:6;36828:17;36818:27;;36774:2;36902;36894:6;36891:14;36871:18;36868:38;36865:2;;;36921:18;;:::i;:::-;36865:2;36686:269;;;;:::o;36961:281::-;37044:27;37066:4;37044:27;:::i;:::-;37036:6;37032:40;37174:6;37162:10;37159:22;37138:18;37126:10;37123:34;37120:62;37117:2;;;37185:18;;:::i;:::-;37117:2;37225:10;37221:2;37214:22;37004:238;;;:::o;37248:233::-;;37310:24;37328:5;37310:24;:::i;:::-;37301:33;;37356:66;37349:5;37346:77;37343:2;;;37426:18;;:::i;:::-;37343:2;37473:1;37466:5;37462:13;37455:20;;37291:190;;;:::o;37487:167::-;;37547:22;37563:5;37547:22;:::i;:::-;37538:31;;37591:4;37584:5;37581:15;37578:2;;;37599:18;;:::i;:::-;37578:2;37646:1;37639:5;37635:13;37628:20;;37528:126;;;:::o;37660:176::-;;37709:20;37727:1;37709:20;:::i;:::-;37704:25;;37743:20;37761:1;37743:20;:::i;:::-;37738:25;;37782:1;37772:2;;37787:18;;:::i;:::-;37772:2;37828:1;37825;37821:9;37816:14;;37694:142;;;;:::o;37842:180::-;37890:77;37887:1;37880:88;37987:4;37984:1;37977:15;38011:4;38008:1;38001:15;38028:180;38076:77;38073:1;38066:88;38173:4;38170:1;38163:15;38197:4;38194:1;38187:15;38214:180;38262:77;38259:1;38252:88;38359:4;38356:1;38349:15;38383:4;38380:1;38373:15;38400:180;38448:77;38445:1;38438:88;38545:4;38542:1;38535:15;38569:4;38566:1;38559:15;38586:102;;38678:2;38674:7;38669:2;38662:5;38658:14;38654:28;38644:38;;38634:54;;;:::o;38694:230::-;38834:34;38830:1;38822:6;38818:14;38811:58;38903:13;38898:2;38890:6;38886:15;38879:38;38800:124;:::o;38930:231::-;39070:34;39066:1;39058:6;39054:14;39047:58;39139:14;39134:2;39126:6;39122:15;39115:39;39036:125;:::o;39167:237::-;39307:34;39303:1;39295:6;39291:14;39284:58;39376:20;39371:2;39363:6;39359:15;39352:45;39273:131;:::o;39410:225::-;39550:34;39546:1;39538:6;39534:14;39527:58;39619:8;39614:2;39606:6;39602:15;39595:33;39516:119;:::o;39641:178::-;39781:30;39777:1;39769:6;39765:14;39758:54;39747:72;:::o;39825:174::-;39965:26;39961:1;39953:6;39949:14;39942:50;39931:68;:::o;40005:248::-;40145:34;40141:1;40133:6;40129:14;40122:58;40214:31;40209:2;40201:6;40197:15;40190:56;40111:142;:::o;40259:223::-;40399:34;40395:1;40387:6;40383:14;40376:58;40468:6;40463:2;40455:6;40451:15;40444:31;40365:117;:::o;40488:175::-;40628:27;40624:1;40616:6;40612:14;40605:51;40594:69;:::o;40669:231::-;40809:34;40805:1;40797:6;40793:14;40786:58;40878:14;40873:2;40865:6;40861:15;40854:39;40775:125;:::o;40906:243::-;41046:34;41042:1;41034:6;41030:14;41023:58;41115:26;41110:2;41102:6;41098:15;41091:51;41012:137;:::o;41155:229::-;41295:34;41291:1;41283:6;41279:14;41272:58;41364:12;41359:2;41351:6;41347:15;41340:37;41261:123;:::o;41390:228::-;41530:34;41526:1;41518:6;41514:14;41507:58;41599:11;41594:2;41586:6;41582:15;41575:36;41496:122;:::o;41624:182::-;41764:34;41760:1;41752:6;41748:14;41741:58;41730:76;:::o;41812:236::-;41952:34;41948:1;41940:6;41936:14;41929:58;42021:19;42016:2;42008:6;42004:15;41997:44;41918:130;:::o;42054:231::-;42194:34;42190:1;42182:6;42178:14;42171:58;42263:14;42258:2;42250:6;42246:15;42239:39;42160:125;:::o;42291:182::-;42431:34;42427:1;42419:6;42415:14;42408:58;42397:76;:::o;42479:228::-;42619:34;42615:1;42607:6;42603:14;42596:58;42688:11;42683:2;42675:6;42671:15;42664:36;42585:122;:::o;42713:234::-;42853:34;42849:1;42841:6;42837:14;42830:58;42922:17;42917:2;42909:6;42905:15;42898:42;42819:128;:::o;42953:174::-;43093:26;43089:1;43081:6;43077:14;43070:50;43059:68;:::o;43133:220::-;43273:34;43269:1;43261:6;43257:14;43250:58;43342:3;43337:2;43329:6;43325:15;43318:28;43239:114;:::o;43359:172::-;43499:24;43495:1;43487:6;43483:14;43476:48;43465:66;:::o;43537:170::-;43677:22;43673:1;43665:6;43661:14;43654:46;43643:64;:::o;43713:166::-;43853:18;43849:1;43841:6;43837:14;43830:42;43819:60;:::o;43885:114::-;43991:8;:::o;44005:236::-;44145:34;44141:1;44133:6;44129:14;44122:58;44214:19;44209:2;44201:6;44197:15;44190:44;44111:130;:::o;44247:231::-;44387:34;44383:1;44375:6;44371:14;44364:58;44456:14;44451:2;44443:6;44439:15;44432:39;44353:125;:::o;44484:122::-;44557:24;44575:5;44557:24;:::i;:::-;44550:5;44547:35;44537:2;;44596:1;44593;44586:12;44537:2;44527:79;:::o;44612:116::-;44682:21;44697:5;44682:21;:::i;:::-;44675:5;44672:32;44662:2;;44718:1;44715;44708:12;44662:2;44652:76;:::o;44734:120::-;44806:23;44823:5;44806:23;:::i;:::-;44799:5;44796:34;44786:2;;44844:1;44841;44834:12;44786:2;44776:78;:::o;44860:122::-;44933:24;44951:5;44933:24;:::i;:::-;44926:5;44923:35;44913:2;;44972:1;44969;44962:12;44913:2;44903:79;:::o;44988:118::-;45059:22;45075:5;45059:22;:::i;:::-;45052:5;45049:33;45039:2;;45096:1;45093;45086:12;45039:2;45029:77;:::o

Swarm Source

ipfs://dbb0e88fbcb50d7ddda4e8a101437d589cab4bf15c463b63da718688d3febb29
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.