ETH Price: $3,387.84 (-1.72%)
Gas: 3 Gwei

Token

CryptoSigmaMales (CSM)
 

Overview

Max Total Supply

50 CSM

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 CSM
0x5609ffc9e2525c1b7f3a1b8522cf8e88be3c2ef7
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:
CryptoSigmaMales

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-06
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/security/Pausable.sol



pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: cryptosigmamales.sol


pragma solidity ^0.8.2;






contract CryptoSigmaMales is ERC721, ERC721Enumerable, Pausable, Ownable {
    
    event BaseURIChanged(string newBaseURI);
    event SaleMint(address minter, uint256 count);
    event setSaleStartedChanged(bool newSaleStarted);

    uint256 public nextTokenId = 1;
    uint256 public mintRate = 99900000000000000;
    uint public max_supply = 3333;
    uint public tx_limit = 20;
    
    string public baseURI;
    bool public saleStarted;

    constructor() ERC721("CryptoSigmaMales", "CSM") {}

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    function setSaleStarted(bool _saleStarted) external onlyOwner {
        saleStarted = _saleStarted;
        emit setSaleStartedChanged(_saleStarted);
    }

    
    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setBaseURI(string calldata newbaseURI) external onlyOwner {
        baseURI = newbaseURI;
        emit BaseURIChanged(newbaseURI);
    }
    
    function safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId);
    }

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

    // The following functions are overrides required by Solidity.

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
    
    function mintTokens(uint256 count) external payable {
       
        uint256 _nextTokenId = nextTokenId;
        require(saleStarted, "Sale has not started");
        require(count > 0 && count <= tx_limit, "Invalid count or limit exceeded");
        require(_nextTokenId + count <= max_supply, "Max supply exceeded");
        require(mintRate * count <= msg.value, "Incorrect Ether value");


        for (uint256 ind = 0; ind < count; ind++) {
            safeMint(msg.sender, _nextTokenId + ind);
        }
        nextTokenId += count;

        emit SaleMint(msg.sender, count);
    }
    
    function withdraw() public onlyOwner{
        require(address(this).balance > 0, "No Balance.");
        payable(owner()).transfer(address(this).balance);
    }
    
}

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":false,"internalType":"string","name":"newBaseURI","type":"string"}],"name":"BaseURIChanged","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"SaleMint","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"newSaleStarted","type":"bool"}],"name":"setSaleStartedChanged","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newbaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleStarted","type":"bool"}],"name":"setSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tx_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600b55670162ea854d0fc000600c55610d05600d556014600e553480156200002d57600080fd5b506040518060400160405280601081526020017f43727970746f5369676d614d616c6573000000000000000000000000000000008152506040518060400160405280600381526020017f43534d00000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000b2929190620001dd565b508060019080519060200190620000cb929190620001dd565b5050506000600a60006101000a81548160ff02191690831515021790555062000109620000fd6200010f60201b60201c565b6200011760201b60201c565b620002f2565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001eb906200028d565b90600052602060002090601f0160209004810192826200020f57600085556200025b565b82601f106200022a57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025a5782518255916020019190600101906200023d565b5b5090506200026a91906200026e565b5090565b5b80821115620002895760008160009055506001016200026f565b5090565b60006002820490506001821680620002a657607f821691505b60208210811415620002bd57620002bc620002c3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61440480620003026000396000f3fe6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063ca0dcf1611610064578063ca0dcf16146106ad578063e1b94781146106d8578063e985e9c514610703578063f2fde38b14610740576101e3565b8063a22cb465146105f5578063a854ffba1461061e578063b88d4fde14610647578063c87b56dd14610670576101e3565b80638a333b50116100d15780638a333b50146105585780638da5cb5b1461058357806395d89b41146105ae57806397304ced146105d9576101e3565b806370a08231146104c2578063715018a6146104ff57806375794a3c146105165780638456cb5914610541576101e3565b80633f4ba83a1161017a5780635c474f9e116101495780635c474f9e146104045780635c975abb1461042f5780636352211e1461045a5780636c0360eb14610497576101e3565b80633f4ba83a1461035e57806342842e0e146103755780634f6ccce71461039e57806355f804b3146103db576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a5780633ccfd60b14610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612fd7565b610769565b60405161021c91906135b3565b60405180910390f35b34801561023157600080fd5b5061023a61077b565b60405161024791906135f2565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061306e565b61080d565b6040516102849190613523565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612f72565b610892565b005b3480156102c257600080fd5b506102cb6109aa565b6040516102d89190613934565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612e6c565b6109b7565b005b34801561031657600080fd5b50610331600480360381019061032c9190612f72565b610a17565b60405161033e9190613934565b60405180910390f35b34801561035357600080fd5b5061035c610abc565b005b34801561036a57600080fd5b50610373610bcb565b005b34801561038157600080fd5b5061039c60048036038101906103979190612e6c565b610c51565b005b3480156103aa57600080fd5b506103c560048036038101906103c0919061306e565b610c71565b6040516103d29190613934565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190613029565b610d08565b005b34801561041057600080fd5b50610419610dd3565b60405161042691906135b3565b60405180910390f35b34801561043b57600080fd5b50610444610de6565b60405161045191906135b3565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c919061306e565b610dfd565b60405161048e9190613523565b60405180910390f35b3480156104a357600080fd5b506104ac610eaf565b6040516104b991906135f2565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190612e07565b610f3d565b6040516104f69190613934565b60405180910390f35b34801561050b57600080fd5b50610514610ff5565b005b34801561052257600080fd5b5061052b61107d565b6040516105389190613934565b60405180910390f35b34801561054d57600080fd5b50610556611083565b005b34801561056457600080fd5b5061056d611109565b60405161057a9190613934565b60405180910390f35b34801561058f57600080fd5b5061059861110f565b6040516105a59190613523565b60405180910390f35b3480156105ba57600080fd5b506105c3611139565b6040516105d091906135f2565b60405180910390f35b6105f360048036038101906105ee919061306e565b6111cb565b005b34801561060157600080fd5b5061061c60048036038101906106179190612f36565b61139c565b005b34801561062a57600080fd5b5061064560048036038101906106409190612fae565b61151d565b005b34801561065357600080fd5b5061066e60048036038101906106699190612ebb565b6115ed565b005b34801561067c57600080fd5b506106976004803603810190610692919061306e565b61164f565b6040516106a491906135f2565b60405180910390f35b3480156106b957600080fd5b506106c26116f6565b6040516106cf9190613934565b60405180910390f35b3480156106e457600080fd5b506106ed6116fc565b6040516106fa9190613934565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612e30565b611702565b60405161073791906135b3565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612e07565b611796565b005b60006107748261188e565b9050919050565b60606000805461078a90613bb3565b80601f01602080910402602001604051908101604052809291908181526020018280546107b690613bb3565b80156108035780601f106107d857610100808354040283529160200191610803565b820191906000526020600020905b8154815290600101906020018083116107e657829003601f168201915b5050505050905090565b600061081882611908565b610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90613814565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089d82610dfd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590613894565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092d611974565b73ffffffffffffffffffffffffffffffffffffffff16148061095c575061095b81610956611974565b611702565b5b61099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613794565b60405180910390fd5b6109a5838361197c565b505050565b6000600880549050905090565b6109c86109c2611974565b82611a35565b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906138b4565b60405180910390fd5b610a12838383611b13565b505050565b6000610a2283610f3d565b8210610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90613654565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ac4611974565b73ffffffffffffffffffffffffffffffffffffffff16610ae261110f565b73ffffffffffffffffffffffffffffffffffffffff1614610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613834565b60405180910390fd5b60004711610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b72906136d4565b60405180910390fd5b610b8361110f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bc8573d6000803e3d6000fd5b50565b610bd3611974565b73ffffffffffffffffffffffffffffffffffffffff16610bf161110f565b73ffffffffffffffffffffffffffffffffffffffff1614610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90613834565b60405180910390fd5b610c4f611d6f565b565b610c6c838383604051806020016040528060008152506115ed565b505050565b6000610c7b6109aa565b8210610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906138d4565b60405180910390fd5b60088281548110610cf6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d10611974565b73ffffffffffffffffffffffffffffffffffffffff16610d2e61110f565b73ffffffffffffffffffffffffffffffffffffffff1614610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90613834565b60405180910390fd5b8181600f9190610d95929190612c49565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68282604051610dc79291906135ce565b60405180910390a15050565b601060009054906101000a900460ff1681565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d906137d4565b60405180910390fd5b80915050919050565b600f8054610ebc90613bb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890613bb3565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906137b4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffd611974565b73ffffffffffffffffffffffffffffffffffffffff1661101b61110f565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613834565b60405180910390fd5b61107b6000611e11565b565b600b5481565b61108b611974565b73ffffffffffffffffffffffffffffffffffffffff166110a961110f565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690613834565b60405180910390fd5b611107611ed7565b565b600d5481565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114890613bb3565b80601f016020809104026020016040519081016040528092919081815260200182805461117490613bb3565b80156111c15780601f10611196576101008083540402835291602001916111c1565b820191906000526020600020905b8154815290600101906020018083116111a457829003601f168201915b5050505050905090565b6000600b549050601060009054906101000a900460ff16611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906138f4565b60405180910390fd5b6000821180156112335750600e548211155b611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613734565b60405180910390fd5b600d54828261128191906139e8565b11156112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990613614565b60405180910390fd5b3482600c546112d19190613a6f565b1115611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613914565b60405180910390fd5b60005b828110156113455761133233828461132d91906139e8565b611f7a565b808061133d90613c16565b915050611315565b5081600b600082825461135891906139e8565b925050819055507f35b6d348af664cd334c7ec2746e1ab49907efa953fa3f622552cd0b19a828b3f338360405161139092919061358a565b60405180910390a15050565b6113a4611974565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613714565b60405180910390fd5b806005600061141f611974565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114cc611974565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161151191906135b3565b60405180910390a35050565b611525611974565b73ffffffffffffffffffffffffffffffffffffffff1661154361110f565b73ffffffffffffffffffffffffffffffffffffffff1614611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613834565b60405180910390fd5b80601060006101000a81548160ff0219169083151502179055507f04faf29acbc295c85db0cdb7d6d6a9b7a5b1cacab8a4327fe7e0bc6839a851f6816040516115e291906135b3565b60405180910390a150565b6115fe6115f8611974565b83611a35565b61163d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611634906138b4565b60405180910390fd5b61164984848484611f88565b50505050565b606061165a82611908565b611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613874565b60405180910390fd5b60006116a3611fe4565b905060008151116116c357604051806020016040528060008152506116ee565b806116cd84612076565b6040516020016116de9291906134ff565b6040516020818303038152906040525b915050919050565b600c5481565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61179e611974565b73ffffffffffffffffffffffffffffffffffffffff166117bc61110f565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613834565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990613694565b60405180910390fd5b61188b81611e11565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611901575061190082612223565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119ef83610dfd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a4082611908565b611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613754565b60405180910390fd5b6000611a8a83610dfd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611af957508373ffffffffffffffffffffffffffffffffffffffff16611ae18461080d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b0a5750611b098185611702565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3382610dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613854565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf0906136f4565b60405180910390fd5b611c04838383612305565b611c0f60008261197c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5f9190613ac9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb691906139e8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d77610de6565b611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613634565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611dfa611974565b604051611e079190613523565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611edf610de6565b15611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613774565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f63611974565b604051611f709190613523565b60405180910390a1565b611f84828261235d565b5050565b611f93848484611b13565b611f9f8484848461237b565b611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590613674565b60405180910390fd5b50505050565b6060600f8054611ff390613bb3565b80601f016020809104026020016040519081016040528092919081815260200182805461201f90613bb3565b801561206c5780601f106120415761010080835404028352916020019161206c565b820191906000526020600020905b81548152906001019060200180831161204f57829003601f168201915b5050505050905090565b606060008214156120be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061221e565b600082905060005b600082146120f05780806120d990613c16565b915050600a826120e99190613a3e565b91506120c6565b60008167ffffffffffffffff811115612132577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121645781602001600182028036833780820191505090505b5090505b600085146122175760018261217d9190613ac9565b9150600a8561218c9190613c5f565b603061219891906139e8565b60f81b8183815181106121d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122109190613a3e565b9450612168565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122fe57506122fd82612512565b5b9050919050565b61230d610de6565b1561234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490613774565b60405180910390fd5b61235883838361257c565b505050565b612377828260405180602001604052806000815250612690565b5050565b600061239c8473ffffffffffffffffffffffffffffffffffffffff166126eb565b15612505578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c5611974565b8786866040518563ffffffff1660e01b81526004016123e7949392919061353e565b602060405180830381600087803b15801561240157600080fd5b505af192505050801561243257506040513d601f19601f8201168201806040525081019061242f9190613000565b60015b6124b5573d8060008114612462576040519150601f19603f3d011682016040523d82523d6000602084013e612467565b606091505b506000815114156124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a490613674565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061250a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125878383836126fe565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125ca576125c581612703565b612609565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461260857612607838261274c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561264c57612647816128b9565b61268b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461268a5761268982826129fc565b5b5b505050565b61269a8383612a7b565b6126a7600084848461237b565b6126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90613674565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161275984610f3d565b6127639190613ac9565b9050600060076000848152602001908152602001600020549050818114612848576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128cd9190613ac9565b9050600060096000848152602001908152602001600020549050600060088381548110612923577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061296b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612a0783610f3d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae2906137f4565b60405180910390fd5b612af481611908565b15612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b906136b4565b60405180910390fd5b612b4060008383612305565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9091906139e8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612c5590613bb3565b90600052602060002090601f016020900481019282612c775760008555612cbe565b82601f10612c9057803560ff1916838001178555612cbe565b82800160010185558215612cbe579182015b82811115612cbd578235825591602001919060010190612ca2565b5b509050612ccb9190612ccf565b5090565b5b80821115612ce8576000816000905550600101612cd0565b5090565b6000612cff612cfa84613974565b61394f565b905082815260208101848484011115612d1757600080fd5b612d22848285613b71565b509392505050565b600081359050612d3981614372565b92915050565b600081359050612d4e81614389565b92915050565b600081359050612d63816143a0565b92915050565b600081519050612d78816143a0565b92915050565b600082601f830112612d8f57600080fd5b8135612d9f848260208601612cec565b91505092915050565b60008083601f840112612dba57600080fd5b8235905067ffffffffffffffff811115612dd357600080fd5b602083019150836001820283011115612deb57600080fd5b9250929050565b600081359050612e01816143b7565b92915050565b600060208284031215612e1957600080fd5b6000612e2784828501612d2a565b91505092915050565b60008060408385031215612e4357600080fd5b6000612e5185828601612d2a565b9250506020612e6285828601612d2a565b9150509250929050565b600080600060608486031215612e8157600080fd5b6000612e8f86828701612d2a565b9350506020612ea086828701612d2a565b9250506040612eb186828701612df2565b9150509250925092565b60008060008060808587031215612ed157600080fd5b6000612edf87828801612d2a565b9450506020612ef087828801612d2a565b9350506040612f0187828801612df2565b925050606085013567ffffffffffffffff811115612f1e57600080fd5b612f2a87828801612d7e565b91505092959194509250565b60008060408385031215612f4957600080fd5b6000612f5785828601612d2a565b9250506020612f6885828601612d3f565b9150509250929050565b60008060408385031215612f8557600080fd5b6000612f9385828601612d2a565b9250506020612fa485828601612df2565b9150509250929050565b600060208284031215612fc057600080fd5b6000612fce84828501612d3f565b91505092915050565b600060208284031215612fe957600080fd5b6000612ff784828501612d54565b91505092915050565b60006020828403121561301257600080fd5b600061302084828501612d69565b91505092915050565b6000806020838503121561303c57600080fd5b600083013567ffffffffffffffff81111561305657600080fd5b61306285828601612da8565b92509250509250929050565b60006020828403121561308057600080fd5b600061308e84828501612df2565b91505092915050565b6130a081613afd565b82525050565b6130af81613b0f565b82525050565b60006130c0826139a5565b6130ca81856139bb565b93506130da818560208601613b80565b6130e381613d4c565b840191505092915050565b60006130fa83856139cc565b9350613107838584613b71565b61311083613d4c565b840190509392505050565b6000613126826139b0565b61313081856139cc565b9350613140818560208601613b80565b61314981613d4c565b840191505092915050565b600061315f826139b0565b61316981856139dd565b9350613179818560208601613b80565b80840191505092915050565b60006131926013836139cc565b915061319d82613d5d565b602082019050919050565b60006131b56014836139cc565b91506131c082613d86565b602082019050919050565b60006131d8602b836139cc565b91506131e382613daf565b604082019050919050565b60006131fb6032836139cc565b915061320682613dfe565b604082019050919050565b600061321e6026836139cc565b915061322982613e4d565b604082019050919050565b6000613241601c836139cc565b915061324c82613e9c565b602082019050919050565b6000613264600b836139cc565b915061326f82613ec5565b602082019050919050565b60006132876024836139cc565b915061329282613eee565b604082019050919050565b60006132aa6019836139cc565b91506132b582613f3d565b602082019050919050565b60006132cd601f836139cc565b91506132d882613f66565b602082019050919050565b60006132f0602c836139cc565b91506132fb82613f8f565b604082019050919050565b60006133136010836139cc565b915061331e82613fde565b602082019050919050565b60006133366038836139cc565b915061334182614007565b604082019050919050565b6000613359602a836139cc565b915061336482614056565b604082019050919050565b600061337c6029836139cc565b9150613387826140a5565b604082019050919050565b600061339f6020836139cc565b91506133aa826140f4565b602082019050919050565b60006133c2602c836139cc565b91506133cd8261411d565b604082019050919050565b60006133e56020836139cc565b91506133f08261416c565b602082019050919050565b60006134086029836139cc565b915061341382614195565b604082019050919050565b600061342b602f836139cc565b9150613436826141e4565b604082019050919050565b600061344e6021836139cc565b915061345982614233565b604082019050919050565b60006134716031836139cc565b915061347c82614282565b604082019050919050565b6000613494602c836139cc565b915061349f826142d1565b604082019050919050565b60006134b76014836139cc565b91506134c282614320565b602082019050919050565b60006134da6015836139cc565b91506134e582614349565b602082019050919050565b6134f981613b67565b82525050565b600061350b8285613154565b91506135178284613154565b91508190509392505050565b60006020820190506135386000830184613097565b92915050565b60006080820190506135536000830187613097565b6135606020830186613097565b61356d60408301856134f0565b818103606083015261357f81846130b5565b905095945050505050565b600060408201905061359f6000830185613097565b6135ac60208301846134f0565b9392505050565b60006020820190506135c860008301846130a6565b92915050565b600060208201905081810360008301526135e98184866130ee565b90509392505050565b6000602082019050818103600083015261360c818461311b565b905092915050565b6000602082019050818103600083015261362d81613185565b9050919050565b6000602082019050818103600083015261364d816131a8565b9050919050565b6000602082019050818103600083015261366d816131cb565b9050919050565b6000602082019050818103600083015261368d816131ee565b9050919050565b600060208201905081810360008301526136ad81613211565b9050919050565b600060208201905081810360008301526136cd81613234565b9050919050565b600060208201905081810360008301526136ed81613257565b9050919050565b6000602082019050818103600083015261370d8161327a565b9050919050565b6000602082019050818103600083015261372d8161329d565b9050919050565b6000602082019050818103600083015261374d816132c0565b9050919050565b6000602082019050818103600083015261376d816132e3565b9050919050565b6000602082019050818103600083015261378d81613306565b9050919050565b600060208201905081810360008301526137ad81613329565b9050919050565b600060208201905081810360008301526137cd8161334c565b9050919050565b600060208201905081810360008301526137ed8161336f565b9050919050565b6000602082019050818103600083015261380d81613392565b9050919050565b6000602082019050818103600083015261382d816133b5565b9050919050565b6000602082019050818103600083015261384d816133d8565b9050919050565b6000602082019050818103600083015261386d816133fb565b9050919050565b6000602082019050818103600083015261388d8161341e565b9050919050565b600060208201905081810360008301526138ad81613441565b9050919050565b600060208201905081810360008301526138cd81613464565b9050919050565b600060208201905081810360008301526138ed81613487565b9050919050565b6000602082019050818103600083015261390d816134aa565b9050919050565b6000602082019050818103600083015261392d816134cd565b9050919050565b600060208201905061394960008301846134f0565b92915050565b600061395961396a565b90506139658282613be5565b919050565b6000604051905090565b600067ffffffffffffffff82111561398f5761398e613d1d565b5b61399882613d4c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139f382613b67565b91506139fe83613b67565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3357613a32613c90565b5b828201905092915050565b6000613a4982613b67565b9150613a5483613b67565b925082613a6457613a63613cbf565b5b828204905092915050565b6000613a7a82613b67565b9150613a8583613b67565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613abe57613abd613c90565b5b828202905092915050565b6000613ad482613b67565b9150613adf83613b67565b925082821015613af257613af1613c90565b5b828203905092915050565b6000613b0882613b47565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b9e578082015181840152602081019050613b83565b83811115613bad576000848401525b50505050565b60006002820490506001821680613bcb57607f821691505b60208210811415613bdf57613bde613cee565b5b50919050565b613bee82613d4c565b810181811067ffffffffffffffff82111715613c0d57613c0c613d1d565b5b80604052505050565b6000613c2182613b67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c5457613c53613c90565b5b600182019050919050565b6000613c6a82613b67565b9150613c7583613b67565b925082613c8557613c84613cbf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f2042616c616e63652e000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e76616c696420636f756e74206f72206c696d697420657863656564656400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b7f496e636f72726563742045746865722076616c75650000000000000000000000600082015250565b61437b81613afd565b811461438657600080fd5b50565b61439281613b0f565b811461439d57600080fd5b50565b6143a981613b1b565b81146143b457600080fd5b50565b6143c081613b67565b81146143cb57600080fd5b5056fea2646970667358221220a80c9da663242d178686c79fedec46508537ee9876e2d31bf8581521ca0e2ca564736f6c63430008020033

Deployed Bytecode

0x6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063ca0dcf1611610064578063ca0dcf16146106ad578063e1b94781146106d8578063e985e9c514610703578063f2fde38b14610740576101e3565b8063a22cb465146105f5578063a854ffba1461061e578063b88d4fde14610647578063c87b56dd14610670576101e3565b80638a333b50116100d15780638a333b50146105585780638da5cb5b1461058357806395d89b41146105ae57806397304ced146105d9576101e3565b806370a08231146104c2578063715018a6146104ff57806375794a3c146105165780638456cb5914610541576101e3565b80633f4ba83a1161017a5780635c474f9e116101495780635c474f9e146104045780635c975abb1461042f5780636352211e1461045a5780636c0360eb14610497576101e3565b80633f4ba83a1461035e57806342842e0e146103755780634f6ccce71461039e57806355f804b3146103db576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a5780633ccfd60b14610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612fd7565b610769565b60405161021c91906135b3565b60405180910390f35b34801561023157600080fd5b5061023a61077b565b60405161024791906135f2565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061306e565b61080d565b6040516102849190613523565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612f72565b610892565b005b3480156102c257600080fd5b506102cb6109aa565b6040516102d89190613934565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612e6c565b6109b7565b005b34801561031657600080fd5b50610331600480360381019061032c9190612f72565b610a17565b60405161033e9190613934565b60405180910390f35b34801561035357600080fd5b5061035c610abc565b005b34801561036a57600080fd5b50610373610bcb565b005b34801561038157600080fd5b5061039c60048036038101906103979190612e6c565b610c51565b005b3480156103aa57600080fd5b506103c560048036038101906103c0919061306e565b610c71565b6040516103d29190613934565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190613029565b610d08565b005b34801561041057600080fd5b50610419610dd3565b60405161042691906135b3565b60405180910390f35b34801561043b57600080fd5b50610444610de6565b60405161045191906135b3565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c919061306e565b610dfd565b60405161048e9190613523565b60405180910390f35b3480156104a357600080fd5b506104ac610eaf565b6040516104b991906135f2565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190612e07565b610f3d565b6040516104f69190613934565b60405180910390f35b34801561050b57600080fd5b50610514610ff5565b005b34801561052257600080fd5b5061052b61107d565b6040516105389190613934565b60405180910390f35b34801561054d57600080fd5b50610556611083565b005b34801561056457600080fd5b5061056d611109565b60405161057a9190613934565b60405180910390f35b34801561058f57600080fd5b5061059861110f565b6040516105a59190613523565b60405180910390f35b3480156105ba57600080fd5b506105c3611139565b6040516105d091906135f2565b60405180910390f35b6105f360048036038101906105ee919061306e565b6111cb565b005b34801561060157600080fd5b5061061c60048036038101906106179190612f36565b61139c565b005b34801561062a57600080fd5b5061064560048036038101906106409190612fae565b61151d565b005b34801561065357600080fd5b5061066e60048036038101906106699190612ebb565b6115ed565b005b34801561067c57600080fd5b506106976004803603810190610692919061306e565b61164f565b6040516106a491906135f2565b60405180910390f35b3480156106b957600080fd5b506106c26116f6565b6040516106cf9190613934565b60405180910390f35b3480156106e457600080fd5b506106ed6116fc565b6040516106fa9190613934565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190612e30565b611702565b60405161073791906135b3565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612e07565b611796565b005b60006107748261188e565b9050919050565b60606000805461078a90613bb3565b80601f01602080910402602001604051908101604052809291908181526020018280546107b690613bb3565b80156108035780601f106107d857610100808354040283529160200191610803565b820191906000526020600020905b8154815290600101906020018083116107e657829003601f168201915b5050505050905090565b600061081882611908565b610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90613814565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089d82610dfd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590613894565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661092d611974565b73ffffffffffffffffffffffffffffffffffffffff16148061095c575061095b81610956611974565b611702565b5b61099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613794565b60405180910390fd5b6109a5838361197c565b505050565b6000600880549050905090565b6109c86109c2611974565b82611a35565b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906138b4565b60405180910390fd5b610a12838383611b13565b505050565b6000610a2283610f3d565b8210610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90613654565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ac4611974565b73ffffffffffffffffffffffffffffffffffffffff16610ae261110f565b73ffffffffffffffffffffffffffffffffffffffff1614610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613834565b60405180910390fd5b60004711610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b72906136d4565b60405180910390fd5b610b8361110f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bc8573d6000803e3d6000fd5b50565b610bd3611974565b73ffffffffffffffffffffffffffffffffffffffff16610bf161110f565b73ffffffffffffffffffffffffffffffffffffffff1614610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90613834565b60405180910390fd5b610c4f611d6f565b565b610c6c838383604051806020016040528060008152506115ed565b505050565b6000610c7b6109aa565b8210610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906138d4565b60405180910390fd5b60088281548110610cf6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d10611974565b73ffffffffffffffffffffffffffffffffffffffff16610d2e61110f565b73ffffffffffffffffffffffffffffffffffffffff1614610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90613834565b60405180910390fd5b8181600f9190610d95929190612c49565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68282604051610dc79291906135ce565b60405180910390a15050565b601060009054906101000a900460ff1681565b6000600a60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d906137d4565b60405180910390fd5b80915050919050565b600f8054610ebc90613bb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890613bb3565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906137b4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ffd611974565b73ffffffffffffffffffffffffffffffffffffffff1661101b61110f565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613834565b60405180910390fd5b61107b6000611e11565b565b600b5481565b61108b611974565b73ffffffffffffffffffffffffffffffffffffffff166110a961110f565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690613834565b60405180910390fd5b611107611ed7565b565b600d5481565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114890613bb3565b80601f016020809104026020016040519081016040528092919081815260200182805461117490613bb3565b80156111c15780601f10611196576101008083540402835291602001916111c1565b820191906000526020600020905b8154815290600101906020018083116111a457829003601f168201915b5050505050905090565b6000600b549050601060009054906101000a900460ff16611221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611218906138f4565b60405180910390fd5b6000821180156112335750600e548211155b611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613734565b60405180910390fd5b600d54828261128191906139e8565b11156112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990613614565b60405180910390fd5b3482600c546112d19190613a6f565b1115611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613914565b60405180910390fd5b60005b828110156113455761133233828461132d91906139e8565b611f7a565b808061133d90613c16565b915050611315565b5081600b600082825461135891906139e8565b925050819055507f35b6d348af664cd334c7ec2746e1ab49907efa953fa3f622552cd0b19a828b3f338360405161139092919061358a565b60405180910390a15050565b6113a4611974565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613714565b60405180910390fd5b806005600061141f611974565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114cc611974565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161151191906135b3565b60405180910390a35050565b611525611974565b73ffffffffffffffffffffffffffffffffffffffff1661154361110f565b73ffffffffffffffffffffffffffffffffffffffff1614611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613834565b60405180910390fd5b80601060006101000a81548160ff0219169083151502179055507f04faf29acbc295c85db0cdb7d6d6a9b7a5b1cacab8a4327fe7e0bc6839a851f6816040516115e291906135b3565b60405180910390a150565b6115fe6115f8611974565b83611a35565b61163d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611634906138b4565b60405180910390fd5b61164984848484611f88565b50505050565b606061165a82611908565b611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613874565b60405180910390fd5b60006116a3611fe4565b905060008151116116c357604051806020016040528060008152506116ee565b806116cd84612076565b6040516020016116de9291906134ff565b6040516020818303038152906040525b915050919050565b600c5481565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61179e611974565b73ffffffffffffffffffffffffffffffffffffffff166117bc61110f565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990613834565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187990613694565b60405180910390fd5b61188b81611e11565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611901575061190082612223565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119ef83610dfd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a4082611908565b611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613754565b60405180910390fd5b6000611a8a83610dfd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611af957508373ffffffffffffffffffffffffffffffffffffffff16611ae18461080d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b0a5750611b098185611702565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3382610dfd565b73ffffffffffffffffffffffffffffffffffffffff1614611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613854565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf0906136f4565b60405180910390fd5b611c04838383612305565b611c0f60008261197c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5f9190613ac9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb691906139e8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d77610de6565b611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613634565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611dfa611974565b604051611e079190613523565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611edf610de6565b15611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613774565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f63611974565b604051611f709190613523565b60405180910390a1565b611f84828261235d565b5050565b611f93848484611b13565b611f9f8484848461237b565b611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590613674565b60405180910390fd5b50505050565b6060600f8054611ff390613bb3565b80601f016020809104026020016040519081016040528092919081815260200182805461201f90613bb3565b801561206c5780601f106120415761010080835404028352916020019161206c565b820191906000526020600020905b81548152906001019060200180831161204f57829003601f168201915b5050505050905090565b606060008214156120be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061221e565b600082905060005b600082146120f05780806120d990613c16565b915050600a826120e99190613a3e565b91506120c6565b60008167ffffffffffffffff811115612132577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121645781602001600182028036833780820191505090505b5090505b600085146122175760018261217d9190613ac9565b9150600a8561218c9190613c5f565b603061219891906139e8565b60f81b8183815181106121d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122109190613a3e565b9450612168565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122fe57506122fd82612512565b5b9050919050565b61230d610de6565b1561234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490613774565b60405180910390fd5b61235883838361257c565b505050565b612377828260405180602001604052806000815250612690565b5050565b600061239c8473ffffffffffffffffffffffffffffffffffffffff166126eb565b15612505578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c5611974565b8786866040518563ffffffff1660e01b81526004016123e7949392919061353e565b602060405180830381600087803b15801561240157600080fd5b505af192505050801561243257506040513d601f19601f8201168201806040525081019061242f9190613000565b60015b6124b5573d8060008114612462576040519150601f19603f3d011682016040523d82523d6000602084013e612467565b606091505b506000815114156124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a490613674565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061250a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125878383836126fe565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125ca576125c581612703565b612609565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461260857612607838261274c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561264c57612647816128b9565b61268b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461268a5761268982826129fc565b5b5b505050565b61269a8383612a7b565b6126a7600084848461237b565b6126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90613674565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161275984610f3d565b6127639190613ac9565b9050600060076000848152602001908152602001600020549050818114612848576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128cd9190613ac9565b9050600060096000848152602001908152602001600020549050600060088381548110612923577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061296b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612a0783610f3d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae2906137f4565b60405180910390fd5b612af481611908565b15612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b906136b4565b60405180910390fd5b612b4060008383612305565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9091906139e8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612c5590613bb3565b90600052602060002090601f016020900481019282612c775760008555612cbe565b82601f10612c9057803560ff1916838001178555612cbe565b82800160010185558215612cbe579182015b82811115612cbd578235825591602001919060010190612ca2565b5b509050612ccb9190612ccf565b5090565b5b80821115612ce8576000816000905550600101612cd0565b5090565b6000612cff612cfa84613974565b61394f565b905082815260208101848484011115612d1757600080fd5b612d22848285613b71565b509392505050565b600081359050612d3981614372565b92915050565b600081359050612d4e81614389565b92915050565b600081359050612d63816143a0565b92915050565b600081519050612d78816143a0565b92915050565b600082601f830112612d8f57600080fd5b8135612d9f848260208601612cec565b91505092915050565b60008083601f840112612dba57600080fd5b8235905067ffffffffffffffff811115612dd357600080fd5b602083019150836001820283011115612deb57600080fd5b9250929050565b600081359050612e01816143b7565b92915050565b600060208284031215612e1957600080fd5b6000612e2784828501612d2a565b91505092915050565b60008060408385031215612e4357600080fd5b6000612e5185828601612d2a565b9250506020612e6285828601612d2a565b9150509250929050565b600080600060608486031215612e8157600080fd5b6000612e8f86828701612d2a565b9350506020612ea086828701612d2a565b9250506040612eb186828701612df2565b9150509250925092565b60008060008060808587031215612ed157600080fd5b6000612edf87828801612d2a565b9450506020612ef087828801612d2a565b9350506040612f0187828801612df2565b925050606085013567ffffffffffffffff811115612f1e57600080fd5b612f2a87828801612d7e565b91505092959194509250565b60008060408385031215612f4957600080fd5b6000612f5785828601612d2a565b9250506020612f6885828601612d3f565b9150509250929050565b60008060408385031215612f8557600080fd5b6000612f9385828601612d2a565b9250506020612fa485828601612df2565b9150509250929050565b600060208284031215612fc057600080fd5b6000612fce84828501612d3f565b91505092915050565b600060208284031215612fe957600080fd5b6000612ff784828501612d54565b91505092915050565b60006020828403121561301257600080fd5b600061302084828501612d69565b91505092915050565b6000806020838503121561303c57600080fd5b600083013567ffffffffffffffff81111561305657600080fd5b61306285828601612da8565b92509250509250929050565b60006020828403121561308057600080fd5b600061308e84828501612df2565b91505092915050565b6130a081613afd565b82525050565b6130af81613b0f565b82525050565b60006130c0826139a5565b6130ca81856139bb565b93506130da818560208601613b80565b6130e381613d4c565b840191505092915050565b60006130fa83856139cc565b9350613107838584613b71565b61311083613d4c565b840190509392505050565b6000613126826139b0565b61313081856139cc565b9350613140818560208601613b80565b61314981613d4c565b840191505092915050565b600061315f826139b0565b61316981856139dd565b9350613179818560208601613b80565b80840191505092915050565b60006131926013836139cc565b915061319d82613d5d565b602082019050919050565b60006131b56014836139cc565b91506131c082613d86565b602082019050919050565b60006131d8602b836139cc565b91506131e382613daf565b604082019050919050565b60006131fb6032836139cc565b915061320682613dfe565b604082019050919050565b600061321e6026836139cc565b915061322982613e4d565b604082019050919050565b6000613241601c836139cc565b915061324c82613e9c565b602082019050919050565b6000613264600b836139cc565b915061326f82613ec5565b602082019050919050565b60006132876024836139cc565b915061329282613eee565b604082019050919050565b60006132aa6019836139cc565b91506132b582613f3d565b602082019050919050565b60006132cd601f836139cc565b91506132d882613f66565b602082019050919050565b60006132f0602c836139cc565b91506132fb82613f8f565b604082019050919050565b60006133136010836139cc565b915061331e82613fde565b602082019050919050565b60006133366038836139cc565b915061334182614007565b604082019050919050565b6000613359602a836139cc565b915061336482614056565b604082019050919050565b600061337c6029836139cc565b9150613387826140a5565b604082019050919050565b600061339f6020836139cc565b91506133aa826140f4565b602082019050919050565b60006133c2602c836139cc565b91506133cd8261411d565b604082019050919050565b60006133e56020836139cc565b91506133f08261416c565b602082019050919050565b60006134086029836139cc565b915061341382614195565b604082019050919050565b600061342b602f836139cc565b9150613436826141e4565b604082019050919050565b600061344e6021836139cc565b915061345982614233565b604082019050919050565b60006134716031836139cc565b915061347c82614282565b604082019050919050565b6000613494602c836139cc565b915061349f826142d1565b604082019050919050565b60006134b76014836139cc565b91506134c282614320565b602082019050919050565b60006134da6015836139cc565b91506134e582614349565b602082019050919050565b6134f981613b67565b82525050565b600061350b8285613154565b91506135178284613154565b91508190509392505050565b60006020820190506135386000830184613097565b92915050565b60006080820190506135536000830187613097565b6135606020830186613097565b61356d60408301856134f0565b818103606083015261357f81846130b5565b905095945050505050565b600060408201905061359f6000830185613097565b6135ac60208301846134f0565b9392505050565b60006020820190506135c860008301846130a6565b92915050565b600060208201905081810360008301526135e98184866130ee565b90509392505050565b6000602082019050818103600083015261360c818461311b565b905092915050565b6000602082019050818103600083015261362d81613185565b9050919050565b6000602082019050818103600083015261364d816131a8565b9050919050565b6000602082019050818103600083015261366d816131cb565b9050919050565b6000602082019050818103600083015261368d816131ee565b9050919050565b600060208201905081810360008301526136ad81613211565b9050919050565b600060208201905081810360008301526136cd81613234565b9050919050565b600060208201905081810360008301526136ed81613257565b9050919050565b6000602082019050818103600083015261370d8161327a565b9050919050565b6000602082019050818103600083015261372d8161329d565b9050919050565b6000602082019050818103600083015261374d816132c0565b9050919050565b6000602082019050818103600083015261376d816132e3565b9050919050565b6000602082019050818103600083015261378d81613306565b9050919050565b600060208201905081810360008301526137ad81613329565b9050919050565b600060208201905081810360008301526137cd8161334c565b9050919050565b600060208201905081810360008301526137ed8161336f565b9050919050565b6000602082019050818103600083015261380d81613392565b9050919050565b6000602082019050818103600083015261382d816133b5565b9050919050565b6000602082019050818103600083015261384d816133d8565b9050919050565b6000602082019050818103600083015261386d816133fb565b9050919050565b6000602082019050818103600083015261388d8161341e565b9050919050565b600060208201905081810360008301526138ad81613441565b9050919050565b600060208201905081810360008301526138cd81613464565b9050919050565b600060208201905081810360008301526138ed81613487565b9050919050565b6000602082019050818103600083015261390d816134aa565b9050919050565b6000602082019050818103600083015261392d816134cd565b9050919050565b600060208201905061394960008301846134f0565b92915050565b600061395961396a565b90506139658282613be5565b919050565b6000604051905090565b600067ffffffffffffffff82111561398f5761398e613d1d565b5b61399882613d4c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139f382613b67565b91506139fe83613b67565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a3357613a32613c90565b5b828201905092915050565b6000613a4982613b67565b9150613a5483613b67565b925082613a6457613a63613cbf565b5b828204905092915050565b6000613a7a82613b67565b9150613a8583613b67565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613abe57613abd613c90565b5b828202905092915050565b6000613ad482613b67565b9150613adf83613b67565b925082821015613af257613af1613c90565b5b828203905092915050565b6000613b0882613b47565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b9e578082015181840152602081019050613b83565b83811115613bad576000848401525b50505050565b60006002820490506001821680613bcb57607f821691505b60208210811415613bdf57613bde613cee565b5b50919050565b613bee82613d4c565b810181811067ffffffffffffffff82111715613c0d57613c0c613d1d565b5b80604052505050565b6000613c2182613b67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c5457613c53613c90565b5b600182019050919050565b6000613c6a82613b67565b9150613c7583613b67565b925082613c8557613c84613cbf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f2042616c616e63652e000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e76616c696420636f756e74206f72206c696d697420657863656564656400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b7f496e636f72726563742045746865722076616c75650000000000000000000000600082015250565b61437b81613afd565b811461438657600080fd5b50565b61439281613b0f565b811461439d57600080fd5b50565b6143a981613b1b565b81146143b457600080fd5b50565b6143c081613b67565b81146143cb57600080fd5b5056fea2646970667358221220a80c9da663242d178686c79fedec46508537ee9876e2d31bf8581521ca0e2ca564736f6c63430008020033

Deployed Bytecode Sourcemap

45480:2536:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47004:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28711:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28234:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39900:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29601:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39568:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47844:163;;;;;;;;;;;;;:::i;:::-;;46353:65;;;;;;;;;;;;;:::i;:::-;;30011:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40090:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46426:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45910:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6294:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26846:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45882:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26576:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:94;;;;;;;;;;;;;:::i;:::-;;45721:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46284:61;;;;;;;;;;;;;:::i;:::-;;45808:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27321:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47228:604;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29004:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46112:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30267:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27496:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45758:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45844:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29370:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4840:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47004:212;47143:4;47172:36;47196:11;47172:23;:36::i;:::-;47165:43;;47004:212;;;:::o;27152:100::-;27206:13;27239:5;27232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27152:100;:::o;28711:221::-;28787:7;28815:16;28823:7;28815;:16::i;:::-;28807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28900:15;:24;28916:7;28900:24;;;;;;;;;;;;;;;;;;;;;28893:31;;28711:221;;;:::o;28234:411::-;28315:13;28331:23;28346:7;28331:14;:23::i;:::-;28315:39;;28379:5;28373:11;;:2;:11;;;;28365:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28473:5;28457:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28482:37;28499:5;28506:12;:10;:12::i;:::-;28482:16;:37::i;:::-;28457:62;28435:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28616:21;28625:2;28629:7;28616:8;:21::i;:::-;28234:411;;;:::o;39900:113::-;39961:7;39988:10;:17;;;;39981:24;;39900:113;:::o;29601:339::-;29796:41;29815:12;:10;:12::i;:::-;29829:7;29796:18;:41::i;:::-;29788:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29904:28;29914:4;29920:2;29924:7;29904:9;:28::i;:::-;29601:339;;;:::o;39568:256::-;39665:7;39701:23;39718:5;39701:16;:23::i;:::-;39693:5;:31;39685:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39790:12;:19;39803:5;39790:19;;;;;;;;;;;;;;;:26;39810:5;39790:26;;;;;;;;;;;;39783:33;;39568:256;;;;:::o;47844:163::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47923:1:::1;47899:21;:25;47891:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;47959:7;:5;:7::i;:::-;47951:25;;:48;47977:21;47951:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47844:163::o:0;46353:65::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46400:10:::1;:8;:10::i;:::-;46353:65::o:0;30011:185::-;30149:39;30166:4;30172:2;30176:7;30149:39;;;;;;;;;;;;:16;:39::i;:::-;30011:185;;;:::o;40090:233::-;40165:7;40201:30;:28;:30::i;:::-;40193:5;:38;40185:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40298:10;40309:5;40298:17;;;;;;;;;;;;;;;;;;;;;;;;40291:24;;40090:233;;;:::o;46426:148::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46514:10:::1;;46504:7;:20;;;;;;;:::i;:::-;;46540:26;46555:10;;46540:26;;;;;;;:::i;:::-;;;;;;;;46426:148:::0;;:::o;45910:23::-;;;;;;;;;;;;;:::o;6294:86::-;6341:4;6365:7;;;;;;;;;;;6358:14;;6294:86;:::o;26846:239::-;26918:7;26938:13;26954:7;:16;26962:7;26954:16;;;;;;;;;;;;;;;;;;;;;26938:32;;27006:1;26989:19;;:5;:19;;;;26981:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27072:5;27065:12;;;26846:239;;;:::o;45882:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26576:208::-;26648:7;26693:1;26676:19;;:5;:19;;;;26668:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26760:9;:16;26770:5;26760:16;;;;;;;;;;;;;;;;26753:23;;26576:208;;;:::o;4591:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:21:::1;4674:1;4656:9;:21::i;:::-;4591:94::o:0;45721:30::-;;;;:::o;46284:61::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46329:8:::1;:6;:8::i;:::-;46284:61::o:0;45808:29::-;;;;:::o;3940:87::-;3986:7;4013:6;;;;;;;;;;;4006:13;;3940:87;:::o;27321:104::-;27377:13;27410:7;27403:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27321:104;:::o;47228:604::-;47300:20;47323:11;;47300:34;;47353:11;;;;;;;;;;;47345:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47416:1;47408:5;:9;:30;;;;;47430:8;;47421:5;:17;;47408:30;47400:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47517:10;;47508:5;47493:12;:20;;;;:::i;:::-;:34;;47485:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47590:9;47581:5;47570:8;;:16;;;;:::i;:::-;:29;;47562:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47645:11;47640:109;47668:5;47662:3;:11;47640:109;;;47697:40;47706:10;47733:3;47718:12;:18;;;;:::i;:::-;47697:8;:40::i;:::-;47675:5;;;;;:::i;:::-;;;;47640:109;;;;47774:5;47759:11;;:20;;;;;;;:::i;:::-;;;;;;;;47797:27;47806:10;47818:5;47797:27;;;;;;;:::i;:::-;;;;;;;;47228:604;;:::o;29004:295::-;29119:12;:10;:12::i;:::-;29107:24;;:8;:24;;;;29099:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29219:8;29174:18;:32;29193:12;:10;:12::i;:::-;29174:32;;;;;;;;;;;;;;;:42;29207:8;29174:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29272:8;29243:48;;29258:12;:10;:12::i;:::-;29243:48;;;29282:8;29243:48;;;;;;:::i;:::-;;;;;;;;29004:295;;:::o;46112:158::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46199:12:::1;46185:11;;:26;;;;;;;;;;;;;;;;;;46227:35;46249:12;46227:35;;;;;;:::i;:::-;;;;;;;;46112:158:::0;:::o;30267:328::-;30442:41;30461:12;:10;:12::i;:::-;30475:7;30442:18;:41::i;:::-;30434:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30548:39;30562:4;30568:2;30572:7;30581:5;30548:13;:39::i;:::-;30267:328;;;;:::o;27496:334::-;27569:13;27603:16;27611:7;27603;:16::i;:::-;27595:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27684:21;27708:10;:8;:10::i;:::-;27684:34;;27760:1;27742:7;27736:21;:25;:86;;;;;;;;;;;;;;;;;27788:7;27797:18;:7;:16;:18::i;:::-;27771:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27736:86;27729:93;;;27496:334;;;:::o;45758:43::-;;;;:::o;45844:25::-;;;;:::o;29370:164::-;29467:4;29491:18;:25;29510:5;29491:25;;;;;;;;;;;;;;;:35;29517:8;29491:35;;;;;;;;;;;;;;;;;;;;;;;;;29484:42;;29370:164;;;;:::o;4840:192::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4949:1:::1;4929:22;;:8;:22;;;;4921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5005:19;5015:8;5005:9;:19::i;:::-;4840:192:::0;:::o;39260:224::-;39362:4;39401:35;39386:50;;;:11;:50;;;;:90;;;;39440:36;39464:11;39440:23;:36::i;:::-;39386:90;39379:97;;39260:224;;;:::o;32105:127::-;32170:4;32222:1;32194:30;;:7;:16;32202:7;32194:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32187:37;;32105:127;;;:::o;2728:98::-;2781:7;2808:10;2801:17;;2728:98;:::o;36087:174::-;36189:2;36162:15;:24;36178:7;36162:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36245:7;36241:2;36207:46;;36216:23;36231:7;36216:14;:23::i;:::-;36207:46;;;;;;;;;;;;36087:174;;:::o;32399:348::-;32492:4;32517:16;32525:7;32517;:16::i;:::-;32509:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32593:13;32609:23;32624:7;32609:14;:23::i;:::-;32593:39;;32662:5;32651:16;;:7;:16;;;:51;;;;32695:7;32671:31;;:20;32683:7;32671:11;:20::i;:::-;:31;;;32651:51;:87;;;;32706:32;32723:5;32730:7;32706:16;:32::i;:::-;32651:87;32643:96;;;32399:348;;;;:::o;35391:578::-;35550:4;35523:31;;:23;35538:7;35523:14;:23::i;:::-;:31;;;35515:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35633:1;35619:16;;:2;:16;;;;35611:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:39;35710:4;35716:2;35720:7;35689:20;:39::i;:::-;35793:29;35810:1;35814:7;35793:8;:29::i;:::-;35854:1;35835:9;:15;35845:4;35835:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35883:1;35866:9;:13;35876:2;35866:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35914:2;35895:7;:16;35903:7;35895:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35953:7;35949:2;35934:27;;35943:4;35934:27;;;;;;;;;;;;35391:578;;;:::o;7353:120::-;6897:8;:6;:8::i;:::-;6889:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7422:5:::1;7412:7;;:15;;;;;;;;;;;;;;;;;;7443:22;7452:12;:10;:12::i;:::-;7443:22;;;;;;:::i;:::-;;;;;;;;7353:120::o:0;5040:173::-;5096:16;5115:6;;;;;;;;;;;5096:25;;5141:8;5132:6;;:17;;;;;;;;;;;;;;;;;;5196:8;5165:40;;5186:8;5165:40;;;;;;;;;;;;5040:173;;:::o;7094:118::-;6620:8;:6;:8::i;:::-;6619:9;6611:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7164:4:::1;7154:7;;:14;;;;;;;;;;;;;;;;;;7184:20;7191:12;:10;:12::i;:::-;7184:20;;;;;;:::i;:::-;;;;;;;;7094:118::o:0;46586:105::-;46661:22;46671:2;46675:7;46661:9;:22::i;:::-;46586:105;;:::o;31477:315::-;31634:28;31644:4;31650:2;31654:7;31634:9;:28::i;:::-;31681:48;31704:4;31710:2;31714:7;31723:5;31681:22;:48::i;:::-;31673:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31477:315;;;;:::o;46000:100::-;46052:13;46085:7;46078:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46000:100;:::o;344:723::-;400:13;630:1;621:5;:10;617:53;;;648:10;;;;;;;;;;;;;;;;;;;;;617:53;680:12;695:5;680:20;;711:14;736:78;751:1;743:4;:9;736:78;;769:8;;;;;:::i;:::-;;;;800:2;792:10;;;;;:::i;:::-;;;736:78;;;824:19;856:6;846:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:39;;874:154;890:1;881:5;:10;874:154;;918:1;908:11;;;;;:::i;:::-;;;985:2;977:5;:10;;;;:::i;:::-;964:2;:24;;;;:::i;:::-;951:39;;934:6;941;934:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1014:2;1005:11;;;;;:::i;:::-;;;874:154;;;1052:6;1038:21;;;;;344:723;;;;:::o;26207:305::-;26309:4;26361:25;26346:40;;;:11;:40;;;;:105;;;;26418:33;26403:48;;;:11;:48;;;;26346:105;:158;;;;26468:36;26492:11;26468:23;:36::i;:::-;26346:158;26326:178;;26207:305;;;:::o;46699:227::-;6620:8;:6;:8::i;:::-;6619:9;6611:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;46873:45:::1;46900:4;46906:2;46910:7;46873:26;:45::i;:::-;46699:227:::0;;;:::o;33089:110::-;33165:26;33175:2;33179:7;33165:26;;;;;;;;;;;;:9;:26::i;:::-;33089:110;;:::o;36826:799::-;36981:4;37002:15;:2;:13;;;:15::i;:::-;36998:620;;;37054:2;37038:36;;;37075:12;:10;:12::i;:::-;37089:4;37095:7;37104:5;37038:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37034:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37297:1;37280:6;:13;:18;37276:272;;;37323:60;;;;;;;;;;:::i;:::-;;;;;;;;37276:272;37498:6;37492:13;37483:6;37479:2;37475:15;37468:38;37034:529;37171:41;;;37161:51;;;:6;:51;;;;37154:58;;;;;36998:620;37602:4;37595:11;;36826:799;;;;;;;:::o;18186:157::-;18271:4;18310:25;18295:40;;;:11;:40;;;;18288:47;;18186:157;;;:::o;40936:589::-;41080:45;41107:4;41113:2;41117:7;41080:26;:45::i;:::-;41158:1;41142:18;;:4;:18;;;41138:187;;;41177:40;41209:7;41177:31;:40::i;:::-;41138:187;;;41247:2;41239:10;;:4;:10;;;41235:90;;41266:47;41299:4;41305:7;41266:32;:47::i;:::-;41235:90;41138:187;41353:1;41339:16;;:2;:16;;;41335:183;;;41372:45;41409:7;41372:36;:45::i;:::-;41335:183;;;41445:4;41439:10;;:2;:10;;;41435:83;;41466:40;41494:2;41498:7;41466:27;:40::i;:::-;41435:83;41335:183;40936:589;;;:::o;33426:321::-;33556:18;33562:2;33566:7;33556:5;:18::i;:::-;33607:54;33638:1;33642:2;33646:7;33655:5;33607:22;:54::i;:::-;33585:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33426:321;;;:::o;8246:387::-;8306:4;8514:12;8581:7;8569:20;8561:28;;8624:1;8617:4;:8;8610:15;;;8246:387;;;:::o;38197:126::-;;;;:::o;42248:164::-;42352:10;:17;;;;42325:15;:24;42341:7;42325:24;;;;;;;;;;;:44;;;;42380:10;42396:7;42380:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42248:164;:::o;43039:988::-;43305:22;43355:1;43330:22;43347:4;43330:16;:22::i;:::-;:26;;;;:::i;:::-;43305:51;;43367:18;43388:17;:26;43406:7;43388:26;;;;;;;;;;;;43367:47;;43535:14;43521:10;:28;43517:328;;43566:19;43588:12;:18;43601:4;43588:18;;;;;;;;;;;;;;;:34;43607:14;43588:34;;;;;;;;;;;;43566:56;;43672:11;43639:12;:18;43652:4;43639:18;;;;;;;;;;;;;;;:30;43658:10;43639:30;;;;;;;;;;;:44;;;;43789:10;43756:17;:30;43774:11;43756:30;;;;;;;;;;;:43;;;;43517:328;;43941:17;:26;43959:7;43941:26;;;;;;;;;;;43934:33;;;43985:12;:18;43998:4;43985:18;;;;;;;;;;;;;;;:34;44004:14;43985:34;;;;;;;;;;;43978:41;;;43039:988;;;;:::o;44322:1079::-;44575:22;44620:1;44600:10;:17;;;;:21;;;;:::i;:::-;44575:46;;44632:18;44653:15;:24;44669:7;44653:24;;;;;;;;;;;;44632:45;;45004:19;45026:10;45037:14;45026:26;;;;;;;;;;;;;;;;;;;;;;;;45004:48;;45090:11;45065:10;45076;45065:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;45201:10;45170:15;:28;45186:11;45170:28;;;;;;;;;;;:41;;;;45342:15;:24;45358:7;45342:24;;;;;;;;;;;45335:31;;;45377:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44322:1079;;;;:::o;41826:221::-;41911:14;41928:20;41945:2;41928:16;:20::i;:::-;41911:37;;41986:7;41959:12;:16;41972:2;41959:16;;;;;;;;;;;;;;;:24;41976:6;41959:24;;;;;;;;;;;:34;;;;42033:6;42004:17;:26;42022:7;42004:26;;;;;;;;;;;:35;;;;41826:221;;;:::o;34083:382::-;34177:1;34163:16;;:2;:16;;;;34155:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34236:16;34244:7;34236;:16::i;:::-;34235:17;34227:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34298:45;34327:1;34331:2;34335:7;34298:20;:45::i;:::-;34373:1;34356:9;:13;34366:2;34356:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34404:2;34385:7;:16;34393:7;34385:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34449:7;34445:2;34424:33;;34441:1;34424:33;;;;;;;;;;;;34083:382;;:::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:139::-;;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1234:352::-;;;1352:3;1345:4;1337:6;1333:17;1329:27;1319:2;;1370:1;1367;1360:12;1319:2;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:2;;;1468:1;1465;1458:12;1422:2;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:2;;;1576:1;1573;1566:12;1519:2;1309:277;;;;;:::o;1592:139::-;;1676:6;1663:20;1654:29;;1692:33;1719:5;1692:33;:::i;:::-;1644:87;;;;:::o;1737:262::-;;1845:2;1833:9;1824:7;1820:23;1816:32;1813:2;;;1861:1;1858;1851:12;1813:2;1904:1;1929:53;1974:7;1965:6;1954:9;1950:22;1929:53;:::i;:::-;1919:63;;1875:117;1803:196;;;;:::o;2005:407::-;;;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2146:1;2143;2136:12;2098:2;2189:1;2214:53;2259:7;2250:6;2239:9;2235:22;2214:53;:::i;:::-;2204:63;;2160:117;2316:2;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2287:118;2088:324;;;;;:::o;2418:552::-;;;;2560:2;2548:9;2539:7;2535:23;2531:32;2528:2;;;2576:1;2573;2566:12;2528:2;2619:1;2644:53;2689:7;2680:6;2669:9;2665:22;2644:53;:::i;:::-;2634:63;;2590:117;2746:2;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;:::i;:::-;2762:63;;2717:118;2874:2;2900:53;2945:7;2936:6;2925:9;2921:22;2900:53;:::i;:::-;2890:63;;2845:118;2518:452;;;;;:::o;2976:809::-;;;;;3144:3;3132:9;3123:7;3119:23;3115:33;3112:2;;;3161:1;3158;3151:12;3112:2;3204:1;3229:53;3274:7;3265:6;3254:9;3250:22;3229:53;:::i;:::-;3219:63;;3175:117;3331:2;3357:53;3402:7;3393:6;3382:9;3378:22;3357:53;:::i;:::-;3347:63;;3302:118;3459:2;3485:53;3530:7;3521:6;3510:9;3506:22;3485:53;:::i;:::-;3475:63;;3430:118;3615:2;3604:9;3600:18;3587:32;3646:18;3638:6;3635:30;3632:2;;;3678:1;3675;3668:12;3632:2;3706:62;3760:7;3751:6;3740:9;3736:22;3706:62;:::i;:::-;3696:72;;3558:220;3102:683;;;;;;;:::o;3791:401::-;;;3913:2;3901:9;3892:7;3888:23;3884:32;3881:2;;;3929:1;3926;3919:12;3881:2;3972:1;3997:53;4042:7;4033:6;4022:9;4018:22;3997:53;:::i;:::-;3987:63;;3943:117;4099:2;4125:50;4167:7;4158:6;4147:9;4143:22;4125:50;:::i;:::-;4115:60;;4070:115;3871:321;;;;;:::o;4198:407::-;;;4323:2;4311:9;4302:7;4298:23;4294:32;4291:2;;;4339:1;4336;4329:12;4291:2;4382:1;4407:53;4452:7;4443:6;4432:9;4428:22;4407:53;:::i;:::-;4397:63;;4353:117;4509:2;4535:53;4580:7;4571:6;4560:9;4556:22;4535:53;:::i;:::-;4525:63;;4480:118;4281:324;;;;;:::o;4611:256::-;;4716:2;4704:9;4695:7;4691:23;4687:32;4684:2;;;4732:1;4729;4722:12;4684:2;4775:1;4800:50;4842:7;4833:6;4822:9;4818:22;4800:50;:::i;:::-;4790:60;;4746:114;4674:193;;;;:::o;4873:260::-;;4980:2;4968:9;4959:7;4955:23;4951:32;4948:2;;;4996:1;4993;4986:12;4948:2;5039:1;5064:52;5108:7;5099:6;5088:9;5084:22;5064:52;:::i;:::-;5054:62;;5010:116;4938:195;;;;:::o;5139:282::-;;5257:2;5245:9;5236:7;5232:23;5228:32;5225:2;;;5273:1;5270;5263:12;5225:2;5316:1;5341:63;5396:7;5387:6;5376:9;5372:22;5341:63;:::i;:::-;5331:73;;5287:127;5215:206;;;;:::o;5427:395::-;;;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5740:65;5797:7;5788:6;5777:9;5773:22;5740:65;:::i;:::-;5722:83;;;;5585:230;5513:309;;;;;:::o;5828:262::-;;5936:2;5924:9;5915:7;5911:23;5907:32;5904:2;;;5952:1;5949;5942:12;5904:2;5995:1;6020:53;6065:7;6056:6;6045:9;6041:22;6020:53;:::i;:::-;6010:63;;5966:117;5894:196;;;;:::o;6096:118::-;6183:24;6201:5;6183:24;:::i;:::-;6178:3;6171:37;6161:53;;:::o;6220:109::-;6301:21;6316:5;6301:21;:::i;:::-;6296:3;6289:34;6279:50;;:::o;6335:360::-;;6449:38;6481:5;6449:38;:::i;:::-;6503:70;6566:6;6561:3;6503:70;:::i;:::-;6496:77;;6582:52;6627:6;6622:3;6615:4;6608:5;6604:16;6582:52;:::i;:::-;6659:29;6681:6;6659:29;:::i;:::-;6654:3;6650:39;6643:46;;6425:270;;;;;:::o;6725:304::-;;6844:71;6908:6;6903:3;6844:71;:::i;:::-;6837:78;;6925:43;6961:6;6956:3;6949:5;6925:43;:::i;:::-;6993:29;7015:6;6993:29;:::i;:::-;6988:3;6984:39;6977:46;;6827:202;;;;;:::o;7035:364::-;;7151:39;7184:5;7151:39;:::i;:::-;7206:71;7270:6;7265:3;7206:71;:::i;:::-;7199:78;;7286:52;7331:6;7326:3;7319:4;7312:5;7308:16;7286:52;:::i;:::-;7363:29;7385:6;7363:29;:::i;:::-;7358:3;7354:39;7347:46;;7127:272;;;;;:::o;7405:377::-;;7539:39;7572:5;7539:39;:::i;:::-;7594:89;7676:6;7671:3;7594:89;:::i;:::-;7587:96;;7692:52;7737:6;7732:3;7725:4;7718:5;7714:16;7692:52;:::i;:::-;7769:6;7764:3;7760:16;7753:23;;7515:267;;;;;:::o;7788:366::-;;7951:67;8015:2;8010:3;7951:67;:::i;:::-;7944:74;;8027:93;8116:3;8027:93;:::i;:::-;8145:2;8140:3;8136:12;8129:19;;7934:220;;;:::o;8160:366::-;;8323:67;8387:2;8382:3;8323:67;:::i;:::-;8316:74;;8399:93;8488:3;8399:93;:::i;:::-;8517:2;8512:3;8508:12;8501:19;;8306:220;;;:::o;8532:366::-;;8695:67;8759:2;8754:3;8695:67;:::i;:::-;8688:74;;8771:93;8860:3;8771:93;:::i;:::-;8889:2;8884:3;8880:12;8873:19;;8678:220;;;:::o;8904:366::-;;9067:67;9131:2;9126:3;9067:67;:::i;:::-;9060:74;;9143:93;9232:3;9143:93;:::i;:::-;9261:2;9256:3;9252:12;9245:19;;9050:220;;;:::o;9276:366::-;;9439:67;9503:2;9498:3;9439:67;:::i;:::-;9432:74;;9515:93;9604:3;9515:93;:::i;:::-;9633:2;9628:3;9624:12;9617:19;;9422:220;;;:::o;9648:366::-;;9811:67;9875:2;9870:3;9811:67;:::i;:::-;9804:74;;9887:93;9976:3;9887:93;:::i;:::-;10005:2;10000:3;9996:12;9989:19;;9794:220;;;:::o;10020:366::-;;10183:67;10247:2;10242:3;10183:67;:::i;:::-;10176:74;;10259:93;10348:3;10259:93;:::i;:::-;10377:2;10372:3;10368:12;10361:19;;10166:220;;;:::o;10392:366::-;;10555:67;10619:2;10614:3;10555:67;:::i;:::-;10548:74;;10631:93;10720:3;10631:93;:::i;:::-;10749:2;10744:3;10740:12;10733:19;;10538:220;;;:::o;10764:366::-;;10927:67;10991:2;10986:3;10927:67;:::i;:::-;10920:74;;11003:93;11092:3;11003:93;:::i;:::-;11121:2;11116:3;11112:12;11105:19;;10910:220;;;:::o;11136:366::-;;11299:67;11363:2;11358:3;11299:67;:::i;:::-;11292:74;;11375:93;11464:3;11375:93;:::i;:::-;11493:2;11488:3;11484:12;11477:19;;11282:220;;;:::o;11508:366::-;;11671:67;11735:2;11730:3;11671:67;:::i;:::-;11664:74;;11747:93;11836:3;11747:93;:::i;:::-;11865:2;11860:3;11856:12;11849:19;;11654:220;;;:::o;11880:366::-;;12043:67;12107:2;12102:3;12043:67;:::i;:::-;12036:74;;12119:93;12208:3;12119:93;:::i;:::-;12237:2;12232:3;12228:12;12221:19;;12026:220;;;:::o;12252:366::-;;12415:67;12479:2;12474:3;12415:67;:::i;:::-;12408:74;;12491:93;12580:3;12491:93;:::i;:::-;12609:2;12604:3;12600:12;12593:19;;12398:220;;;:::o;12624:366::-;;12787:67;12851:2;12846:3;12787:67;:::i;:::-;12780:74;;12863:93;12952:3;12863:93;:::i;:::-;12981:2;12976:3;12972:12;12965:19;;12770:220;;;:::o;12996:366::-;;13159:67;13223:2;13218:3;13159:67;:::i;:::-;13152:74;;13235:93;13324:3;13235:93;:::i;:::-;13353:2;13348:3;13344:12;13337:19;;13142:220;;;:::o;13368:366::-;;13531:67;13595:2;13590:3;13531:67;:::i;:::-;13524:74;;13607:93;13696:3;13607:93;:::i;:::-;13725:2;13720:3;13716:12;13709:19;;13514:220;;;:::o;13740:366::-;;13903:67;13967:2;13962:3;13903:67;:::i;:::-;13896:74;;13979:93;14068:3;13979:93;:::i;:::-;14097:2;14092:3;14088:12;14081:19;;13886:220;;;:::o;14112:366::-;;14275:67;14339:2;14334:3;14275:67;:::i;:::-;14268:74;;14351:93;14440:3;14351:93;:::i;:::-;14469:2;14464:3;14460:12;14453:19;;14258:220;;;:::o;14484:366::-;;14647:67;14711:2;14706:3;14647:67;:::i;:::-;14640:74;;14723:93;14812:3;14723:93;:::i;:::-;14841:2;14836:3;14832:12;14825:19;;14630:220;;;:::o;14856:366::-;;15019:67;15083:2;15078:3;15019:67;:::i;:::-;15012:74;;15095:93;15184:3;15095:93;:::i;:::-;15213:2;15208:3;15204:12;15197:19;;15002:220;;;:::o;15228:366::-;;15391:67;15455:2;15450:3;15391:67;:::i;:::-;15384:74;;15467:93;15556:3;15467:93;:::i;:::-;15585:2;15580:3;15576:12;15569:19;;15374:220;;;:::o;15600:366::-;;15763:67;15827:2;15822:3;15763:67;:::i;:::-;15756:74;;15839:93;15928:3;15839:93;:::i;:::-;15957:2;15952:3;15948:12;15941:19;;15746:220;;;:::o;15972:366::-;;16135:67;16199:2;16194:3;16135:67;:::i;:::-;16128:74;;16211:93;16300:3;16211:93;:::i;:::-;16329:2;16324:3;16320:12;16313:19;;16118:220;;;:::o;16344:366::-;;16507:67;16571:2;16566:3;16507:67;:::i;:::-;16500:74;;16583:93;16672:3;16583:93;:::i;:::-;16701:2;16696:3;16692:12;16685:19;;16490:220;;;:::o;16716:366::-;;16879:67;16943:2;16938:3;16879:67;:::i;:::-;16872:74;;16955:93;17044:3;16955:93;:::i;:::-;17073:2;17068:3;17064:12;17057:19;;16862:220;;;:::o;17088:118::-;17175:24;17193:5;17175:24;:::i;:::-;17170:3;17163:37;17153:53;;:::o;17212:435::-;;17414:95;17505:3;17496:6;17414:95;:::i;:::-;17407:102;;17526:95;17617:3;17608:6;17526:95;:::i;:::-;17519:102;;17638:3;17631:10;;17396:251;;;;;:::o;17653:222::-;;17784:2;17773:9;17769:18;17761:26;;17797:71;17865:1;17854:9;17850:17;17841:6;17797:71;:::i;:::-;17751:124;;;;:::o;17881:640::-;;18114:3;18103:9;18099:19;18091:27;;18128:71;18196:1;18185:9;18181:17;18172:6;18128:71;:::i;:::-;18209:72;18277:2;18266:9;18262:18;18253:6;18209:72;:::i;:::-;18291;18359:2;18348:9;18344:18;18335:6;18291:72;:::i;:::-;18410:9;18404:4;18400:20;18395:2;18384:9;18380:18;18373:48;18438:76;18509:4;18500:6;18438:76;:::i;:::-;18430:84;;18081:440;;;;;;;:::o;18527:332::-;;18686:2;18675:9;18671:18;18663:26;;18699:71;18767:1;18756:9;18752:17;18743:6;18699:71;:::i;:::-;18780:72;18848:2;18837:9;18833:18;18824:6;18780:72;:::i;:::-;18653:206;;;;;:::o;18865:210::-;;18990:2;18979:9;18975:18;18967:26;;19003:65;19065:1;19054:9;19050:17;19041:6;19003:65;:::i;:::-;18957:118;;;;:::o;19081:333::-;;19242:2;19231:9;19227:18;19219:26;;19291:9;19285:4;19281:20;19277:1;19266:9;19262:17;19255:47;19319:88;19402:4;19393:6;19385;19319:88;:::i;:::-;19311:96;;19209:205;;;;;:::o;19420:313::-;;19571:2;19560:9;19556:18;19548:26;;19620:9;19614:4;19610:20;19606:1;19595:9;19591:17;19584:47;19648:78;19721:4;19712:6;19648:78;:::i;:::-;19640:86;;19538:195;;;;:::o;19739:419::-;;19943:2;19932:9;19928:18;19920:26;;19992:9;19986:4;19982:20;19978:1;19967:9;19963:17;19956:47;20020:131;20146:4;20020:131;:::i;:::-;20012:139;;19910:248;;;:::o;20164:419::-;;20368:2;20357:9;20353:18;20345:26;;20417:9;20411:4;20407:20;20403:1;20392:9;20388:17;20381:47;20445:131;20571:4;20445:131;:::i;:::-;20437:139;;20335:248;;;:::o;20589:419::-;;20793:2;20782:9;20778:18;20770:26;;20842:9;20836:4;20832:20;20828:1;20817:9;20813:17;20806:47;20870:131;20996:4;20870:131;:::i;:::-;20862:139;;20760:248;;;:::o;21014:419::-;;21218:2;21207:9;21203:18;21195:26;;21267:9;21261:4;21257:20;21253:1;21242:9;21238:17;21231:47;21295:131;21421:4;21295:131;:::i;:::-;21287:139;;21185:248;;;:::o;21439:419::-;;21643:2;21632:9;21628:18;21620:26;;21692:9;21686:4;21682:20;21678:1;21667:9;21663:17;21656:47;21720:131;21846:4;21720:131;:::i;:::-;21712:139;;21610:248;;;:::o;21864:419::-;;22068:2;22057:9;22053:18;22045:26;;22117:9;22111:4;22107:20;22103:1;22092:9;22088:17;22081:47;22145:131;22271:4;22145:131;:::i;:::-;22137:139;;22035:248;;;:::o;22289:419::-;;22493:2;22482:9;22478:18;22470:26;;22542:9;22536:4;22532:20;22528:1;22517:9;22513:17;22506:47;22570:131;22696:4;22570:131;:::i;:::-;22562:139;;22460:248;;;:::o;22714:419::-;;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22885:248;;;:::o;23139:419::-;;23343:2;23332:9;23328:18;23320:26;;23392:9;23386:4;23382:20;23378:1;23367:9;23363:17;23356:47;23420:131;23546:4;23420:131;:::i;:::-;23412:139;;23310:248;;;:::o;23564:419::-;;23768:2;23757:9;23753:18;23745:26;;23817:9;23811:4;23807:20;23803:1;23792:9;23788:17;23781:47;23845:131;23971:4;23845:131;:::i;:::-;23837:139;;23735:248;;;:::o;23989:419::-;;24193:2;24182:9;24178:18;24170:26;;24242:9;24236:4;24232:20;24228:1;24217:9;24213:17;24206:47;24270:131;24396:4;24270:131;:::i;:::-;24262:139;;24160:248;;;:::o;24414:419::-;;24618:2;24607:9;24603:18;24595:26;;24667:9;24661:4;24657:20;24653:1;24642:9;24638:17;24631:47;24695:131;24821:4;24695:131;:::i;:::-;24687:139;;24585:248;;;:::o;24839:419::-;;25043:2;25032:9;25028:18;25020:26;;25092:9;25086:4;25082:20;25078:1;25067:9;25063:17;25056:47;25120:131;25246:4;25120:131;:::i;:::-;25112:139;;25010:248;;;:::o;25264:419::-;;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25435:248;;;:::o;25689:419::-;;25893:2;25882:9;25878:18;25870:26;;25942:9;25936:4;25932:20;25928:1;25917:9;25913:17;25906:47;25970:131;26096:4;25970:131;:::i;:::-;25962:139;;25860:248;;;:::o;26114:419::-;;26318:2;26307:9;26303:18;26295:26;;26367:9;26361:4;26357:20;26353:1;26342:9;26338:17;26331:47;26395:131;26521:4;26395:131;:::i;:::-;26387:139;;26285:248;;;:::o;26539:419::-;;26743:2;26732:9;26728:18;26720:26;;26792:9;26786:4;26782:20;26778:1;26767:9;26763:17;26756:47;26820:131;26946:4;26820:131;:::i;:::-;26812:139;;26710:248;;;:::o;26964:419::-;;27168:2;27157:9;27153:18;27145:26;;27217:9;27211:4;27207:20;27203:1;27192:9;27188:17;27181:47;27245:131;27371:4;27245:131;:::i;:::-;27237:139;;27135:248;;;:::o;27389:419::-;;27593:2;27582:9;27578:18;27570:26;;27642:9;27636:4;27632:20;27628:1;27617:9;27613:17;27606:47;27670:131;27796:4;27670:131;:::i;:::-;27662:139;;27560:248;;;:::o;27814:419::-;;28018:2;28007:9;28003:18;27995:26;;28067:9;28061:4;28057:20;28053:1;28042:9;28038:17;28031:47;28095:131;28221:4;28095:131;:::i;:::-;28087:139;;27985:248;;;:::o;28239:419::-;;28443:2;28432:9;28428:18;28420:26;;28492:9;28486:4;28482:20;28478:1;28467:9;28463:17;28456:47;28520:131;28646:4;28520:131;:::i;:::-;28512:139;;28410:248;;;:::o;28664:419::-;;28868:2;28857:9;28853:18;28845:26;;28917:9;28911:4;28907:20;28903:1;28892:9;28888:17;28881:47;28945:131;29071:4;28945:131;:::i;:::-;28937:139;;28835:248;;;:::o;29089:419::-;;29293:2;29282:9;29278:18;29270:26;;29342:9;29336:4;29332:20;29328:1;29317:9;29313:17;29306:47;29370:131;29496:4;29370:131;:::i;:::-;29362:139;;29260:248;;;:::o;29514:419::-;;29718:2;29707:9;29703:18;29695:26;;29767:9;29761:4;29757:20;29753:1;29742:9;29738:17;29731:47;29795:131;29921:4;29795:131;:::i;:::-;29787:139;;29685:248;;;:::o;29939:419::-;;30143:2;30132:9;30128:18;30120:26;;30192:9;30186:4;30182:20;30178:1;30167:9;30163:17;30156:47;30220:131;30346:4;30220:131;:::i;:::-;30212:139;;30110:248;;;:::o;30364:222::-;;30495:2;30484:9;30480:18;30472:26;;30508:71;30576:1;30565:9;30561:17;30552:6;30508:71;:::i;:::-;30462:124;;;;:::o;30592:129::-;;30653:20;;:::i;:::-;30643:30;;30682:33;30710:4;30702:6;30682:33;:::i;:::-;30633:88;;;:::o;30727:75::-;;30793:2;30787:9;30777:19;;30767:35;:::o;30808:307::-;;30959:18;30951:6;30948:30;30945:2;;;30981:18;;:::i;:::-;30945:2;31019:29;31041:6;31019:29;:::i;:::-;31011:37;;31103:4;31097;31093:15;31085:23;;30874:241;;;:::o;31121:98::-;;31206:5;31200:12;31190:22;;31179:40;;;:::o;31225:99::-;;31311:5;31305:12;31295:22;;31284:40;;;:::o;31330:168::-;;31447:6;31442:3;31435:19;31487:4;31482:3;31478:14;31463:29;;31425:73;;;;:::o;31504:169::-;;31622:6;31617:3;31610:19;31662:4;31657:3;31653:14;31638:29;;31600:73;;;;:::o;31679:148::-;;31818:3;31803:18;;31793:34;;;;:::o;31833:305::-;;31892:20;31910:1;31892:20;:::i;:::-;31887:25;;31926:20;31944:1;31926:20;:::i;:::-;31921:25;;32080:1;32012:66;32008:74;32005:1;32002:81;31999:2;;;32086:18;;:::i;:::-;31999:2;32130:1;32127;32123:9;32116:16;;31877:261;;;;:::o;32144:185::-;;32201:20;32219:1;32201:20;:::i;:::-;32196:25;;32235:20;32253:1;32235:20;:::i;:::-;32230:25;;32274:1;32264:2;;32279:18;;:::i;:::-;32264:2;32321:1;32318;32314:9;32309:14;;32186:143;;;;:::o;32335:348::-;;32398:20;32416:1;32398:20;:::i;:::-;32393:25;;32432:20;32450:1;32432:20;:::i;:::-;32427:25;;32620:1;32552:66;32548:74;32545:1;32542:81;32537:1;32530:9;32523:17;32519:105;32516:2;;;32627:18;;:::i;:::-;32516:2;32675:1;32672;32668:9;32657:20;;32383:300;;;;:::o;32689:191::-;;32749:20;32767:1;32749:20;:::i;:::-;32744:25;;32783:20;32801:1;32783:20;:::i;:::-;32778:25;;32822:1;32819;32816:8;32813:2;;;32827:18;;:::i;:::-;32813:2;32872:1;32869;32865:9;32857:17;;32734:146;;;;:::o;32886:96::-;;32952:24;32970:5;32952:24;:::i;:::-;32941:35;;32931:51;;;:::o;32988:90::-;;33065:5;33058:13;33051:21;33040:32;;33030:48;;;:::o;33084:149::-;;33160:66;33153:5;33149:78;33138:89;;33128:105;;;:::o;33239:126::-;;33316:42;33309:5;33305:54;33294:65;;33284:81;;;:::o;33371:77::-;;33437:5;33426:16;;33416:32;;;:::o;33454:154::-;33538:6;33533:3;33528;33515:30;33600:1;33591:6;33586:3;33582:16;33575:27;33505:103;;;:::o;33614:307::-;33682:1;33692:113;33706:6;33703:1;33700:13;33692:113;;;33791:1;33786:3;33782:11;33776:18;33772:1;33767:3;33763:11;33756:39;33728:2;33725:1;33721:10;33716:15;;33692:113;;;33823:6;33820:1;33817:13;33814:2;;;33903:1;33894:6;33889:3;33885:16;33878:27;33814:2;33663:258;;;;:::o;33927:320::-;;34008:1;34002:4;33998:12;33988:22;;34055:1;34049:4;34045:12;34076:18;34066:2;;34132:4;34124:6;34120:17;34110:27;;34066:2;34194;34186:6;34183:14;34163:18;34160:38;34157:2;;;34213:18;;:::i;:::-;34157:2;33978:269;;;;:::o;34253:281::-;34336:27;34358:4;34336:27;:::i;:::-;34328:6;34324:40;34466:6;34454:10;34451:22;34430:18;34418:10;34415:34;34412:62;34409:2;;;34477:18;;:::i;:::-;34409:2;34517:10;34513:2;34506:22;34296:238;;;:::o;34540:233::-;;34602:24;34620:5;34602:24;:::i;:::-;34593:33;;34648:66;34641:5;34638:77;34635:2;;;34718:18;;:::i;:::-;34635:2;34765:1;34758:5;34754:13;34747:20;;34583:190;;;:::o;34779:176::-;;34828:20;34846:1;34828:20;:::i;:::-;34823:25;;34862:20;34880:1;34862:20;:::i;:::-;34857:25;;34901:1;34891:2;;34906:18;;:::i;:::-;34891:2;34947:1;34944;34940:9;34935:14;;34813:142;;;;:::o;34961:180::-;35009:77;35006:1;34999:88;35106:4;35103:1;35096:15;35130:4;35127:1;35120:15;35147:180;35195:77;35192:1;35185:88;35292:4;35289:1;35282:15;35316:4;35313:1;35306:15;35333:180;35381:77;35378:1;35371:88;35478:4;35475:1;35468:15;35502:4;35499:1;35492:15;35519:180;35567:77;35564:1;35557:88;35664:4;35661:1;35654:15;35688:4;35685:1;35678:15;35705:102;;35797:2;35793:7;35788:2;35781:5;35777:14;35773:28;35763:38;;35753:54;;;:::o;35813:169::-;35953:21;35949:1;35941:6;35937:14;35930:45;35919:63;:::o;35988:170::-;36128:22;36124:1;36116:6;36112:14;36105:46;36094:64;:::o;36164:230::-;36304:34;36300:1;36292:6;36288:14;36281:58;36373:13;36368:2;36360:6;36356:15;36349:38;36270:124;:::o;36400:237::-;36540:34;36536:1;36528:6;36524:14;36517:58;36609:20;36604:2;36596:6;36592:15;36585:45;36506:131;:::o;36643:225::-;36783:34;36779:1;36771:6;36767:14;36760:58;36852:8;36847:2;36839:6;36835:15;36828:33;36749:119;:::o;36874:178::-;37014:30;37010:1;37002:6;36998:14;36991:54;36980:72;:::o;37058:161::-;37198:13;37194:1;37186:6;37182:14;37175:37;37164:55;:::o;37225:223::-;37365:34;37361:1;37353:6;37349:14;37342:58;37434:6;37429:2;37421:6;37417:15;37410:31;37331:117;:::o;37454:175::-;37594:27;37590:1;37582:6;37578:14;37571:51;37560:69;:::o;37635:181::-;37775:33;37771:1;37763:6;37759:14;37752:57;37741:75;:::o;37822:231::-;37962:34;37958:1;37950:6;37946:14;37939:58;38031:14;38026:2;38018:6;38014:15;38007:39;37928:125;:::o;38059:166::-;38199:18;38195:1;38187:6;38183:14;38176:42;38165:60;:::o;38231:243::-;38371:34;38367:1;38359:6;38355:14;38348:58;38440:26;38435:2;38427:6;38423:15;38416:51;38337:137;:::o;38480:229::-;38620:34;38616:1;38608:6;38604:14;38597:58;38689:12;38684:2;38676:6;38672:15;38665:37;38586:123;:::o;38715:228::-;38855:34;38851:1;38843:6;38839:14;38832:58;38924:11;38919:2;38911:6;38907:15;38900:36;38821:122;:::o;38949:182::-;39089:34;39085:1;39077:6;39073:14;39066:58;39055:76;:::o;39137:231::-;39277:34;39273:1;39265:6;39261:14;39254:58;39346:14;39341:2;39333:6;39329:15;39322:39;39243:125;:::o;39374:182::-;39514:34;39510:1;39502:6;39498:14;39491:58;39480:76;:::o;39562:228::-;39702:34;39698:1;39690:6;39686:14;39679:58;39771:11;39766:2;39758:6;39754:15;39747:36;39668:122;:::o;39796:234::-;39936:34;39932:1;39924:6;39920:14;39913:58;40005:17;40000:2;39992:6;39988:15;39981:42;39902:128;:::o;40036:220::-;40176:34;40172:1;40164:6;40160:14;40153:58;40245:3;40240:2;40232:6;40228:15;40221:28;40142:114;:::o;40262:236::-;40402:34;40398:1;40390:6;40386:14;40379:58;40471:19;40466:2;40458:6;40454:15;40447:44;40368:130;:::o;40504:231::-;40644:34;40640:1;40632:6;40628:14;40621:58;40713:14;40708:2;40700:6;40696:15;40689:39;40610:125;:::o;40741:170::-;40881:22;40877:1;40869:6;40865:14;40858:46;40847:64;:::o;40917:171::-;41057:23;41053:1;41045:6;41041:14;41034:47;41023:65;:::o;41094:122::-;41167:24;41185:5;41167:24;:::i;:::-;41160:5;41157:35;41147:2;;41206:1;41203;41196:12;41147:2;41137:79;:::o;41222:116::-;41292:21;41307:5;41292:21;:::i;:::-;41285:5;41282:32;41272:2;;41328:1;41325;41318:12;41272:2;41262:76;:::o;41344:120::-;41416:23;41433:5;41416:23;:::i;:::-;41409:5;41406:34;41396:2;;41454:1;41451;41444:12;41396:2;41386:78;:::o;41470:122::-;41543:24;41561:5;41543:24;:::i;:::-;41536:5;41533:35;41523:2;;41582:1;41579;41572:12;41523:2;41513:79;:::o

Swarm Source

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