ETH Price: $2,448.23 (+1.90%)

Token

SVD Cool Kids Club (CKC)
 

Overview

Max Total Supply

0 CKC

Holders

63

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ded.eth
Balance
1 CKC
0x5cf00981051d1b2089af349ef9e074420ad7ae82
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:
CKC

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-19
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)





/**
 * @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;
    }
}

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)



/**
 * @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);
    }
}

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)



/**
 * @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;
    }
}



// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)





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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)




// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)





/**
 * @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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)



/**
 * @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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)





/**
 * @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);
}


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)



/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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





/**
 * @dev 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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol)





/**
 * @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];
        }
    }
}


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/ERC721Royalty.sol)





// OpenZeppelin Contracts (last updated v4.6.0) (token/common/ERC2981.sol)




// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)





/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}



/**
 * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
 *
 * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
 * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
 *
 * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
 * fee is specified in basis points by default.
 *
 * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
 * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
 * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
 *
 * _Available since v4.5._
 */
abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

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

    /**
     * @inheritdoc IERC2981
     */
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    /**
     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
     * override.
     */
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    /**
     * @dev Sets the royalty information that all ids in this contract will default to.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Removes default royalty information.
     */
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    /**
     * @dev Sets the royalty information for a specific token id, overriding the global default.
     *
     * Requirements:
     *
     * - `tokenId` must be already minted.
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Resets royalty information for the token id back to the global default.
     */
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}



/**
 * @dev Extension of ERC721 with the ERC2981 NFT Royalty Standard, a standardized way to retrieve royalty payment
 * information.
 *
 * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
 * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
 *
 * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
 * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
 * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
 *
 * _Available since v4.5._
 */
abstract contract ERC721Royalty is ERC2981, ERC721 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {ERC721-_burn}. This override additionally clears the royalty information for the token.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);
        _resetTokenRoyalty(tokenId);
    }
}


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)



/**
 * @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;
    }
}


contract CKC is Ownable, ERC721URIStorage, ERC721Royalty {
    using Counters for Counters.Counter;
    Counters.Counter _tokenIds;

    constructor() ERC721("SVD Cool Kids Club", "CKC") {
        _setDefaultRoyalty(msg.sender, 500);
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return "ipfs://QmUNd4RJmXjQgY7F8br6Cb5U41GrCB9iWZt2MPZHLY1zx4/";
    }

    function mint(
      address buyer, 
      string memory newTokenURI
    ) public onlyOwner {
        _tokenIds.increment();
        uint256 tokenId = _tokenIds.current();
        _mint(buyer, tokenId);
        _setTokenURI(tokenId, newTokenURI);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function _burn(uint256 tokenId)
        internal onlyOwner
        override(ERC721URIStorage, ERC721Royalty)
    {
        super._burn(tokenId);
    }

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

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":[{"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":[{"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":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"string","name":"newTokenURI","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]

60806040523480156200001157600080fd5b506040518060400160405280601281526020017f53564420436f6f6c204b69647320436c756200000000000000000000000000008152506040518060400160405280600381526020017f434b4300000000000000000000000000000000000000000000000000000000008152506200009e62000092620000ec60201b60201c565b620000f460201b60201c565b8160039080519060200190620000b692919062000366565b508060049080519060200190620000cf92919062000366565b505050620000e6336101f4620001b860201b60201c565b62000596565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001c86200035c60201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002209062000464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200029c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002939062000486565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612710905090565b8280546200037490620004b9565b90600052602060002090601f016020900481019282620003985760008555620003e4565b82601f10620003b357805160ff1916838001178555620003e4565b82800160010185558215620003e4579182015b82811115620003e3578251825591602001919060010190620003c6565b5b509050620003f39190620003f7565b5090565b5b8082111562000412576000816000905550600101620003f8565b5090565b600062000425602a83620004a8565b915062000432826200051e565b604082019050919050565b60006200044c601983620004a8565b915062000459826200056d565b602082019050919050565b600060208201905081810360008301526200047f8162000416565b9050919050565b60006020820190508181036000830152620004a1816200043d565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004d257607f821691505b60208210811415620004e957620004e8620004ef565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6133aa80620005a66000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102e0578063c87b56dd146102fc578063d0def5211461032c578063e985e9c514610348578063f2fde38b1461037857610116565b8063715018a61461027e5780638da5cb5b1461028857806395d89b41146102a6578063a22cb465146102c457610116565b806323b872dd116100e957806323b872dd146101b55780632a55205a146101d157806342842e0e146102025780636352211e1461021e57806370a082311461024e57610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190612264565b610394565b6040516101429190612715565b60405180910390f35b6101536103a6565b6040516101609190612730565b60405180910390f35b610183600480360381019061017e91906122b6565b610438565b6040516101909190612685565b60405180910390f35b6101b360048036038101906101ae9190612228565b6104bd565b005b6101cf60048036038101906101ca91906120ce565b6105d5565b005b6101eb60048036038101906101e691906122df565b610635565b6040516101f99291906126ec565b60405180910390f35b61021c600480360381019061021791906120ce565b610820565b005b610238600480360381019061023391906122b6565b610840565b6040516102459190612685565b60405180910390f35b61026860048036038101906102639190612069565b6108f2565b6040516102759190612992565b60405180910390f35b6102866109aa565b005b610290610a32565b60405161029d9190612685565b60405180910390f35b6102ae610a5b565b6040516102bb9190612730565b60405180910390f35b6102de60048036038101906102d99190612198565b610aed565b005b6102fa60048036038101906102f5919061211d565b610b03565b005b610316600480360381019061031191906122b6565b610b65565b6040516103239190612730565b60405180910390f35b610346600480360381019061034191906121d4565b610b77565b005b610362600480360381019061035d9190612092565b610c24565b60405161036f9190612715565b60405180910390f35b610392600480360381019061038d9190612069565b610cb8565b005b600061039f82610db0565b9050919050565b6060600380546103b590612c42565b80601f01602080910402602001604051908101604052809291908181526020018280546103e190612c42565b801561042e5780601f106104035761010080835404028352916020019161042e565b820191906000526020600020905b81548152906001019060200180831161041157829003601f168201915b5050505050905090565b600061044382610dc2565b610482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610479906128f2565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104c882610840565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090612952565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610558610e2e565b73ffffffffffffffffffffffffffffffffffffffff161480610587575061058681610581610e2e565b610c24565b5b6105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd90612832565b60405180910390fd5b6105d08383610e36565b505050565b6105e66105e0610e2e565b82610eef565b610625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061c90612972565b60405180910390fd5b610630838383610fcd565b505050565b6000806000600260008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156107cb5760016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006107d5611234565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866108019190612afe565b61080b9190612acd565b90508160000151819350935050509250929050565b61083b83838360405180602001604052806000815250610b03565b505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e090612872565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612852565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109b2610e2e565b73ffffffffffffffffffffffffffffffffffffffff166109d0610a32565b73ffffffffffffffffffffffffffffffffffffffff1614610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d90612912565b60405180910390fd5b610a30600061123e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a6a90612c42565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690612c42565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b610aff610af8610e2e565b8383611302565b5050565b610b14610b0e610e2e565b83610eef565b610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90612972565b60405180910390fd5b610b5f8484848461146f565b50505050565b6060610b70826114cb565b9050919050565b610b7f610e2e565b73ffffffffffffffffffffffffffffffffffffffff16610b9d610a32565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90612912565b60405180910390fd5b610bfd600a61161d565b6000610c09600a611633565b9050610c158382611641565b610c1f818361181b565b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cc0610e2e565b73ffffffffffffffffffffffffffffffffffffffff16610cde610a32565b73ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90612912565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612772565b60405180910390fd5b610dad8161123e565b50565b6000610dbb8261188f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610ea983610840565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610efa82610dc2565b610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090612812565b60405180910390fd5b6000610f4483610840565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610f865750610f858185610c24565b5b80610fc457508373ffffffffffffffffffffffffffffffffffffffff16610fac84610438565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610fed82610840565b73ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90612792565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa906127d2565b60405180910390fd5b6110be838383611971565b6110c9600082610e36565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111199190612b58565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111709190612a77565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461122f838383611976565b505050565b6000612710905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611368906127f2565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114629190612715565b60405180910390a3505050565b61147a848484610fcd565b6114868484848461197b565b6114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90612752565b60405180910390fd5b50505050565b60606114d682610dc2565b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c906128d2565b60405180910390fd5b600060096000848152602001908152602001600020805461153590612c42565b80601f016020809104026020016040519081016040528092919081815260200182805461156190612c42565b80156115ae5780601f10611583576101008083540402835291602001916115ae565b820191906000526020600020905b81548152906001019060200180831161159157829003601f168201915b5050505050905060006115bf611b12565b90506000815114156115d5578192505050611618565b60008251111561160a5780826040516020016115f2929190612661565b60405160208183030381529060405292505050611618565b61161384611b32565b925050505b919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906128b2565b60405180910390fd5b6116ba81610dc2565b156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f1906127b2565b60405180910390fd5b61170660008383611971565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117569190612a77565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461181760008383611976565b5050565b61182482610dc2565b611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a90612892565b60405180910390fd5b8060096000848152602001908152602001600020908051906020019061188a929190611e8d565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061196a575061196982611bd9565b5b9050919050565b505050565b505050565b600061199c8473ffffffffffffffffffffffffffffffffffffffff16611c53565b15611b05578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119c5610e2e565b8786866040518563ffffffff1660e01b81526004016119e794939291906126a0565b602060405180830381600087803b158015611a0157600080fd5b505af1925050508015611a3257506040513d601f19601f82011682018060405250810190611a2f919061228d565b60015b611ab5573d8060008114611a62576040519150601f19603f3d011682016040523d82523d6000602084013e611a67565b606091505b50600081511415611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490612752565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b0a565b600190505b949350505050565b606060405180606001604052806036815260200161333f60369139905090565b6060611b3d82610dc2565b611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390612932565b60405180910390fd5b6000611b86611b12565b90506000815111611ba65760405180602001604052806000815250611bd1565b80611bb084611c76565b604051602001611bc1929190612661565b6040516020818303038152906040525b915050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c4c5750611c4b82611e23565b5b9050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000821415611cbe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e1e565b600082905060005b60008214611cf0578080611cd990612ca5565b915050600a82611ce99190612acd565b9150611cc6565b60008167ffffffffffffffff811115611d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d645781602001600182028036833780820191505090505b5090505b60008514611e1757600182611d7d9190612b58565b9150600a85611d8c9190612cee565b6030611d989190612a77565b60f81b818381518110611dd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e109190612acd565b9450611d68565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054611e9990612c42565b90600052602060002090601f016020900481019282611ebb5760008555611f02565b82601f10611ed457805160ff1916838001178555611f02565b82800160010185558215611f02579182015b82811115611f01578251825591602001919060010190611ee6565b5b509050611f0f9190611f13565b5090565b5b80821115611f2c576000816000905550600101611f14565b5090565b6000611f43611f3e846129d2565b6129ad565b905082815260208101848484011115611f5b57600080fd5b611f66848285612c00565b509392505050565b6000611f81611f7c84612a03565b6129ad565b905082815260208101848484011115611f9957600080fd5b611fa4848285612c00565b509392505050565b600081359050611fbb816132e2565b92915050565b600081359050611fd0816132f9565b92915050565b600081359050611fe581613310565b92915050565b600081519050611ffa81613310565b92915050565b600082601f83011261201157600080fd5b8135612021848260208601611f30565b91505092915050565b600082601f83011261203b57600080fd5b813561204b848260208601611f6e565b91505092915050565b60008135905061206381613327565b92915050565b60006020828403121561207b57600080fd5b600061208984828501611fac565b91505092915050565b600080604083850312156120a557600080fd5b60006120b385828601611fac565b92505060206120c485828601611fac565b9150509250929050565b6000806000606084860312156120e357600080fd5b60006120f186828701611fac565b935050602061210286828701611fac565b925050604061211386828701612054565b9150509250925092565b6000806000806080858703121561213357600080fd5b600061214187828801611fac565b945050602061215287828801611fac565b935050604061216387828801612054565b925050606085013567ffffffffffffffff81111561218057600080fd5b61218c87828801612000565b91505092959194509250565b600080604083850312156121ab57600080fd5b60006121b985828601611fac565b92505060206121ca85828601611fc1565b9150509250929050565b600080604083850312156121e757600080fd5b60006121f585828601611fac565b925050602083013567ffffffffffffffff81111561221257600080fd5b61221e8582860161202a565b9150509250929050565b6000806040838503121561223b57600080fd5b600061224985828601611fac565b925050602061225a85828601612054565b9150509250929050565b60006020828403121561227657600080fd5b600061228484828501611fd6565b91505092915050565b60006020828403121561229f57600080fd5b60006122ad84828501611feb565b91505092915050565b6000602082840312156122c857600080fd5b60006122d684828501612054565b91505092915050565b600080604083850312156122f257600080fd5b600061230085828601612054565b925050602061231185828601612054565b9150509250929050565b61232481612b8c565b82525050565b61233381612b9e565b82525050565b600061234482612a34565b61234e8185612a4a565b935061235e818560208601612c0f565b61236781612ddb565b840191505092915050565b600061237d82612a3f565b6123878185612a5b565b9350612397818560208601612c0f565b6123a081612ddb565b840191505092915050565b60006123b682612a3f565b6123c08185612a6c565b93506123d0818560208601612c0f565b80840191505092915050565b60006123e9603283612a5b565b91506123f482612dec565b604082019050919050565b600061240c602683612a5b565b915061241782612e3b565b604082019050919050565b600061242f602583612a5b565b915061243a82612e8a565b604082019050919050565b6000612452601c83612a5b565b915061245d82612ed9565b602082019050919050565b6000612475602483612a5b565b915061248082612f02565b604082019050919050565b6000612498601983612a5b565b91506124a382612f51565b602082019050919050565b60006124bb602c83612a5b565b91506124c682612f7a565b604082019050919050565b60006124de603883612a5b565b91506124e982612fc9565b604082019050919050565b6000612501602a83612a5b565b915061250c82613018565b604082019050919050565b6000612524602983612a5b565b915061252f82613067565b604082019050919050565b6000612547602e83612a5b565b9150612552826130b6565b604082019050919050565b600061256a602083612a5b565b915061257582613105565b602082019050919050565b600061258d603183612a5b565b91506125988261312e565b604082019050919050565b60006125b0602c83612a5b565b91506125bb8261317d565b604082019050919050565b60006125d3602083612a5b565b91506125de826131cc565b602082019050919050565b60006125f6602f83612a5b565b9150612601826131f5565b604082019050919050565b6000612619602183612a5b565b915061262482613244565b604082019050919050565b600061263c603183612a5b565b915061264782613293565b604082019050919050565b61265b81612bf6565b82525050565b600061266d82856123ab565b915061267982846123ab565b91508190509392505050565b600060208201905061269a600083018461231b565b92915050565b60006080820190506126b5600083018761231b565b6126c2602083018661231b565b6126cf6040830185612652565b81810360608301526126e18184612339565b905095945050505050565b6000604082019050612701600083018561231b565b61270e6020830184612652565b9392505050565b600060208201905061272a600083018461232a565b92915050565b6000602082019050818103600083015261274a8184612372565b905092915050565b6000602082019050818103600083015261276b816123dc565b9050919050565b6000602082019050818103600083015261278b816123ff565b9050919050565b600060208201905081810360008301526127ab81612422565b9050919050565b600060208201905081810360008301526127cb81612445565b9050919050565b600060208201905081810360008301526127eb81612468565b9050919050565b6000602082019050818103600083015261280b8161248b565b9050919050565b6000602082019050818103600083015261282b816124ae565b9050919050565b6000602082019050818103600083015261284b816124d1565b9050919050565b6000602082019050818103600083015261286b816124f4565b9050919050565b6000602082019050818103600083015261288b81612517565b9050919050565b600060208201905081810360008301526128ab8161253a565b9050919050565b600060208201905081810360008301526128cb8161255d565b9050919050565b600060208201905081810360008301526128eb81612580565b9050919050565b6000602082019050818103600083015261290b816125a3565b9050919050565b6000602082019050818103600083015261292b816125c6565b9050919050565b6000602082019050818103600083015261294b816125e9565b9050919050565b6000602082019050818103600083015261296b8161260c565b9050919050565b6000602082019050818103600083015261298b8161262f565b9050919050565b60006020820190506129a76000830184612652565b92915050565b60006129b76129c8565b90506129c38282612c74565b919050565b6000604051905090565b600067ffffffffffffffff8211156129ed576129ec612dac565b5b6129f682612ddb565b9050602081019050919050565b600067ffffffffffffffff821115612a1e57612a1d612dac565b5b612a2782612ddb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a8282612bf6565b9150612a8d83612bf6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ac257612ac1612d1f565b5b828201905092915050565b6000612ad882612bf6565b9150612ae383612bf6565b925082612af357612af2612d4e565b5b828204905092915050565b6000612b0982612bf6565b9150612b1483612bf6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b4d57612b4c612d1f565b5b828202905092915050565b6000612b6382612bf6565b9150612b6e83612bf6565b925082821015612b8157612b80612d1f565b5b828203905092915050565b6000612b9782612bd6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c2d578082015181840152602081019050612c12565b83811115612c3c576000848401525b50505050565b60006002820490506001821680612c5a57607f821691505b60208210811415612c6e57612c6d612d7d565b5b50919050565b612c7d82612ddb565b810181811067ffffffffffffffff82111715612c9c57612c9b612dac565b5b80604052505050565b6000612cb082612bf6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ce357612ce2612d1f565b5b600182019050919050565b6000612cf982612bf6565b9150612d0483612bf6565b925082612d1457612d13612d4e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6132eb81612b8c565b81146132f657600080fd5b50565b61330281612b9e565b811461330d57600080fd5b50565b61331981612baa565b811461332457600080fd5b50565b61333081612bf6565b811461333b57600080fd5b5056fe697066733a2f2f516d554e6434524a6d586a516759374638627236436235553431477243423969575a74324d505a484c59317a78342fa26469706673582212202a5a397c08a7acd1d6a2c33c16f3d4d59a5aaacc0238d4fde731b770831ebdf064736f6c63430008010033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102e0578063c87b56dd146102fc578063d0def5211461032c578063e985e9c514610348578063f2fde38b1461037857610116565b8063715018a61461027e5780638da5cb5b1461028857806395d89b41146102a6578063a22cb465146102c457610116565b806323b872dd116100e957806323b872dd146101b55780632a55205a146101d157806342842e0e146102025780636352211e1461021e57806370a082311461024e57610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190612264565b610394565b6040516101429190612715565b60405180910390f35b6101536103a6565b6040516101609190612730565b60405180910390f35b610183600480360381019061017e91906122b6565b610438565b6040516101909190612685565b60405180910390f35b6101b360048036038101906101ae9190612228565b6104bd565b005b6101cf60048036038101906101ca91906120ce565b6105d5565b005b6101eb60048036038101906101e691906122df565b610635565b6040516101f99291906126ec565b60405180910390f35b61021c600480360381019061021791906120ce565b610820565b005b610238600480360381019061023391906122b6565b610840565b6040516102459190612685565b60405180910390f35b61026860048036038101906102639190612069565b6108f2565b6040516102759190612992565b60405180910390f35b6102866109aa565b005b610290610a32565b60405161029d9190612685565b60405180910390f35b6102ae610a5b565b6040516102bb9190612730565b60405180910390f35b6102de60048036038101906102d99190612198565b610aed565b005b6102fa60048036038101906102f5919061211d565b610b03565b005b610316600480360381019061031191906122b6565b610b65565b6040516103239190612730565b60405180910390f35b610346600480360381019061034191906121d4565b610b77565b005b610362600480360381019061035d9190612092565b610c24565b60405161036f9190612715565b60405180910390f35b610392600480360381019061038d9190612069565b610cb8565b005b600061039f82610db0565b9050919050565b6060600380546103b590612c42565b80601f01602080910402602001604051908101604052809291908181526020018280546103e190612c42565b801561042e5780601f106104035761010080835404028352916020019161042e565b820191906000526020600020905b81548152906001019060200180831161041157829003601f168201915b5050505050905090565b600061044382610dc2565b610482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610479906128f2565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104c882610840565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090612952565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610558610e2e565b73ffffffffffffffffffffffffffffffffffffffff161480610587575061058681610581610e2e565b610c24565b5b6105c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bd90612832565b60405180910390fd5b6105d08383610e36565b505050565b6105e66105e0610e2e565b82610eef565b610625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061c90612972565b60405180910390fd5b610630838383610fcd565b505050565b6000806000600260008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156107cb5760016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006107d5611234565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866108019190612afe565b61080b9190612acd565b90508160000151819350935050509250929050565b61083b83838360405180602001604052806000815250610b03565b505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e090612872565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a90612852565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109b2610e2e565b73ffffffffffffffffffffffffffffffffffffffff166109d0610a32565b73ffffffffffffffffffffffffffffffffffffffff1614610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d90612912565b60405180910390fd5b610a30600061123e565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a6a90612c42565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690612c42565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b610aff610af8610e2e565b8383611302565b5050565b610b14610b0e610e2e565b83610eef565b610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90612972565b60405180910390fd5b610b5f8484848461146f565b50505050565b6060610b70826114cb565b9050919050565b610b7f610e2e565b73ffffffffffffffffffffffffffffffffffffffff16610b9d610a32565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90612912565b60405180910390fd5b610bfd600a61161d565b6000610c09600a611633565b9050610c158382611641565b610c1f818361181b565b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cc0610e2e565b73ffffffffffffffffffffffffffffffffffffffff16610cde610a32565b73ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90612912565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612772565b60405180910390fd5b610dad8161123e565b50565b6000610dbb8261188f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610ea983610840565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610efa82610dc2565b610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090612812565b60405180910390fd5b6000610f4483610840565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610f865750610f858185610c24565b5b80610fc457508373ffffffffffffffffffffffffffffffffffffffff16610fac84610438565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610fed82610840565b73ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90612792565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa906127d2565b60405180910390fd5b6110be838383611971565b6110c9600082610e36565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111199190612b58565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111709190612a77565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461122f838383611976565b505050565b6000612710905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611368906127f2565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114629190612715565b60405180910390a3505050565b61147a848484610fcd565b6114868484848461197b565b6114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90612752565b60405180910390fd5b50505050565b60606114d682610dc2565b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c906128d2565b60405180910390fd5b600060096000848152602001908152602001600020805461153590612c42565b80601f016020809104026020016040519081016040528092919081815260200182805461156190612c42565b80156115ae5780601f10611583576101008083540402835291602001916115ae565b820191906000526020600020905b81548152906001019060200180831161159157829003601f168201915b5050505050905060006115bf611b12565b90506000815114156115d5578192505050611618565b60008251111561160a5780826040516020016115f2929190612661565b60405160208183030381529060405292505050611618565b61161384611b32565b925050505b919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906128b2565b60405180910390fd5b6116ba81610dc2565b156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f1906127b2565b60405180910390fd5b61170660008383611971565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117569190612a77565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461181760008383611976565b5050565b61182482610dc2565b611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a90612892565b60405180910390fd5b8060096000848152602001908152602001600020908051906020019061188a929190611e8d565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061196a575061196982611bd9565b5b9050919050565b505050565b505050565b600061199c8473ffffffffffffffffffffffffffffffffffffffff16611c53565b15611b05578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119c5610e2e565b8786866040518563ffffffff1660e01b81526004016119e794939291906126a0565b602060405180830381600087803b158015611a0157600080fd5b505af1925050508015611a3257506040513d601f19601f82011682018060405250810190611a2f919061228d565b60015b611ab5573d8060008114611a62576040519150601f19603f3d011682016040523d82523d6000602084013e611a67565b606091505b50600081511415611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490612752565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b0a565b600190505b949350505050565b606060405180606001604052806036815260200161333f60369139905090565b6060611b3d82610dc2565b611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390612932565b60405180910390fd5b6000611b86611b12565b90506000815111611ba65760405180602001604052806000815250611bd1565b80611bb084611c76565b604051602001611bc1929190612661565b6040516020818303038152906040525b915050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c4c5750611c4b82611e23565b5b9050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000821415611cbe576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e1e565b600082905060005b60008214611cf0578080611cd990612ca5565b915050600a82611ce99190612acd565b9150611cc6565b60008167ffffffffffffffff811115611d32577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611d645781602001600182028036833780820191505090505b5090505b60008514611e1757600182611d7d9190612b58565b9150600a85611d8c9190612cee565b6030611d989190612a77565b60f81b818381518110611dd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e109190612acd565b9450611d68565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054611e9990612c42565b90600052602060002090601f016020900481019282611ebb5760008555611f02565b82601f10611ed457805160ff1916838001178555611f02565b82800160010185558215611f02579182015b82811115611f01578251825591602001919060010190611ee6565b5b509050611f0f9190611f13565b5090565b5b80821115611f2c576000816000905550600101611f14565b5090565b6000611f43611f3e846129d2565b6129ad565b905082815260208101848484011115611f5b57600080fd5b611f66848285612c00565b509392505050565b6000611f81611f7c84612a03565b6129ad565b905082815260208101848484011115611f9957600080fd5b611fa4848285612c00565b509392505050565b600081359050611fbb816132e2565b92915050565b600081359050611fd0816132f9565b92915050565b600081359050611fe581613310565b92915050565b600081519050611ffa81613310565b92915050565b600082601f83011261201157600080fd5b8135612021848260208601611f30565b91505092915050565b600082601f83011261203b57600080fd5b813561204b848260208601611f6e565b91505092915050565b60008135905061206381613327565b92915050565b60006020828403121561207b57600080fd5b600061208984828501611fac565b91505092915050565b600080604083850312156120a557600080fd5b60006120b385828601611fac565b92505060206120c485828601611fac565b9150509250929050565b6000806000606084860312156120e357600080fd5b60006120f186828701611fac565b935050602061210286828701611fac565b925050604061211386828701612054565b9150509250925092565b6000806000806080858703121561213357600080fd5b600061214187828801611fac565b945050602061215287828801611fac565b935050604061216387828801612054565b925050606085013567ffffffffffffffff81111561218057600080fd5b61218c87828801612000565b91505092959194509250565b600080604083850312156121ab57600080fd5b60006121b985828601611fac565b92505060206121ca85828601611fc1565b9150509250929050565b600080604083850312156121e757600080fd5b60006121f585828601611fac565b925050602083013567ffffffffffffffff81111561221257600080fd5b61221e8582860161202a565b9150509250929050565b6000806040838503121561223b57600080fd5b600061224985828601611fac565b925050602061225a85828601612054565b9150509250929050565b60006020828403121561227657600080fd5b600061228484828501611fd6565b91505092915050565b60006020828403121561229f57600080fd5b60006122ad84828501611feb565b91505092915050565b6000602082840312156122c857600080fd5b60006122d684828501612054565b91505092915050565b600080604083850312156122f257600080fd5b600061230085828601612054565b925050602061231185828601612054565b9150509250929050565b61232481612b8c565b82525050565b61233381612b9e565b82525050565b600061234482612a34565b61234e8185612a4a565b935061235e818560208601612c0f565b61236781612ddb565b840191505092915050565b600061237d82612a3f565b6123878185612a5b565b9350612397818560208601612c0f565b6123a081612ddb565b840191505092915050565b60006123b682612a3f565b6123c08185612a6c565b93506123d0818560208601612c0f565b80840191505092915050565b60006123e9603283612a5b565b91506123f482612dec565b604082019050919050565b600061240c602683612a5b565b915061241782612e3b565b604082019050919050565b600061242f602583612a5b565b915061243a82612e8a565b604082019050919050565b6000612452601c83612a5b565b915061245d82612ed9565b602082019050919050565b6000612475602483612a5b565b915061248082612f02565b604082019050919050565b6000612498601983612a5b565b91506124a382612f51565b602082019050919050565b60006124bb602c83612a5b565b91506124c682612f7a565b604082019050919050565b60006124de603883612a5b565b91506124e982612fc9565b604082019050919050565b6000612501602a83612a5b565b915061250c82613018565b604082019050919050565b6000612524602983612a5b565b915061252f82613067565b604082019050919050565b6000612547602e83612a5b565b9150612552826130b6565b604082019050919050565b600061256a602083612a5b565b915061257582613105565b602082019050919050565b600061258d603183612a5b565b91506125988261312e565b604082019050919050565b60006125b0602c83612a5b565b91506125bb8261317d565b604082019050919050565b60006125d3602083612a5b565b91506125de826131cc565b602082019050919050565b60006125f6602f83612a5b565b9150612601826131f5565b604082019050919050565b6000612619602183612a5b565b915061262482613244565b604082019050919050565b600061263c603183612a5b565b915061264782613293565b604082019050919050565b61265b81612bf6565b82525050565b600061266d82856123ab565b915061267982846123ab565b91508190509392505050565b600060208201905061269a600083018461231b565b92915050565b60006080820190506126b5600083018761231b565b6126c2602083018661231b565b6126cf6040830185612652565b81810360608301526126e18184612339565b905095945050505050565b6000604082019050612701600083018561231b565b61270e6020830184612652565b9392505050565b600060208201905061272a600083018461232a565b92915050565b6000602082019050818103600083015261274a8184612372565b905092915050565b6000602082019050818103600083015261276b816123dc565b9050919050565b6000602082019050818103600083015261278b816123ff565b9050919050565b600060208201905081810360008301526127ab81612422565b9050919050565b600060208201905081810360008301526127cb81612445565b9050919050565b600060208201905081810360008301526127eb81612468565b9050919050565b6000602082019050818103600083015261280b8161248b565b9050919050565b6000602082019050818103600083015261282b816124ae565b9050919050565b6000602082019050818103600083015261284b816124d1565b9050919050565b6000602082019050818103600083015261286b816124f4565b9050919050565b6000602082019050818103600083015261288b81612517565b9050919050565b600060208201905081810360008301526128ab8161253a565b9050919050565b600060208201905081810360008301526128cb8161255d565b9050919050565b600060208201905081810360008301526128eb81612580565b9050919050565b6000602082019050818103600083015261290b816125a3565b9050919050565b6000602082019050818103600083015261292b816125c6565b9050919050565b6000602082019050818103600083015261294b816125e9565b9050919050565b6000602082019050818103600083015261296b8161260c565b9050919050565b6000602082019050818103600083015261298b8161262f565b9050919050565b60006020820190506129a76000830184612652565b92915050565b60006129b76129c8565b90506129c38282612c74565b919050565b6000604051905090565b600067ffffffffffffffff8211156129ed576129ec612dac565b5b6129f682612ddb565b9050602081019050919050565b600067ffffffffffffffff821115612a1e57612a1d612dac565b5b612a2782612ddb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a8282612bf6565b9150612a8d83612bf6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ac257612ac1612d1f565b5b828201905092915050565b6000612ad882612bf6565b9150612ae383612bf6565b925082612af357612af2612d4e565b5b828204905092915050565b6000612b0982612bf6565b9150612b1483612bf6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b4d57612b4c612d1f565b5b828202905092915050565b6000612b6382612bf6565b9150612b6e83612bf6565b925082821015612b8157612b80612d1f565b5b828203905092915050565b6000612b9782612bd6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612c2d578082015181840152602081019050612c12565b83811115612c3c576000848401525b50505050565b60006002820490506001821680612c5a57607f821691505b60208210811415612c6e57612c6d612d7d565b5b50919050565b612c7d82612ddb565b810181811067ffffffffffffffff82111715612c9c57612c9b612dac565b5b80604052505050565b6000612cb082612bf6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ce357612ce2612d1f565b5b600182019050919050565b6000612cf982612bf6565b9150612d0483612bf6565b925082612d1457612d13612d4e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6132eb81612b8c565b81146132f657600080fd5b50565b61330281612b9e565b811461330d57600080fd5b50565b61331981612baa565b811461332457600080fd5b50565b61333081612bf6565b811461333b57600080fd5b5056fe697066733a2f2f516d554e6434524a6d586a516759374638627236436235553431477243423969575a74324d505a484c59317a78342fa26469706673582212202a5a397c08a7acd1d6a2c33c16f3d4d59a5aaacc0238d4fde731b770831ebdf064736f6c63430008010033

Deployed Bytecode Sourcemap

46091:1265:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47144:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24292:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25852:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25375:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26602:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40857:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27012:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23986:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23716:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6317:103;;;:::i;:::-;;5666:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24461:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26145:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27268:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46777:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46509:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26371:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6575:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47144:209;47280:4;47309:36;47333:11;47309:23;:36::i;:::-;47302:43;;47144:209;;;:::o;24292:100::-;24346:13;24379:5;24372:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24292:100;:::o;25852:221::-;25928:7;25956:16;25964:7;25956;:16::i;:::-;25948:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26041:15;:24;26057:7;26041:24;;;;;;;;;;;;;;;;;;;;;26034:31;;25852:221;;;:::o;25375:411::-;25456:13;25472:23;25487:7;25472:14;:23::i;:::-;25456:39;;25520:5;25514:11;;:2;:11;;;;25506:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25614:5;25598:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25623:37;25640:5;25647:12;:10;:12::i;:::-;25623:16;:37::i;:::-;25598:62;25576:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25757:21;25766:2;25770:7;25757:8;:21::i;:::-;25375:411;;;:::o;26602:339::-;26797:41;26816:12;:10;:12::i;:::-;26830:7;26797:18;:41::i;:::-;26789:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26905:28;26915:4;26921:2;26925:7;26905:9;:28::i;:::-;26602:339;;;:::o;40857:442::-;40954:7;40963;40983:26;41012:17;:27;41030:8;41012:27;;;;;;;;;;;40983:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41084:1;41056:30;;:7;:16;;;:30;;;41052:92;;;41113:19;41103:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41052:92;41156:21;41221:17;:15;:17::i;:::-;41180:58;;41194:7;:23;;;41181:36;;:10;:36;;;;:::i;:::-;41180:58;;;;:::i;:::-;41156:82;;41259:7;:16;;;41277:13;41251:40;;;;;;40857:442;;;;;:::o;27012:185::-;27150:39;27167:4;27173:2;27177:7;27150:39;;;;;;;;;;;;:16;:39::i;:::-;27012:185;;;:::o;23986:239::-;24058:7;24078:13;24094:7;:16;24102:7;24094:16;;;;;;;;;;;;;;;;;;;;;24078:32;;24146:1;24129:19;;:5;:19;;;;24121:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24212:5;24205:12;;;23986:239;;;:::o;23716:208::-;23788:7;23833:1;23816:19;;:5;:19;;;;23808:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23900:9;:16;23910:5;23900:16;;;;;;;;;;;;;;;;23893:23;;23716:208;;;:::o;6317:103::-;5897:12;:10;:12::i;:::-;5886:23;;:7;:5;:7::i;:::-;:23;;;5878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6382:30:::1;6409:1;6382:18;:30::i;:::-;6317:103::o:0;5666:87::-;5712:7;5739:6;;;;;;;;;;;5732:13;;5666:87;:::o;24461:104::-;24517:13;24550:7;24543:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24461:104;:::o;26145:155::-;26240:52;26259:12;:10;:12::i;:::-;26273:8;26283;26240:18;:52::i;:::-;26145:155;;:::o;27268:328::-;27443:41;27462:12;:10;:12::i;:::-;27476:7;27443:18;:41::i;:::-;27435:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27549:39;27563:4;27569:2;27573:7;27582:5;27549:13;:39::i;:::-;27268:328;;;;:::o;46777:196::-;46904:13;46942:23;46957:7;46942:14;:23::i;:::-;46935:30;;46777:196;;;:::o;46509:260::-;5897:12;:10;:12::i;:::-;5886:23;;:7;:5;:7::i;:::-;:23;;;5878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46615:21:::1;:9;:19;:21::i;:::-;46647:15;46665:19;:9;:17;:19::i;:::-;46647:37;;46695:21;46701:5;46708:7;46695:5;:21::i;:::-;46727:34;46740:7;46749:11;46727:12;:34::i;:::-;5957:1;46509:260:::0;;:::o;26371:164::-;26468:4;26492:18;:25;26511:5;26492:25;;;;;;;;;;;;;;;:35;26518:8;26492:35;;;;;;;;;;;;;;;;;;;;;;;;;26485:42;;26371:164;;;;:::o;6575:201::-;5897:12;:10;:12::i;:::-;5886:23;;:7;:5;:7::i;:::-;:23;;;5878:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6684:1:::1;6664:22;;:8;:22;;;;6656:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6740:28;6759:8;6740:18;:28::i;:::-;6575:201:::0;:::o;44258:170::-;44360:4;44384:36;44408:11;44384:23;:36::i;:::-;44377:43;;44258:170;;;:::o;29106:127::-;29171:4;29223:1;29195:30;;:7;:16;29203:7;29195:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29188:37;;29106:127;;;:::o;4464:98::-;4517:7;4544:10;4537:17;;4464:98;:::o;33252:174::-;33354:2;33327:15;:24;33343:7;33327:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33410:7;33406:2;33372:46;;33381:23;33396:7;33381:14;:23::i;:::-;33372:46;;;;;;;;;;;;33252:174;;:::o;29400:348::-;29493:4;29518:16;29526:7;29518;:16::i;:::-;29510:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:13;29610:23;29625:7;29610:14;:23::i;:::-;29594:39;;29663:5;29652:16;;:7;:16;;;:52;;;;29672:32;29689:5;29696:7;29672:16;:32::i;:::-;29652:52;:87;;;;29732:7;29708:31;;:20;29720:7;29708:11;:20::i;:::-;:31;;;29652:87;29644:96;;;29400:348;;;;:::o;32509:625::-;32668:4;32641:31;;:23;32656:7;32641:14;:23::i;:::-;:31;;;32633:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32747:1;32733:16;;:2;:16;;;;32725:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32803:39;32824:4;32830:2;32834:7;32803:20;:39::i;:::-;32907:29;32924:1;32928:7;32907:8;:29::i;:::-;32968:1;32949:9;:15;32959:4;32949:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32997:1;32980:9;:13;32990:2;32980:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33028:2;33009:7;:16;33017:7;33009:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33067:7;33063:2;33048:27;;33057:4;33048:27;;;;;;;;;;;;33088:38;33108:4;33114:2;33118:7;33088:19;:38::i;:::-;32509:625;;;:::o;41581:97::-;41639:6;41665:5;41658:12;;41581:97;:::o;6936:191::-;7010:16;7029:6;;;;;;;;;;;7010:25;;7055:8;7046:6;;:17;;;;;;;;;;;;;;;;;;7110:8;7079:40;;7100:8;7079:40;;;;;;;;;;;;6936:191;;:::o;33568:315::-;33723:8;33714:17;;:5;:17;;;;33706:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33810:8;33772:18;:25;33791:5;33772:25;;;;;;;;;;;;;;;:35;33798:8;33772:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33856:8;33834:41;;33849:5;33834:41;;;33866:8;33834:41;;;;;;:::i;:::-;;;;;;;;33568:315;;;:::o;28478:::-;28635:28;28645:4;28651:2;28655:7;28635:9;:28::i;:::-;28682:48;28705:4;28711:2;28715:7;28724:5;28682:22;:48::i;:::-;28674:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28478:315;;;;:::o;36871:679::-;36944:13;36978:16;36986:7;36978;:16::i;:::-;36970:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37061:23;37087:10;:19;37098:7;37087:19;;;;;;;;;;;37061:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37117:18;37138:10;:8;:10::i;:::-;37117:31;;37246:1;37230:4;37224:18;:23;37220:72;;;37271:9;37264:16;;;;;;37220:72;37422:1;37402:9;37396:23;:27;37392:108;;;37471:4;37477:9;37454:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37440:48;;;;;;37392:108;37519:23;37534:7;37519:14;:23::i;:::-;37512:30;;;;36871:679;;;;:::o;45618:127::-;45725:1;45707:7;:14;;;:19;;;;;;;;;;;45618:127;:::o;45496:114::-;45561:7;45588;:14;;;45581:21;;45496:114;;;:::o;31084:439::-;31178:1;31164:16;;:2;:16;;;;31156:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31237:16;31245:7;31237;:16::i;:::-;31236:17;31228:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31299:45;31328:1;31332:2;31336:7;31299:20;:45::i;:::-;31374:1;31357:9;:13;31367:2;31357:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31405:2;31386:7;:16;31394:7;31386:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31450:7;31446:2;31425:33;;31442:1;31425:33;;;;;;;;;;;;31471:44;31499:1;31503:2;31507:7;31471:19;:44::i;:::-;31084:439;;:::o;37706:217::-;37806:16;37814:7;37806;:16::i;:::-;37798:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37906:9;37884:10;:19;37895:7;37884:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;37706:217;;:::o;23347:305::-;23449:4;23501:25;23486:40;;;:11;:40;;;;:105;;;;23558:33;23543:48;;;:11;:48;;;;23486:105;:158;;;;23608:36;23632:11;23608:23;:36::i;:::-;23486:158;23466:178;;23347:305;;;:::o;35819:126::-;;;;:::o;36330:125::-;;;;:::o;34448:799::-;34603:4;34624:15;:2;:13;;;:15::i;:::-;34620:620;;;34676:2;34660:36;;;34697:12;:10;:12::i;:::-;34711:4;34717:7;34726:5;34660:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34656:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34919:1;34902:6;:13;:18;34898:272;;;34945:60;;;;;;;;;;:::i;:::-;;;;;;;;34898:272;35120:6;35114:13;35105:6;35101:2;35097:15;35090:38;34656:529;34793:41;;;34783:51;;;:6;:51;;;;34776:58;;;;;34620:620;35224:4;35217:11;;34448:799;;;;;;;:::o;46344:157::-;46404:13;46430:63;;;;;;;;;;;;;;;;;;;46344:157;:::o;24636:334::-;24709:13;24743:16;24751:7;24743;:16::i;:::-;24735:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24824:21;24848:10;:8;:10::i;:::-;24824:34;;24900:1;24882:7;24876:21;:25;:86;;;;;;;;;;;;;;;;;24928:7;24937:18;:7;:16;:18::i;:::-;24911:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24876:86;24869:93;;;24636:334;;;:::o;40587:215::-;40689:4;40728:26;40713:41;;;:11;:41;;;;:81;;;;40758:36;40782:11;40758:23;:36::i;:::-;40713:81;40706:88;;40587:215;;;:::o;14842:326::-;14902:4;15159:1;15137:7;:19;;;:23;15130:30;;14842:326;;;:::o;2105:723::-;2161:13;2391:1;2382:5;:10;2378:53;;;2409:10;;;;;;;;;;;;;;;;;;;;;2378:53;2441:12;2456:5;2441:20;;2472:14;2497:78;2512:1;2504:4;:9;2497:78;;2530:8;;;;;:::i;:::-;;;;2561:2;2553:10;;;;;:::i;:::-;;;2497:78;;;2585:19;2617:6;2607:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2585:39;;2635:154;2651:1;2642:5;:10;2635:154;;2679:1;2669:11;;;;;:::i;:::-;;;2746:2;2738:5;:10;;;;:::i;:::-;2725:2;:24;;;;:::i;:::-;2712:39;;2695:6;2702;2695:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2775:2;2766:11;;;;;:::i;:::-;;;2635:154;;;2813:6;2799:21;;;;;2105:723;;;;:::o;1655:157::-;1740:4;1779:25;1764:40;;;:11;:40;;;;1757:47;;1655:157;;;:::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:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:520::-;;;4605:2;4593:9;4584:7;4580:23;4576:32;4573:2;;;4621:1;4618;4611:12;4573:2;4664:1;4689:53;4734:7;4725:6;4714:9;4710:22;4689:53;:::i;:::-;4679:63;;4635:117;4819:2;4808:9;4804:18;4791:32;4850:18;4842:6;4839:30;4836:2;;;4882:1;4879;4872:12;4836:2;4910:63;4965:7;4956:6;4945:9;4941:22;4910:63;:::i;:::-;4900:73;;4762:221;4563:427;;;;;:::o;4996:407::-;;;5121:2;5109:9;5100:7;5096:23;5092:32;5089:2;;;5137:1;5134;5127:12;5089:2;5180:1;5205:53;5250:7;5241:6;5230:9;5226:22;5205:53;:::i;:::-;5195:63;;5151:117;5307:2;5333:53;5378:7;5369:6;5358:9;5354:22;5333:53;:::i;:::-;5323:63;;5278:118;5079:324;;;;;:::o;5409:260::-;;5516:2;5504:9;5495:7;5491:23;5487:32;5484:2;;;5532:1;5529;5522:12;5484:2;5575:1;5600:52;5644:7;5635:6;5624:9;5620:22;5600:52;:::i;:::-;5590:62;;5546:116;5474:195;;;;:::o;5675:282::-;;5793:2;5781:9;5772:7;5768:23;5764:32;5761:2;;;5809:1;5806;5799:12;5761:2;5852:1;5877:63;5932:7;5923:6;5912:9;5908:22;5877:63;:::i;:::-;5867:73;;5823:127;5751:206;;;;:::o;5963:262::-;;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6087:1;6084;6077:12;6039:2;6130:1;6155:53;6200:7;6191:6;6180:9;6176:22;6155:53;:::i;:::-;6145:63;;6101:117;6029:196;;;;:::o;6231:407::-;;;6356:2;6344:9;6335:7;6331:23;6327:32;6324:2;;;6372:1;6369;6362:12;6324:2;6415:1;6440:53;6485:7;6476:6;6465:9;6461:22;6440:53;:::i;:::-;6430:63;;6386:117;6542:2;6568:53;6613:7;6604:6;6593:9;6589:22;6568:53;:::i;:::-;6558:63;;6513:118;6314:324;;;;;:::o;6644:118::-;6731:24;6749:5;6731:24;:::i;:::-;6726:3;6719:37;6709:53;;:::o;6768:109::-;6849:21;6864:5;6849:21;:::i;:::-;6844:3;6837:34;6827:50;;:::o;6883:360::-;;6997:38;7029:5;6997:38;:::i;:::-;7051:70;7114:6;7109:3;7051:70;:::i;:::-;7044:77;;7130:52;7175:6;7170:3;7163:4;7156:5;7152:16;7130:52;:::i;:::-;7207:29;7229:6;7207:29;:::i;:::-;7202:3;7198:39;7191:46;;6973:270;;;;;:::o;7249:364::-;;7365:39;7398:5;7365:39;:::i;:::-;7420:71;7484:6;7479:3;7420:71;:::i;:::-;7413:78;;7500:52;7545:6;7540:3;7533:4;7526:5;7522:16;7500:52;:::i;:::-;7577:29;7599:6;7577:29;:::i;:::-;7572:3;7568:39;7561:46;;7341:272;;;;;:::o;7619:377::-;;7753:39;7786:5;7753:39;:::i;:::-;7808:89;7890:6;7885:3;7808:89;:::i;:::-;7801:96;;7906:52;7951:6;7946:3;7939:4;7932:5;7928:16;7906:52;:::i;:::-;7983:6;7978:3;7974:16;7967:23;;7729:267;;;;;:::o;8002:366::-;;8165:67;8229:2;8224:3;8165:67;:::i;:::-;8158:74;;8241:93;8330:3;8241:93;:::i;:::-;8359:2;8354:3;8350:12;8343:19;;8148:220;;;:::o;8374:366::-;;8537:67;8601:2;8596:3;8537:67;:::i;:::-;8530:74;;8613:93;8702:3;8613:93;:::i;:::-;8731:2;8726:3;8722:12;8715:19;;8520:220;;;:::o;8746:366::-;;8909:67;8973:2;8968:3;8909:67;:::i;:::-;8902:74;;8985:93;9074:3;8985:93;:::i;:::-;9103:2;9098:3;9094:12;9087:19;;8892:220;;;:::o;9118:366::-;;9281:67;9345:2;9340:3;9281:67;:::i;:::-;9274:74;;9357:93;9446:3;9357:93;:::i;:::-;9475:2;9470:3;9466:12;9459:19;;9264:220;;;:::o;9490:366::-;;9653:67;9717:2;9712:3;9653:67;:::i;:::-;9646:74;;9729:93;9818:3;9729:93;:::i;:::-;9847:2;9842:3;9838:12;9831:19;;9636:220;;;:::o;9862:366::-;;10025:67;10089:2;10084:3;10025:67;:::i;:::-;10018:74;;10101:93;10190:3;10101:93;:::i;:::-;10219:2;10214:3;10210:12;10203:19;;10008:220;;;:::o;10234:366::-;;10397:67;10461:2;10456:3;10397:67;:::i;:::-;10390:74;;10473:93;10562:3;10473:93;:::i;:::-;10591:2;10586:3;10582:12;10575:19;;10380:220;;;:::o;10606:366::-;;10769:67;10833:2;10828:3;10769:67;:::i;:::-;10762:74;;10845:93;10934:3;10845:93;:::i;:::-;10963:2;10958:3;10954:12;10947:19;;10752:220;;;:::o;10978:366::-;;11141:67;11205:2;11200:3;11141:67;:::i;:::-;11134:74;;11217:93;11306:3;11217:93;:::i;:::-;11335:2;11330:3;11326:12;11319:19;;11124:220;;;:::o;11350:366::-;;11513:67;11577:2;11572:3;11513:67;:::i;:::-;11506:74;;11589:93;11678:3;11589:93;:::i;:::-;11707:2;11702:3;11698:12;11691:19;;11496:220;;;:::o;11722:366::-;;11885:67;11949:2;11944:3;11885:67;:::i;:::-;11878:74;;11961:93;12050:3;11961:93;:::i;:::-;12079:2;12074:3;12070:12;12063:19;;11868:220;;;:::o;12094:366::-;;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12333:93;12422:3;12333:93;:::i;:::-;12451:2;12446:3;12442:12;12435:19;;12240:220;;;:::o;12466:366::-;;12629:67;12693:2;12688:3;12629:67;:::i;:::-;12622:74;;12705:93;12794:3;12705:93;:::i;:::-;12823:2;12818:3;12814:12;12807:19;;12612:220;;;:::o;12838:366::-;;13001:67;13065:2;13060:3;13001:67;:::i;:::-;12994:74;;13077:93;13166:3;13077:93;:::i;:::-;13195:2;13190:3;13186:12;13179:19;;12984:220;;;:::o;13210:366::-;;13373:67;13437:2;13432:3;13373:67;:::i;:::-;13366:74;;13449:93;13538:3;13449:93;:::i;:::-;13567:2;13562:3;13558:12;13551:19;;13356:220;;;:::o;13582:366::-;;13745:67;13809:2;13804:3;13745:67;:::i;:::-;13738:74;;13821:93;13910:3;13821:93;:::i;:::-;13939:2;13934:3;13930:12;13923:19;;13728:220;;;:::o;13954:366::-;;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14193:93;14282:3;14193:93;:::i;:::-;14311:2;14306:3;14302:12;14295:19;;14100:220;;;:::o;14326:366::-;;14489:67;14553:2;14548:3;14489:67;:::i;:::-;14482:74;;14565:93;14654:3;14565:93;:::i;:::-;14683:2;14678:3;14674:12;14667:19;;14472:220;;;:::o;14698:118::-;14785:24;14803:5;14785:24;:::i;:::-;14780:3;14773:37;14763:53;;:::o;14822:435::-;;15024:95;15115:3;15106:6;15024:95;:::i;:::-;15017:102;;15136:95;15227:3;15218:6;15136:95;:::i;:::-;15129:102;;15248:3;15241:10;;15006:251;;;;;:::o;15263:222::-;;15394:2;15383:9;15379:18;15371:26;;15407:71;15475:1;15464:9;15460:17;15451:6;15407:71;:::i;:::-;15361:124;;;;:::o;15491:640::-;;15724:3;15713:9;15709:19;15701:27;;15738:71;15806:1;15795:9;15791:17;15782:6;15738:71;:::i;:::-;15819:72;15887:2;15876:9;15872:18;15863:6;15819:72;:::i;:::-;15901;15969:2;15958:9;15954:18;15945:6;15901:72;:::i;:::-;16020:9;16014:4;16010:20;16005:2;15994:9;15990:18;15983:48;16048:76;16119:4;16110:6;16048:76;:::i;:::-;16040:84;;15691:440;;;;;;;:::o;16137:332::-;;16296:2;16285:9;16281:18;16273:26;;16309:71;16377:1;16366:9;16362:17;16353:6;16309:71;:::i;:::-;16390:72;16458:2;16447:9;16443:18;16434:6;16390:72;:::i;:::-;16263:206;;;;;:::o;16475:210::-;;16600:2;16589:9;16585:18;16577:26;;16613:65;16675:1;16664:9;16660:17;16651:6;16613:65;:::i;:::-;16567:118;;;;:::o;16691:313::-;;16842:2;16831:9;16827:18;16819:26;;16891:9;16885:4;16881:20;16877:1;16866:9;16862:17;16855:47;16919:78;16992:4;16983:6;16919:78;:::i;:::-;16911:86;;16809:195;;;;:::o;17010:419::-;;17214:2;17203:9;17199:18;17191:26;;17263:9;17257:4;17253:20;17249:1;17238:9;17234:17;17227:47;17291:131;17417:4;17291:131;:::i;:::-;17283:139;;17181:248;;;:::o;17435:419::-;;17639:2;17628:9;17624:18;17616:26;;17688:9;17682:4;17678:20;17674:1;17663:9;17659:17;17652:47;17716:131;17842:4;17716:131;:::i;:::-;17708:139;;17606:248;;;:::o;17860:419::-;;18064:2;18053:9;18049:18;18041:26;;18113:9;18107:4;18103:20;18099:1;18088:9;18084:17;18077:47;18141:131;18267:4;18141:131;:::i;:::-;18133:139;;18031:248;;;:::o;18285:419::-;;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18456:248;;;:::o;18710:419::-;;18914:2;18903:9;18899:18;18891:26;;18963:9;18957:4;18953:20;18949:1;18938:9;18934:17;18927:47;18991:131;19117:4;18991:131;:::i;:::-;18983:139;;18881:248;;;:::o;19135:419::-;;19339:2;19328:9;19324:18;19316:26;;19388:9;19382:4;19378:20;19374:1;19363:9;19359:17;19352:47;19416:131;19542:4;19416:131;:::i;:::-;19408:139;;19306:248;;;:::o;19560:419::-;;19764:2;19753:9;19749:18;19741:26;;19813:9;19807:4;19803:20;19799:1;19788:9;19784:17;19777:47;19841:131;19967:4;19841:131;:::i;:::-;19833:139;;19731:248;;;:::o;19985:419::-;;20189:2;20178:9;20174:18;20166:26;;20238:9;20232:4;20228:20;20224:1;20213:9;20209:17;20202:47;20266:131;20392:4;20266:131;:::i;:::-;20258:139;;20156:248;;;:::o;20410:419::-;;20614:2;20603:9;20599:18;20591:26;;20663:9;20657:4;20653:20;20649:1;20638:9;20634:17;20627:47;20691:131;20817:4;20691:131;:::i;:::-;20683:139;;20581:248;;;:::o;20835:419::-;;21039:2;21028:9;21024:18;21016:26;;21088:9;21082:4;21078:20;21074:1;21063:9;21059:17;21052:47;21116:131;21242:4;21116:131;:::i;:::-;21108:139;;21006:248;;;:::o;21260:419::-;;21464:2;21453:9;21449:18;21441:26;;21513:9;21507:4;21503:20;21499:1;21488:9;21484:17;21477:47;21541:131;21667:4;21541:131;:::i;:::-;21533:139;;21431:248;;;:::o;21685:419::-;;21889:2;21878:9;21874:18;21866:26;;21938:9;21932:4;21928:20;21924:1;21913:9;21909:17;21902:47;21966:131;22092:4;21966:131;:::i;:::-;21958:139;;21856:248;;;:::o;22110:419::-;;22314:2;22303:9;22299:18;22291:26;;22363:9;22357:4;22353:20;22349:1;22338:9;22334:17;22327:47;22391:131;22517:4;22391:131;:::i;:::-;22383:139;;22281:248;;;:::o;22535:419::-;;22739:2;22728:9;22724:18;22716:26;;22788:9;22782:4;22778:20;22774:1;22763:9;22759:17;22752:47;22816:131;22942:4;22816:131;:::i;:::-;22808:139;;22706:248;;;:::o;22960:419::-;;23164:2;23153:9;23149:18;23141:26;;23213:9;23207:4;23203:20;23199:1;23188:9;23184:17;23177:47;23241:131;23367:4;23241:131;:::i;:::-;23233:139;;23131:248;;;:::o;23385:419::-;;23589:2;23578:9;23574:18;23566:26;;23638:9;23632:4;23628:20;23624:1;23613:9;23609:17;23602:47;23666:131;23792:4;23666:131;:::i;:::-;23658:139;;23556:248;;;:::o;23810:419::-;;24014:2;24003:9;23999:18;23991:26;;24063:9;24057:4;24053:20;24049:1;24038:9;24034:17;24027:47;24091:131;24217:4;24091:131;:::i;:::-;24083:139;;23981:248;;;:::o;24235:419::-;;24439:2;24428:9;24424:18;24416:26;;24488:9;24482:4;24478:20;24474:1;24463:9;24459:17;24452:47;24516:131;24642:4;24516:131;:::i;:::-;24508:139;;24406:248;;;:::o;24660:222::-;;24791:2;24780:9;24776:18;24768:26;;24804:71;24872:1;24861:9;24857:17;24848:6;24804:71;:::i;:::-;24758:124;;;;:::o;24888:129::-;;24949:20;;:::i;:::-;24939:30;;24978:33;25006:4;24998:6;24978:33;:::i;:::-;24929:88;;;:::o;25023:75::-;;25089:2;25083:9;25073:19;;25063:35;:::o;25104:307::-;;25255:18;25247:6;25244:30;25241:2;;;25277:18;;:::i;:::-;25241:2;25315:29;25337:6;25315:29;:::i;:::-;25307:37;;25399:4;25393;25389:15;25381:23;;25170:241;;;:::o;25417:308::-;;25569:18;25561:6;25558:30;25555:2;;;25591:18;;:::i;:::-;25555:2;25629:29;25651:6;25629:29;:::i;:::-;25621:37;;25713:4;25707;25703:15;25695:23;;25484:241;;;:::o;25731:98::-;;25816:5;25810:12;25800:22;;25789:40;;;:::o;25835:99::-;;25921:5;25915:12;25905:22;;25894:40;;;:::o;25940:168::-;;26057:6;26052:3;26045:19;26097:4;26092:3;26088:14;26073:29;;26035:73;;;;:::o;26114:169::-;;26232:6;26227:3;26220:19;26272:4;26267:3;26263:14;26248:29;;26210:73;;;;:::o;26289:148::-;;26428:3;26413:18;;26403:34;;;;:::o;26443:305::-;;26502:20;26520:1;26502:20;:::i;:::-;26497:25;;26536:20;26554:1;26536:20;:::i;:::-;26531:25;;26690:1;26622:66;26618:74;26615:1;26612:81;26609:2;;;26696:18;;:::i;:::-;26609:2;26740:1;26737;26733:9;26726:16;;26487:261;;;;:::o;26754:185::-;;26811:20;26829:1;26811:20;:::i;:::-;26806:25;;26845:20;26863:1;26845:20;:::i;:::-;26840:25;;26884:1;26874:2;;26889:18;;:::i;:::-;26874:2;26931:1;26928;26924:9;26919:14;;26796:143;;;;:::o;26945:348::-;;27008:20;27026:1;27008:20;:::i;:::-;27003:25;;27042:20;27060:1;27042:20;:::i;:::-;27037:25;;27230:1;27162:66;27158:74;27155:1;27152:81;27147:1;27140:9;27133:17;27129:105;27126:2;;;27237:18;;:::i;:::-;27126:2;27285:1;27282;27278:9;27267:20;;26993:300;;;;:::o;27299:191::-;;27359:20;27377:1;27359:20;:::i;:::-;27354:25;;27393:20;27411:1;27393:20;:::i;:::-;27388:25;;27432:1;27429;27426:8;27423:2;;;27437:18;;:::i;:::-;27423:2;27482:1;27479;27475:9;27467:17;;27344:146;;;;:::o;27496:96::-;;27562:24;27580:5;27562:24;:::i;:::-;27551:35;;27541:51;;;:::o;27598:90::-;;27675:5;27668:13;27661:21;27650:32;;27640:48;;;:::o;27694:149::-;;27770:66;27763:5;27759:78;27748:89;;27738:105;;;:::o;27849:126::-;;27926:42;27919:5;27915:54;27904:65;;27894:81;;;:::o;27981:77::-;;28047:5;28036:16;;28026:32;;;:::o;28064:154::-;28148:6;28143:3;28138;28125:30;28210:1;28201:6;28196:3;28192:16;28185:27;28115:103;;;:::o;28224:307::-;28292:1;28302:113;28316:6;28313:1;28310:13;28302:113;;;28401:1;28396:3;28392:11;28386:18;28382:1;28377:3;28373:11;28366:39;28338:2;28335:1;28331:10;28326:15;;28302:113;;;28433:6;28430:1;28427:13;28424:2;;;28513:1;28504:6;28499:3;28495:16;28488:27;28424:2;28273:258;;;;:::o;28537:320::-;;28618:1;28612:4;28608:12;28598:22;;28665:1;28659:4;28655:12;28686:18;28676:2;;28742:4;28734:6;28730:17;28720:27;;28676:2;28804;28796:6;28793:14;28773:18;28770:38;28767:2;;;28823:18;;:::i;:::-;28767:2;28588:269;;;;:::o;28863:281::-;28946:27;28968:4;28946:27;:::i;:::-;28938:6;28934:40;29076:6;29064:10;29061:22;29040:18;29028:10;29025:34;29022:62;29019:2;;;29087:18;;:::i;:::-;29019:2;29127:10;29123:2;29116:22;28906:238;;;:::o;29150:233::-;;29212:24;29230:5;29212:24;:::i;:::-;29203:33;;29258:66;29251:5;29248:77;29245:2;;;29328:18;;:::i;:::-;29245:2;29375:1;29368:5;29364:13;29357:20;;29193:190;;;:::o;29389:176::-;;29438:20;29456:1;29438:20;:::i;:::-;29433:25;;29472:20;29490:1;29472:20;:::i;:::-;29467:25;;29511:1;29501:2;;29516:18;;:::i;:::-;29501:2;29557:1;29554;29550:9;29545:14;;29423:142;;;;:::o;29571:180::-;29619:77;29616:1;29609:88;29716:4;29713:1;29706:15;29740:4;29737:1;29730:15;29757:180;29805:77;29802:1;29795:88;29902:4;29899:1;29892:15;29926:4;29923:1;29916:15;29943:180;29991:77;29988:1;29981:88;30088:4;30085:1;30078:15;30112:4;30109:1;30102:15;30129:180;30177:77;30174:1;30167:88;30274:4;30271:1;30264:15;30298:4;30295:1;30288:15;30315:102;;30407:2;30403:7;30398:2;30391:5;30387:14;30383:28;30373:38;;30363:54;;;:::o;30423:237::-;30563:34;30559:1;30551:6;30547:14;30540:58;30632:20;30627:2;30619:6;30615:15;30608:45;30529:131;:::o;30666:225::-;30806:34;30802:1;30794:6;30790:14;30783:58;30875:8;30870:2;30862:6;30858:15;30851:33;30772:119;:::o;30897:224::-;31037:34;31033:1;31025:6;31021:14;31014:58;31106:7;31101:2;31093:6;31089:15;31082:32;31003:118;:::o;31127:178::-;31267:30;31263:1;31255:6;31251:14;31244:54;31233:72;:::o;31311:223::-;31451:34;31447:1;31439:6;31435:14;31428:58;31520:6;31515:2;31507:6;31503:15;31496:31;31417:117;:::o;31540:175::-;31680:27;31676:1;31668:6;31664:14;31657:51;31646:69;:::o;31721:231::-;31861:34;31857:1;31849:6;31845:14;31838:58;31930:14;31925:2;31917:6;31913:15;31906:39;31827:125;:::o;31958:243::-;32098:34;32094:1;32086:6;32082:14;32075:58;32167:26;32162:2;32154:6;32150:15;32143:51;32064:137;:::o;32207:229::-;32347:34;32343:1;32335:6;32331:14;32324:58;32416:12;32411:2;32403:6;32399:15;32392:37;32313:123;:::o;32442:228::-;32582:34;32578:1;32570:6;32566:14;32559:58;32651:11;32646:2;32638:6;32634:15;32627:36;32548:122;:::o;32676:233::-;32816:34;32812:1;32804:6;32800:14;32793:58;32885:16;32880:2;32872:6;32868:15;32861:41;32782:127;:::o;32915:182::-;33055:34;33051:1;33043:6;33039:14;33032:58;33021:76;:::o;33103:236::-;33243:34;33239:1;33231:6;33227:14;33220:58;33312:19;33307:2;33299:6;33295:15;33288:44;33209:130;:::o;33345:231::-;33485:34;33481:1;33473:6;33469:14;33462:58;33554:14;33549:2;33541:6;33537:15;33530:39;33451:125;:::o;33582:182::-;33722:34;33718:1;33710:6;33706:14;33699:58;33688:76;:::o;33770:234::-;33910:34;33906:1;33898:6;33894:14;33887:58;33979:17;33974:2;33966:6;33962:15;33955:42;33876:128;:::o;34010:220::-;34150:34;34146:1;34138:6;34134:14;34127:58;34219:3;34214:2;34206:6;34202:15;34195:28;34116:114;:::o;34236:236::-;34376:34;34372:1;34364:6;34360:14;34353:58;34445:19;34440:2;34432:6;34428:15;34421:44;34342:130;:::o;34478:122::-;34551:24;34569:5;34551:24;:::i;:::-;34544:5;34541:35;34531:2;;34590:1;34587;34580:12;34531:2;34521:79;:::o;34606:116::-;34676:21;34691:5;34676:21;:::i;:::-;34669:5;34666:32;34656:2;;34712:1;34709;34702:12;34656:2;34646:76;:::o;34728:120::-;34800:23;34817:5;34800:23;:::i;:::-;34793:5;34790:34;34780:2;;34838:1;34835;34828:12;34780:2;34770:78;:::o;34854:122::-;34927:24;34945:5;34927:24;:::i;:::-;34920:5;34917:35;34907:2;;34966:1;34963;34956:12;34907:2;34897:79;:::o

Swarm Source

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