ETH Price: $3,414.62 (+3.09%)

Token

CurseTicket (CURSETICKET)
 

Overview

Max Total Supply

1,000 CURSETICKET

Holders

522

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
8 CURSETICKET
0xe698102e1dd3e4adf2f10fc026a4130080fddc10
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

There are 1,000 tickets in total. Every ticket is a collectible piece of NFT art. There are three variations of the ticket art, each of a different rarity: 700 Standard Tickets, 250 Uncommon Tickets, and 50 Rare Tickets. Each ticket is limited and deflationary.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CurseNFTTicket

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev 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}.
 */
abstract 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 {}
}

contract CurseNFTTicket is ERC721 {
    uint public totalSupply = 1000;
    uint public maxTypeACnt = 50;
    uint public maxTypeBCnt = 250;
    uint public maxTypeCCnt = 700;
    uint public maxMintCntPerAddress = 10;
    
    string public metadataA = "https://ipfs.io/ipfs/QmPpCEYRSo3oNVVfvTSQnzw943Kw2UQLyaHR7qvbnz4TJS?filename=rare.json";
    string public metadataB = "https://ipfs.io/ipfs/QmPpgquCKBCipDbXD4CQNLusJ6ccTK9qYQ6vQnM3Re8W3t?filename=uncommon.json";
    string public metadataC = "https://ipfs.io/ipfs/QmaSwEBXdaWXktEZUsNU8n7c7Pqw8a8ypePRZWU1bLTkFf?filename=standard.json";
    
    uint public totalMint = 0;
    
    mapping (uint => address) public burntWallets;
    mapping (uint => uint) public tokenType;
    mapping (uint => uint) public tokenCntByType;
    
    mapping (address => uint) public mintCnt;
    
    uint private nonce = 0;
    
    address private _deployer;
    
    uint private mintPrice = 4 * 10 ** 16;
    
    address public serviceAddress;
    
    constructor() ERC721("CurseTicket", "CURSETICKET") {
        _deployer = msg.sender;
        serviceAddress = address(0x634ad02a621888CDd2d1D1B4bF1E6b6Eb46efAF7);
    }
    
    function ownerOf(uint tokenId) public view override returns (address) {
        return super.ownerOf(tokenId);
    }
    
    function tokenURI(uint tokenId) public view override returns (string memory) {
        if (tokenType[tokenId] == 1) {
            return metadataA;
        } else if (tokenType[tokenId] == 2) {
            return metadataB;
        } else if (tokenType[tokenId] == 3) {
            return metadataC;
        } else {
            require(false, "Unknown ticket type.");
        }
    }
    
    function mint() public payable  {
        require(totalMint < totalSupply, "There's no token to mint.");
        require(mintCnt[msg.sender] < maxMintCntPerAddress, "One address can mint 10 tickets.");
        require(mintPrice == msg.value, "Mint price is not correct.");
        
        uint typeACnt = 0;
        uint typeBCnt = 0;
        uint typeCCnt = 0;
        if (tokenCntByType[1] < maxTypeACnt) {
            typeACnt = maxTypeACnt;
        }
        if (tokenCntByType[2] < maxTypeBCnt) {
            typeBCnt = maxTypeBCnt;
        }
        if (tokenCntByType[3] < maxTypeCCnt) {
            typeCCnt = maxTypeCCnt;
        }
        
        uint randomNumber = random(typeACnt + typeBCnt + typeCCnt);
        uint token_type = 3;
        
        if (randomNumber < typeACnt) {     // type A
            token_type = 1;
        } else if (randomNumber < typeACnt + typeBCnt) { // type B
            token_type = 2;
        } else { // type C
            token_type = 3;
        }
        
        totalMint++;
        tokenCntByType[token_type]++;
        tokenType[totalMint] = token_type;
        
        _safeMint(msg.sender, totalMint);
        mintCnt[msg.sender]++;
        
        address payable _to = payable(serviceAddress);
        _to.transfer(mintPrice);
    }
    
    function random(uint maxValue) internal returns (uint) {
        uint randomnumber = uint(keccak256(abi.encodePacked(block.timestamp, msg.sender, nonce))) % maxValue;
        randomnumber = randomnumber + 1;
        nonce++;
        return randomnumber;
    }
    
    function burn(uint256 tokenId) public {
        require(ownerOf(tokenId) == msg.sender, "Not owner.");
        
        _burn(tokenId);
        
        burntWallets[tokenId] = msg.sender;
    }
    
    function transferOwnership(address _to) public {
        require(_deployer == msg.sender, "Only owner can call this function.");
        
        _deployer = _to;
    }
    
    function withdraw(address payable _to, uint amount) public payable {
        require(_deployer == msg.sender, "Only owner can call this function.");
        
        _to.transfer(amount);
    }
    
    function premint(address _to) public {
        require(_deployer == msg.sender, "Only owner can call this function.");
        require(totalMint == 0, "Already minted.");
        
        for (uint i = 1; i <= 5; i++) {
            totalMint++;
            tokenCntByType[1]++;
            tokenType[totalMint] = 1;
            
            _safeMint(_to, totalMint);
            mintCnt[_to]++;
        }
        
        for (uint i = 6; i <= 30; i++) {
            totalMint++;
            tokenCntByType[2]++;
            tokenType[totalMint] = 2;
            
            _safeMint(_to, totalMint);
            mintCnt[_to]++;
        }
        
        for (uint i = 31; i <= 100; i++) {
            totalMint++;
            tokenCntByType[3]++;
            tokenType[totalMint] = 3;
            
            _safeMint(_to, totalMint);
            mintCnt[_to]++;
        }
    }
    
    function setMintPrice(uint price) public {
        require(_deployer == msg.sender, "Only owner can call this function.");
        
        mintPrice = price;
    }
    
    function getMyTokens() public view returns (uint[] memory) {
        uint[] memory ret = new uint[](mintCnt[msg.sender]);
        uint index = 0;
        for (uint i = 1; i <= totalMint; i++) {
            if (ownerOf(i) == msg.sender) {
                ret[index++] = i;
            }
        }
        return ret;
    }
    
    function setServiceAddress(address _serviceAddress) public {
        require(_deployer == msg.sender, "Only owner can call this function.");
        
        serviceAddress = _serviceAddress;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burntWallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintCntPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTypeACnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTypeBCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTypeCCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataA","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataB","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataC","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"premint","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":"serviceAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_serviceAddress","type":"address"}],"name":"setServiceAddress","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":"","type":"uint256"}],"name":"tokenCntByType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenType","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":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526103e8600655603260075560fa6008556102bc600955600a8055604051806080016040528060568152602001620043bf60569139600b90805190602001906200004f92919062000213565b506040518060800160405280605a815260200162004415605a9139600c90805190602001906200008192919062000213565b506040518060800160405280605a815260200162004365605a9139600d9080519060200190620000b392919062000213565b506000600e556000601355668e1bc9bf040000601555348015620000d657600080fd5b506040518060400160405280600b81526020017f43757273655469636b65740000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f43555253455449434b455400000000000000000000000000000000000000000081525081600090805190602001906200015b92919062000213565b5080600190805190602001906200017492919062000213565b50505033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073634ad02a621888cdd2d1d1b4bf1e6b6eb46efaf7601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000328565b8280546200022190620002c3565b90600052602060002090601f01602090048101928262000245576000855562000291565b82601f106200026057805160ff191683800117855562000291565b8280016001018555821562000291579182015b828111156200029057825182559160200191906001019062000273565b5b509050620002a09190620002a4565b5090565b5b80821115620002bf576000816000905550600101620002a5565b5090565b60006002820490506001821680620002dc57607f821691505b60208210811415620002f357620002f2620002f9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61402d80620003386000396000f3fe6080604052600436106102045760003560e01c80637e249a9011610118578063e6c3b1f6116100a0578063f11767b01161006f578063f11767b014610786578063f2fde38b146107c3578063f3fef3a3146107ec578063f4a0a52814610808578063f6e396401461083157610204565b8063e6c3b1f6146106a4578063e8dcc866146106e1578063e985e9c51461070c578063ecb33a931461074957610204565b80639e4e787f116100e75780639e4e787f146105bf578063a22cb465146105ea578063b88d4fde14610613578063c87b56dd1461063c578063d170d55d1461067957610204565b80637e249a9014610513578063883348451461053e5780638d5b87b61461056957806395d89b411461059457610204565b806323b872dd1161019b57806359a7715a1161016a57806359a7715a146104185780635b3b136a146104435780636352211e1461046e57806368cf3508146104ab57806370a08231146104d657610204565b806323b872dd1461037257806342842e0e1461039b57806342966c68146103c4578063451a3cec146103ed57610204565b80631249c58b116101d75780631249c58b146102d757806314037068146102e157806318160ddd1461030a57806322e3ad7d1461033557610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e89565b61085a565b60405161023d91906133d8565b60405180910390f35b34801561025257600080fd5b5061025b61093c565b60405161026891906133f3565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612edb565b6109ce565b6040516102a5919061334f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612e4d565b610a53565b005b6102df610b6b565b005b3480156102ed57600080fd5b5061030860048036038101906103039190612ca6565b610e79565b005b34801561031657600080fd5b5061031f6111f4565b60405161032c9190613695565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612edb565b6111fa565b604051610369919061334f565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612d47565b61122d565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612d47565b61128d565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612edb565b6112ad565b005b3480156103f957600080fd5b50610402611381565b60405161040f9190613695565b60405180910390f35b34801561042457600080fd5b5061042d611387565b60405161043a9190613695565b60405180910390f35b34801561044f57600080fd5b5061045861138d565b60405161046591906133b6565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612edb565b6114fd565b6040516104a2919061334f565b60405180910390f35b3480156104b757600080fd5b506104c061150f565b6040516104cd91906133f3565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612ca6565b61159d565b60405161050a9190613695565b60405180910390f35b34801561051f57600080fd5b50610528611655565b60405161053591906133f3565b60405180910390f35b34801561054a57600080fd5b506105536116e3565b60405161056091906133f3565b60405180910390f35b34801561057557600080fd5b5061057e611771565b60405161058b919061334f565b60405180910390f35b3480156105a057600080fd5b506105a9611797565b6040516105b691906133f3565b60405180910390f35b3480156105cb57600080fd5b506105d4611829565b6040516105e19190613695565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190612e11565b61182f565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612d96565b6119b0565b005b34801561064857600080fd5b50610663600480360381019061065e9190612edb565b611a12565b60405161067091906133f3565b60405180910390f35b34801561068557600080fd5b5061068e611c65565b60405161069b9190613695565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190612edb565b611c6b565b6040516106d89190613695565b60405180910390f35b3480156106ed57600080fd5b506106f6611c83565b6040516107039190613695565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190612d0b565b611c89565b60405161074091906133d8565b60405180910390f35b34801561075557600080fd5b50610770600480360381019061076b9190612edb565b611d1d565b60405161077d9190613695565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190612ca6565b611d35565b6040516107ba9190613695565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190612ca6565b611d4d565b005b61080660048036038101906108019190612ccf565b611e21565b005b34801561081457600080fd5b5061082f600480360381019061082a9190612edb565b611efc565b005b34801561083d57600080fd5b5061085860048036038101906108539190612ca6565b611f96565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093557506109348261206a565b5b9050919050565b60606000805461094b906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610977906138c9565b80156109c45780601f10610999576101008083540402835291602001916109c4565b820191906000526020600020905b8154815290600101906020018083116109a757829003601f168201915b5050505050905090565b60006109d9826120d4565b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906135b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5e82612140565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906135f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aee6121f2565b73ffffffffffffffffffffffffffffffffffffffff161480610b1d5750610b1c81610b176121f2565b611c89565b5b610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613535565b60405180910390fd5b610b6683836121fa565b505050565b600654600e5410610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba890613655565b60405180910390fd5b600a54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90613475565b60405180910390fd5b3460155414610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90613495565b60405180910390fd5b60008060006007546011600060018152602001908152602001600020541015610ca15760075492505b6008546011600060028152602001908152602001600020541015610cc55760085491505b6009546011600060038152602001908152602001600020541015610ce95760095490505b6000610d0a828486610cfb9190613777565b610d059190613777565b6122b3565b905060006003905084821015610d235760019050610d45565b8385610d2f9190613777565b821015610d3f5760029050610d44565b600390505b5b600e6000815480929190610d589061392c565b9190505550601160008281526020019081526020016000206000815480929190610d819061392c565b91905055508060106000600e54815260200190815260200160002081905550610dac33600e54612323565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610dfc9061392c565b91905055506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc6015549081150290604051600060405180830381858888f19350505050158015610e70573d6000803e3d6000fd5b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090613415565b60405180910390fd5b6000600e5414610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906134f5565b60405180910390fd5b6000600190505b6005811161102e57600e6000815480929190610f709061392c565b919050555060116000600181526020019081526020016000206000815480929190610f9a9061392c565b9190505550600160106000600e54815260200190815260200160002081905550610fc682600e54612323565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906110169061392c565b919050555080806110269061392c565b915050610f55565b506000600690505b601e811161110f57600e60008154809291906110519061392c565b91905055506011600060028152602001908152602001600020600081548092919061107b9061392c565b9190505550600260106000600e548152602001908152602001600020819055506110a782600e54612323565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906110f79061392c565b919050555080806111079061392c565b915050611036565b506000601f90505b606481116111f057600e60008154809291906111329061392c565b91905055506011600060038152602001908152602001600020600081548092919061115c9061392c565b9190505550600360106000600e5481526020019081526020016000208190555061118882600e54612323565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111d89061392c565b919050555080806111e89061392c565b915050611117565b5050565b60065481565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61123e6112386121f2565b82612341565b61127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613635565b60405180910390fd5b61128883838361241f565b505050565b6112a8838383604051806020016040528060008152506119b0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166112cd826114fd565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90613615565b60405180910390fd5b61132c8161267b565b33600f600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b600e5481565b60606000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff811115611410577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561143e5781602001602082028036833780820191505090505b509050600080600190505b600e5481116114f4573373ffffffffffffffffffffffffffffffffffffffff16611472826114fd565b73ffffffffffffffffffffffffffffffffffffffff1614156114e1578083838061149b9061392c565b9450815181106114d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505b80806114ec9061392c565b915050611449565b50819250505090565b600061150882612140565b9050919050565b600b805461151c906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611548906138c9565b80156115955780601f1061156a57610100808354040283529160200191611595565b820191906000526020600020905b81548152906001019060200180831161157857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613555565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c8054611662906138c9565b80601f016020809104026020016040519081016040528092919081815260200182805461168e906138c9565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b505050505081565b600d80546116f0906138c9565b80601f016020809104026020016040519081016040528092919081815260200182805461171c906138c9565b80156117695780601f1061173e57610100808354040283529160200191611769565b820191906000526020600020905b81548152906001019060200180831161174c57829003601f168201915b505050505081565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546117a6906138c9565b80601f01602080910402602001604051908101604052809291908181526020018280546117d2906138c9565b801561181f5780601f106117f45761010080835404028352916020019161181f565b820191906000526020600020905b81548152906001019060200180831161180257829003601f168201915b5050505050905090565b60075481565b6118376121f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c906134d5565b60405180910390fd5b80600560006118b26121f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661195f6121f2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a491906133d8565b60405180910390a35050565b6119c16119bb6121f2565b83612341565b611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613635565b60405180910390fd5b611a0c8484848461278c565b50505050565b6060600160106000848152602001908152602001600020541415611ac257600b8054611a3d906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a69906138c9565b8015611ab65780601f10611a8b57610100808354040283529160200191611ab6565b820191906000526020600020905b815481529060010190602001808311611a9957829003601f168201915b50505050509050611c60565b600260106000848152602001908152602001600020541415611b7057600c8054611aeb906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b17906138c9565b8015611b645780601f10611b3957610100808354040283529160200191611b64565b820191906000526020600020905b815481529060010190602001808311611b4757829003601f168201915b50505050509050611c60565b600360106000848152602001908152602001600020541415611c1e57600d8054611b99906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc5906138c9565b8015611c125780601f10611be757610100808354040283529160200191611c12565b820191906000526020600020905b815481529060010190602001808311611bf557829003601f168201915b50505050509050611c60565b6000611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613675565b60405180910390fd5b5b919050565b600a5481565b60106020528060005260406000206000915090505481565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b60126020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490613415565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613415565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ef7573d6000803e3d6000fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613415565b60405180910390fd5b8060158190555050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613415565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613575565b60405180910390fd5b80915050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661226d83612140565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000808242336013546040516020016122ce93929190613312565b6040516020818303038152906040528051906020012060001c6122f191906139a3565b90506001816123009190613777565b9050601360008154809291906123159061392c565b919050555080915050919050565b61233d8282604051806020016040528060008152506127e8565b5050565b600061234c826120d4565b61238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290613515565b60405180910390fd5b600061239683612140565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061240557508373ffffffffffffffffffffffffffffffffffffffff166123ed846109ce565b73ffffffffffffffffffffffffffffffffffffffff16145b8061241657506124158185611c89565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661243f82612140565b73ffffffffffffffffffffffffffffffffffffffff1614612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906135d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc906134b5565b60405180910390fd5b612510838383612843565b61251b6000826121fa565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906137cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125c29190613777565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061268682612140565b905061269481600084612843565b61269f6000836121fa565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ef91906137cd565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61279784848461241f565b6127a384848484612848565b6127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990613435565b60405180910390fd5b50505050565b6127f283836129df565b6127ff6000848484612848565b61283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590613435565b60405180910390fd5b505050565b505050565b60006128698473ffffffffffffffffffffffffffffffffffffffff16612bad565b156129d2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128926121f2565b8786866040518563ffffffff1660e01b81526004016128b4949392919061336a565b602060405180830381600087803b1580156128ce57600080fd5b505af19250505080156128ff57506040513d601f19601f820116820180604052508101906128fc9190612eb2565b60015b612982573d806000811461292f576040519150601f19603f3d011682016040523d82523d6000602084013e612934565b606091505b5060008151141561297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190613435565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129d7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4690613595565b60405180910390fd5b612a58816120d4565b15612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f90613455565b60405180910390fd5b612aa460008383612843565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af49190613777565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000612bd3612bce846136d5565b6136b0565b905082815260208101848484011115612beb57600080fd5b612bf6848285613887565b509392505050565b600081359050612c0d81613f84565b92915050565b600081359050612c2281613f9b565b92915050565b600081359050612c3781613fb2565b92915050565b600081359050612c4c81613fc9565b92915050565b600081519050612c6181613fc9565b92915050565b600082601f830112612c7857600080fd5b8135612c88848260208601612bc0565b91505092915050565b600081359050612ca081613fe0565b92915050565b600060208284031215612cb857600080fd5b6000612cc684828501612bfe565b91505092915050565b60008060408385031215612ce257600080fd5b6000612cf085828601612c13565b9250506020612d0185828601612c91565b9150509250929050565b60008060408385031215612d1e57600080fd5b6000612d2c85828601612bfe565b9250506020612d3d85828601612bfe565b9150509250929050565b600080600060608486031215612d5c57600080fd5b6000612d6a86828701612bfe565b9350506020612d7b86828701612bfe565b9250506040612d8c86828701612c91565b9150509250925092565b60008060008060808587031215612dac57600080fd5b6000612dba87828801612bfe565b9450506020612dcb87828801612bfe565b9350506040612ddc87828801612c91565b925050606085013567ffffffffffffffff811115612df957600080fd5b612e0587828801612c67565b91505092959194509250565b60008060408385031215612e2457600080fd5b6000612e3285828601612bfe565b9250506020612e4385828601612c28565b9150509250929050565b60008060408385031215612e6057600080fd5b6000612e6e85828601612bfe565b9250506020612e7f85828601612c91565b9150509250929050565b600060208284031215612e9b57600080fd5b6000612ea984828501612c3d565b91505092915050565b600060208284031215612ec457600080fd5b6000612ed284828501612c52565b91505092915050565b600060208284031215612eed57600080fd5b6000612efb84828501612c91565b91505092915050565b6000612f1083836132dd565b60208301905092915050565b612f2581613801565b82525050565b612f3c612f3782613801565b613975565b82525050565b6000612f4d82613716565b612f578185613744565b9350612f6283613706565b8060005b83811015612f93578151612f7a8882612f04565b9750612f8583613737565b925050600181019050612f66565b5085935050505092915050565b612fa981613825565b82525050565b6000612fba82613721565b612fc48185613755565b9350612fd4818560208601613896565b612fdd81613a90565b840191505092915050565b6000612ff38261372c565b612ffd8185613766565b935061300d818560208601613896565b61301681613a90565b840191505092915050565b600061302e602283613766565b915061303982613aae565b604082019050919050565b6000613051603283613766565b915061305c82613afd565b604082019050919050565b6000613074601c83613766565b915061307f82613b4c565b602082019050919050565b6000613097602083613766565b91506130a282613b75565b602082019050919050565b60006130ba601a83613766565b91506130c582613b9e565b602082019050919050565b60006130dd602483613766565b91506130e882613bc7565b604082019050919050565b6000613100601983613766565b915061310b82613c16565b602082019050919050565b6000613123600f83613766565b915061312e82613c3f565b602082019050919050565b6000613146602c83613766565b915061315182613c68565b604082019050919050565b6000613169603883613766565b915061317482613cb7565b604082019050919050565b600061318c602a83613766565b915061319782613d06565b604082019050919050565b60006131af602983613766565b91506131ba82613d55565b604082019050919050565b60006131d2602083613766565b91506131dd82613da4565b602082019050919050565b60006131f5602c83613766565b915061320082613dcd565b604082019050919050565b6000613218602983613766565b915061322382613e1c565b604082019050919050565b600061323b602183613766565b915061324682613e6b565b604082019050919050565b600061325e600a83613766565b915061326982613eba565b602082019050919050565b6000613281603183613766565b915061328c82613ee3565b604082019050919050565b60006132a4601983613766565b91506132af82613f32565b602082019050919050565b60006132c7601483613766565b91506132d282613f5b565b602082019050919050565b6132e68161387d565b82525050565b6132f58161387d565b82525050565b61330c6133078261387d565b613999565b82525050565b600061331e82866132fb565b60208201915061332e8285612f2b565b60148201915061333e82846132fb565b602082019150819050949350505050565b60006020820190506133646000830184612f1c565b92915050565b600060808201905061337f6000830187612f1c565b61338c6020830186612f1c565b61339960408301856132ec565b81810360608301526133ab8184612faf565b905095945050505050565b600060208201905081810360008301526133d08184612f42565b905092915050565b60006020820190506133ed6000830184612fa0565b92915050565b6000602082019050818103600083015261340d8184612fe8565b905092915050565b6000602082019050818103600083015261342e81613021565b9050919050565b6000602082019050818103600083015261344e81613044565b9050919050565b6000602082019050818103600083015261346e81613067565b9050919050565b6000602082019050818103600083015261348e8161308a565b9050919050565b600060208201905081810360008301526134ae816130ad565b9050919050565b600060208201905081810360008301526134ce816130d0565b9050919050565b600060208201905081810360008301526134ee816130f3565b9050919050565b6000602082019050818103600083015261350e81613116565b9050919050565b6000602082019050818103600083015261352e81613139565b9050919050565b6000602082019050818103600083015261354e8161315c565b9050919050565b6000602082019050818103600083015261356e8161317f565b9050919050565b6000602082019050818103600083015261358e816131a2565b9050919050565b600060208201905081810360008301526135ae816131c5565b9050919050565b600060208201905081810360008301526135ce816131e8565b9050919050565b600060208201905081810360008301526135ee8161320b565b9050919050565b6000602082019050818103600083015261360e8161322e565b9050919050565b6000602082019050818103600083015261362e81613251565b9050919050565b6000602082019050818103600083015261364e81613274565b9050919050565b6000602082019050818103600083015261366e81613297565b9050919050565b6000602082019050818103600083015261368e816132ba565b9050919050565b60006020820190506136aa60008301846132ec565b92915050565b60006136ba6136cb565b90506136c682826138fb565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f0576136ef613a61565b5b6136f982613a90565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006137828261387d565b915061378d8361387d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137c2576137c16139d4565b5b828201905092915050565b60006137d88261387d565b91506137e38361387d565b9250828210156137f6576137f56139d4565b5b828203905092915050565b600061380c8261385d565b9050919050565b600061381e8261385d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138b4578082015181840152602081019050613899565b838111156138c3576000848401525b50505050565b600060028204905060018216806138e157607f821691505b602082108114156138f5576138f4613a32565b5b50919050565b61390482613a90565b810181811067ffffffffffffffff8211171561392357613922613a61565b5b80604052505050565b60006139378261387d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561396a576139696139d4565b5b600182019050919050565b600061398082613987565b9050919050565b600061399282613aa1565b9050919050565b6000819050919050565b60006139ae8261387d565b91506139b98361387d565b9250826139c9576139c8613a03565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e2e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6520616464726573732063616e206d696e74203130207469636b6574732e600082015250565b7f4d696e74207072696365206973206e6f7420636f72726563742e000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416c7265616479206d696e7465642e0000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206f776e65722e00000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f54686572652773206e6f20746f6b656e20746f206d696e742e00000000000000600082015250565b7f556e6b6e6f776e207469636b657420747970652e000000000000000000000000600082015250565b613f8d81613801565b8114613f9857600080fd5b50565b613fa481613813565b8114613faf57600080fd5b50565b613fbb81613825565b8114613fc657600080fd5b50565b613fd281613831565b8114613fdd57600080fd5b50565b613fe98161387d565b8114613ff457600080fd5b5056fea2646970667358221220a2a77fa8ab6563bc14c5477d4a86b18440de1e3032536436eb9bcb10ae1a3a4c64736f6c6343000804003368747470733a2f2f697066732e696f2f697066732f516d615377454258646157586b74455a55734e55386e37633750717738613879706550525a575531624c546b46663f66696c656e616d653d7374616e646172642e6a736f6e68747470733a2f2f697066732e696f2f697066732f516d507043455952536f336f4e565666765453516e7a773934334b773255514c79614852377176626e7a34544a533f66696c656e616d653d726172652e6a736f6e68747470733a2f2f697066732e696f2f697066732f516d5070677175434b42436970446258443443514e4c75734a366363544b397159513676516e4d335265385733743f66696c656e616d653d756e636f6d6d6f6e2e6a736f6e

Deployed Bytecode

0x6080604052600436106102045760003560e01c80637e249a9011610118578063e6c3b1f6116100a0578063f11767b01161006f578063f11767b014610786578063f2fde38b146107c3578063f3fef3a3146107ec578063f4a0a52814610808578063f6e396401461083157610204565b8063e6c3b1f6146106a4578063e8dcc866146106e1578063e985e9c51461070c578063ecb33a931461074957610204565b80639e4e787f116100e75780639e4e787f146105bf578063a22cb465146105ea578063b88d4fde14610613578063c87b56dd1461063c578063d170d55d1461067957610204565b80637e249a9014610513578063883348451461053e5780638d5b87b61461056957806395d89b411461059457610204565b806323b872dd1161019b57806359a7715a1161016a57806359a7715a146104185780635b3b136a146104435780636352211e1461046e57806368cf3508146104ab57806370a08231146104d657610204565b806323b872dd1461037257806342842e0e1461039b57806342966c68146103c4578063451a3cec146103ed57610204565b80631249c58b116101d75780631249c58b146102d757806314037068146102e157806318160ddd1461030a57806322e3ad7d1461033557610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e89565b61085a565b60405161023d91906133d8565b60405180910390f35b34801561025257600080fd5b5061025b61093c565b60405161026891906133f3565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612edb565b6109ce565b6040516102a5919061334f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612e4d565b610a53565b005b6102df610b6b565b005b3480156102ed57600080fd5b5061030860048036038101906103039190612ca6565b610e79565b005b34801561031657600080fd5b5061031f6111f4565b60405161032c9190613695565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612edb565b6111fa565b604051610369919061334f565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612d47565b61122d565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612d47565b61128d565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612edb565b6112ad565b005b3480156103f957600080fd5b50610402611381565b60405161040f9190613695565b60405180910390f35b34801561042457600080fd5b5061042d611387565b60405161043a9190613695565b60405180910390f35b34801561044f57600080fd5b5061045861138d565b60405161046591906133b6565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612edb565b6114fd565b6040516104a2919061334f565b60405180910390f35b3480156104b757600080fd5b506104c061150f565b6040516104cd91906133f3565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612ca6565b61159d565b60405161050a9190613695565b60405180910390f35b34801561051f57600080fd5b50610528611655565b60405161053591906133f3565b60405180910390f35b34801561054a57600080fd5b506105536116e3565b60405161056091906133f3565b60405180910390f35b34801561057557600080fd5b5061057e611771565b60405161058b919061334f565b60405180910390f35b3480156105a057600080fd5b506105a9611797565b6040516105b691906133f3565b60405180910390f35b3480156105cb57600080fd5b506105d4611829565b6040516105e19190613695565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190612e11565b61182f565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612d96565b6119b0565b005b34801561064857600080fd5b50610663600480360381019061065e9190612edb565b611a12565b60405161067091906133f3565b60405180910390f35b34801561068557600080fd5b5061068e611c65565b60405161069b9190613695565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190612edb565b611c6b565b6040516106d89190613695565b60405180910390f35b3480156106ed57600080fd5b506106f6611c83565b6040516107039190613695565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190612d0b565b611c89565b60405161074091906133d8565b60405180910390f35b34801561075557600080fd5b50610770600480360381019061076b9190612edb565b611d1d565b60405161077d9190613695565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190612ca6565b611d35565b6040516107ba9190613695565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190612ca6565b611d4d565b005b61080660048036038101906108019190612ccf565b611e21565b005b34801561081457600080fd5b5061082f600480360381019061082a9190612edb565b611efc565b005b34801561083d57600080fd5b5061085860048036038101906108539190612ca6565b611f96565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093557506109348261206a565b5b9050919050565b60606000805461094b906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610977906138c9565b80156109c45780601f10610999576101008083540402835291602001916109c4565b820191906000526020600020905b8154815290600101906020018083116109a757829003601f168201915b5050505050905090565b60006109d9826120d4565b610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906135b5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5e82612140565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906135f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aee6121f2565b73ffffffffffffffffffffffffffffffffffffffff161480610b1d5750610b1c81610b176121f2565b611c89565b5b610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613535565b60405180910390fd5b610b6683836121fa565b505050565b600654600e5410610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba890613655565b60405180910390fd5b600a54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90613475565b60405180910390fd5b3460155414610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90613495565b60405180910390fd5b60008060006007546011600060018152602001908152602001600020541015610ca15760075492505b6008546011600060028152602001908152602001600020541015610cc55760085491505b6009546011600060038152602001908152602001600020541015610ce95760095490505b6000610d0a828486610cfb9190613777565b610d059190613777565b6122b3565b905060006003905084821015610d235760019050610d45565b8385610d2f9190613777565b821015610d3f5760029050610d44565b600390505b5b600e6000815480929190610d589061392c565b9190505550601160008281526020019081526020016000206000815480929190610d819061392c565b91905055508060106000600e54815260200190815260200160002081905550610dac33600e54612323565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610dfc9061392c565b91905055506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc6015549081150290604051600060405180830381858888f19350505050158015610e70573d6000803e3d6000fd5b50505050505050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090613415565b60405180910390fd5b6000600e5414610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906134f5565b60405180910390fd5b6000600190505b6005811161102e57600e6000815480929190610f709061392c565b919050555060116000600181526020019081526020016000206000815480929190610f9a9061392c565b9190505550600160106000600e54815260200190815260200160002081905550610fc682600e54612323565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906110169061392c565b919050555080806110269061392c565b915050610f55565b506000600690505b601e811161110f57600e60008154809291906110519061392c565b91905055506011600060028152602001908152602001600020600081548092919061107b9061392c565b9190505550600260106000600e548152602001908152602001600020819055506110a782600e54612323565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906110f79061392c565b919050555080806111079061392c565b915050611036565b506000601f90505b606481116111f057600e60008154809291906111329061392c565b91905055506011600060038152602001908152602001600020600081548092919061115c9061392c565b9190505550600360106000600e5481526020019081526020016000208190555061118882600e54612323565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111d89061392c565b919050555080806111e89061392c565b915050611117565b5050565b60065481565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61123e6112386121f2565b82612341565b61127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613635565b60405180910390fd5b61128883838361241f565b505050565b6112a8838383604051806020016040528060008152506119b0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166112cd826114fd565b73ffffffffffffffffffffffffffffffffffffffff1614611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90613615565b60405180910390fd5b61132c8161267b565b33600f600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b600e5481565b60606000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff811115611410577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561143e5781602001602082028036833780820191505090505b509050600080600190505b600e5481116114f4573373ffffffffffffffffffffffffffffffffffffffff16611472826114fd565b73ffffffffffffffffffffffffffffffffffffffff1614156114e1578083838061149b9061392c565b9450815181106114d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505b80806114ec9061392c565b915050611449565b50819250505090565b600061150882612140565b9050919050565b600b805461151c906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611548906138c9565b80156115955780601f1061156a57610100808354040283529160200191611595565b820191906000526020600020905b81548152906001019060200180831161157857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613555565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c8054611662906138c9565b80601f016020809104026020016040519081016040528092919081815260200182805461168e906138c9565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b505050505081565b600d80546116f0906138c9565b80601f016020809104026020016040519081016040528092919081815260200182805461171c906138c9565b80156117695780601f1061173e57610100808354040283529160200191611769565b820191906000526020600020905b81548152906001019060200180831161174c57829003601f168201915b505050505081565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546117a6906138c9565b80601f01602080910402602001604051908101604052809291908181526020018280546117d2906138c9565b801561181f5780601f106117f45761010080835404028352916020019161181f565b820191906000526020600020905b81548152906001019060200180831161180257829003601f168201915b5050505050905090565b60075481565b6118376121f2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c906134d5565b60405180910390fd5b80600560006118b26121f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661195f6121f2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a491906133d8565b60405180910390a35050565b6119c16119bb6121f2565b83612341565b611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613635565b60405180910390fd5b611a0c8484848461278c565b50505050565b6060600160106000848152602001908152602001600020541415611ac257600b8054611a3d906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a69906138c9565b8015611ab65780601f10611a8b57610100808354040283529160200191611ab6565b820191906000526020600020905b815481529060010190602001808311611a9957829003601f168201915b50505050509050611c60565b600260106000848152602001908152602001600020541415611b7057600c8054611aeb906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b17906138c9565b8015611b645780601f10611b3957610100808354040283529160200191611b64565b820191906000526020600020905b815481529060010190602001808311611b4757829003601f168201915b50505050509050611c60565b600360106000848152602001908152602001600020541415611c1e57600d8054611b99906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc5906138c9565b8015611c125780601f10611be757610100808354040283529160200191611c12565b820191906000526020600020905b815481529060010190602001808311611bf557829003601f168201915b50505050509050611c60565b6000611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613675565b60405180910390fd5b5b919050565b600a5481565b60106020528060005260406000206000915090505481565b60085481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60116020528060005260406000206000915090505481565b60126020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490613415565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613415565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ef7573d6000803e3d6000fd5b505050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613415565b60405180910390fd5b8060158190555050565b3373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613415565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613575565b60405180910390fd5b80915050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661226d83612140565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000808242336013546040516020016122ce93929190613312565b6040516020818303038152906040528051906020012060001c6122f191906139a3565b90506001816123009190613777565b9050601360008154809291906123159061392c565b919050555080915050919050565b61233d8282604051806020016040528060008152506127e8565b5050565b600061234c826120d4565b61238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290613515565b60405180910390fd5b600061239683612140565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061240557508373ffffffffffffffffffffffffffffffffffffffff166123ed846109ce565b73ffffffffffffffffffffffffffffffffffffffff16145b8061241657506124158185611c89565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661243f82612140565b73ffffffffffffffffffffffffffffffffffffffff1614612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906135d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc906134b5565b60405180910390fd5b612510838383612843565b61251b6000826121fa565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b91906137cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125c29190613777565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061268682612140565b905061269481600084612843565b61269f6000836121fa565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ef91906137cd565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61279784848461241f565b6127a384848484612848565b6127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990613435565b60405180910390fd5b50505050565b6127f283836129df565b6127ff6000848484612848565b61283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590613435565b60405180910390fd5b505050565b505050565b60006128698473ffffffffffffffffffffffffffffffffffffffff16612bad565b156129d2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128926121f2565b8786866040518563ffffffff1660e01b81526004016128b4949392919061336a565b602060405180830381600087803b1580156128ce57600080fd5b505af19250505080156128ff57506040513d601f19601f820116820180604052508101906128fc9190612eb2565b60015b612982573d806000811461292f576040519150601f19603f3d011682016040523d82523d6000602084013e612934565b606091505b5060008151141561297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190613435565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129d7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4690613595565b60405180910390fd5b612a58816120d4565b15612a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8f90613455565b60405180910390fd5b612aa460008383612843565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af49190613777565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000612bd3612bce846136d5565b6136b0565b905082815260208101848484011115612beb57600080fd5b612bf6848285613887565b509392505050565b600081359050612c0d81613f84565b92915050565b600081359050612c2281613f9b565b92915050565b600081359050612c3781613fb2565b92915050565b600081359050612c4c81613fc9565b92915050565b600081519050612c6181613fc9565b92915050565b600082601f830112612c7857600080fd5b8135612c88848260208601612bc0565b91505092915050565b600081359050612ca081613fe0565b92915050565b600060208284031215612cb857600080fd5b6000612cc684828501612bfe565b91505092915050565b60008060408385031215612ce257600080fd5b6000612cf085828601612c13565b9250506020612d0185828601612c91565b9150509250929050565b60008060408385031215612d1e57600080fd5b6000612d2c85828601612bfe565b9250506020612d3d85828601612bfe565b9150509250929050565b600080600060608486031215612d5c57600080fd5b6000612d6a86828701612bfe565b9350506020612d7b86828701612bfe565b9250506040612d8c86828701612c91565b9150509250925092565b60008060008060808587031215612dac57600080fd5b6000612dba87828801612bfe565b9450506020612dcb87828801612bfe565b9350506040612ddc87828801612c91565b925050606085013567ffffffffffffffff811115612df957600080fd5b612e0587828801612c67565b91505092959194509250565b60008060408385031215612e2457600080fd5b6000612e3285828601612bfe565b9250506020612e4385828601612c28565b9150509250929050565b60008060408385031215612e6057600080fd5b6000612e6e85828601612bfe565b9250506020612e7f85828601612c91565b9150509250929050565b600060208284031215612e9b57600080fd5b6000612ea984828501612c3d565b91505092915050565b600060208284031215612ec457600080fd5b6000612ed284828501612c52565b91505092915050565b600060208284031215612eed57600080fd5b6000612efb84828501612c91565b91505092915050565b6000612f1083836132dd565b60208301905092915050565b612f2581613801565b82525050565b612f3c612f3782613801565b613975565b82525050565b6000612f4d82613716565b612f578185613744565b9350612f6283613706565b8060005b83811015612f93578151612f7a8882612f04565b9750612f8583613737565b925050600181019050612f66565b5085935050505092915050565b612fa981613825565b82525050565b6000612fba82613721565b612fc48185613755565b9350612fd4818560208601613896565b612fdd81613a90565b840191505092915050565b6000612ff38261372c565b612ffd8185613766565b935061300d818560208601613896565b61301681613a90565b840191505092915050565b600061302e602283613766565b915061303982613aae565b604082019050919050565b6000613051603283613766565b915061305c82613afd565b604082019050919050565b6000613074601c83613766565b915061307f82613b4c565b602082019050919050565b6000613097602083613766565b91506130a282613b75565b602082019050919050565b60006130ba601a83613766565b91506130c582613b9e565b602082019050919050565b60006130dd602483613766565b91506130e882613bc7565b604082019050919050565b6000613100601983613766565b915061310b82613c16565b602082019050919050565b6000613123600f83613766565b915061312e82613c3f565b602082019050919050565b6000613146602c83613766565b915061315182613c68565b604082019050919050565b6000613169603883613766565b915061317482613cb7565b604082019050919050565b600061318c602a83613766565b915061319782613d06565b604082019050919050565b60006131af602983613766565b91506131ba82613d55565b604082019050919050565b60006131d2602083613766565b91506131dd82613da4565b602082019050919050565b60006131f5602c83613766565b915061320082613dcd565b604082019050919050565b6000613218602983613766565b915061322382613e1c565b604082019050919050565b600061323b602183613766565b915061324682613e6b565b604082019050919050565b600061325e600a83613766565b915061326982613eba565b602082019050919050565b6000613281603183613766565b915061328c82613ee3565b604082019050919050565b60006132a4601983613766565b91506132af82613f32565b602082019050919050565b60006132c7601483613766565b91506132d282613f5b565b602082019050919050565b6132e68161387d565b82525050565b6132f58161387d565b82525050565b61330c6133078261387d565b613999565b82525050565b600061331e82866132fb565b60208201915061332e8285612f2b565b60148201915061333e82846132fb565b602082019150819050949350505050565b60006020820190506133646000830184612f1c565b92915050565b600060808201905061337f6000830187612f1c565b61338c6020830186612f1c565b61339960408301856132ec565b81810360608301526133ab8184612faf565b905095945050505050565b600060208201905081810360008301526133d08184612f42565b905092915050565b60006020820190506133ed6000830184612fa0565b92915050565b6000602082019050818103600083015261340d8184612fe8565b905092915050565b6000602082019050818103600083015261342e81613021565b9050919050565b6000602082019050818103600083015261344e81613044565b9050919050565b6000602082019050818103600083015261346e81613067565b9050919050565b6000602082019050818103600083015261348e8161308a565b9050919050565b600060208201905081810360008301526134ae816130ad565b9050919050565b600060208201905081810360008301526134ce816130d0565b9050919050565b600060208201905081810360008301526134ee816130f3565b9050919050565b6000602082019050818103600083015261350e81613116565b9050919050565b6000602082019050818103600083015261352e81613139565b9050919050565b6000602082019050818103600083015261354e8161315c565b9050919050565b6000602082019050818103600083015261356e8161317f565b9050919050565b6000602082019050818103600083015261358e816131a2565b9050919050565b600060208201905081810360008301526135ae816131c5565b9050919050565b600060208201905081810360008301526135ce816131e8565b9050919050565b600060208201905081810360008301526135ee8161320b565b9050919050565b6000602082019050818103600083015261360e8161322e565b9050919050565b6000602082019050818103600083015261362e81613251565b9050919050565b6000602082019050818103600083015261364e81613274565b9050919050565b6000602082019050818103600083015261366e81613297565b9050919050565b6000602082019050818103600083015261368e816132ba565b9050919050565b60006020820190506136aa60008301846132ec565b92915050565b60006136ba6136cb565b90506136c682826138fb565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f0576136ef613a61565b5b6136f982613a90565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006137828261387d565b915061378d8361387d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137c2576137c16139d4565b5b828201905092915050565b60006137d88261387d565b91506137e38361387d565b9250828210156137f6576137f56139d4565b5b828203905092915050565b600061380c8261385d565b9050919050565b600061381e8261385d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138b4578082015181840152602081019050613899565b838111156138c3576000848401525b50505050565b600060028204905060018216806138e157607f821691505b602082108114156138f5576138f4613a32565b5b50919050565b61390482613a90565b810181811067ffffffffffffffff8211171561392357613922613a61565b5b80604052505050565b60006139378261387d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561396a576139696139d4565b5b600182019050919050565b600061398082613987565b9050919050565b600061399282613aa1565b9050919050565b6000819050919050565b60006139ae8261387d565b91506139b98361387d565b9250826139c9576139c8613a03565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e2e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6520616464726573732063616e206d696e74203130207469636b6574732e600082015250565b7f4d696e74207072696365206973206e6f7420636f72726563742e000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416c7265616479206d696e7465642e0000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206f776e65722e00000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f54686572652773206e6f20746f6b656e20746f206d696e742e00000000000000600082015250565b7f556e6b6e6f776e207469636b657420747970652e000000000000000000000000600082015250565b613f8d81613801565b8114613f9857600080fd5b50565b613fa481613813565b8114613faf57600080fd5b50565b613fbb81613825565b8114613fc657600080fd5b50565b613fd281613831565b8114613fdd57600080fd5b50565b613fe98161387d565b8114613ff457600080fd5b5056fea2646970667358221220a2a77fa8ab6563bc14c5477d4a86b18440de1e3032536436eb9bcb10ae1a3a4c64736f6c63430008040033

Deployed Bytecode Sourcemap

31938:5619:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19815:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33680:1331;;;:::i;:::-;;35904:915;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31979:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32588:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23209:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23619:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35299:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32087:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32550:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37011:330;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33144:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32173:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32294:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32419;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32919:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32016:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22612:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23875:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33274:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32123:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32640:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32051:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22978:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32686:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32743:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35511:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35695:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36831:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37353:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19815:305;19917:4;19969:25;19954:40;;;:11;:40;;;;:105;;;;20026:33;20011:48;;;:11;:48;;;;19954:105;:158;;;;20076:36;20100:11;20076:23;:36::i;:::-;19954:158;19934:178;;19815:305;;;:::o;20760:100::-;20814:13;20847:5;20840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20760:100;:::o;22319:221::-;22395:7;22423:16;22431:7;22423;:16::i;:::-;22415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22508:15;:24;22524:7;22508:24;;;;;;;;;;;;;;;;;;;;;22501:31;;22319:221;;;:::o;21842:411::-;21923:13;21939:23;21954:7;21939:14;:23::i;:::-;21923:39;;21987:5;21981:11;;:2;:11;;;;21973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22081:5;22065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22090:37;22107:5;22114:12;:10;:12::i;:::-;22090:16;:37::i;:::-;22065:62;22043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22224:21;22233:2;22237:7;22224:8;:21::i;:::-;21842:411;;;:::o;33680:1331::-;33743:11;;33731:9;;:23;33723:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33825:20;;33803:7;:19;33811:10;33803:19;;;;;;;;;;;;;;;;:42;33795:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33914:9;33901;;:22;33893:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33975:13;34003;34031;34083:11;;34063:14;:17;34078:1;34063:17;;;;;;;;;;;;:31;34059:86;;;34122:11;;34111:22;;34059:86;34179:11;;34159:14;:17;34174:1;34159:17;;;;;;;;;;;;:31;34155:86;;;34218:11;;34207:22;;34155:86;34275:11;;34255:14;:17;34270:1;34255:17;;;;;;;;;;;;:31;34251:86;;;34314:11;;34303:22;;34251:86;34357:17;34377:38;34406:8;34395;34384;:19;;;;:::i;:::-;:30;;;;:::i;:::-;34377:6;:38::i;:::-;34357:58;;34426:15;34444:1;34426:19;;34485:8;34470:12;:23;34466:238;;;34537:1;34524:14;;34466:238;;;34586:8;34575;:19;;;;:::i;:::-;34560:12;:34;34556:148;;;34634:1;34621:14;;34556:148;;;34691:1;34678:14;;34556:148;34466:238;34724:9;;:11;;;;;;;;;:::i;:::-;;;;;;34746:14;:26;34761:10;34746:26;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;34808:10;34785:9;:20;34795:9;;34785:20;;;;;;;;;;;:33;;;;34839:32;34849:10;34861:9;;34839;:32::i;:::-;34882:7;:19;34890:10;34882:19;;;;;;;;;;;;;;;;:21;;;;;;;;;:::i;:::-;;;;;;34924:19;34954:14;;;;;;;;;;;34924:45;;34980:3;:12;;:23;34993:9;;34980:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33680:1331;;;;;;:::o;35904:915::-;35973:10;35960:23;;:9;;;;;;;;;;;:23;;;35952:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36054:1;36041:9;;:14;36033:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;36101:6;36110:1;36101:10;;36096:224;36118:1;36113;:6;36096:224;;36141:9;;:11;;;;;;;;;:::i;:::-;;;;;;36167:14;:17;36182:1;36167:17;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;36224:1;36201:9;:20;36211:9;;36201:20;;;;;;;;;;;:24;;;;36254:25;36264:3;36269:9;;36254;:25::i;:::-;36294:7;:12;36302:3;36294:12;;;;;;;;;;;;;;;;:14;;;;;;;;;:::i;:::-;;;;;;36121:3;;;;;:::i;:::-;;;;36096:224;;;;36345:6;36354:1;36345:10;;36340:225;36362:2;36357:1;:7;36340:225;;36386:9;;:11;;;;;;;;;:::i;:::-;;;;;;36412:14;:17;36427:1;36412:17;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;36469:1;36446:9;:20;36456:9;;36446:20;;;;;;;;;;;:24;;;;36499:25;36509:3;36514:9;;36499;:25::i;:::-;36539:7;:12;36547:3;36539:12;;;;;;;;;;;;;;;;:14;;;;;;;;;:::i;:::-;;;;;;36366:3;;;;;:::i;:::-;;;;36340:225;;;;36590:6;36599:2;36590:11;;36585:227;36608:3;36603:1;:8;36585:227;;36633:9;;:11;;;;;;;;;:::i;:::-;;;;;;36659:14;:17;36674:1;36659:17;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;36716:1;36693:9;:20;36703:9;;36693:20;;;;;;;;;;;:24;;;;36746:25;36756:3;36761:9;;36746;:25::i;:::-;36786:7;:12;36794:3;36786:12;;;;;;;;;;;;;;;;:14;;;;;;;;;:::i;:::-;;;;;;36613:3;;;;;:::i;:::-;;;;36585:227;;;;35904:915;:::o;31979:30::-;;;;:::o;32588:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;23209:339::-;23404:41;23423:12;:10;:12::i;:::-;23437:7;23404:18;:41::i;:::-;23396:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23512:28;23522:4;23528:2;23532:7;23512:9;:28::i;:::-;23209:339;;;:::o;23619:185::-;23757:39;23774:4;23780:2;23784:7;23757:39;;;;;;;;;;;;:16;:39::i;:::-;23619:185;;;:::o;35299:200::-;35376:10;35356:30;;:16;35364:7;35356;:16::i;:::-;:30;;;35348:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35422:14;35428:7;35422:5;:14::i;:::-;35481:10;35457:12;:21;35470:7;35457:21;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35299:200;:::o;32087:29::-;;;;:::o;32550:25::-;;;;:::o;37011:330::-;37055:13;37081:17;37112:7;:19;37120:10;37112:19;;;;;;;;;;;;;;;;37101:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37081:51;;37143:10;37173:6;37182:1;37173:10;;37168:145;37190:9;;37185:1;:14;37168:145;;37239:10;37225:24;;:10;37233:1;37225:7;:10::i;:::-;:24;;;37221:81;;;37285:1;37270:3;37274:7;;;;;:::i;:::-;;;37270:12;;;;;;;;;;;;;;;;;;;;;:16;;;;;37221:81;37201:3;;;;;:::i;:::-;;;;37168:145;;;;37330:3;37323:10;;;;37011:330;:::o;33144:118::-;33205:7;33232:22;33246:7;33232:13;:22::i;:::-;33225:29;;33144:118;;;:::o;32173:114::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20184:208::-;20256:7;20301:1;20284:19;;:5;:19;;;;20276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20368:9;:16;20378:5;20368:16;;;;;;;;;;;;;;;;20361:23;;20184:208;;;:::o;32294:118::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32419:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32919:29::-;;;;;;;;;;;;;:::o;20929:104::-;20985:13;21018:7;21011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20929:104;:::o;32016:28::-;;;;:::o;22612:295::-;22727:12;:10;:12::i;:::-;22715:24;;:8;:24;;;;22707:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22827:8;22782:18;:32;22801:12;:10;:12::i;:::-;22782:32;;;;;;;;;;;;;;;:42;22815:8;22782:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22880:8;22851:48;;22866:12;:10;:12::i;:::-;22851:48;;;22890:8;22851:48;;;;;;:::i;:::-;;;;;;;;22612:295;;:::o;23875:328::-;24050:41;24069:12;:10;:12::i;:::-;24083:7;24050:18;:41::i;:::-;24042:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24156:39;24170:4;24176:2;24180:7;24189:5;24156:13;:39::i;:::-;23875:328;;;;:::o;33274:394::-;33336:13;33388:1;33366:9;:18;33376:7;33366:18;;;;;;;;;;;;:23;33362:299;;;33413:9;33406:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33362:299;33466:1;33444:9;:18;33454:7;33444:18;;;;;;;;;;;;:23;33440:221;;;33491:9;33484:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33440:221;33544:1;33522:9;:18;33532:7;33522:18;;;;;;;;;;;;:23;33518:143;;;33569:9;33562:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33518:143;33619:5;33611:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33274:394;;;;:::o;32123:37::-;;;;:::o;32640:39::-;;;;;;;;;;;;;;;;;:::o;32051:29::-;;;;:::o;22978:164::-;23075:4;23099:18;:25;23118:5;23099:25;;;;;;;;;;;;;;;:35;23125:8;23099:35;;;;;;;;;;;;;;;;;;;;;;;;;23092:42;;22978:164;;;;:::o;32686:44::-;;;;;;;;;;;;;;;;;:::o;32743:40::-;;;;;;;;;;;;;;;;;:::o;35511:172::-;35590:10;35577:23;;:9;;;;;;;;;;;:23;;;35569:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35672:3;35660:9;;:15;;;;;;;;;;;;;;;;;;35511:172;:::o;35695:197::-;35794:10;35781:23;;:9;;;;;;;;;;;:23;;;35773:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35864:3;:12;;:20;35877:6;35864:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35695:197;;:::o;36831:168::-;36904:10;36891:23;;:9;;;;;;;;;;;:23;;;36883:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36986:5;36974:9;:17;;;;36831:168;:::o;37353:201::-;37444:10;37431:23;;:9;;;;;;;;;;;:23;;;37423:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37531:15;37514:14;;:32;;;;;;;;;;;;;;;;;;37353:201;:::o;1475:157::-;1560:4;1599:25;1584:40;;;:11;:40;;;;1577:47;;1475:157;;;:::o;25713:127::-;25778:4;25830:1;25802:30;;:7;:16;25810:7;25802:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25795:37;;25713:127;;;:::o;20454:239::-;20526:7;20546:13;20562:7;:16;20570:7;20562:16;;;;;;;;;;;;;;;;;;;;;20546:32;;20614:1;20597:19;;:5;:19;;;;20589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20680:5;20673:12;;;20454:239;;;:::o;4164:98::-;4217:7;4244:10;4237:17;;4164:98;:::o;29695:174::-;29797:2;29770:15;:24;29786:7;29770:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29853:7;29849:2;29815:46;;29824:23;29839:7;29824:14;:23::i;:::-;29815:46;;;;;;;;;;;;29695:174;;:::o;35023:264::-;35072:4;35089:17;35181:8;35141:15;35158:10;35170:5;;35124:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35114:63;;;;;;35109:69;;:80;;;;:::i;:::-;35089:100;;35230:1;35215:12;:16;;;;:::i;:::-;35200:31;;35242:5;;:7;;;;;;;;;:::i;:::-;;;;;;35267:12;35260:19;;;35023:264;;;:::o;26697:110::-;26773:26;26783:2;26787:7;26773:26;;;;;;;;;;;;:9;:26::i;:::-;26697:110;;:::o;26007:348::-;26100:4;26125:16;26133:7;26125;:16::i;:::-;26117:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26201:13;26217:23;26232:7;26217:14;:23::i;:::-;26201:39;;26270:5;26259:16;;:7;:16;;;:51;;;;26303:7;26279:31;;:20;26291:7;26279:11;:20::i;:::-;:31;;;26259:51;:87;;;;26314:32;26331:5;26338:7;26314:16;:32::i;:::-;26259:87;26251:96;;;26007:348;;;;:::o;28999:578::-;29158:4;29131:31;;:23;29146:7;29131:14;:23::i;:::-;:31;;;29123:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29241:1;29227:16;;:2;:16;;;;29219:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29297:39;29318:4;29324:2;29328:7;29297:20;:39::i;:::-;29401:29;29418:1;29422:7;29401:8;:29::i;:::-;29462:1;29443:9;:15;29453:4;29443:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29491:1;29474:9;:13;29484:2;29474:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29522:2;29503:7;:16;29511:7;29503:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29561:7;29557:2;29542:27;;29551:4;29542:27;;;;;;;;;;;;28999:578;;;:::o;28302:360::-;28362:13;28378:23;28393:7;28378:14;:23::i;:::-;28362:39;;28414:48;28435:5;28450:1;28454:7;28414:20;:48::i;:::-;28503:29;28520:1;28524:7;28503:8;:29::i;:::-;28565:1;28545:9;:16;28555:5;28545:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;28584:7;:16;28592:7;28584:16;;;;;;;;;;;;28577:23;;;;;;;;;;;28646:7;28642:1;28618:36;;28627:5;28618:36;;;;;;;;;;;;28302:360;;:::o;25085:315::-;25242:28;25252:4;25258:2;25262:7;25242:9;:28::i;:::-;25289:48;25312:4;25318:2;25322:7;25331:5;25289:22;:48::i;:::-;25281:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25085:315;;;;:::o;27034:321::-;27164:18;27170:2;27174:7;27164:5;:18::i;:::-;27215:54;27246:1;27250:2;27254:7;27263:5;27215:22;:54::i;:::-;27193:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27034:321;;;:::o;31805:126::-;;;;:::o;30434:799::-;30589:4;30610:15;:2;:13;;;:15::i;:::-;30606:620;;;30662:2;30646:36;;;30683:12;:10;:12::i;:::-;30697:4;30703:7;30712:5;30646:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30642:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30905:1;30888:6;:13;:18;30884:272;;;30931:60;;;;;;;;;;:::i;:::-;;;;;;;;30884:272;31106:6;31100:13;31091:6;31087:2;31083:15;31076:38;30642:529;30779:41;;;30769:51;;;:6;:51;;;;30762:58;;;;;30606:620;31210:4;31203:11;;30434:799;;;;;;;:::o;27691:382::-;27785:1;27771:16;;:2;:16;;;;27763:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27844:16;27852:7;27844;:16::i;:::-;27843:17;27835:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27906:45;27935:1;27939:2;27943:7;27906:20;:45::i;:::-;27981:1;27964:9;:13;27974:2;27964:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28012:2;27993:7;:16;28001:7;27993:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28057:7;28053:2;28032:33;;28049:1;28032:33;;;;;;;;;;;;27691:382;;:::o;5059:387::-;5119:4;5327:12;5394:7;5382:20;5374:28;;5437:1;5430:4;:8;5423:15;;;5059:387;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:155::-;555:5;593:6;580:20;571:29;;609:41;644:5;609:41;:::i;:::-;561:95;;;;:::o;662:133::-;705:5;743:6;730:20;721:29;;759:30;783:5;759:30;:::i;:::-;711:84;;;;:::o;801:137::-;846:5;884:6;871:20;862:29;;900:32;926:5;900:32;:::i;:::-;852:86;;;;:::o;944:141::-;1000:5;1031:6;1025:13;1016:22;;1047:32;1073:5;1047:32;:::i;:::-;1006:79;;;;:::o;1104:271::-;1159:5;1208:3;1201:4;1193:6;1189:17;1185:27;1175:2;;1226:1;1223;1216:12;1175:2;1266:6;1253:20;1291:78;1365:3;1357:6;1350:4;1342:6;1338:17;1291:78;:::i;:::-;1282:87;;1165:210;;;;;:::o;1381:139::-;1427:5;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:262::-;1585:6;1634:2;1622:9;1613:7;1609:23;1605:32;1602:2;;;1650:1;1647;1640:12;1602:2;1693:1;1718:53;1763:7;1754:6;1743:9;1739:22;1718:53;:::i;:::-;1708:63;;1664:117;1592:196;;;;:::o;1794:423::-;1870:6;1878;1927:2;1915:9;1906:7;1902:23;1898:32;1895:2;;;1943:1;1940;1933:12;1895:2;1986:1;2011:61;2064:7;2055:6;2044:9;2040:22;2011:61;:::i;:::-;2001:71;;1957:125;2121:2;2147:53;2192:7;2183:6;2172:9;2168:22;2147:53;:::i;:::-;2137:63;;2092:118;1885:332;;;;;:::o;2223:407::-;2291:6;2299;2348:2;2336:9;2327:7;2323:23;2319:32;2316:2;;;2364:1;2361;2354:12;2316:2;2407:1;2432:53;2477:7;2468:6;2457:9;2453:22;2432:53;:::i;:::-;2422:63;;2378:117;2534:2;2560:53;2605:7;2596:6;2585:9;2581:22;2560:53;:::i;:::-;2550:63;;2505:118;2306:324;;;;;:::o;2636:552::-;2713:6;2721;2729;2778:2;2766:9;2757:7;2753:23;2749:32;2746:2;;;2794:1;2791;2784:12;2746:2;2837:1;2862:53;2907:7;2898:6;2887:9;2883:22;2862:53;:::i;:::-;2852:63;;2808:117;2964:2;2990:53;3035:7;3026:6;3015:9;3011:22;2990:53;:::i;:::-;2980:63;;2935:118;3092:2;3118:53;3163:7;3154:6;3143:9;3139:22;3118:53;:::i;:::-;3108:63;;3063:118;2736:452;;;;;:::o;3194:809::-;3289:6;3297;3305;3313;3362:3;3350:9;3341:7;3337:23;3333:33;3330:2;;;3379:1;3376;3369:12;3330:2;3422:1;3447:53;3492:7;3483:6;3472:9;3468:22;3447:53;:::i;:::-;3437:63;;3393:117;3549:2;3575:53;3620:7;3611:6;3600:9;3596:22;3575:53;:::i;:::-;3565:63;;3520:118;3677:2;3703:53;3748:7;3739:6;3728:9;3724:22;3703:53;:::i;:::-;3693:63;;3648:118;3833:2;3822:9;3818:18;3805:32;3864:18;3856:6;3853:30;3850:2;;;3896:1;3893;3886:12;3850:2;3924:62;3978:7;3969:6;3958:9;3954:22;3924:62;:::i;:::-;3914:72;;3776:220;3320:683;;;;;;;:::o;4009:401::-;4074:6;4082;4131:2;4119:9;4110:7;4106:23;4102:32;4099:2;;;4147:1;4144;4137:12;4099:2;4190:1;4215:53;4260:7;4251:6;4240:9;4236:22;4215:53;:::i;:::-;4205:63;;4161:117;4317:2;4343:50;4385:7;4376:6;4365:9;4361:22;4343:50;:::i;:::-;4333:60;;4288:115;4089:321;;;;;:::o;4416:407::-;4484:6;4492;4541:2;4529:9;4520:7;4516:23;4512:32;4509:2;;;4557:1;4554;4547:12;4509:2;4600:1;4625:53;4670:7;4661:6;4650:9;4646:22;4625:53;:::i;:::-;4615:63;;4571:117;4727:2;4753:53;4798:7;4789:6;4778:9;4774:22;4753:53;:::i;:::-;4743:63;;4698:118;4499:324;;;;;:::o;4829:260::-;4887:6;4936:2;4924:9;4915:7;4911:23;4907:32;4904:2;;;4952:1;4949;4942:12;4904:2;4995:1;5020:52;5064:7;5055:6;5044:9;5040:22;5020:52;:::i;:::-;5010:62;;4966:116;4894:195;;;;:::o;5095:282::-;5164:6;5213:2;5201:9;5192:7;5188:23;5184:32;5181:2;;;5229:1;5226;5219:12;5181:2;5272:1;5297:63;5352:7;5343:6;5332:9;5328:22;5297:63;:::i;:::-;5287:73;;5243:127;5171:206;;;;:::o;5383:262::-;5442:6;5491:2;5479:9;5470:7;5466:23;5462:32;5459:2;;;5507:1;5504;5497:12;5459:2;5550:1;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5521:117;5449:196;;;;:::o;5651:179::-;5720:10;5741:46;5783:3;5775:6;5741:46;:::i;:::-;5819:4;5814:3;5810:14;5796:28;;5731:99;;;;:::o;5836:118::-;5923:24;5941:5;5923:24;:::i;:::-;5918:3;5911:37;5901:53;;:::o;5960:157::-;6065:45;6085:24;6103:5;6085:24;:::i;:::-;6065:45;:::i;:::-;6060:3;6053:58;6043:74;;:::o;6153:732::-;6272:3;6301:54;6349:5;6301:54;:::i;:::-;6371:86;6450:6;6445:3;6371:86;:::i;:::-;6364:93;;6481:56;6531:5;6481:56;:::i;:::-;6560:7;6591:1;6576:284;6601:6;6598:1;6595:13;6576:284;;;6677:6;6671:13;6704:63;6763:3;6748:13;6704:63;:::i;:::-;6697:70;;6790:60;6843:6;6790:60;:::i;:::-;6780:70;;6636:224;6623:1;6620;6616:9;6611:14;;6576:284;;;6580:14;6876:3;6869:10;;6277:608;;;;;;;:::o;6891:109::-;6972:21;6987:5;6972:21;:::i;:::-;6967:3;6960:34;6950:50;;:::o;7006:360::-;7092:3;7120:38;7152:5;7120:38;:::i;:::-;7174:70;7237:6;7232:3;7174:70;:::i;:::-;7167:77;;7253:52;7298:6;7293:3;7286:4;7279:5;7275:16;7253:52;:::i;:::-;7330:29;7352:6;7330:29;:::i;:::-;7325:3;7321:39;7314:46;;7096:270;;;;;:::o;7372:364::-;7460:3;7488:39;7521:5;7488:39;:::i;:::-;7543:71;7607:6;7602:3;7543:71;:::i;:::-;7536:78;;7623:52;7668:6;7663:3;7656:4;7649:5;7645:16;7623:52;:::i;:::-;7700:29;7722:6;7700:29;:::i;:::-;7695:3;7691:39;7684:46;;7464:272;;;;;:::o;7742:366::-;7884:3;7905:67;7969:2;7964:3;7905:67;:::i;:::-;7898:74;;7981:93;8070:3;7981:93;:::i;:::-;8099:2;8094:3;8090:12;8083:19;;7888:220;;;:::o;8114:366::-;8256:3;8277:67;8341:2;8336:3;8277:67;:::i;:::-;8270:74;;8353:93;8442:3;8353:93;:::i;:::-;8471:2;8466:3;8462:12;8455:19;;8260:220;;;:::o;8486:366::-;8628:3;8649:67;8713:2;8708:3;8649:67;:::i;:::-;8642:74;;8725:93;8814:3;8725:93;:::i;:::-;8843:2;8838:3;8834:12;8827:19;;8632:220;;;:::o;8858:366::-;9000:3;9021:67;9085:2;9080:3;9021:67;:::i;:::-;9014:74;;9097:93;9186:3;9097:93;:::i;:::-;9215:2;9210:3;9206:12;9199:19;;9004:220;;;:::o;9230:366::-;9372:3;9393:67;9457:2;9452:3;9393:67;:::i;:::-;9386:74;;9469:93;9558:3;9469:93;:::i;:::-;9587:2;9582:3;9578:12;9571:19;;9376:220;;;:::o;9602:366::-;9744:3;9765:67;9829:2;9824:3;9765:67;:::i;:::-;9758:74;;9841:93;9930:3;9841:93;:::i;:::-;9959:2;9954:3;9950:12;9943:19;;9748:220;;;:::o;9974:366::-;10116:3;10137:67;10201:2;10196:3;10137:67;:::i;:::-;10130:74;;10213:93;10302:3;10213:93;:::i;:::-;10331:2;10326:3;10322:12;10315:19;;10120:220;;;:::o;10346:366::-;10488:3;10509:67;10573:2;10568:3;10509:67;:::i;:::-;10502:74;;10585:93;10674:3;10585:93;:::i;:::-;10703:2;10698:3;10694:12;10687:19;;10492:220;;;:::o;10718:366::-;10860:3;10881:67;10945:2;10940:3;10881:67;:::i;:::-;10874:74;;10957:93;11046:3;10957:93;:::i;:::-;11075:2;11070:3;11066:12;11059:19;;10864:220;;;:::o;11090:366::-;11232:3;11253:67;11317:2;11312:3;11253:67;:::i;:::-;11246:74;;11329:93;11418:3;11329:93;:::i;:::-;11447:2;11442:3;11438:12;11431:19;;11236:220;;;:::o;11462:366::-;11604:3;11625:67;11689:2;11684:3;11625:67;:::i;:::-;11618:74;;11701:93;11790:3;11701:93;:::i;:::-;11819:2;11814:3;11810:12;11803:19;;11608:220;;;:::o;11834:366::-;11976:3;11997:67;12061:2;12056:3;11997:67;:::i;:::-;11990:74;;12073:93;12162:3;12073:93;:::i;:::-;12191:2;12186:3;12182:12;12175:19;;11980:220;;;:::o;12206:366::-;12348:3;12369:67;12433:2;12428:3;12369:67;:::i;:::-;12362:74;;12445:93;12534:3;12445:93;:::i;:::-;12563:2;12558:3;12554:12;12547:19;;12352:220;;;:::o;12578:366::-;12720:3;12741:67;12805:2;12800:3;12741:67;:::i;:::-;12734:74;;12817:93;12906:3;12817:93;:::i;:::-;12935:2;12930:3;12926:12;12919:19;;12724:220;;;:::o;12950:366::-;13092:3;13113:67;13177:2;13172:3;13113:67;:::i;:::-;13106:74;;13189:93;13278:3;13189:93;:::i;:::-;13307:2;13302:3;13298:12;13291:19;;13096:220;;;:::o;13322:366::-;13464:3;13485:67;13549:2;13544:3;13485:67;:::i;:::-;13478:74;;13561:93;13650:3;13561:93;:::i;:::-;13679:2;13674:3;13670:12;13663:19;;13468:220;;;:::o;13694:366::-;13836:3;13857:67;13921:2;13916:3;13857:67;:::i;:::-;13850:74;;13933:93;14022:3;13933:93;:::i;:::-;14051:2;14046:3;14042:12;14035:19;;13840:220;;;:::o;14066:366::-;14208:3;14229:67;14293:2;14288:3;14229:67;:::i;:::-;14222:74;;14305:93;14394:3;14305:93;:::i;:::-;14423:2;14418:3;14414:12;14407:19;;14212:220;;;:::o;14438:366::-;14580:3;14601:67;14665:2;14660:3;14601:67;:::i;:::-;14594:74;;14677:93;14766:3;14677:93;:::i;:::-;14795:2;14790:3;14786:12;14779:19;;14584:220;;;:::o;14810:366::-;14952:3;14973:67;15037:2;15032:3;14973:67;:::i;:::-;14966:74;;15049:93;15138:3;15049:93;:::i;:::-;15167:2;15162:3;15158:12;15151:19;;14956:220;;;:::o;15182:108::-;15259:24;15277:5;15259:24;:::i;:::-;15254:3;15247:37;15237:53;;:::o;15296:118::-;15383:24;15401:5;15383:24;:::i;:::-;15378:3;15371:37;15361:53;;:::o;15420:157::-;15525:45;15545:24;15563:5;15545:24;:::i;:::-;15525:45;:::i;:::-;15520:3;15513:58;15503:74;;:::o;15583:538::-;15751:3;15766:75;15837:3;15828:6;15766:75;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15879:75;15950:3;15941:6;15879:75;:::i;:::-;15979:2;15974:3;15970:12;15963:19;;15992:75;16063:3;16054:6;15992:75;:::i;:::-;16092:2;16087:3;16083:12;16076:19;;16112:3;16105:10;;15755:366;;;;;;:::o;16127:222::-;16220:4;16258:2;16247:9;16243:18;16235:26;;16271:71;16339:1;16328:9;16324:17;16315:6;16271:71;:::i;:::-;16225:124;;;;:::o;16355:640::-;16550:4;16588:3;16577:9;16573:19;16565:27;;16602:71;16670:1;16659:9;16655:17;16646:6;16602:71;:::i;:::-;16683:72;16751:2;16740:9;16736:18;16727:6;16683:72;:::i;:::-;16765;16833:2;16822:9;16818:18;16809:6;16765:72;:::i;:::-;16884:9;16878:4;16874:20;16869:2;16858:9;16854:18;16847:48;16912:76;16983:4;16974:6;16912:76;:::i;:::-;16904:84;;16555:440;;;;;;;:::o;17001:373::-;17144:4;17182:2;17171:9;17167:18;17159:26;;17231:9;17225:4;17221:20;17217:1;17206:9;17202:17;17195:47;17259:108;17362:4;17353:6;17259:108;:::i;:::-;17251:116;;17149:225;;;;:::o;17380:210::-;17467:4;17505:2;17494:9;17490:18;17482:26;;17518:65;17580:1;17569:9;17565:17;17556:6;17518:65;:::i;:::-;17472:118;;;;:::o;17596:313::-;17709:4;17747:2;17736:9;17732:18;17724:26;;17796:9;17790:4;17786:20;17782:1;17771:9;17767:17;17760:47;17824:78;17897:4;17888:6;17824:78;:::i;:::-;17816:86;;17714:195;;;;:::o;17915:419::-;18081:4;18119:2;18108:9;18104:18;18096:26;;18168:9;18162:4;18158:20;18154:1;18143:9;18139:17;18132:47;18196:131;18322:4;18196:131;:::i;:::-;18188:139;;18086:248;;;:::o;18340:419::-;18506:4;18544:2;18533:9;18529:18;18521:26;;18593:9;18587:4;18583:20;18579:1;18568:9;18564:17;18557:47;18621:131;18747:4;18621:131;:::i;:::-;18613:139;;18511:248;;;:::o;18765:419::-;18931:4;18969:2;18958:9;18954:18;18946:26;;19018:9;19012:4;19008:20;19004:1;18993:9;18989:17;18982:47;19046:131;19172:4;19046:131;:::i;:::-;19038:139;;18936:248;;;:::o;19190:419::-;19356:4;19394:2;19383:9;19379:18;19371:26;;19443:9;19437:4;19433:20;19429:1;19418:9;19414:17;19407:47;19471:131;19597:4;19471:131;:::i;:::-;19463:139;;19361:248;;;:::o;19615:419::-;19781:4;19819:2;19808:9;19804:18;19796:26;;19868:9;19862:4;19858:20;19854:1;19843:9;19839:17;19832:47;19896:131;20022:4;19896:131;:::i;:::-;19888:139;;19786:248;;;:::o;20040:419::-;20206:4;20244:2;20233:9;20229:18;20221:26;;20293:9;20287:4;20283:20;20279:1;20268:9;20264:17;20257:47;20321:131;20447:4;20321:131;:::i;:::-;20313:139;;20211:248;;;:::o;20465:419::-;20631:4;20669:2;20658:9;20654:18;20646:26;;20718:9;20712:4;20708:20;20704:1;20693:9;20689:17;20682:47;20746:131;20872:4;20746:131;:::i;:::-;20738:139;;20636:248;;;:::o;20890:419::-;21056:4;21094:2;21083:9;21079:18;21071:26;;21143:9;21137:4;21133:20;21129:1;21118:9;21114:17;21107:47;21171:131;21297:4;21171:131;:::i;:::-;21163:139;;21061:248;;;:::o;21315:419::-;21481:4;21519:2;21508:9;21504:18;21496:26;;21568:9;21562:4;21558:20;21554:1;21543:9;21539:17;21532:47;21596:131;21722:4;21596:131;:::i;:::-;21588:139;;21486:248;;;:::o;21740:419::-;21906:4;21944:2;21933:9;21929:18;21921:26;;21993:9;21987:4;21983:20;21979:1;21968:9;21964:17;21957:47;22021:131;22147:4;22021:131;:::i;:::-;22013:139;;21911:248;;;:::o;22165:419::-;22331:4;22369:2;22358:9;22354:18;22346:26;;22418:9;22412:4;22408:20;22404:1;22393:9;22389:17;22382:47;22446:131;22572:4;22446:131;:::i;:::-;22438:139;;22336:248;;;:::o;22590:419::-;22756:4;22794:2;22783:9;22779:18;22771:26;;22843:9;22837:4;22833:20;22829:1;22818:9;22814:17;22807:47;22871:131;22997:4;22871:131;:::i;:::-;22863:139;;22761:248;;;:::o;23015:419::-;23181:4;23219:2;23208:9;23204:18;23196:26;;23268:9;23262:4;23258:20;23254:1;23243:9;23239:17;23232:47;23296:131;23422:4;23296:131;:::i;:::-;23288:139;;23186:248;;;:::o;23440:419::-;23606:4;23644:2;23633:9;23629:18;23621:26;;23693:9;23687:4;23683:20;23679:1;23668:9;23664:17;23657:47;23721:131;23847:4;23721:131;:::i;:::-;23713:139;;23611:248;;;:::o;23865:419::-;24031:4;24069:2;24058:9;24054:18;24046:26;;24118:9;24112:4;24108:20;24104:1;24093:9;24089:17;24082:47;24146:131;24272:4;24146:131;:::i;:::-;24138:139;;24036:248;;;:::o;24290:419::-;24456:4;24494:2;24483:9;24479:18;24471:26;;24543:9;24537:4;24533:20;24529:1;24518:9;24514:17;24507:47;24571:131;24697:4;24571:131;:::i;:::-;24563:139;;24461:248;;;:::o;24715:419::-;24881:4;24919:2;24908:9;24904:18;24896:26;;24968:9;24962:4;24958:20;24954:1;24943:9;24939:17;24932:47;24996:131;25122:4;24996:131;:::i;:::-;24988:139;;24886:248;;;:::o;25140:419::-;25306:4;25344:2;25333:9;25329:18;25321:26;;25393:9;25387:4;25383:20;25379:1;25368:9;25364:17;25357:47;25421:131;25547:4;25421:131;:::i;:::-;25413:139;;25311:248;;;:::o;25565:419::-;25731:4;25769:2;25758:9;25754:18;25746:26;;25818:9;25812:4;25808:20;25804:1;25793:9;25789:17;25782:47;25846:131;25972:4;25846:131;:::i;:::-;25838:139;;25736:248;;;:::o;25990:419::-;26156:4;26194:2;26183:9;26179:18;26171:26;;26243:9;26237:4;26233:20;26229:1;26218:9;26214:17;26207:47;26271:131;26397:4;26271:131;:::i;:::-;26263:139;;26161:248;;;:::o;26415:222::-;26508:4;26546:2;26535:9;26531:18;26523:26;;26559:71;26627:1;26616:9;26612:17;26603:6;26559:71;:::i;:::-;26513:124;;;;:::o;26643:129::-;26677:6;26704:20;;:::i;:::-;26694:30;;26733:33;26761:4;26753:6;26733:33;:::i;:::-;26684:88;;;:::o;26778:75::-;26811:6;26844:2;26838:9;26828:19;;26818:35;:::o;26859:307::-;26920:4;27010:18;27002:6;26999:30;26996:2;;;27032:18;;:::i;:::-;26996:2;27070:29;27092:6;27070:29;:::i;:::-;27062:37;;27154:4;27148;27144:15;27136:23;;26925:241;;;:::o;27172:132::-;27239:4;27262:3;27254:11;;27292:4;27287:3;27283:14;27275:22;;27244:60;;;:::o;27310:114::-;27377:6;27411:5;27405:12;27395:22;;27384:40;;;:::o;27430:98::-;27481:6;27515:5;27509:12;27499:22;;27488:40;;;:::o;27534:99::-;27586:6;27620:5;27614:12;27604:22;;27593:40;;;:::o;27639:113::-;27709:4;27741;27736:3;27732:14;27724:22;;27714:38;;;:::o;27758:184::-;27857:11;27891:6;27886:3;27879:19;27931:4;27926:3;27922:14;27907:29;;27869:73;;;;:::o;27948:168::-;28031:11;28065:6;28060:3;28053:19;28105:4;28100:3;28096:14;28081:29;;28043:73;;;;:::o;28122:169::-;28206:11;28240:6;28235:3;28228:19;28280:4;28275:3;28271:14;28256:29;;28218:73;;;;:::o;28297:305::-;28337:3;28356:20;28374:1;28356:20;:::i;:::-;28351:25;;28390:20;28408:1;28390:20;:::i;:::-;28385:25;;28544:1;28476:66;28472:74;28469:1;28466:81;28463:2;;;28550:18;;:::i;:::-;28463:2;28594:1;28591;28587:9;28580:16;;28341:261;;;;:::o;28608:191::-;28648:4;28668:20;28686:1;28668:20;:::i;:::-;28663:25;;28702:20;28720:1;28702:20;:::i;:::-;28697:25;;28741:1;28738;28735:8;28732:2;;;28746:18;;:::i;:::-;28732:2;28791:1;28788;28784:9;28776:17;;28653:146;;;;:::o;28805:96::-;28842:7;28871:24;28889:5;28871:24;:::i;:::-;28860:35;;28850:51;;;:::o;28907:104::-;28952:7;28981:24;28999:5;28981:24;:::i;:::-;28970:35;;28960:51;;;:::o;29017:90::-;29051:7;29094:5;29087:13;29080:21;29069:32;;29059:48;;;:::o;29113:149::-;29149:7;29189:66;29182:5;29178:78;29167:89;;29157:105;;;:::o;29268:126::-;29305:7;29345:42;29338:5;29334:54;29323:65;;29313:81;;;:::o;29400:77::-;29437:7;29466:5;29455:16;;29445:32;;;:::o;29483:154::-;29567:6;29562:3;29557;29544:30;29629:1;29620:6;29615:3;29611:16;29604:27;29534:103;;;:::o;29643:307::-;29711:1;29721:113;29735:6;29732:1;29729:13;29721:113;;;29820:1;29815:3;29811:11;29805:18;29801:1;29796:3;29792:11;29785:39;29757:2;29754:1;29750:10;29745:15;;29721:113;;;29852:6;29849:1;29846:13;29843:2;;;29932:1;29923:6;29918:3;29914:16;29907:27;29843:2;29692:258;;;;:::o;29956:320::-;30000:6;30037:1;30031:4;30027:12;30017:22;;30084:1;30078:4;30074:12;30105:18;30095:2;;30161:4;30153:6;30149:17;30139:27;;30095:2;30223;30215:6;30212:14;30192:18;30189:38;30186:2;;;30242:18;;:::i;:::-;30186:2;30007:269;;;;:::o;30282:281::-;30365:27;30387:4;30365:27;:::i;:::-;30357:6;30353:40;30495:6;30483:10;30480:22;30459:18;30447:10;30444:34;30441:62;30438:2;;;30506:18;;:::i;:::-;30438:2;30546:10;30542:2;30535:22;30325:238;;;:::o;30569:233::-;30608:3;30631:24;30649:5;30631:24;:::i;:::-;30622:33;;30677:66;30670:5;30667:77;30664:2;;;30747:18;;:::i;:::-;30664:2;30794:1;30787:5;30783:13;30776:20;;30612:190;;;:::o;30808:100::-;30847:7;30876:26;30896:5;30876:26;:::i;:::-;30865:37;;30855:53;;;:::o;30914:94::-;30953:7;30982:20;30996:5;30982:20;:::i;:::-;30971:31;;30961:47;;;:::o;31014:79::-;31053:7;31082:5;31071:16;;31061:32;;;:::o;31099:176::-;31131:1;31148:20;31166:1;31148:20;:::i;:::-;31143:25;;31182:20;31200:1;31182:20;:::i;:::-;31177:25;;31221:1;31211:2;;31226:18;;:::i;:::-;31211:2;31267:1;31264;31260:9;31255:14;;31133:142;;;;:::o;31281:180::-;31329:77;31326:1;31319:88;31426:4;31423:1;31416:15;31450:4;31447:1;31440:15;31467:180;31515:77;31512:1;31505:88;31612:4;31609:1;31602:15;31636:4;31633:1;31626:15;31653:180;31701:77;31698:1;31691:88;31798:4;31795:1;31788:15;31822:4;31819:1;31812:15;31839:180;31887:77;31884:1;31877:88;31984:4;31981:1;31974:15;32008:4;32005:1;31998:15;32025:102;32066:6;32117:2;32113:7;32108:2;32101:5;32097:14;32093:28;32083:38;;32073:54;;;:::o;32133:94::-;32166:8;32214:5;32210:2;32206:14;32185:35;;32175:52;;;:::o;32233:221::-;32373:34;32369:1;32361:6;32357:14;32350:58;32442:4;32437:2;32429:6;32425:15;32418:29;32339:115;:::o;32460:237::-;32600:34;32596:1;32588:6;32584:14;32577:58;32669:20;32664:2;32656:6;32652:15;32645:45;32566:131;:::o;32703:178::-;32843:30;32839:1;32831:6;32827:14;32820:54;32809:72;:::o;32887:182::-;33027:34;33023:1;33015:6;33011:14;33004:58;32993:76;:::o;33075:176::-;33215:28;33211:1;33203:6;33199:14;33192:52;33181:70;:::o;33257:223::-;33397:34;33393:1;33385:6;33381:14;33374:58;33466:6;33461:2;33453:6;33449:15;33442:31;33363:117;:::o;33486:175::-;33626:27;33622:1;33614:6;33610:14;33603:51;33592:69;:::o;33667:165::-;33807:17;33803:1;33795:6;33791:14;33784:41;33773:59;:::o;33838:231::-;33978:34;33974:1;33966:6;33962:14;33955:58;34047:14;34042:2;34034:6;34030:15;34023:39;33944:125;:::o;34075:243::-;34215:34;34211:1;34203:6;34199:14;34192:58;34284:26;34279:2;34271:6;34267:15;34260:51;34181:137;:::o;34324:229::-;34464:34;34460:1;34452:6;34448:14;34441:58;34533:12;34528:2;34520:6;34516:15;34509:37;34430:123;:::o;34559:228::-;34699:34;34695:1;34687:6;34683:14;34676:58;34768:11;34763:2;34755:6;34751:15;34744:36;34665:122;:::o;34793:182::-;34933:34;34929:1;34921:6;34917:14;34910:58;34899:76;:::o;34981:231::-;35121:34;35117:1;35109:6;35105:14;35098:58;35190:14;35185:2;35177:6;35173:15;35166:39;35087:125;:::o;35218:228::-;35358:34;35354:1;35346:6;35342:14;35335:58;35427:11;35422:2;35414:6;35410:15;35403:36;35324:122;:::o;35452:220::-;35592:34;35588:1;35580:6;35576:14;35569:58;35661:3;35656:2;35648:6;35644:15;35637:28;35558:114;:::o;35678:160::-;35818:12;35814:1;35806:6;35802:14;35795:36;35784:54;:::o;35844:236::-;35984:34;35980:1;35972:6;35968:14;35961:58;36053:19;36048:2;36040:6;36036:15;36029:44;35950:130;:::o;36086:175::-;36226:27;36222:1;36214:6;36210:14;36203:51;36192:69;:::o;36267:170::-;36407:22;36403:1;36395:6;36391:14;36384:46;36373:64;:::o;36443:122::-;36516:24;36534:5;36516:24;:::i;:::-;36509:5;36506:35;36496:2;;36555:1;36552;36545:12;36496:2;36486:79;:::o;36571:138::-;36652:32;36678:5;36652:32;:::i;:::-;36645:5;36642:43;36632:2;;36699:1;36696;36689:12;36632:2;36622:87;:::o;36715:116::-;36785:21;36800:5;36785:21;:::i;:::-;36778:5;36775:32;36765:2;;36821:1;36818;36811:12;36765:2;36755:76;:::o;36837:120::-;36909:23;36926:5;36909:23;:::i;:::-;36902:5;36899:34;36889:2;;36947:1;36944;36937:12;36889:2;36879:78;:::o;36963:122::-;37036:24;37054:5;37036:24;:::i;:::-;37029:5;37026:35;37016:2;;37075:1;37072;37065:12;37016:2;37006:79;:::o

Swarm Source

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