ETH Price: $3,341.21 (-3.67%)
Gas: 2 Gwei

Token

XenolC TKFTR (XENOLC)
 

Overview

Max Total Supply

6,788 XENOLC

Holders

557

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
195mm.eth
Balance
3 XENOLC
0x61b8455f978e4f9d466272a8912499a3c0d845c7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
XenolC_TKFTR

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
▀▄▒▄▀   ▒█▀▀▀ ▒█▄░▒█ ▒█▀▀▀█ ▒█░░░ ▒█▀▀█ 
░▒█░░   ▒█▀▀▀ ▒█▒█▒█ ▒█░░▒█ ▒█░░░ ▒█░░░ 
▄▀▒▀▄   ▒█▄▄▄ ▒█░░▀█ ▒█▄▄▄█ ▒█▄▄█ ▒█▄▄█
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.11;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex = 1;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert('ERC721A: unable to get token of owner by index');
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        for (uint256 curr = tokenId; ; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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 override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, 'ERC721A: approval to current owner');

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: 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 override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: 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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
        require(!_exists(startTokenId), 'ERC721A: token already minted');
        require(quantity > 0, 'ERC721A: quantity must be greater than 0');

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        _addressData[to].balance += uint128(quantity);
        _addressData[to].numberMinted += uint128(quantity);

        _ownerships[startTokenId].addr = to;
        _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            if (safe) {
                require(
                    _checkOnERC721Received(address(0), to, updatedIndex, _data),
                    'ERC721A: transfer to non ERC721Receiver implementer'
                );
            }
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;
        }

        _ownerships[tokenId].addr = to;
        _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

        // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId].addr = prevOwnership.addr;
                _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract XenolC_TKFTR is ERC721A {

    mapping (address => uint8) public _minted;

    uint public salePrice;
    uint public reachedCapPrice;
    uint16 public maxSupply;
    uint8 public maxPerTx;
    uint8 public maxPerWallet;

    bool public publicMintStatus;

    string public baseURI;

    address private owner;

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    function setBaseURI(string memory _newBaseURI) external onlyOwner {
        baseURI = _newBaseURI;
    }

    function setSalePrice(uint price) external onlyOwner {
        salePrice = price;
    }

    function setReachedCapPrice(uint price) external onlyOwner {
        reachedCapPrice = price;
    }

    function setMaxSupply(uint16 supply) external onlyOwner {
        maxSupply = supply;
    }


    function setMaxPerTx(uint8 max) external onlyOwner {
        maxPerTx = max;
    }

    function setMaxPerWallet(uint8 max) external onlyOwner {
        maxPerWallet = max;
    }

    function setPublicMintStatus() external onlyOwner {
        publicMintStatus = !publicMintStatus;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    modifier onlyOwner {
        require(owner == msg.sender, "Not the owner!");
        _;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        owner = newOwner;
    }

    constructor() ERC721A("XenolC TKFTR", "XENOLC") {
        owner = msg.sender;
    }

    function publicMint(uint8 amount) external payable {
        require(publicMintStatus, "Sale not active!");
        require(currentIndex + amount <= maxSupply + 1, "Not enough tokens to sell!");
        require(amount <= maxPerTx, "Incorrect amount!");
        require(_minted[msg.sender] + amount <= maxPerWallet, "Incorrect amount!");
        if(currentIndex + amount > 5000){
            require(msg.value == reachedCapPrice * amount, "Incorrect amount!");
            _safeMint(msg.sender, amount);
            _minted[msg.sender] += amount;
        }else{
            require(msg.value == salePrice * amount, "Incorrect amount!");
            _safeMint(msg.sender, amount);
            _minted[msg.sender] += amount;
        }
    }
}

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":"","type":"address"}],"name":"_minted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"uint8","name":"amount","type":"uint8"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reachedCapPrice","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":"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":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"max","type":"uint8"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"max","type":"uint8"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"supply","type":"uint16"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setReachedCapPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260016000553480156200001657600080fd5b506040518060400160405280600c81526020017f58656e6f6c4320544b46545200000000000000000000000000000000000000008152506040518060400160405280600681526020017f58454e4f4c43000000000000000000000000000000000000000000000000000081525081600190805190602001906200009b929190620000fe565b508060029080519060200190620000b4929190620000fe565b50505033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000213565b8280546200010c90620001dd565b90600052602060002090601f0160209004810192826200013057600085556200017c565b82601f106200014b57805160ff19168380011785556200017c565b828001600101855582156200017c579182015b828111156200017b5782518255916020019190600101906200015e565b5b5090506200018b91906200018f565b5090565b5b80821115620001aa57600081600090555060010162000190565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001f657607f821691505b602082108114156200020d576200020c620001ae565b5b50919050565b6145d380620002236000396000f3fe6080604052600436106101f95760003560e01c80636c0360eb1161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610720578063e985e9c51461074b578063f2fde38b14610788578063f51f96dd146107b1578063f968adbe146107dc576101f9565b8063b88d4fde1461067a578063b8da5561146106a3578063c219c2ef146106cc578063c87b56dd146106e3576101f9565b8063858e83b5116100dc578063858e83b5146105e157806395d89b41146105fd578063a22cb46514610628578063abf08ae114610651576101f9565b80636c0360eb146105135780636e34c7961461053e57806370a08231146105675780637de77ecc146105a4576101f9565b80632620237011610190578063453c23101161015f578063453c23101461041a5780634f6ccce71461044557806355f804b3146104825780636352211e146104ab57806367ede142146104e8576101f9565b806326202370146103725780632f745c591461039d5780633ccfd60b146103da57806342842e0e146103f1576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806318160ddd146102f55780631919fed71461032057806323b872dd14610349576101f9565b806301ffc9a7146101fe57806306421c2f1461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612e6a565b610807565b6040516102329190612eb2565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612f07565b610951565b005b34801561027057600080fd5b50610279610a01565b6040516102869190612fcd565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613025565b610a93565b6040516102c39190613093565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee91906130da565b610b18565b005b34801561030157600080fd5b5061030a610c31565b6040516103179190613129565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613025565b610c3a565b005b34801561035557600080fd5b50610370600480360381019061036b9190613144565b610cd4565b005b34801561037e57600080fd5b50610387610ce4565b6040516103949190612eb2565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906130da565b610cf7565b6040516103d19190613129565b60405180910390f35b3480156103e657600080fd5b506103ef610ef5565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613144565b610fce565b005b34801561042657600080fd5b5061042f610fee565b60405161043c91906131b3565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613025565b611001565b6040516104799190613129565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613303565b611054565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613025565b6110fe565b6040516104df9190613093565b60405180910390f35b3480156104f457600080fd5b506104fd611114565b60405161050a9190613129565b60405180910390f35b34801561051f57600080fd5b5061052861111a565b6040516105359190612fcd565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613378565b6111a8565b005b34801561057357600080fd5b5061058e600480360381019061058991906133a5565b611256565b60405161059b9190613129565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c691906133a5565b61133f565b6040516105d891906131b3565b60405180910390f35b6105fb60048036038101906105f69190613378565b61135f565b005b34801561060957600080fd5b506106126116ef565b60405161061f9190612fcd565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906133fe565b611781565b005b34801561065d57600080fd5b5061067860048036038101906106739190613378565b611902565b005b34801561068657600080fd5b506106a1600480360381019061069c91906134df565b6119b0565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613025565b611a0c565b005b3480156106d857600080fd5b506106e1611aa6565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190613025565b611b62565b6040516107179190612fcd565b60405180910390f35b34801561072c57600080fd5b50610735611c09565b6040516107429190613571565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d919061358c565b611c1d565b60405161077f9190612eb2565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa91906133a5565b611cb1565b005b3480156107bd57600080fd5b506107c6611d85565b6040516107d39190613129565b60405180910390f35b3480156107e857600080fd5b506107f1611d8b565b6040516107fe91906131b3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094a575061094982611d9e565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613618565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b606060018054610a1090613667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613667565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b5050505050905090565b6000610a9e82611e08565b610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061370b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b23826110fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061379d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb3611e15565b73ffffffffffffffffffffffffffffffffffffffff161480610be25750610be181610bdc611e15565b611c1d565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061382f565b60405180910390fd5b610c2c838383611e1d565b505050565b60008054905090565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613618565b60405180910390fd5b8060088190555050565b610cdf838383611ecf565b505050565b600a60049054906101000a900460ff1681565b6000610d0283611256565b8210610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906138c1565b60405180910390fd5b6000610d4d610c31565b905060008060005b83811015610eb3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e9f5786841415610e90578195505050505050610eef565b8380610e9b90613910565b9450505b508080610eab90613910565b915050610d55565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906139cb565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90613618565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fcb573d6000803e3d6000fd5b50565b610fe9838383604051806020016040528060008152506119b0565b505050565b600a60039054906101000a900460ff1681565b600061100b610c31565b821061104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613a5d565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613618565b60405180910390fd5b80600b90805190602001906110fa929190612d21565b5050565b600061110982612418565b600001519050919050565b60095481565b600b805461112790613667565b80601f016020809104026020016040519081016040528092919081815260200182805461115390613667565b80156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90613618565b60405180910390fd5b80600a60026101000a81548160ff021916908360ff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613aef565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b600a60049054906101000a900460ff166113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613b5b565b60405180910390fd5b6001600a60009054906101000a900461ffff166113cb9190613b7b565b61ffff168160ff166000546113e09190613bb3565b1115611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613c55565b60405180910390fd5b600a60029054906101000a900460ff1660ff168160ff161115611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090613cc1565b60405180910390fd5b600a60039054906101000a900460ff1660ff1681600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114e49190613ce1565b60ff161115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613cc1565b60405180910390fd5b6113888160ff1660005461153c9190613bb3565b1115611619578060ff166009546115539190613d18565b3414611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613cc1565b60405180910390fd5b6115a1338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115fc9190613ce1565b92506101000a81548160ff021916908360ff1602179055506116ec565b8060ff1660085461162a9190613d18565b341461166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613cc1565b60405180910390fd5b611678338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166116d39190613ce1565b92506101000a81548160ff021916908360ff1602179055505b50565b6060600280546116fe90613667565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90613667565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b5050505050905090565b611789611e15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613dbe565b60405180910390fd5b8060066000611804611e15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118b1611e15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118f69190612eb2565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613618565b60405180910390fd5b80600a60036101000a81548160ff021916908360ff16021790555050565b6119bb848484611ecf565b6119c784848484612591565b611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613e50565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390613618565b60405180910390fd5b8060098190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613618565b60405180910390fd5b600a60049054906101000a900460ff1615600a60046101000a81548160ff021916908315150217905550565b6060611b6d82611e08565b611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390613ee2565b60405180910390fd5b6000611bb6612719565b90506000815111611bd65760405180602001604052806000815250611c01565b80611be0846127ab565b604051602001611bf1929190613f3e565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900461ffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613618565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600a60029054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611eda82612418565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f01611e15565b73ffffffffffffffffffffffffffffffffffffffff161480611f5d5750611f26611e15565b73ffffffffffffffffffffffffffffffffffffffff16611f4584610a93565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f795750611f788260000151611f73611e15565b611c1d565b5b905080611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613fd4565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561209d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612094906140f8565b60405180910390fd5b6120aa858585600161290c565b6120ba6000848460000151611e1d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001846122919190613bb3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123a85761230781611e08565b156123a75782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124108686866001612912565b505050505050565b612420612da7565b61242982611e08565b612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f9061418a565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461255a57809250505061256e565b508080612566906141aa565b91505061246e565b919050565b61258d828260405180602001604052806000815250612918565b5050565b60006125b28473ffffffffffffffffffffffffffffffffffffffff1661292a565b1561270c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125db611e15565b8786866040518563ffffffff1660e01b81526004016125fd9493929190614229565b6020604051808303816000875af192505050801561263957506040513d601f19601f82011682018060405250810190612636919061428a565b60015b6126bc573d8060008114612669576040519150601f19603f3d011682016040523d82523d6000602084013e61266e565b606091505b506000815114156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90613e50565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612711565b600190505b949350505050565b6060600b805461272890613667565b80601f016020809104026020016040519081016040528092919081815260200182805461275490613667565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b5050505050905090565b606060008214156127f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612907565b600082905060005b6000821461282557808061280e90613910565b915050600a8261281e91906142e6565b91506127fb565b60008167ffffffffffffffff811115612841576128406131d8565b5b6040519080825280601f01601f1916602001820160405280156128735781602001600182028036833780820191505090505b5090505b600085146129005760018261288c9190614317565b9150600a8561289b919061434b565b60306128a79190613bb3565b60f81b8183815181106128bd576128bc61437c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f991906142e6565b9450612877565b8093505050505b919050565b50505050565b50505050565b612925838383600161293d565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa9061441d565b60405180910390fd5b6129bc81611e08565b156129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614489565b60405180910390fd5b60008411612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a369061451b565b60405180910390fd5b612a4c600086838761290c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ab99190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff16612b5c9190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612d0457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612ce357612ca36000888488612591565b612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990613e50565b60405180910390fd5b5b8180612cee90613910565b9250508080612cfc90613910565b915050612c2c565b5080600081905550612d196000878488612912565b505050505050565b828054612d2d90613667565b90600052602060002090601f016020900481019282612d4f5760008555612d96565b82601f10612d6857805160ff1916838001178555612d96565b82800160010185558215612d96579182015b82811115612d95578251825591602001919060010190612d7a565b5b509050612da39190612de1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612dfa576000816000905550600101612de2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e4781612e12565b8114612e5257600080fd5b50565b600081359050612e6481612e3e565b92915050565b600060208284031215612e8057612e7f612e08565b5b6000612e8e84828501612e55565b91505092915050565b60008115159050919050565b612eac81612e97565b82525050565b6000602082019050612ec76000830184612ea3565b92915050565b600061ffff82169050919050565b612ee481612ecd565b8114612eef57600080fd5b50565b600081359050612f0181612edb565b92915050565b600060208284031215612f1d57612f1c612e08565b5b6000612f2b84828501612ef2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f6e578082015181840152602081019050612f53565b83811115612f7d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9f82612f34565b612fa98185612f3f565b9350612fb9818560208601612f50565b612fc281612f83565b840191505092915050565b60006020820190508181036000830152612fe78184612f94565b905092915050565b6000819050919050565b61300281612fef565b811461300d57600080fd5b50565b60008135905061301f81612ff9565b92915050565b60006020828403121561303b5761303a612e08565b5b600061304984828501613010565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061307d82613052565b9050919050565b61308d81613072565b82525050565b60006020820190506130a86000830184613084565b92915050565b6130b781613072565b81146130c257600080fd5b50565b6000813590506130d4816130ae565b92915050565b600080604083850312156130f1576130f0612e08565b5b60006130ff858286016130c5565b925050602061311085828601613010565b9150509250929050565b61312381612fef565b82525050565b600060208201905061313e600083018461311a565b92915050565b60008060006060848603121561315d5761315c612e08565b5b600061316b868287016130c5565b935050602061317c868287016130c5565b925050604061318d86828701613010565b9150509250925092565b600060ff82169050919050565b6131ad81613197565b82525050565b60006020820190506131c860008301846131a4565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61321082612f83565b810181811067ffffffffffffffff8211171561322f5761322e6131d8565b5b80604052505050565b6000613242612dfe565b905061324e8282613207565b919050565b600067ffffffffffffffff82111561326e5761326d6131d8565b5b61327782612f83565b9050602081019050919050565b82818337600083830152505050565b60006132a66132a184613253565b613238565b9050828152602081018484840111156132c2576132c16131d3565b5b6132cd848285613284565b509392505050565b600082601f8301126132ea576132e96131ce565b5b81356132fa848260208601613293565b91505092915050565b60006020828403121561331957613318612e08565b5b600082013567ffffffffffffffff81111561333757613336612e0d565b5b613343848285016132d5565b91505092915050565b61335581613197565b811461336057600080fd5b50565b6000813590506133728161334c565b92915050565b60006020828403121561338e5761338d612e08565b5b600061339c84828501613363565b91505092915050565b6000602082840312156133bb576133ba612e08565b5b60006133c9848285016130c5565b91505092915050565b6133db81612e97565b81146133e657600080fd5b50565b6000813590506133f8816133d2565b92915050565b6000806040838503121561341557613414612e08565b5b6000613423858286016130c5565b9250506020613434858286016133e9565b9150509250929050565b600067ffffffffffffffff821115613459576134586131d8565b5b61346282612f83565b9050602081019050919050565b600061348261347d8461343e565b613238565b90508281526020810184848401111561349e5761349d6131d3565b5b6134a9848285613284565b509392505050565b600082601f8301126134c6576134c56131ce565b5b81356134d684826020860161346f565b91505092915050565b600080600080608085870312156134f9576134f8612e08565b5b6000613507878288016130c5565b9450506020613518878288016130c5565b935050604061352987828801613010565b925050606085013567ffffffffffffffff81111561354a57613549612e0d565b5b613556878288016134b1565b91505092959194509250565b61356b81612ecd565b82525050565b60006020820190506135866000830184613562565b92915050565b600080604083850312156135a3576135a2612e08565b5b60006135b1858286016130c5565b92505060206135c2858286016130c5565b9150509250929050565b7f4e6f7420746865206f776e657221000000000000000000000000000000000000600082015250565b6000613602600e83612f3f565b915061360d826135cc565b602082019050919050565b60006020820190508181036000830152613631816135f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367f57607f821691505b6020821081141561369357613692613638565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136f5602d83612f3f565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613787602283612f3f565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613819603983612f3f565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ab602283612f3f565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391b82612fef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394e5761394d6138e1565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139b5602e83612f3f565b91506139c082613959565b604082019050919050565b600060208201905081810360008301526139e4816139a8565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a47602383612f3f565b9150613a52826139eb565b604082019050919050565b60006020820190508181036000830152613a7681613a3a565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613ad9602b83612f3f565b9150613ae482613a7d565b604082019050919050565b60006020820190508181036000830152613b0881613acc565b9050919050565b7f53616c65206e6f74206163746976652100000000000000000000000000000000600082015250565b6000613b45601083612f3f565b9150613b5082613b0f565b602082019050919050565b60006020820190508181036000830152613b7481613b38565b9050919050565b6000613b8682612ecd565b9150613b9183612ecd565b92508261ffff03821115613ba857613ba76138e1565b5b828201905092915050565b6000613bbe82612fef565b9150613bc983612fef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bfe57613bfd6138e1565b5b828201905092915050565b7f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c21000000000000600082015250565b6000613c3f601a83612f3f565b9150613c4a82613c09565b602082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b7f496e636f727265637420616d6f756e7421000000000000000000000000000000600082015250565b6000613cab601183612f3f565b9150613cb682613c75565b602082019050919050565b60006020820190508181036000830152613cda81613c9e565b9050919050565b6000613cec82613197565b9150613cf783613197565b92508260ff03821115613d0d57613d0c6138e1565b5b828201905092915050565b6000613d2382612fef565b9150613d2e83612fef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6757613d666138e1565b5b828202905092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613da8601a83612f3f565b9150613db382613d72565b602082019050919050565b60006020820190508181036000830152613dd781613d9b565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613e3a603383612f3f565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ecc602f83612f3f565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b600081905092915050565b6000613f1882612f34565b613f228185613f02565b9350613f32818560208601612f50565b80840191505092915050565b6000613f4a8285613f0d565b9150613f568284613f0d565b91508190509392505050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613fbe603283612f3f565b9150613fc982613f62565b604082019050919050565b60006020820190508181036000830152613fed81613fb1565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614050602683612f3f565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140e2602583612f3f565b91506140ed82614086565b604082019050919050565b60006020820190508181036000830152614111816140d5565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614174602a83612f3f565b915061417f82614118565b604082019050919050565b600060208201905081810360008301526141a381614167565b9050919050565b60006141b582612fef565b915060008214156141c9576141c86138e1565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006141fb826141d4565b61420581856141df565b9350614215818560208601612f50565b61421e81612f83565b840191505092915050565b600060808201905061423e6000830187613084565b61424b6020830186613084565b614258604083018561311a565b818103606083015261426a81846141f0565b905095945050505050565b60008151905061428481612e3e565b92915050565b6000602082840312156142a05761429f612e08565b5b60006142ae84828501614275565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142f182612fef565b91506142fc83612fef565b92508261430c5761430b6142b7565b5b828204905092915050565b600061432282612fef565b915061432d83612fef565b9250828210156143405761433f6138e1565b5b828203905092915050565b600061435682612fef565b915061436183612fef565b925082614371576143706142b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614407602183612f3f565b9150614412826143ab565b604082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000614473601d83612f3f565b915061447e8261443d565b602082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614505602883612f3f565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006145628261453b565b915061456d8361453b565b9250826fffffffffffffffffffffffffffffffff03821115614592576145916138e1565b5b82820190509291505056fea2646970667358221220af10f90b881c3cf44a9f1e71d842c2e5f332e898cdf65550e19b75024d263e9e64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106101f95760003560e01c80636c0360eb1161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610720578063e985e9c51461074b578063f2fde38b14610788578063f51f96dd146107b1578063f968adbe146107dc576101f9565b8063b88d4fde1461067a578063b8da5561146106a3578063c219c2ef146106cc578063c87b56dd146106e3576101f9565b8063858e83b5116100dc578063858e83b5146105e157806395d89b41146105fd578063a22cb46514610628578063abf08ae114610651576101f9565b80636c0360eb146105135780636e34c7961461053e57806370a08231146105675780637de77ecc146105a4576101f9565b80632620237011610190578063453c23101161015f578063453c23101461041a5780634f6ccce71461044557806355f804b3146104825780636352211e146104ab57806367ede142146104e8576101f9565b806326202370146103725780632f745c591461039d5780633ccfd60b146103da57806342842e0e146103f1576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806318160ddd146102f55780631919fed71461032057806323b872dd14610349576101f9565b806301ffc9a7146101fe57806306421c2f1461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612e6a565b610807565b6040516102329190612eb2565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612f07565b610951565b005b34801561027057600080fd5b50610279610a01565b6040516102869190612fcd565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613025565b610a93565b6040516102c39190613093565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee91906130da565b610b18565b005b34801561030157600080fd5b5061030a610c31565b6040516103179190613129565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613025565b610c3a565b005b34801561035557600080fd5b50610370600480360381019061036b9190613144565b610cd4565b005b34801561037e57600080fd5b50610387610ce4565b6040516103949190612eb2565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906130da565b610cf7565b6040516103d19190613129565b60405180910390f35b3480156103e657600080fd5b506103ef610ef5565b005b3480156103fd57600080fd5b5061041860048036038101906104139190613144565b610fce565b005b34801561042657600080fd5b5061042f610fee565b60405161043c91906131b3565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613025565b611001565b6040516104799190613129565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613303565b611054565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613025565b6110fe565b6040516104df9190613093565b60405180910390f35b3480156104f457600080fd5b506104fd611114565b60405161050a9190613129565b60405180910390f35b34801561051f57600080fd5b5061052861111a565b6040516105359190612fcd565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613378565b6111a8565b005b34801561057357600080fd5b5061058e600480360381019061058991906133a5565b611256565b60405161059b9190613129565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c691906133a5565b61133f565b6040516105d891906131b3565b60405180910390f35b6105fb60048036038101906105f69190613378565b61135f565b005b34801561060957600080fd5b506106126116ef565b60405161061f9190612fcd565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906133fe565b611781565b005b34801561065d57600080fd5b5061067860048036038101906106739190613378565b611902565b005b34801561068657600080fd5b506106a1600480360381019061069c91906134df565b6119b0565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613025565b611a0c565b005b3480156106d857600080fd5b506106e1611aa6565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190613025565b611b62565b6040516107179190612fcd565b60405180910390f35b34801561072c57600080fd5b50610735611c09565b6040516107429190613571565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d919061358c565b611c1d565b60405161077f9190612eb2565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa91906133a5565b611cb1565b005b3480156107bd57600080fd5b506107c6611d85565b6040516107d39190613129565b60405180910390f35b3480156107e857600080fd5b506107f1611d8b565b6040516107fe91906131b3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094a575061094982611d9e565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d890613618565b60405180910390fd5b80600a60006101000a81548161ffff021916908361ffff16021790555050565b606060018054610a1090613667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613667565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b5050505050905090565b6000610a9e82611e08565b610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad49061370b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b23826110fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061379d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb3611e15565b73ffffffffffffffffffffffffffffffffffffffff161480610be25750610be181610bdc611e15565b611c1d565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061382f565b60405180910390fd5b610c2c838383611e1d565b505050565b60008054905090565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613618565b60405180910390fd5b8060088190555050565b610cdf838383611ecf565b505050565b600a60049054906101000a900460ff1681565b6000610d0283611256565b8210610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906138c1565b60405180910390fd5b6000610d4d610c31565b905060008060005b83811015610eb3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e9f5786841415610e90578195505050505050610eef565b8380610e9b90613910565b9450505b508080610eab90613910565b915050610d55565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee6906139cb565b60405180910390fd5b92915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90613618565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fcb573d6000803e3d6000fd5b50565b610fe9838383604051806020016040528060008152506119b0565b505050565b600a60039054906101000a900460ff1681565b600061100b610c31565b821061104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390613a5d565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613618565b60405180910390fd5b80600b90805190602001906110fa929190612d21565b5050565b600061110982612418565b600001519050919050565b60095481565b600b805461112790613667565b80601f016020809104026020016040519081016040528092919081815260200182805461115390613667565b80156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90613618565b60405180910390fd5b80600a60026101000a81548160ff021916908360ff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90613aef565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60076020528060005260406000206000915054906101000a900460ff1681565b600a60049054906101000a900460ff166113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590613b5b565b60405180910390fd5b6001600a60009054906101000a900461ffff166113cb9190613b7b565b61ffff168160ff166000546113e09190613bb3565b1115611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613c55565b60405180910390fd5b600a60029054906101000a900460ff1660ff168160ff161115611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090613cc1565b60405180910390fd5b600a60039054906101000a900460ff1660ff1681600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114e49190613ce1565b60ff161115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90613cc1565b60405180910390fd5b6113888160ff1660005461153c9190613bb3565b1115611619578060ff166009546115539190613d18565b3414611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613cc1565b60405180910390fd5b6115a1338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115fc9190613ce1565b92506101000a81548160ff021916908360ff1602179055506116ec565b8060ff1660085461162a9190613d18565b341461166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613cc1565b60405180910390fd5b611678338260ff16612573565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166116d39190613ce1565b92506101000a81548160ff021916908360ff1602179055505b50565b6060600280546116fe90613667565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90613667565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b5050505050905090565b611789611e15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613dbe565b60405180910390fd5b8060066000611804611e15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118b1611e15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118f69190612eb2565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613618565b60405180910390fd5b80600a60036101000a81548160ff021916908360ff16021790555050565b6119bb848484611ecf565b6119c784848484612591565b611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613e50565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390613618565b60405180910390fd5b8060098190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613618565b60405180910390fd5b600a60049054906101000a900460ff1615600a60046101000a81548160ff021916908315150217905550565b6060611b6d82611e08565b611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba390613ee2565b60405180910390fd5b6000611bb6612719565b90506000815111611bd65760405180602001604052806000815250611c01565b80611be0846127ab565b604051602001611bf1929190613f3e565b6040516020818303038152906040525b915050919050565b600a60009054906101000a900461ffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613618565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600a60029054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611eda82612418565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611f01611e15565b73ffffffffffffffffffffffffffffffffffffffff161480611f5d5750611f26611e15565b73ffffffffffffffffffffffffffffffffffffffff16611f4584610a93565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f795750611f788260000151611f73611e15565b611c1d565b5b905080611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613fd4565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561209d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612094906140f8565b60405180910390fd5b6120aa858585600161290c565b6120ba6000848460000151611e1d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001846122919190613bb3565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123a85761230781611e08565b156123a75782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124108686866001612912565b505050505050565b612420612da7565b61242982611e08565b612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f9061418a565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461255a57809250505061256e565b508080612566906141aa565b91505061246e565b919050565b61258d828260405180602001604052806000815250612918565b5050565b60006125b28473ffffffffffffffffffffffffffffffffffffffff1661292a565b1561270c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125db611e15565b8786866040518563ffffffff1660e01b81526004016125fd9493929190614229565b6020604051808303816000875af192505050801561263957506040513d601f19601f82011682018060405250810190612636919061428a565b60015b6126bc573d8060008114612669576040519150601f19603f3d011682016040523d82523d6000602084013e61266e565b606091505b506000815114156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90613e50565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612711565b600190505b949350505050565b6060600b805461272890613667565b80601f016020809104026020016040519081016040528092919081815260200182805461275490613667565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b5050505050905090565b606060008214156127f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612907565b600082905060005b6000821461282557808061280e90613910565b915050600a8261281e91906142e6565b91506127fb565b60008167ffffffffffffffff811115612841576128406131d8565b5b6040519080825280601f01601f1916602001820160405280156128735781602001600182028036833780820191505090505b5090505b600085146129005760018261288c9190614317565b9150600a8561289b919061434b565b60306128a79190613bb3565b60f81b8183815181106128bd576128bc61437c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f991906142e6565b9450612877565b8093505050505b919050565b50505050565b50505050565b612925838383600161293d565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129aa9061441d565b60405180910390fd5b6129bc81611e08565b156129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614489565b60405180910390fd5b60008411612a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a369061451b565b60405180910390fd5b612a4c600086838761290c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ab99190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff16612b5c9190614557565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612d0457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612ce357612ca36000888488612591565b612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990613e50565b60405180910390fd5b5b8180612cee90613910565b9250508080612cfc90613910565b915050612c2c565b5080600081905550612d196000878488612912565b505050505050565b828054612d2d90613667565b90600052602060002090601f016020900481019282612d4f5760008555612d96565b82601f10612d6857805160ff1916838001178555612d96565b82800160010185558215612d96579182015b82811115612d95578251825591602001919060010190612d7a565b5b509050612da39190612de1565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612dfa576000816000905550600101612de2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e4781612e12565b8114612e5257600080fd5b50565b600081359050612e6481612e3e565b92915050565b600060208284031215612e8057612e7f612e08565b5b6000612e8e84828501612e55565b91505092915050565b60008115159050919050565b612eac81612e97565b82525050565b6000602082019050612ec76000830184612ea3565b92915050565b600061ffff82169050919050565b612ee481612ecd565b8114612eef57600080fd5b50565b600081359050612f0181612edb565b92915050565b600060208284031215612f1d57612f1c612e08565b5b6000612f2b84828501612ef2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f6e578082015181840152602081019050612f53565b83811115612f7d576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f9f82612f34565b612fa98185612f3f565b9350612fb9818560208601612f50565b612fc281612f83565b840191505092915050565b60006020820190508181036000830152612fe78184612f94565b905092915050565b6000819050919050565b61300281612fef565b811461300d57600080fd5b50565b60008135905061301f81612ff9565b92915050565b60006020828403121561303b5761303a612e08565b5b600061304984828501613010565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061307d82613052565b9050919050565b61308d81613072565b82525050565b60006020820190506130a86000830184613084565b92915050565b6130b781613072565b81146130c257600080fd5b50565b6000813590506130d4816130ae565b92915050565b600080604083850312156130f1576130f0612e08565b5b60006130ff858286016130c5565b925050602061311085828601613010565b9150509250929050565b61312381612fef565b82525050565b600060208201905061313e600083018461311a565b92915050565b60008060006060848603121561315d5761315c612e08565b5b600061316b868287016130c5565b935050602061317c868287016130c5565b925050604061318d86828701613010565b9150509250925092565b600060ff82169050919050565b6131ad81613197565b82525050565b60006020820190506131c860008301846131a4565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61321082612f83565b810181811067ffffffffffffffff8211171561322f5761322e6131d8565b5b80604052505050565b6000613242612dfe565b905061324e8282613207565b919050565b600067ffffffffffffffff82111561326e5761326d6131d8565b5b61327782612f83565b9050602081019050919050565b82818337600083830152505050565b60006132a66132a184613253565b613238565b9050828152602081018484840111156132c2576132c16131d3565b5b6132cd848285613284565b509392505050565b600082601f8301126132ea576132e96131ce565b5b81356132fa848260208601613293565b91505092915050565b60006020828403121561331957613318612e08565b5b600082013567ffffffffffffffff81111561333757613336612e0d565b5b613343848285016132d5565b91505092915050565b61335581613197565b811461336057600080fd5b50565b6000813590506133728161334c565b92915050565b60006020828403121561338e5761338d612e08565b5b600061339c84828501613363565b91505092915050565b6000602082840312156133bb576133ba612e08565b5b60006133c9848285016130c5565b91505092915050565b6133db81612e97565b81146133e657600080fd5b50565b6000813590506133f8816133d2565b92915050565b6000806040838503121561341557613414612e08565b5b6000613423858286016130c5565b9250506020613434858286016133e9565b9150509250929050565b600067ffffffffffffffff821115613459576134586131d8565b5b61346282612f83565b9050602081019050919050565b600061348261347d8461343e565b613238565b90508281526020810184848401111561349e5761349d6131d3565b5b6134a9848285613284565b509392505050565b600082601f8301126134c6576134c56131ce565b5b81356134d684826020860161346f565b91505092915050565b600080600080608085870312156134f9576134f8612e08565b5b6000613507878288016130c5565b9450506020613518878288016130c5565b935050604061352987828801613010565b925050606085013567ffffffffffffffff81111561354a57613549612e0d565b5b613556878288016134b1565b91505092959194509250565b61356b81612ecd565b82525050565b60006020820190506135866000830184613562565b92915050565b600080604083850312156135a3576135a2612e08565b5b60006135b1858286016130c5565b92505060206135c2858286016130c5565b9150509250929050565b7f4e6f7420746865206f776e657221000000000000000000000000000000000000600082015250565b6000613602600e83612f3f565b915061360d826135cc565b602082019050919050565b60006020820190508181036000830152613631816135f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367f57607f821691505b6020821081141561369357613692613638565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136f5602d83612f3f565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613787602283612f3f565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613819603983612f3f565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ab602283612f3f565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391b82612fef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561394e5761394d6138e1565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139b5602e83612f3f565b91506139c082613959565b604082019050919050565b600060208201905081810360008301526139e4816139a8565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613a47602383612f3f565b9150613a52826139eb565b604082019050919050565b60006020820190508181036000830152613a7681613a3a565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613ad9602b83612f3f565b9150613ae482613a7d565b604082019050919050565b60006020820190508181036000830152613b0881613acc565b9050919050565b7f53616c65206e6f74206163746976652100000000000000000000000000000000600082015250565b6000613b45601083612f3f565b9150613b5082613b0f565b602082019050919050565b60006020820190508181036000830152613b7481613b38565b9050919050565b6000613b8682612ecd565b9150613b9183612ecd565b92508261ffff03821115613ba857613ba76138e1565b5b828201905092915050565b6000613bbe82612fef565b9150613bc983612fef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bfe57613bfd6138e1565b5b828201905092915050565b7f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c21000000000000600082015250565b6000613c3f601a83612f3f565b9150613c4a82613c09565b602082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b7f496e636f727265637420616d6f756e7421000000000000000000000000000000600082015250565b6000613cab601183612f3f565b9150613cb682613c75565b602082019050919050565b60006020820190508181036000830152613cda81613c9e565b9050919050565b6000613cec82613197565b9150613cf783613197565b92508260ff03821115613d0d57613d0c6138e1565b5b828201905092915050565b6000613d2382612fef565b9150613d2e83612fef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6757613d666138e1565b5b828202905092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613da8601a83612f3f565b9150613db382613d72565b602082019050919050565b60006020820190508181036000830152613dd781613d9b565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613e3a603383612f3f565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ecc602f83612f3f565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b600081905092915050565b6000613f1882612f34565b613f228185613f02565b9350613f32818560208601612f50565b80840191505092915050565b6000613f4a8285613f0d565b9150613f568284613f0d565b91508190509392505050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613fbe603283612f3f565b9150613fc982613f62565b604082019050919050565b60006020820190508181036000830152613fed81613fb1565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614050602683612f3f565b915061405b82613ff4565b604082019050919050565b6000602082019050818103600083015261407f81614043565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140e2602583612f3f565b91506140ed82614086565b604082019050919050565b60006020820190508181036000830152614111816140d5565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614174602a83612f3f565b915061417f82614118565b604082019050919050565b600060208201905081810360008301526141a381614167565b9050919050565b60006141b582612fef565b915060008214156141c9576141c86138e1565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b60006141fb826141d4565b61420581856141df565b9350614215818560208601612f50565b61421e81612f83565b840191505092915050565b600060808201905061423e6000830187613084565b61424b6020830186613084565b614258604083018561311a565b818103606083015261426a81846141f0565b905095945050505050565b60008151905061428481612e3e565b92915050565b6000602082840312156142a05761429f612e08565b5b60006142ae84828501614275565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142f182612fef565b91506142fc83612fef565b92508261430c5761430b6142b7565b5b828204905092915050565b600061432282612fef565b915061432d83612fef565b9250828210156143405761433f6138e1565b5b828203905092915050565b600061435682612fef565b915061436183612fef565b925082614371576143706142b7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614407602183612f3f565b9150614412826143ab565b604082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000614473601d83612f3f565b915061447e8261443d565b602082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614505602883612f3f565b9150614510826144a9565b604082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006145628261453b565b915061456d8361453b565b9250826fffffffffffffffffffffffffffffffff03821115614592576145916138e1565b5b82820190509291505056fea2646970667358221220af10f90b881c3cf44a9f1e71d842c2e5f332e898cdf65550e19b75024d263e9e64736f6c634300080b0033

Deployed Bytecode Sourcemap

36272:2358:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23486:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37047:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25307:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26868:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26389:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21927:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36841:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27744:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36518:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22591:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37455:109;;;;;;;;;;;;;:::i;:::-;;27977:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36484:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22104:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36727:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25116:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36392:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36555:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37150:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23922:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36314:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37876:751;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25476:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27154:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37242:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28225:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36938:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37342:105;;;;;;;;;;;;;:::i;:::-;;25651:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36426:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27513:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37676:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36364:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36456;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23486:372;23588:4;23640:25;23625:40;;;:11;:40;;;;:105;;;;23697:33;23682:48;;;:11;:48;;;;23625:105;:172;;;;23762:35;23747:50;;;:11;:50;;;;23625:172;:225;;;;23814:36;23838:11;23814:23;:36::i;:::-;23625:225;23605:245;;23486:372;;;:::o;37047:93::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37126:6:::1;37114:9;;:18;;;;;;;;;;;;;;;;;;37047:93:::0;:::o;25307:100::-;25361:13;25394:5;25387:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25307:100;:::o;26868:214::-;26936:7;26964:16;26972:7;26964;:16::i;:::-;26956:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27050:15;:24;27066:7;27050:24;;;;;;;;;;;;;;;;;;;;;27043:31;;26868:214;;;:::o;26389:413::-;26462:13;26478:24;26494:7;26478:15;:24::i;:::-;26462:40;;26527:5;26521:11;;:2;:11;;;;26513:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26622:5;26606:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26631:37;26648:5;26655:12;:10;:12::i;:::-;26631:16;:37::i;:::-;26606:62;26584:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;26766:28;26775:2;26779:7;26788:5;26766:8;:28::i;:::-;26451:351;26389:413;;:::o;21927:100::-;21980:7;22007:12;;22000:19;;21927:100;:::o;36841:89::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36917:5:::1;36905:9;:17;;;;36841:89:::0;:::o;27744:162::-;27870:28;27880:4;27886:2;27890:7;27870:9;:28::i;:::-;27744:162;;;:::o;36518:28::-;;;;;;;;;;;;;:::o;22591:823::-;22680:7;22716:16;22726:5;22716:9;:16::i;:::-;22708:5;:24;22700:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22782:22;22807:13;:11;:13::i;:::-;22782:38;;22831:19;22865:25;22919:9;22914:426;22938:14;22934:1;:18;22914:426;;;22974:31;23008:11;:14;23020:1;23008:14;;;;;;;;;;;22974:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23067:1;23041:28;;:9;:14;;;:28;;;23037:103;;23110:9;:14;;;23090:34;;23037:103;23179:5;23158:26;;:17;:26;;;23154:175;;;23224:5;23209:11;:20;23205:77;;;23261:1;23254:8;;;;;;;;;23205:77;23300:13;;;;;:::i;:::-;;;;23154:175;22959:381;22954:3;;;;;:::i;:::-;;;;22914:426;;;;23350:56;;;;;;;;;;:::i;:::-;;;;;;;;22591:823;;;;;:::o;37455:109::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37513:10:::1;37505:28;;:51;37534:21;37505:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37455:109::o:0;27977:177::-;28107:39;28124:4;28130:2;28134:7;28107:39;;;;;;;;;;;;:16;:39::i;:::-;27977:177;;;:::o;36484:25::-;;;;;;;;;;;;;:::o;22104:187::-;22171:7;22207:13;:11;:13::i;:::-;22199:5;:21;22191:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22278:5;22271:12;;22104:187;;;:::o;36727:106::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36814:11:::1;36804:7;:21;;;;;;;;;;;;:::i;:::-;;36727:106:::0;:::o;25116:124::-;25180:7;25207:20;25219:7;25207:11;:20::i;:::-;:25;;;25200:32;;25116:124;;;:::o;36392:27::-;;;;:::o;36555:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37150:84::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37223:3:::1;37212:8;;:14;;;;;;;;;;;;;;;;;;37150:84:::0;:::o;23922:221::-;23986:7;24031:1;24014:19;;:5;:19;;;;24006:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24107:12;:19;24120:5;24107:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24099:36;;24092:43;;23922:221;;;:::o;36314:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;37876:751::-;37946:16;;;;;;;;;;;37938:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38039:1;38027:9;;;;;;;;;;;:13;;;;:::i;:::-;38002:38;;38017:6;38002:21;;:12;;:21;;;;:::i;:::-;:38;;37994:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38100:8;;;;;;;;;;;38090:18;;:6;:18;;;;38082:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;38181:12;;;;;;;;;;;38149:44;;38171:6;38149:7;:19;38157:10;38149:19;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:44;;;;38141:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;38253:4;38244:6;38229:21;;:12;;:21;;;;:::i;:::-;:28;38226:394;;;38312:6;38294:24;;:15;;:24;;;;:::i;:::-;38281:9;:37;38273:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38355:29;38365:10;38377:6;38355:29;;:9;:29::i;:::-;38422:6;38399:7;:19;38407:10;38399:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38226:394;;;38492:6;38480:18;;:9;;:18;;;;:::i;:::-;38467:9;:31;38459:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38535:29;38545:10;38557:6;38535:29;;:9;:29::i;:::-;38602:6;38579:7;:19;38587:10;38579:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38226:394;37876:751;:::o;25476:104::-;25532:13;25565:7;25558:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25476:104;:::o;27154:288::-;27261:12;:10;:12::i;:::-;27249:24;;:8;:24;;;;27241:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27362:8;27317:18;:32;27336:12;:10;:12::i;:::-;27317:32;;;;;;;;;;;;;;;:42;27350:8;27317:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27415:8;27386:48;;27401:12;:10;:12::i;:::-;27386:48;;;27425:8;27386:48;;;;;;:::i;:::-;;;;;;;;27154:288;;:::o;37242:92::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37323:3:::1;37308:12;;:18;;;;;;;;;;;;;;;;;;37242:92:::0;:::o;28225:355::-;28384:28;28394:4;28400:2;28404:7;28384:9;:28::i;:::-;28445:48;28468:4;28474:2;28478:7;28487:5;28445:22;:48::i;:::-;28423:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;28225:355;;;;:::o;36938:101::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37026:5:::1;37008:15;:23;;;;36938:101:::0;:::o;37342:105::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37423:16:::1;;;;;;;;;;;37422:17;37403:16;;:36;;;;;;;;;;;;;;;;;;37342:105::o:0;25651:334::-;25724:13;25758:16;25766:7;25758;:16::i;:::-;25750:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25839:21;25863:10;:8;:10::i;:::-;25839:34;;25915:1;25897:7;25891:21;:25;:86;;;;;;;;;;;;;;;;;25943:7;25952:18;:7;:16;:18::i;:::-;25926:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25891:86;25884:93;;;25651:334;;;:::o;36426:23::-;;;;;;;;;;;;;:::o;27513:164::-;27610:4;27634:18;:25;27653:5;27634:25;;;;;;;;;;;;;;;:35;27660:8;27634:35;;;;;;;;;;;;;;;;;;;;;;;;;27627:42;;27513:164;;;;:::o;37676:99::-;37619:10;37610:19;;:5;;;;;;;;;;;:19;;;37602:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37759:8:::1;37751:5;;:16;;;;;;;;;;;;;;;;;;37676:99:::0;:::o;36364:21::-;;;;:::o;36456:::-;;;;;;;;;;;;;:::o;13458:157::-;13543:4;13582:25;13567:40;;;:11;:40;;;;13560:47;;13458:157;;;:::o;28835:111::-;28892:4;28926:12;;28916:7;:22;28909:29;;28835:111;;;:::o;2922:98::-;2975:7;3002:10;2995:17;;2922:98;:::o;33483:196::-;33625:2;33598:15;:24;33614:7;33598:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33663:7;33659:2;33643:28;;33652:5;33643:28;;;;;;;;;;;;33483:196;;;:::o;31498:1867::-;31613:35;31651:20;31663:7;31651:11;:20::i;:::-;31613:58;;31684:22;31726:13;:18;;;31710:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;31785:12;:10;:12::i;:::-;31761:36;;:20;31773:7;31761:11;:20::i;:::-;:36;;;31710:87;:154;;;;31814:50;31831:13;:18;;;31851:12;:10;:12::i;:::-;31814:16;:50::i;:::-;31710:154;31684:181;;31886:17;31878:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32001:4;31979:26;;:13;:18;;;:26;;;31971:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;32081:1;32067:16;;:2;:16;;;;32059:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32138:43;32160:4;32166:2;32170:7;32179:1;32138:21;:43::i;:::-;32246:49;32263:1;32267:7;32276:13;:18;;;32246:8;:49::i;:::-;32530:1;32500:12;:18;32513:4;32500:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32574:1;32546:12;:16;32559:2;32546:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32627:2;32599:11;:20;32611:7;32599:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;32685:15;32640:11;:20;32652:7;32640:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;32941:19;32973:1;32963:7;:11;;;;:::i;:::-;32941:33;;33030:1;32989:43;;:11;:24;33001:11;32989:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;32985:275;;;33053:20;33061:11;33053:7;:20::i;:::-;33049:200;;;33126:13;:18;;;33094:11;:24;33106:11;33094:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;33205:13;:28;;;33163:11;:24;33175:11;33163:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;33049:200;32985:275;33296:7;33292:2;33277:27;;33286:4;33277:27;;;;;;;;;;;;33315:42;33336:4;33342:2;33346:7;33355:1;33315:20;:42::i;:::-;31602:1763;;;31498:1867;;;:::o;24582:472::-;24643:21;;:::i;:::-;24685:16;24693:7;24685;:16::i;:::-;24677:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24766:12;24781:7;24766:22;;24761:216;24815:31;24849:11;:17;24861:4;24849:17;;;;;;;;;;;24815:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24911:1;24885:28;;:9;:14;;;:28;;;24881:85;;24941:9;24934:16;;;;;;24881:85;24800:177;24792:6;;;;;:::i;:::-;;;;24761:216;;24582:472;;;;:::o;28954:104::-;29023:27;29033:2;29037:8;29023:27;;;;;;;;;;;;:9;:27::i;:::-;28954:104;;:::o;34244:804::-;34399:4;34420:15;:2;:13;;;:15::i;:::-;34416:625;;;34472:2;34456:36;;;34493:12;:10;:12::i;:::-;34507:4;34513:7;34522:5;34456:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34452:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34719:1;34702:6;:13;:18;34698:273;;;34745:61;;;;;;;;;;:::i;:::-;;;;;;;;34698:273;34921:6;34915:13;34906:6;34902:2;34898:15;34891:38;34452:534;34589:45;;;34579:55;;;:6;:55;;;;34572:62;;;;;34416:625;35025:4;35018:11;;34244:804;;;;;;;:::o;36615:100::-;36667:13;36700:7;36693:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36615:100;:::o;623:723::-;679:13;909:1;900:5;:10;896:53;;;927:10;;;;;;;;;;;;;;;;;;;;;896:53;959:12;974:5;959:20;;990:14;1015:78;1030:1;1022:4;:9;1015:78;;1048:8;;;;;:::i;:::-;;;;1079:2;1071:10;;;;;:::i;:::-;;;1015:78;;;1103:19;1135:6;1125:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1103:39;;1153:154;1169:1;1160:5;:10;1153:154;;1197:1;1187:11;;;;;:::i;:::-;;;1264:2;1256:5;:10;;;;:::i;:::-;1243:2;:24;;;;:::i;:::-;1230:39;;1213:6;1220;1213:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1293:2;1284:11;;;;;:::i;:::-;;;1153:154;;;1331:6;1317:21;;;;;623:723;;;;:::o;35536:159::-;;;;;:::o;36107:158::-;;;;;:::o;29421:163::-;29544:32;29550:2;29554:8;29564:5;29571:4;29544:5;:32::i;:::-;29421:163;;;:::o;3817:387::-;3877:4;4085:12;4152:7;4140:20;4132:28;;4195:1;4188:4;:8;4181:15;;;3817:387;;;:::o;29843:1401::-;29982:20;30005:12;;29982:35;;30050:1;30036:16;;:2;:16;;;;30028:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30235:21;30243:12;30235:7;:21::i;:::-;30234:22;30226:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30320:1;30309:8;:12;30301:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30379:61;30409:1;30413:2;30417:12;30431:8;30379:21;:61::i;:::-;30489:8;30453:12;:16;30466:2;30453:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30550:8;30509:12;:16;30522:2;30509:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30605:2;30572:11;:25;30584:12;30572:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;30668:15;30618:11;:25;30630:12;30618:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;30697:20;30720:12;30697:35;;30750:9;30745:381;30769:8;30765:1;:12;30745:381;;;30829:12;30825:2;30804:38;;30821:1;30804:38;;;;;;;;;;;;30861:4;30857:229;;;30916:59;30947:1;30951:2;30955:12;30969:5;30916:22;:59::i;:::-;30886:184;;;;;;;;;;;;:::i;:::-;;;;;;;;;30857:229;31100:14;;;;;:::i;:::-;;;;30779:3;;;;;:::i;:::-;;;;30745:381;;;;31153:12;31138;:27;;;;31176:60;31205:1;31209:2;31213:12;31227:8;31176:20;:60::i;:::-;29971:1273;;29843:1401;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:89::-;1554:7;1594:6;1587:5;1583:18;1572:29;;1518:89;;;:::o;1613:120::-;1685:23;1702:5;1685:23;:::i;:::-;1678:5;1675:34;1665:62;;1723:1;1720;1713:12;1665:62;1613:120;:::o;1739:137::-;1784:5;1822:6;1809:20;1800:29;;1838:32;1864:5;1838:32;:::i;:::-;1739:137;;;;:::o;1882:327::-;1940:6;1989:2;1977:9;1968:7;1964:23;1960:32;1957:119;;;1995:79;;:::i;:::-;1957:119;2115:1;2140:52;2184:7;2175:6;2164:9;2160:22;2140:52;:::i;:::-;2130:62;;2086:116;1882:327;;;;:::o;2215:99::-;2267:6;2301:5;2295:12;2285:22;;2215:99;;;:::o;2320:169::-;2404:11;2438:6;2433:3;2426:19;2478:4;2473:3;2469:14;2454:29;;2320:169;;;;:::o;2495:307::-;2563:1;2573:113;2587:6;2584:1;2581:13;2573:113;;;2672:1;2667:3;2663:11;2657:18;2653:1;2648:3;2644:11;2637:39;2609:2;2606:1;2602:10;2597:15;;2573:113;;;2704:6;2701:1;2698:13;2695:101;;;2784:1;2775:6;2770:3;2766:16;2759:27;2695:101;2544:258;2495:307;;;:::o;2808:102::-;2849:6;2900:2;2896:7;2891:2;2884:5;2880:14;2876:28;2866:38;;2808:102;;;:::o;2916:364::-;3004:3;3032:39;3065:5;3032:39;:::i;:::-;3087:71;3151:6;3146:3;3087:71;:::i;:::-;3080:78;;3167:52;3212:6;3207:3;3200:4;3193:5;3189:16;3167:52;:::i;:::-;3244:29;3266:6;3244:29;:::i;:::-;3239:3;3235:39;3228:46;;3008:272;2916:364;;;;:::o;3286:313::-;3399:4;3437:2;3426:9;3422:18;3414:26;;3486:9;3480:4;3476:20;3472:1;3461:9;3457:17;3450:47;3514:78;3587:4;3578:6;3514:78;:::i;:::-;3506:86;;3286:313;;;;:::o;3605:77::-;3642:7;3671:5;3660:16;;3605:77;;;:::o;3688:122::-;3761:24;3779:5;3761:24;:::i;:::-;3754:5;3751:35;3741:63;;3800:1;3797;3790:12;3741:63;3688:122;:::o;3816:139::-;3862:5;3900:6;3887:20;3878:29;;3916:33;3943:5;3916:33;:::i;:::-;3816:139;;;;:::o;3961:329::-;4020:6;4069:2;4057:9;4048:7;4044:23;4040:32;4037:119;;;4075:79;;:::i;:::-;4037:119;4195:1;4220:53;4265:7;4256:6;4245:9;4241:22;4220:53;:::i;:::-;4210:63;;4166:117;3961:329;;;;:::o;4296:126::-;4333:7;4373:42;4366:5;4362:54;4351:65;;4296:126;;;:::o;4428:96::-;4465:7;4494:24;4512:5;4494:24;:::i;:::-;4483:35;;4428:96;;;:::o;4530:118::-;4617:24;4635:5;4617:24;:::i;:::-;4612:3;4605:37;4530:118;;:::o;4654:222::-;4747:4;4785:2;4774:9;4770:18;4762:26;;4798:71;4866:1;4855:9;4851:17;4842:6;4798:71;:::i;:::-;4654:222;;;;:::o;4882:122::-;4955:24;4973:5;4955:24;:::i;:::-;4948:5;4945:35;4935:63;;4994:1;4991;4984:12;4935:63;4882:122;:::o;5010:139::-;5056:5;5094:6;5081:20;5072:29;;5110:33;5137:5;5110:33;:::i;:::-;5010:139;;;;:::o;5155:474::-;5223:6;5231;5280:2;5268:9;5259:7;5255:23;5251:32;5248:119;;;5286:79;;:::i;:::-;5248:119;5406:1;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5377:117;5533:2;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5504:118;5155:474;;;;;:::o;5635:118::-;5722:24;5740:5;5722:24;:::i;:::-;5717:3;5710:37;5635:118;;:::o;5759:222::-;5852:4;5890:2;5879:9;5875:18;5867:26;;5903:71;5971:1;5960:9;5956:17;5947:6;5903:71;:::i;:::-;5759:222;;;;:::o;5987:619::-;6064:6;6072;6080;6129:2;6117:9;6108:7;6104:23;6100:32;6097:119;;;6135:79;;:::i;:::-;6097:119;6255:1;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6226:117;6382:2;6408:53;6453:7;6444:6;6433:9;6429:22;6408:53;:::i;:::-;6398:63;;6353:118;6510:2;6536:53;6581:7;6572:6;6561:9;6557:22;6536:53;:::i;:::-;6526:63;;6481:118;5987:619;;;;;:::o;6612:86::-;6647:7;6687:4;6680:5;6676:16;6665:27;;6612:86;;;:::o;6704:112::-;6787:22;6803:5;6787:22;:::i;:::-;6782:3;6775:35;6704:112;;:::o;6822:214::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:67;7026:1;7015:9;7011:17;7002:6;6962:67;:::i;:::-;6822:214;;;;:::o;7042:117::-;7151:1;7148;7141:12;7165:117;7274:1;7271;7264:12;7288:180;7336:77;7333:1;7326:88;7433:4;7430:1;7423:15;7457:4;7454:1;7447:15;7474:281;7557:27;7579:4;7557:27;:::i;:::-;7549:6;7545:40;7687:6;7675:10;7672:22;7651:18;7639:10;7636:34;7633:62;7630:88;;;7698:18;;:::i;:::-;7630:88;7738:10;7734:2;7727:22;7517:238;7474:281;;:::o;7761:129::-;7795:6;7822:20;;:::i;:::-;7812:30;;7851:33;7879:4;7871:6;7851:33;:::i;:::-;7761:129;;;:::o;7896:308::-;7958:4;8048:18;8040:6;8037:30;8034:56;;;8070:18;;:::i;:::-;8034:56;8108:29;8130:6;8108:29;:::i;:::-;8100:37;;8192:4;8186;8182:15;8174:23;;7896:308;;;:::o;8210:154::-;8294:6;8289:3;8284;8271:30;8356:1;8347:6;8342:3;8338:16;8331:27;8210:154;;;:::o;8370:412::-;8448:5;8473:66;8489:49;8531:6;8489:49;:::i;:::-;8473:66;:::i;:::-;8464:75;;8562:6;8555:5;8548:21;8600:4;8593:5;8589:16;8638:3;8629:6;8624:3;8620:16;8617:25;8614:112;;;8645:79;;:::i;:::-;8614:112;8735:41;8769:6;8764:3;8759;8735:41;:::i;:::-;8454:328;8370:412;;;;;:::o;8802:340::-;8858:5;8907:3;8900:4;8892:6;8888:17;8884:27;8874:122;;8915:79;;:::i;:::-;8874:122;9032:6;9019:20;9057:79;9132:3;9124:6;9117:4;9109:6;9105:17;9057:79;:::i;:::-;9048:88;;8864:278;8802:340;;;;:::o;9148:509::-;9217:6;9266:2;9254:9;9245:7;9241:23;9237:32;9234:119;;;9272:79;;:::i;:::-;9234:119;9420:1;9409:9;9405:17;9392:31;9450:18;9442:6;9439:30;9436:117;;;9472:79;;:::i;:::-;9436:117;9577:63;9632:7;9623:6;9612:9;9608:22;9577:63;:::i;:::-;9567:73;;9363:287;9148:509;;;;:::o;9663:118::-;9734:22;9750:5;9734:22;:::i;:::-;9727:5;9724:33;9714:61;;9771:1;9768;9761:12;9714:61;9663:118;:::o;9787:135::-;9831:5;9869:6;9856:20;9847:29;;9885:31;9910:5;9885:31;:::i;:::-;9787:135;;;;:::o;9928:325::-;9985:6;10034:2;10022:9;10013:7;10009:23;10005:32;10002:119;;;10040:79;;:::i;:::-;10002:119;10160:1;10185:51;10228:7;10219:6;10208:9;10204:22;10185:51;:::i;:::-;10175:61;;10131:115;9928:325;;;;:::o;10259:329::-;10318:6;10367:2;10355:9;10346:7;10342:23;10338:32;10335:119;;;10373:79;;:::i;:::-;10335:119;10493:1;10518:53;10563:7;10554:6;10543:9;10539:22;10518:53;:::i;:::-;10508:63;;10464:117;10259:329;;;;:::o;10594:116::-;10664:21;10679:5;10664:21;:::i;:::-;10657:5;10654:32;10644:60;;10700:1;10697;10690:12;10644:60;10594:116;:::o;10716:133::-;10759:5;10797:6;10784:20;10775:29;;10813:30;10837:5;10813:30;:::i;:::-;10716:133;;;;:::o;10855:468::-;10920:6;10928;10977:2;10965:9;10956:7;10952:23;10948:32;10945:119;;;10983:79;;:::i;:::-;10945:119;11103:1;11128:53;11173:7;11164:6;11153:9;11149:22;11128:53;:::i;:::-;11118:63;;11074:117;11230:2;11256:50;11298:7;11289:6;11278:9;11274:22;11256:50;:::i;:::-;11246:60;;11201:115;10855:468;;;;;:::o;11329:307::-;11390:4;11480:18;11472:6;11469:30;11466:56;;;11502:18;;:::i;:::-;11466:56;11540:29;11562:6;11540:29;:::i;:::-;11532:37;;11624:4;11618;11614:15;11606:23;;11329:307;;;:::o;11642:410::-;11719:5;11744:65;11760:48;11801:6;11760:48;:::i;:::-;11744:65;:::i;:::-;11735:74;;11832:6;11825:5;11818:21;11870:4;11863:5;11859:16;11908:3;11899:6;11894:3;11890:16;11887:25;11884:112;;;11915:79;;:::i;:::-;11884:112;12005:41;12039:6;12034:3;12029;12005:41;:::i;:::-;11725:327;11642:410;;;;;:::o;12071:338::-;12126:5;12175:3;12168:4;12160:6;12156:17;12152:27;12142:122;;12183:79;;:::i;:::-;12142:122;12300:6;12287:20;12325:78;12399:3;12391:6;12384:4;12376:6;12372:17;12325:78;:::i;:::-;12316:87;;12132:277;12071:338;;;;:::o;12415:943::-;12510:6;12518;12526;12534;12583:3;12571:9;12562:7;12558:23;12554:33;12551:120;;;12590:79;;:::i;:::-;12551:120;12710:1;12735:53;12780:7;12771:6;12760:9;12756:22;12735:53;:::i;:::-;12725:63;;12681:117;12837:2;12863:53;12908:7;12899:6;12888:9;12884:22;12863:53;:::i;:::-;12853:63;;12808:118;12965:2;12991:53;13036:7;13027:6;13016:9;13012:22;12991:53;:::i;:::-;12981:63;;12936:118;13121:2;13110:9;13106:18;13093:32;13152:18;13144:6;13141:30;13138:117;;;13174:79;;:::i;:::-;13138:117;13279:62;13333:7;13324:6;13313:9;13309:22;13279:62;:::i;:::-;13269:72;;13064:287;12415:943;;;;;;;:::o;13364:115::-;13449:23;13466:5;13449:23;:::i;:::-;13444:3;13437:36;13364:115;;:::o;13485:218::-;13576:4;13614:2;13603:9;13599:18;13591:26;;13627:69;13693:1;13682:9;13678:17;13669:6;13627:69;:::i;:::-;13485:218;;;;:::o;13709:474::-;13777:6;13785;13834:2;13822:9;13813:7;13809:23;13805:32;13802:119;;;13840:79;;:::i;:::-;13802:119;13960:1;13985:53;14030:7;14021:6;14010:9;14006:22;13985:53;:::i;:::-;13975:63;;13931:117;14087:2;14113:53;14158:7;14149:6;14138:9;14134:22;14113:53;:::i;:::-;14103:63;;14058:118;13709:474;;;;;:::o;14189:164::-;14329:16;14325:1;14317:6;14313:14;14306:40;14189:164;:::o;14359:366::-;14501:3;14522:67;14586:2;14581:3;14522:67;:::i;:::-;14515:74;;14598:93;14687:3;14598:93;:::i;:::-;14716:2;14711:3;14707:12;14700:19;;14359:366;;;:::o;14731:419::-;14897:4;14935:2;14924:9;14920:18;14912:26;;14984:9;14978:4;14974:20;14970:1;14959:9;14955:17;14948:47;15012:131;15138:4;15012:131;:::i;:::-;15004:139;;14731:419;;;:::o;15156:180::-;15204:77;15201:1;15194:88;15301:4;15298:1;15291:15;15325:4;15322:1;15315:15;15342:320;15386:6;15423:1;15417:4;15413:12;15403:22;;15470:1;15464:4;15460:12;15491:18;15481:81;;15547:4;15539:6;15535:17;15525:27;;15481:81;15609:2;15601:6;15598:14;15578:18;15575:38;15572:84;;;15628:18;;:::i;:::-;15572:84;15393:269;15342:320;;;:::o;15668:232::-;15808:34;15804:1;15796:6;15792:14;15785:58;15877:15;15872:2;15864:6;15860:15;15853:40;15668:232;:::o;15906:366::-;16048:3;16069:67;16133:2;16128:3;16069:67;:::i;:::-;16062:74;;16145:93;16234:3;16145:93;:::i;:::-;16263:2;16258:3;16254:12;16247:19;;15906:366;;;:::o;16278:419::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16531:9;16525:4;16521:20;16517:1;16506:9;16502:17;16495:47;16559:131;16685:4;16559:131;:::i;:::-;16551:139;;16278:419;;;:::o;16703:221::-;16843:34;16839:1;16831:6;16827:14;16820:58;16912:4;16907:2;16899:6;16895:15;16888:29;16703:221;:::o;16930:366::-;17072:3;17093:67;17157:2;17152:3;17093:67;:::i;:::-;17086:74;;17169:93;17258:3;17169:93;:::i;:::-;17287:2;17282:3;17278:12;17271:19;;16930:366;;;:::o;17302:419::-;17468:4;17506:2;17495:9;17491:18;17483:26;;17555:9;17549:4;17545:20;17541:1;17530:9;17526:17;17519:47;17583:131;17709:4;17583:131;:::i;:::-;17575:139;;17302:419;;;:::o;17727:244::-;17867:34;17863:1;17855:6;17851:14;17844:58;17936:27;17931:2;17923:6;17919:15;17912:52;17727:244;:::o;17977:366::-;18119:3;18140:67;18204:2;18199:3;18140:67;:::i;:::-;18133:74;;18216:93;18305:3;18216:93;:::i;:::-;18334:2;18329:3;18325:12;18318:19;;17977:366;;;:::o;18349:419::-;18515:4;18553:2;18542:9;18538:18;18530:26;;18602:9;18596:4;18592:20;18588:1;18577:9;18573:17;18566:47;18630:131;18756:4;18630:131;:::i;:::-;18622:139;;18349:419;;;:::o;18774:221::-;18914:34;18910:1;18902:6;18898:14;18891:58;18983:4;18978:2;18970:6;18966:15;18959:29;18774:221;:::o;19001:366::-;19143:3;19164:67;19228:2;19223:3;19164:67;:::i;:::-;19157:74;;19240:93;19329:3;19240:93;:::i;:::-;19358:2;19353:3;19349:12;19342:19;;19001:366;;;:::o;19373:419::-;19539:4;19577:2;19566:9;19562:18;19554:26;;19626:9;19620:4;19616:20;19612:1;19601:9;19597:17;19590:47;19654:131;19780:4;19654:131;:::i;:::-;19646:139;;19373:419;;;:::o;19798:180::-;19846:77;19843:1;19836:88;19943:4;19940:1;19933:15;19967:4;19964:1;19957:15;19984:233;20023:3;20046:24;20064:5;20046:24;:::i;:::-;20037:33;;20092:66;20085:5;20082:77;20079:103;;;20162:18;;:::i;:::-;20079:103;20209:1;20202:5;20198:13;20191:20;;19984:233;;;:::o;20223:::-;20363:34;20359:1;20351:6;20347:14;20340:58;20432:16;20427:2;20419:6;20415:15;20408:41;20223:233;:::o;20462:366::-;20604:3;20625:67;20689:2;20684:3;20625:67;:::i;:::-;20618:74;;20701:93;20790:3;20701:93;:::i;:::-;20819:2;20814:3;20810:12;20803:19;;20462:366;;;:::o;20834:419::-;21000:4;21038:2;21027:9;21023:18;21015:26;;21087:9;21081:4;21077:20;21073:1;21062:9;21058:17;21051:47;21115:131;21241:4;21115:131;:::i;:::-;21107:139;;20834:419;;;:::o;21259:222::-;21399:34;21395:1;21387:6;21383:14;21376:58;21468:5;21463:2;21455:6;21451:15;21444:30;21259:222;:::o;21487:366::-;21629:3;21650:67;21714:2;21709:3;21650:67;:::i;:::-;21643:74;;21726:93;21815:3;21726:93;:::i;:::-;21844:2;21839:3;21835:12;21828:19;;21487:366;;;:::o;21859:419::-;22025:4;22063:2;22052:9;22048:18;22040:26;;22112:9;22106:4;22102:20;22098:1;22087:9;22083:17;22076:47;22140:131;22266:4;22140:131;:::i;:::-;22132:139;;21859:419;;;:::o;22284:230::-;22424:34;22420:1;22412:6;22408:14;22401:58;22493:13;22488:2;22480:6;22476:15;22469:38;22284:230;:::o;22520:366::-;22662:3;22683:67;22747:2;22742:3;22683:67;:::i;:::-;22676:74;;22759:93;22848:3;22759:93;:::i;:::-;22877:2;22872:3;22868:12;22861:19;;22520:366;;;:::o;22892:419::-;23058:4;23096:2;23085:9;23081:18;23073:26;;23145:9;23139:4;23135:20;23131:1;23120:9;23116:17;23109:47;23173:131;23299:4;23173:131;:::i;:::-;23165:139;;22892:419;;;:::o;23317:166::-;23457:18;23453:1;23445:6;23441:14;23434:42;23317:166;:::o;23489:366::-;23631:3;23652:67;23716:2;23711:3;23652:67;:::i;:::-;23645:74;;23728:93;23817:3;23728:93;:::i;:::-;23846:2;23841:3;23837:12;23830:19;;23489:366;;;:::o;23861:419::-;24027:4;24065:2;24054:9;24050:18;24042:26;;24114:9;24108:4;24104:20;24100:1;24089:9;24085:17;24078:47;24142:131;24268:4;24142:131;:::i;:::-;24134:139;;23861:419;;;:::o;24286:242::-;24325:3;24344:19;24361:1;24344:19;:::i;:::-;24339:24;;24377:19;24394:1;24377:19;:::i;:::-;24372:24;;24470:1;24462:6;24458:14;24455:1;24452:21;24449:47;;;24476:18;;:::i;:::-;24449:47;24520:1;24517;24513:9;24506:16;;24286:242;;;;:::o;24534:305::-;24574:3;24593:20;24611:1;24593:20;:::i;:::-;24588:25;;24627:20;24645:1;24627:20;:::i;:::-;24622:25;;24781:1;24713:66;24709:74;24706:1;24703:81;24700:107;;;24787:18;;:::i;:::-;24700:107;24831:1;24828;24824:9;24817:16;;24534:305;;;;:::o;24845:176::-;24985:28;24981:1;24973:6;24969:14;24962:52;24845:176;:::o;25027:366::-;25169:3;25190:67;25254:2;25249:3;25190:67;:::i;:::-;25183:74;;25266:93;25355:3;25266:93;:::i;:::-;25384:2;25379:3;25375:12;25368:19;;25027:366;;;:::o;25399:419::-;25565:4;25603:2;25592:9;25588:18;25580:26;;25652:9;25646:4;25642:20;25638:1;25627:9;25623:17;25616:47;25680:131;25806:4;25680:131;:::i;:::-;25672:139;;25399:419;;;:::o;25824:167::-;25964:19;25960:1;25952:6;25948:14;25941:43;25824:167;:::o;25997:366::-;26139:3;26160:67;26224:2;26219:3;26160:67;:::i;:::-;26153:74;;26236:93;26325:3;26236:93;:::i;:::-;26354:2;26349:3;26345:12;26338:19;;25997:366;;;:::o;26369:419::-;26535:4;26573:2;26562:9;26558:18;26550:26;;26622:9;26616:4;26612:20;26608:1;26597:9;26593:17;26586:47;26650:131;26776:4;26650:131;:::i;:::-;26642:139;;26369:419;;;:::o;26794:237::-;26832:3;26851:18;26867:1;26851:18;:::i;:::-;26846:23;;26883:18;26899:1;26883:18;:::i;:::-;26878:23;;26973:1;26967:4;26963:12;26960:1;26957:19;26954:45;;;26979:18;;:::i;:::-;26954:45;27023:1;27020;27016:9;27009:16;;26794:237;;;;:::o;27037:348::-;27077:7;27100:20;27118:1;27100:20;:::i;:::-;27095:25;;27134:20;27152:1;27134:20;:::i;:::-;27129:25;;27322:1;27254:66;27250:74;27247:1;27244:81;27239:1;27232:9;27225:17;27221:105;27218:131;;;27329:18;;:::i;:::-;27218:131;27377:1;27374;27370:9;27359:20;;27037:348;;;;:::o;27391:176::-;27531:28;27527:1;27519:6;27515:14;27508:52;27391:176;:::o;27573:366::-;27715:3;27736:67;27800:2;27795:3;27736:67;:::i;:::-;27729:74;;27812:93;27901:3;27812:93;:::i;:::-;27930:2;27925:3;27921:12;27914:19;;27573:366;;;:::o;27945:419::-;28111:4;28149:2;28138:9;28134:18;28126:26;;28198:9;28192:4;28188:20;28184:1;28173:9;28169:17;28162:47;28226:131;28352:4;28226:131;:::i;:::-;28218:139;;27945:419;;;:::o;28370:238::-;28510:34;28506:1;28498:6;28494:14;28487:58;28579:21;28574:2;28566:6;28562:15;28555:46;28370:238;:::o;28614:366::-;28756:3;28777:67;28841:2;28836:3;28777:67;:::i;:::-;28770:74;;28853:93;28942:3;28853:93;:::i;:::-;28971:2;28966:3;28962:12;28955:19;;28614:366;;;:::o;28986:419::-;29152:4;29190:2;29179:9;29175:18;29167:26;;29239:9;29233:4;29229:20;29225:1;29214:9;29210:17;29203:47;29267:131;29393:4;29267:131;:::i;:::-;29259:139;;28986:419;;;:::o;29411:234::-;29551:34;29547:1;29539:6;29535:14;29528:58;29620:17;29615:2;29607:6;29603:15;29596:42;29411:234;:::o;29651:366::-;29793:3;29814:67;29878:2;29873:3;29814:67;:::i;:::-;29807:74;;29890:93;29979:3;29890:93;:::i;:::-;30008:2;30003:3;29999:12;29992:19;;29651:366;;;:::o;30023:419::-;30189:4;30227:2;30216:9;30212:18;30204:26;;30276:9;30270:4;30266:20;30262:1;30251:9;30247:17;30240:47;30304:131;30430:4;30304:131;:::i;:::-;30296:139;;30023:419;;;:::o;30448:148::-;30550:11;30587:3;30572:18;;30448:148;;;;:::o;30602:377::-;30708:3;30736:39;30769:5;30736:39;:::i;:::-;30791:89;30873:6;30868:3;30791:89;:::i;:::-;30784:96;;30889:52;30934:6;30929:3;30922:4;30915:5;30911:16;30889:52;:::i;:::-;30966:6;30961:3;30957:16;30950:23;;30712:267;30602:377;;;;:::o;30985:435::-;31165:3;31187:95;31278:3;31269:6;31187:95;:::i;:::-;31180:102;;31299:95;31390:3;31381:6;31299:95;:::i;:::-;31292:102;;31411:3;31404:10;;30985:435;;;;;:::o;31426:237::-;31566:34;31562:1;31554:6;31550:14;31543:58;31635:20;31630:2;31622:6;31618:15;31611:45;31426:237;:::o;31669:366::-;31811:3;31832:67;31896:2;31891:3;31832:67;:::i;:::-;31825:74;;31908:93;31997:3;31908:93;:::i;:::-;32026:2;32021:3;32017:12;32010:19;;31669:366;;;:::o;32041:419::-;32207:4;32245:2;32234:9;32230:18;32222:26;;32294:9;32288:4;32284:20;32280:1;32269:9;32265:17;32258:47;32322:131;32448:4;32322:131;:::i;:::-;32314:139;;32041:419;;;:::o;32466:225::-;32606:34;32602:1;32594:6;32590:14;32583:58;32675:8;32670:2;32662:6;32658:15;32651:33;32466:225;:::o;32697:366::-;32839:3;32860:67;32924:2;32919:3;32860:67;:::i;:::-;32853:74;;32936:93;33025:3;32936:93;:::i;:::-;33054:2;33049:3;33045:12;33038:19;;32697:366;;;:::o;33069:419::-;33235:4;33273:2;33262:9;33258:18;33250:26;;33322:9;33316:4;33312:20;33308:1;33297:9;33293:17;33286:47;33350:131;33476:4;33350:131;:::i;:::-;33342:139;;33069:419;;;:::o;33494:224::-;33634:34;33630:1;33622:6;33618:14;33611:58;33703:7;33698:2;33690:6;33686:15;33679:32;33494:224;:::o;33724:366::-;33866:3;33887:67;33951:2;33946:3;33887:67;:::i;:::-;33880:74;;33963:93;34052:3;33963:93;:::i;:::-;34081:2;34076:3;34072:12;34065:19;;33724:366;;;:::o;34096:419::-;34262:4;34300:2;34289:9;34285:18;34277:26;;34349:9;34343:4;34339:20;34335:1;34324:9;34320:17;34313:47;34377:131;34503:4;34377:131;:::i;:::-;34369:139;;34096:419;;;:::o;34521:229::-;34661:34;34657:1;34649:6;34645:14;34638:58;34730:12;34725:2;34717:6;34713:15;34706:37;34521:229;:::o;34756:366::-;34898:3;34919:67;34983:2;34978:3;34919:67;:::i;:::-;34912:74;;34995:93;35084:3;34995:93;:::i;:::-;35113:2;35108:3;35104:12;35097:19;;34756:366;;;:::o;35128:419::-;35294:4;35332:2;35321:9;35317:18;35309:26;;35381:9;35375:4;35371:20;35367:1;35356:9;35352:17;35345:47;35409:131;35535:4;35409:131;:::i;:::-;35401:139;;35128:419;;;:::o;35553:171::-;35592:3;35615:24;35633:5;35615:24;:::i;:::-;35606:33;;35661:4;35654:5;35651:15;35648:41;;;35669:18;;:::i;:::-;35648:41;35716:1;35709:5;35705:13;35698:20;;35553:171;;;:::o;36767:98::-;36818:6;36852:5;36846:12;36836:22;;36767:98;;;:::o;36871:168::-;36954:11;36988:6;36983:3;36976:19;37028:4;37023:3;37019:14;37004:29;;36871:168;;;;:::o;37045:360::-;37131:3;37159:38;37191:5;37159:38;:::i;:::-;37213:70;37276:6;37271:3;37213:70;:::i;:::-;37206:77;;37292:52;37337:6;37332:3;37325:4;37318:5;37314:16;37292:52;:::i;:::-;37369:29;37391:6;37369:29;:::i;:::-;37364:3;37360:39;37353:46;;37135:270;37045:360;;;;:::o;37411:640::-;37606:4;37644:3;37633:9;37629:19;37621:27;;37658:71;37726:1;37715:9;37711:17;37702:6;37658:71;:::i;:::-;37739:72;37807:2;37796:9;37792:18;37783:6;37739:72;:::i;:::-;37821;37889:2;37878:9;37874:18;37865:6;37821:72;:::i;:::-;37940:9;37934:4;37930:20;37925:2;37914:9;37910:18;37903:48;37968:76;38039:4;38030:6;37968:76;:::i;:::-;37960:84;;37411:640;;;;;;;:::o;38057:141::-;38113:5;38144:6;38138:13;38129:22;;38160:32;38186:5;38160:32;:::i;:::-;38057:141;;;;:::o;38204:349::-;38273:6;38322:2;38310:9;38301:7;38297:23;38293:32;38290:119;;;38328:79;;:::i;:::-;38290:119;38448:1;38473:63;38528:7;38519:6;38508:9;38504:22;38473:63;:::i;:::-;38463:73;;38419:127;38204:349;;;;:::o;38559:180::-;38607:77;38604:1;38597:88;38704:4;38701:1;38694:15;38728:4;38725:1;38718:15;38745:185;38785:1;38802:20;38820:1;38802:20;:::i;:::-;38797:25;;38836:20;38854:1;38836:20;:::i;:::-;38831:25;;38875:1;38865:35;;38880:18;;:::i;:::-;38865:35;38922:1;38919;38915:9;38910:14;;38745:185;;;;:::o;38936:191::-;38976:4;38996:20;39014:1;38996:20;:::i;:::-;38991:25;;39030:20;39048:1;39030:20;:::i;:::-;39025:25;;39069:1;39066;39063:8;39060:34;;;39074:18;;:::i;:::-;39060:34;39119:1;39116;39112:9;39104:17;;38936:191;;;;:::o;39133:176::-;39165:1;39182:20;39200:1;39182:20;:::i;:::-;39177:25;;39216:20;39234:1;39216:20;:::i;:::-;39211:25;;39255:1;39245:35;;39260:18;;:::i;:::-;39245:35;39301:1;39298;39294:9;39289:14;;39133:176;;;;:::o;39315:180::-;39363:77;39360:1;39353:88;39460:4;39457:1;39450:15;39484:4;39481:1;39474:15;39501:220;39641:34;39637:1;39629:6;39625:14;39618:58;39710:3;39705:2;39697:6;39693:15;39686:28;39501:220;:::o;39727:366::-;39869:3;39890:67;39954:2;39949:3;39890:67;:::i;:::-;39883:74;;39966:93;40055:3;39966:93;:::i;:::-;40084:2;40079:3;40075:12;40068:19;;39727:366;;;:::o;40099:419::-;40265:4;40303:2;40292:9;40288:18;40280:26;;40352:9;40346:4;40342:20;40338:1;40327:9;40323:17;40316:47;40380:131;40506:4;40380:131;:::i;:::-;40372:139;;40099:419;;;:::o;40524:179::-;40664:31;40660:1;40652:6;40648:14;40641:55;40524:179;:::o;40709:366::-;40851:3;40872:67;40936:2;40931:3;40872:67;:::i;:::-;40865:74;;40948:93;41037:3;40948:93;:::i;:::-;41066:2;41061:3;41057:12;41050:19;;40709:366;;;:::o;41081:419::-;41247:4;41285:2;41274:9;41270:18;41262:26;;41334:9;41328:4;41324:20;41320:1;41309:9;41305:17;41298:47;41362:131;41488:4;41362:131;:::i;:::-;41354:139;;41081:419;;;:::o;41506:227::-;41646:34;41642:1;41634:6;41630:14;41623:58;41715:10;41710:2;41702:6;41698:15;41691:35;41506:227;:::o;41739:366::-;41881:3;41902:67;41966:2;41961:3;41902:67;:::i;:::-;41895:74;;41978:93;42067:3;41978:93;:::i;:::-;42096:2;42091:3;42087:12;42080:19;;41739:366;;;:::o;42111:419::-;42277:4;42315:2;42304:9;42300:18;42292:26;;42364:9;42358:4;42354:20;42350:1;42339:9;42335:17;42328:47;42392:131;42518:4;42392:131;:::i;:::-;42384:139;;42111:419;;;:::o;42536:118::-;42573:7;42613:34;42606:5;42602:46;42591:57;;42536:118;;;:::o;42660:273::-;42700:3;42719:20;42737:1;42719:20;:::i;:::-;42714:25;;42753:20;42771:1;42753:20;:::i;:::-;42748:25;;42875:1;42839:34;42835:42;42832:1;42829:49;42826:75;;;42881:18;;:::i;:::-;42826:75;42925:1;42922;42918:9;42911:16;;42660:273;;;;:::o

Swarm Source

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