ETH Price: $3,328.94 (+0.20%)
 

Overview

Max Total Supply

387 CLWNZ

Holders

150

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 CLWNZ
0xe1c11f7d2e2f01ca1cb819c1eeee2bc75ae64336
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:
Clownz

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-06
*/

// SPDX-License-Identifier: MIT

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Token base URI
    string private _baseURI;

    // Count of the tokens currently minted
    uint256 internal _tokensMinted;

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

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

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

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

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

    /**
     * @dev Returns amount of the already minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // _owners are indexed by tokenIds, so .length() returns the number of tokenIds
        return _tokensMinted;
    }

    function setBaseURI(string memory baseURI_) internal {
        _baseURI = baseURI_;
    }

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

        _balances[to] = _balances[to].add(1);
        _owners[tokenId] = to;
        _tokensMinted = _tokensMinted.add(1);

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] = _balances[from].sub(1);
        _balances[to] = _balances[to].add(1);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

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

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;

/**
 * @title Clownz contract
 * @dev Extends ERC721 Non-Fungible Token Standard basic implementation
 */
contract Clownz is ERC721, Ownable {
    using SafeMath for uint256;

    uint256 public constant NFT_MAIN_SALE_PRICE = 50000000000000000; //0.05 ETH
    uint256 public constant NFT_PRESALE_PRICE = 40000000000000000; //0.04 ETH

    uint public constant MAX_SUPPLY = 8888;
    uint public constant MAX_PURCHASE = 20;
    uint public constant MAX_PURCHASE_PRESALE = 4;
    uint public constant RESERVE_AMOUNT = 88;

    bool public SALE_ACTIVE = false;
    bool public PRESALE_ACTIVE = false;
    bool public RESERVATION_COMPLETED = false;
    bool public METADATA_LOCKED = false;

    mapping(address => bool) _whitelist;
    mapping(address => uint) _whitelistMinted;


    constructor() ERC721("ClownzGang", "CLWNZ") {}

    function addToWhitelist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
          require(addresses[i] != address(0), "Can't add the null address");
        
          _whitelist[addresses[i]] = true;
          _whitelistMinted[addresses[i]] > 0 ? _whitelistMinted[addresses[i]] : 0;
        }
    }

    function removeFromWhitelist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Can't remove the null address");
            _whitelist[addresses[i]] = false;
        }
    }

    function isWhitelisted(address addr) public view returns (bool) {
        return _whitelist[addr];
    }

    function whitelistMintedBy(address addr) public view returns (uint) {
        require(addr != address(0), 'Zero address is not on the whitelist');

        return _whitelistMinted[addr];
    }

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

    function setBaseClownzURI(string memory baseURI) public onlyOwner {
        require(METADATA_LOCKED == false, "Metadata are already locked and cannot be changed");

        setBaseURI(baseURI);
    }

    function lockMetadata() public onlyOwner {
        METADATA_LOCKED = true;
    }

    function flipMainSaleState() public onlyOwner {
        SALE_ACTIVE = !SALE_ACTIVE;
    }

    function flipPresaleState() public onlyOwner {
        PRESALE_ACTIVE = !PRESALE_ACTIVE;
    }

    /**
    * Reserve for the team and giveaways
    */
    function reserve() public onlyOwner {
        require(RESERVATION_COMPLETED == false, "You already reserved your tokens");

        for (uint i = 0; i < RESERVE_AMOUNT; i++) {
            uint mintIndex = totalSupply();
            _safeMint(msg.sender, mintIndex);
        }
        RESERVATION_COMPLETED = true;
    }

    /**
    * Mints NFTs
    */
    function mintClown(uint numberOfTokens) public payable returns (uint[] memory) {
        require(SALE_ACTIVE, "Sale must be active to mint a Clown");
        require(totalSupply().add(numberOfTokens) <= MAX_SUPPLY, "Purchase would exceed the max supply of Clownz");
        require(NFT_MAIN_SALE_PRICE.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct");
        require(numberOfTokens <= MAX_PURCHASE, "Can only mint 20 tokens at a time");
        uint[] memory result = new uint[](numberOfTokens);

        for(uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = totalSupply();
            if (mintIndex < MAX_SUPPLY) {
                _safeMint(msg.sender, mintIndex);
            }
            result[i] = mintIndex;
        }
        return result;
    }

    /**
    * Mints NTFs in presale
    */
    function mintClownPresale(uint numberOfTokens) public payable returns (uint[] memory) {
        require(PRESALE_ACTIVE, "Presale must be active to mint a Clown in presale");
        require(NFT_PRESALE_PRICE.mul(numberOfTokens) <= msg.value, "Ether value is not correct");
        require(_whitelist[msg.sender], "You have to be whitelisted to mint in presale");
        require(_whitelistMinted[msg.sender].add(numberOfTokens) <= MAX_PURCHASE_PRESALE, "Can only mint 4 tokens per address in presale");
        uint[] memory result = new uint[](numberOfTokens);

        for (uint i = 0; i < numberOfTokens; i++) {
            uint mintIndex = totalSupply();
            if (totalSupply() < MAX_SUPPLY) {
                _safeMint(msg.sender, mintIndex);
            }
            result[i] = mintIndex;
        }
        _whitelistMinted[msg.sender] = _whitelistMinted[msg.sender].add(numberOfTokens);
        return result;
    }

    /**
     * @dev Retuns ids of the tokens that are owned by the given address.
     */
    function getOwnedTokens(address owner) external view returns (uint[] memory) {
        uint[] memory result = new uint[](_balances[owner]);
        uint counter = 0;
        for (uint i = 0; i < _tokensMinted; i++) {
            if (_owners[i] == owner) {
                result[counter] = i;
                counter = counter.add(1);
            }
        }
        return result;
    }

    /**
    * @dev Returns true if the given address is a member of the ClownzGang and false otherwise
    */
    function isMember(address owner) external view returns (bool) {
        if (_balances[owner] > 0) {
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PURCHASE_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_LOCKED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_MAIN_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVATION_COMPLETED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","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":"flipMainSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPresaleState","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"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintClown","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintClownPresale","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":[{"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":"setBaseClownzURI","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"whitelistMintedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600860146101000a81548160ff0219169083151502179055506000600860156101000a81548160ff0219169083151502179055506000600860166101000a81548160ff0219169083151502179055506000600860176101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600a81526020017f436c6f776e7a47616e67000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f434c574e5a00000000000000000000000000000000000000000000000000000081525081600090805190602001906200010292919062000212565b5080600190805190602001906200011b92919062000212565b5050506200013e620001326200014460201b60201c565b6200014c60201b60201c565b62000327565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022090620002c2565b90600052602060002090601f01602090048101928262000244576000855562000290565b82601f106200025f57805160ff191683800117855562000290565b8280016001018555821562000290579182015b828111156200028f57825182559160200191906001019062000272565b5b5090506200029f9190620002a3565b5090565b5b80821115620002be576000816000905550600101620002a4565b5090565b60006002820490506001821680620002db57607f821691505b60208210811415620002f257620002f1620002f8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614e5280620003376000396000f3fe6080604052600436106102465760003560e01c8063715018a611610139578063b88d4fde116100b6578063e985e9c51161007a578063e985e9c51461085f578063f216ddfd1461089c578063f2fde38b146108c7578063f365b517146108f0578063f81227d41461091b578063fab3942d1461093257610246565b8063b88d4fde14610768578063c62acb4b14610791578063c87b56dd146107ce578063cd3293de1461080b578063d9d616551461082257610246565b8063989bdbb6116100fd578063989bdbb614610697578063a22cb465146106ae578063a230c524146106d7578063af9b192e14610714578063b597b2e81461073f57610246565b8063715018a6146105d65780637f649783146105ed57806386b4f418146106165780638da5cb5b1461064157806395d89b411461066c57610246565b80633ccfd60b116101c75780635d0f0c8a1161018b5780635d0f0c8a146104d65780636352211e14610506578063649a14531461054357806370a082311461056e5780637146bd08146105ab57610246565b80633ccfd60b146104175780633fea6aae1461042e57806342842e0e1461045957806343dbd4a614610482578063548db174146104ad57610246565b806318160ddd1161020e57806318160ddd1461034457806323b872dd1461036f5780632aea3d231461039857806332cb6b0c146103af5780633af32abf146103da57610246565b806301e42ad21461024b57806301ffc9a71461027657806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610260610962565b60405161026d9190614536565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906137c1565b610975565b6040516102aa9190614536565b60405180910390f35b3480156102bf57600080fd5b506102c8610a57565b6040516102d59190614551565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613854565b610ae9565b60405161031291906144ad565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613744565b610b6e565b005b34801561035057600080fd5b50610359610c86565b6040516103669190614913565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061363e565b610c90565b005b3480156103a457600080fd5b506103ad610cf0565b005b3480156103bb57600080fd5b506103c4610d98565b6040516103d19190614913565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc91906135d9565b610d9e565b60405161040e9190614536565b60405180910390f35b34801561042357600080fd5b5061042c610df4565b005b34801561043a57600080fd5b50610443610ebf565b6040516104509190614536565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061363e565b610ed2565b005b34801561048e57600080fd5b50610497610ef2565b6040516104a49190614536565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613780565b610f05565b005b6104f060048036038101906104eb9190613854565b6110ec565b6040516104fd9190614514565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613854565b61133e565b60405161053a91906144ad565b60405180910390f35b34801561054f57600080fd5b506105586113f0565b6040516105659190614913565b60405180910390f35b34801561057a57600080fd5b50610595600480360381019061059091906135d9565b6113fb565b6040516105a29190614913565b60405180910390f35b3480156105b757600080fd5b506105c06114b3565b6040516105cd9190614913565b60405180910390f35b3480156105e257600080fd5b506105eb6114b8565b005b3480156105f957600080fd5b50610614600480360381019061060f9190613780565b611540565b005b34801561062257600080fd5b5061062b611837565b6040516106389190614913565b60405180910390f35b34801561064d57600080fd5b50610656611842565b60405161066391906144ad565b60405180910390f35b34801561067857600080fd5b5061068161186c565b60405161068e9190614551565b60405180910390f35b3480156106a357600080fd5b506106ac6118fe565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613708565b611997565b005b3480156106e357600080fd5b506106fe60048036038101906106f991906135d9565b611b18565b60405161070b9190614536565b60405180910390f35b34801561072057600080fd5b50610729611b74565b6040516107369190614913565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613813565b611b79565b005b34801561077457600080fd5b5061078f600480360381019061078a919061368d565b611c57565b005b34801561079d57600080fd5b506107b860048036038101906107b391906135d9565b611cb9565b6040516107c59190614913565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613854565b611d71565b6040516108029190614551565b60405180910390f35b34801561081757600080fd5b50610820611e19565b005b34801561082e57600080fd5b50610849600480360381019061084491906135d9565b611f3f565b6040516108569190614514565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613602565b6120e3565b6040516108939190614536565b60405180910390f35b3480156108a857600080fd5b506108b1612177565b6040516108be9190614536565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e991906135d9565b61218a565b005b3480156108fc57600080fd5b50610905612282565b6040516109129190614913565b60405180910390f35b34801561092757600080fd5b50610930612287565b005b61094c60048036038101906109479190613854565b61232f565b6040516109599190614514565b60405180910390f35b600860179054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a505750610a4f8261269c565b5b9050919050565b606060008054610a6690614c47565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9290614c47565b8015610adf5780601f10610ab457610100808354040283529160200191610adf565b820191906000526020600020905b815481529060010190602001808311610ac257829003601f168201915b5050505050905090565b6000610af482612706565b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90614773565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b798261133e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190614833565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c09612772565b73ffffffffffffffffffffffffffffffffffffffff161480610c385750610c3781610c32612772565b6120e3565b5b610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e906146f3565b60405180910390fd5b610c81838361277a565b505050565b6000600354905090565b610ca1610c9b612772565b82612833565b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614893565b60405180910390fd5b610ceb838383612911565b505050565b610cf8612772565b73ffffffffffffffffffffffffffffffffffffffff16610d16611842565b73ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390614793565b60405180910390fd5b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b6122b881565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dfc612772565b73ffffffffffffffffffffffffffffffffffffffff16610e1a611842565b73ffffffffffffffffffffffffffffffffffffffff1614610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790614793565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ebb573d6000803e3d6000fd5b5050565b600860159054906101000a900460ff1681565b610eed83838360405180602001604052806000815250611c57565b505050565b600860169054906101000a900460ff1681565b610f0d612772565b73ffffffffffffffffffffffffffffffffffffffff16610f2b611842565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890614793565b60405180910390fd5b60005b81518110156110e857600073ffffffffffffffffffffffffffffffffffffffff16828281518110610fde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490614573565b60405180910390fd5b60006009600084848151811061107c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110e090614c79565b915050610f84565b5050565b6060600860149054906101000a900460ff1661113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614593565b60405180910390fd5b6122b861115a8361114c610c86565b612beb90919063ffffffff16565b111561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614613565b60405180910390fd5b346111b68366b1a2bc2ec50000612c0190919063ffffffff16565b11156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614673565b60405180910390fd5b601482111561123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906146b3565b60405180910390fd5b60008267ffffffffffffffff81111561127d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112ab5781602001602082028036833780820191505090505b50905060005b838110156113345760006112c3610c86565b90506122b88110156112da576112d93382612c17565b5b80838381518110611314577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505050808061132c90614c79565b9150506112b1565b5080915050919050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614733565b60405180910390fd5b80915050919050565b668e1bc9bf04000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390614713565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601481565b6114c0612772565b73ffffffffffffffffffffffffffffffffffffffff166114de611842565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614793565b60405180910390fd5b61153e6000612c35565b565b611548612772565b73ffffffffffffffffffffffffffffffffffffffff16611566611842565b73ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390614793565b60405180910390fd5b60005b815181101561183357600073ffffffffffffffffffffffffffffffffffffffff16828281518110611619577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f906147b3565b60405180910390fd5b6001600960008484815181106116b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a600084848151811061174f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161179e57600061181f565b600a60008383815181106117db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061182b90614c79565b9150506115bf565b5050565b66b1a2bc2ec5000081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461187b90614c47565b80601f01602080910402602001604051908101604052809291908181526020018280546118a790614c47565b80156118f45780601f106118c9576101008083540402835291602001916118f4565b820191906000526020600020905b8154815290600101906020018083116118d757829003601f168201915b5050505050905090565b611906612772565b73ffffffffffffffffffffffffffffffffffffffff16611924611842565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190614793565b60405180910390fd5b6001600860176101000a81548160ff021916908315150217905550565b61199f612772565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614653565b60405180910390fd5b8060076000611a1a612772565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ac7612772565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b0c9190614536565b60405180910390a35050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b6a5760019050611b6f565b600090505b919050565b605881565b611b81612772565b73ffffffffffffffffffffffffffffffffffffffff16611b9f611842565b73ffffffffffffffffffffffffffffffffffffffff1614611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614793565b60405180910390fd5b60001515600860179054906101000a900460ff16151514611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290614873565b60405180910390fd5b611c5481612cfb565b50565b611c68611c62612772565b83612833565b611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e90614893565b60405180910390fd5b611cb384848484612d15565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906148b3565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611d7c82612706565b611dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db2906147f3565b60405180910390fd5b600060028054611dca90614c47565b905011611de65760405180602001604052806000815250611e12565b6002611df183612d71565b604051602001611e02929190614489565b6040516020818303038152906040525b9050919050565b611e21612772565b73ffffffffffffffffffffffffffffffffffffffff16611e3f611842565b73ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614793565b60405180910390fd5b60001515600860169054906101000a900460ff16151514611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee2906148f3565b60405180910390fd5b60005b6058811015611f21576000611f01610c86565b9050611f0d3382612c17565b508080611f1990614c79565b915050611eee565b506001600860166101000a81548160ff021916908315150217905550565b60606000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff811115611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611ff05781602001602082028036833780820191505090505b5090506000805b6003548110156120d8578473ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120c557808383815181106120a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506120c2600183612beb90919063ffffffff16565b91505b80806120d090614c79565b915050611ff7565b508192505050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860149054906101000a900460ff1681565b612192612772565b73ffffffffffffffffffffffffffffffffffffffff166121b0611842565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614793565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d906145d3565b60405180910390fd5b61227f81612c35565b50565b600481565b61228f612772565b73ffffffffffffffffffffffffffffffffffffffff166122ad611842565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614793565b60405180910390fd5b600860159054906101000a900460ff1615600860156101000a81548160ff021916908315150217905550565b6060600860159054906101000a900460ff16612380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612377906148d3565b60405180910390fd5b3461239b83668e1bc9bf040000612c0190919063ffffffff16565b11156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614813565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f90614853565b60405180910390fd5b60046124bc83600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b11156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f4906146d3565b60405180910390fd5b60008267ffffffffffffffff81111561253f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561256d5781602001602082028036833780820191505090505b50905060005b838110156125fd576000612585610c86565b90506122b8612592610c86565b10156125a3576125a23382612c17565b5b808383815181106125dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505080806125f590614c79565b915050612573565b5061265083600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127ed8361133e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061283e82612706565b61287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490614693565b60405180910390fd5b60006128888361133e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128f757508373ffffffffffffffffffffffffffffffffffffffff166128df84610ae9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612908575061290781856120e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129318261133e565b73ffffffffffffffffffffffffffffffffffffffff1614612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e906147d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614633565b60405180910390fd5b612a02838383612f1e565b612a0d60008261277a565b612a606001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2390919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af66001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612bf99190614a7c565b905092915050565b60008183612c0f9190614b03565b905092915050565b612c31828260405180602001604052806000815250612f39565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029080519060200190612d11929190613367565b5050565b612d20848484612911565b612d2c84848484612f94565b612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d62906145b3565b60405180910390fd5b50505050565b60606000821415612db9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f19565b600082905060005b60008214612deb578080612dd490614c79565b915050600a82612de49190614ad2565b9150612dc1565b60008167ffffffffffffffff811115612e2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e5f5781602001600182028036833780820191505090505b5090505b60008514612f1257600182612e789190614b5d565b9150600a85612e879190614cc2565b6030612e939190614a7c565b60f81b818381518110612ecf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0b9190614ad2565b9450612e63565b8093505050505b919050565b505050565b60008183612f319190614b5d565b905092915050565b612f43838361312b565b612f506000848484612f94565b612f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f86906145b3565b60405180910390fd5b505050565b6000612fb58473ffffffffffffffffffffffffffffffffffffffff16613354565b1561311e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fde612772565b8786866040518563ffffffff1660e01b815260040161300094939291906144c8565b602060405180830381600087803b15801561301a57600080fd5b505af192505050801561304b57506040513d601f19601f8201168201806040525081019061304891906137ea565b60015b6130ce573d806000811461307b576040519150601f19603f3d011682016040523d82523d6000602084013e613080565b606091505b506000815114156130c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bd906145b3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613123565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319290614753565b60405180910390fd5b6131a481612706565b156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db906145f3565b60405180910390fd5b6131f060008383612f1e565b6132436001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132ee6001600354612beb90919063ffffffff16565b600381905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461337390614c47565b90600052602060002090601f01602090048101928261339557600085556133dc565b82601f106133ae57805160ff19168380011785556133dc565b828001600101855582156133dc579182015b828111156133db5782518255916020019190600101906133c0565b5b5090506133e991906133ed565b5090565b5b808211156134065760008160009055506001016133ee565b5090565b600061341d6134188461495f565b61492e565b9050808382526020820190508285602086028201111561343c57600080fd5b60005b8581101561346c578161345288826134f2565b84526020840193506020830192505060018101905061343f565b5050509392505050565b60006134896134848461498b565b61492e565b9050828152602081018484840111156134a157600080fd5b6134ac848285614c05565b509392505050565b60006134c76134c2846149bb565b61492e565b9050828152602081018484840111156134df57600080fd5b6134ea848285614c05565b509392505050565b60008135905061350181614dc0565b92915050565b600082601f83011261351857600080fd5b813561352884826020860161340a565b91505092915050565b60008135905061354081614dd7565b92915050565b60008135905061355581614dee565b92915050565b60008151905061356a81614dee565b92915050565b600082601f83011261358157600080fd5b8135613591848260208601613476565b91505092915050565b600082601f8301126135ab57600080fd5b81356135bb8482602086016134b4565b91505092915050565b6000813590506135d381614e05565b92915050565b6000602082840312156135eb57600080fd5b60006135f9848285016134f2565b91505092915050565b6000806040838503121561361557600080fd5b6000613623858286016134f2565b9250506020613634858286016134f2565b9150509250929050565b60008060006060848603121561365357600080fd5b6000613661868287016134f2565b9350506020613672868287016134f2565b9250506040613683868287016135c4565b9150509250925092565b600080600080608085870312156136a357600080fd5b60006136b1878288016134f2565b94505060206136c2878288016134f2565b93505060406136d3878288016135c4565b925050606085013567ffffffffffffffff8111156136f057600080fd5b6136fc87828801613570565b91505092959194509250565b6000806040838503121561371b57600080fd5b6000613729858286016134f2565b925050602061373a85828601613531565b9150509250929050565b6000806040838503121561375757600080fd5b6000613765858286016134f2565b9250506020613776858286016135c4565b9150509250929050565b60006020828403121561379257600080fd5b600082013567ffffffffffffffff8111156137ac57600080fd5b6137b884828501613507565b91505092915050565b6000602082840312156137d357600080fd5b60006137e184828501613546565b91505092915050565b6000602082840312156137fc57600080fd5b600061380a8482850161355b565b91505092915050565b60006020828403121561382557600080fd5b600082013567ffffffffffffffff81111561383f57600080fd5b61384b8482850161359a565b91505092915050565b60006020828403121561386657600080fd5b6000613874848285016135c4565b91505092915050565b6000613889838361446b565b60208301905092915050565b61389e81614b91565b82525050565b60006138af82614a10565b6138b98185614a3e565b93506138c4836149eb565b8060005b838110156138f55781516138dc888261387d565b97506138e783614a31565b9250506001810190506138c8565b5085935050505092915050565b61390b81614ba3565b82525050565b600061391c82614a1b565b6139268185614a4f565b9350613936818560208601614c14565b61393f81614daf565b840191505092915050565b600061395582614a26565b61395f8185614a60565b935061396f818560208601614c14565b61397881614daf565b840191505092915050565b600061398e82614a26565b6139988185614a71565b93506139a8818560208601614c14565b80840191505092915050565b600081546139c181614c47565b6139cb8186614a71565b945060018216600081146139e657600181146139f757613a2a565b60ff19831686528186019350613a2a565b613a00856149fb565b60005b83811015613a2257815481890152600182019150602081019050613a03565b838801955050505b50505092915050565b6000613a40601d83614a60565b91507f43616e27742072656d6f766520746865206e756c6c20616464726573730000006000830152602082019050919050565b6000613a80602383614a60565b91507f53616c65206d7573742062652061637469766520746f206d696e74206120436c60008301527f6f776e00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ae6603283614a60565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613b4c602683614a60565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bb2601c83614a60565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613bf2602e83614a60565b91507f507572636861736520776f756c642065786365656420746865206d617820737560008301527f70706c79206f6620436c6f776e7a0000000000000000000000000000000000006020830152604082019050919050565b6000613c58602483614a60565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cbe601983614a60565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613cfe601f83614a60565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374006000830152602082019050919050565b6000613d3e602c83614a60565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613da4602183614a60565b91507f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e0a602d83614a60565b91507f43616e206f6e6c79206d696e74203420746f6b656e732070657220616464726560008301527f737320696e2070726573616c65000000000000000000000000000000000000006020830152604082019050919050565b6000613e70603883614a60565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ed6602a83614a60565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f3c602983614a60565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fa2602083614a60565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613fe2602c83614a60565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614048602083614a60565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614088601a83614a60565b91507f43616e27742061646420746865206e756c6c20616464726573730000000000006000830152602082019050919050565b60006140c8602983614a60565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061412e602f83614a60565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614194601a83614a60565b91507f45746865722076616c7565206973206e6f7420636f72726563740000000000006000830152602082019050919050565b60006141d4602183614a60565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061423a602d83614a60565b91507f596f75206861766520746f2062652077686974656c697374656420746f206d6960008301527f6e7420696e2070726573616c65000000000000000000000000000000000000006020830152604082019050919050565b60006142a0603183614a60565b91507f4d657461646174612061726520616c7265616479206c6f636b656420616e642060008301527f63616e6e6f74206265206368616e6765640000000000000000000000000000006020830152604082019050919050565b6000614306603183614a60565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061436c602483614a60565b91507f5a65726f2061646472657373206973206e6f74206f6e2074686520776869746560008301527f6c697374000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143d2603183614a60565b91507f50726573616c65206d7573742062652061637469766520746f206d696e74206160008301527f20436c6f776e20696e2070726573616c650000000000000000000000000000006020830152604082019050919050565b6000614438602083614a60565b91507f596f7520616c726561647920726573657276656420796f757220746f6b656e736000830152602082019050919050565b61447481614bfb565b82525050565b61448381614bfb565b82525050565b600061449582856139b4565b91506144a18284613983565b91508190509392505050565b60006020820190506144c26000830184613895565b92915050565b60006080820190506144dd6000830187613895565b6144ea6020830186613895565b6144f7604083018561447a565b81810360608301526145098184613911565b905095945050505050565b6000602082019050818103600083015261452e81846138a4565b905092915050565b600060208201905061454b6000830184613902565b92915050565b6000602082019050818103600083015261456b818461394a565b905092915050565b6000602082019050818103600083015261458c81613a33565b9050919050565b600060208201905081810360008301526145ac81613a73565b9050919050565b600060208201905081810360008301526145cc81613ad9565b9050919050565b600060208201905081810360008301526145ec81613b3f565b9050919050565b6000602082019050818103600083015261460c81613ba5565b9050919050565b6000602082019050818103600083015261462c81613be5565b9050919050565b6000602082019050818103600083015261464c81613c4b565b9050919050565b6000602082019050818103600083015261466c81613cb1565b9050919050565b6000602082019050818103600083015261468c81613cf1565b9050919050565b600060208201905081810360008301526146ac81613d31565b9050919050565b600060208201905081810360008301526146cc81613d97565b9050919050565b600060208201905081810360008301526146ec81613dfd565b9050919050565b6000602082019050818103600083015261470c81613e63565b9050919050565b6000602082019050818103600083015261472c81613ec9565b9050919050565b6000602082019050818103600083015261474c81613f2f565b9050919050565b6000602082019050818103600083015261476c81613f95565b9050919050565b6000602082019050818103600083015261478c81613fd5565b9050919050565b600060208201905081810360008301526147ac8161403b565b9050919050565b600060208201905081810360008301526147cc8161407b565b9050919050565b600060208201905081810360008301526147ec816140bb565b9050919050565b6000602082019050818103600083015261480c81614121565b9050919050565b6000602082019050818103600083015261482c81614187565b9050919050565b6000602082019050818103600083015261484c816141c7565b9050919050565b6000602082019050818103600083015261486c8161422d565b9050919050565b6000602082019050818103600083015261488c81614293565b9050919050565b600060208201905081810360008301526148ac816142f9565b9050919050565b600060208201905081810360008301526148cc8161435f565b9050919050565b600060208201905081810360008301526148ec816143c5565b9050919050565b6000602082019050818103600083015261490c8161442b565b9050919050565b6000602082019050614928600083018461447a565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561495557614954614d80565b5b8060405250919050565b600067ffffffffffffffff82111561497a57614979614d80565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149a6576149a5614d80565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156149d6576149d5614d80565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a8782614bfb565b9150614a9283614bfb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ac757614ac6614cf3565b5b828201905092915050565b6000614add82614bfb565b9150614ae883614bfb565b925082614af857614af7614d22565b5b828204905092915050565b6000614b0e82614bfb565b9150614b1983614bfb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5257614b51614cf3565b5b828202905092915050565b6000614b6882614bfb565b9150614b7383614bfb565b925082821015614b8657614b85614cf3565b5b828203905092915050565b6000614b9c82614bdb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c32578082015181840152602081019050614c17565b83811115614c41576000848401525b50505050565b60006002820490506001821680614c5f57607f821691505b60208210811415614c7357614c72614d51565b5b50919050565b6000614c8482614bfb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cb757614cb6614cf3565b5b600182019050919050565b6000614ccd82614bfb565b9150614cd883614bfb565b925082614ce857614ce7614d22565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614dc981614b91565b8114614dd457600080fd5b50565b614de081614ba3565b8114614deb57600080fd5b50565b614df781614baf565b8114614e0257600080fd5b50565b614e0e81614bfb565b8114614e1957600080fd5b5056fea2646970667358221220a61d8cbfd72f12288ef4f47a0a41762f041bd4a6405091be6aed7d5cbfcddd7e64736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102465760003560e01c8063715018a611610139578063b88d4fde116100b6578063e985e9c51161007a578063e985e9c51461085f578063f216ddfd1461089c578063f2fde38b146108c7578063f365b517146108f0578063f81227d41461091b578063fab3942d1461093257610246565b8063b88d4fde14610768578063c62acb4b14610791578063c87b56dd146107ce578063cd3293de1461080b578063d9d616551461082257610246565b8063989bdbb6116100fd578063989bdbb614610697578063a22cb465146106ae578063a230c524146106d7578063af9b192e14610714578063b597b2e81461073f57610246565b8063715018a6146105d65780637f649783146105ed57806386b4f418146106165780638da5cb5b1461064157806395d89b411461066c57610246565b80633ccfd60b116101c75780635d0f0c8a1161018b5780635d0f0c8a146104d65780636352211e14610506578063649a14531461054357806370a082311461056e5780637146bd08146105ab57610246565b80633ccfd60b146104175780633fea6aae1461042e57806342842e0e1461045957806343dbd4a614610482578063548db174146104ad57610246565b806318160ddd1161020e57806318160ddd1461034457806323b872dd1461036f5780632aea3d231461039857806332cb6b0c146103af5780633af32abf146103da57610246565b806301e42ad21461024b57806301ffc9a71461027657806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610260610962565b60405161026d9190614536565b60405180910390f35b34801561028257600080fd5b5061029d600480360381019061029891906137c1565b610975565b6040516102aa9190614536565b60405180910390f35b3480156102bf57600080fd5b506102c8610a57565b6040516102d59190614551565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613854565b610ae9565b60405161031291906144ad565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613744565b610b6e565b005b34801561035057600080fd5b50610359610c86565b6040516103669190614913565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061363e565b610c90565b005b3480156103a457600080fd5b506103ad610cf0565b005b3480156103bb57600080fd5b506103c4610d98565b6040516103d19190614913565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc91906135d9565b610d9e565b60405161040e9190614536565b60405180910390f35b34801561042357600080fd5b5061042c610df4565b005b34801561043a57600080fd5b50610443610ebf565b6040516104509190614536565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061363e565b610ed2565b005b34801561048e57600080fd5b50610497610ef2565b6040516104a49190614536565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613780565b610f05565b005b6104f060048036038101906104eb9190613854565b6110ec565b6040516104fd9190614514565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613854565b61133e565b60405161053a91906144ad565b60405180910390f35b34801561054f57600080fd5b506105586113f0565b6040516105659190614913565b60405180910390f35b34801561057a57600080fd5b50610595600480360381019061059091906135d9565b6113fb565b6040516105a29190614913565b60405180910390f35b3480156105b757600080fd5b506105c06114b3565b6040516105cd9190614913565b60405180910390f35b3480156105e257600080fd5b506105eb6114b8565b005b3480156105f957600080fd5b50610614600480360381019061060f9190613780565b611540565b005b34801561062257600080fd5b5061062b611837565b6040516106389190614913565b60405180910390f35b34801561064d57600080fd5b50610656611842565b60405161066391906144ad565b60405180910390f35b34801561067857600080fd5b5061068161186c565b60405161068e9190614551565b60405180910390f35b3480156106a357600080fd5b506106ac6118fe565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190613708565b611997565b005b3480156106e357600080fd5b506106fe60048036038101906106f991906135d9565b611b18565b60405161070b9190614536565b60405180910390f35b34801561072057600080fd5b50610729611b74565b6040516107369190614913565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613813565b611b79565b005b34801561077457600080fd5b5061078f600480360381019061078a919061368d565b611c57565b005b34801561079d57600080fd5b506107b860048036038101906107b391906135d9565b611cb9565b6040516107c59190614913565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613854565b611d71565b6040516108029190614551565b60405180910390f35b34801561081757600080fd5b50610820611e19565b005b34801561082e57600080fd5b50610849600480360381019061084491906135d9565b611f3f565b6040516108569190614514565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613602565b6120e3565b6040516108939190614536565b60405180910390f35b3480156108a857600080fd5b506108b1612177565b6040516108be9190614536565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e991906135d9565b61218a565b005b3480156108fc57600080fd5b50610905612282565b6040516109129190614913565b60405180910390f35b34801561092757600080fd5b50610930612287565b005b61094c60048036038101906109479190613854565b61232f565b6040516109599190614514565b60405180910390f35b600860179054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a505750610a4f8261269c565b5b9050919050565b606060008054610a6690614c47565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9290614c47565b8015610adf5780601f10610ab457610100808354040283529160200191610adf565b820191906000526020600020905b815481529060010190602001808311610ac257829003601f168201915b5050505050905090565b6000610af482612706565b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90614773565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b798261133e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190614833565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c09612772565b73ffffffffffffffffffffffffffffffffffffffff161480610c385750610c3781610c32612772565b6120e3565b5b610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e906146f3565b60405180910390fd5b610c81838361277a565b505050565b6000600354905090565b610ca1610c9b612772565b82612833565b610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd790614893565b60405180910390fd5b610ceb838383612911565b505050565b610cf8612772565b73ffffffffffffffffffffffffffffffffffffffff16610d16611842565b73ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6390614793565b60405180910390fd5b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b6122b881565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610dfc612772565b73ffffffffffffffffffffffffffffffffffffffff16610e1a611842565b73ffffffffffffffffffffffffffffffffffffffff1614610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790614793565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ebb573d6000803e3d6000fd5b5050565b600860159054906101000a900460ff1681565b610eed83838360405180602001604052806000815250611c57565b505050565b600860169054906101000a900460ff1681565b610f0d612772565b73ffffffffffffffffffffffffffffffffffffffff16610f2b611842565b73ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890614793565b60405180910390fd5b60005b81518110156110e857600073ffffffffffffffffffffffffffffffffffffffff16828281518110610fde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490614573565b60405180910390fd5b60006009600084848151811061107c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110e090614c79565b915050610f84565b5050565b6060600860149054906101000a900460ff1661113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614593565b60405180910390fd5b6122b861115a8361114c610c86565b612beb90919063ffffffff16565b111561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290614613565b60405180910390fd5b346111b68366b1a2bc2ec50000612c0190919063ffffffff16565b11156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614673565b60405180910390fd5b601482111561123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906146b3565b60405180910390fd5b60008267ffffffffffffffff81111561127d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112ab5781602001602082028036833780820191505090505b50905060005b838110156113345760006112c3610c86565b90506122b88110156112da576112d93382612c17565b5b80838381518110611314577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505050808061132c90614c79565b9150506112b1565b5080915050919050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614733565b60405180910390fd5b80915050919050565b668e1bc9bf04000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390614713565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601481565b6114c0612772565b73ffffffffffffffffffffffffffffffffffffffff166114de611842565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614793565b60405180910390fd5b61153e6000612c35565b565b611548612772565b73ffffffffffffffffffffffffffffffffffffffff16611566611842565b73ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390614793565b60405180910390fd5b60005b815181101561183357600073ffffffffffffffffffffffffffffffffffffffff16828281518110611619577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f906147b3565b60405180910390fd5b6001600960008484815181106116b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600a600084848151811061174f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161179e57600061181f565b600a60008383815181106117db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061182b90614c79565b9150506115bf565b5050565b66b1a2bc2ec5000081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461187b90614c47565b80601f01602080910402602001604051908101604052809291908181526020018280546118a790614c47565b80156118f45780601f106118c9576101008083540402835291602001916118f4565b820191906000526020600020905b8154815290600101906020018083116118d757829003601f168201915b5050505050905090565b611906612772565b73ffffffffffffffffffffffffffffffffffffffff16611924611842565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190614793565b60405180910390fd5b6001600860176101000a81548160ff021916908315150217905550565b61199f612772565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614653565b60405180910390fd5b8060076000611a1a612772565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ac7612772565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b0c9190614536565b60405180910390a35050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b6a5760019050611b6f565b600090505b919050565b605881565b611b81612772565b73ffffffffffffffffffffffffffffffffffffffff16611b9f611842565b73ffffffffffffffffffffffffffffffffffffffff1614611bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bec90614793565b60405180910390fd5b60001515600860179054906101000a900460ff16151514611c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4290614873565b60405180910390fd5b611c5481612cfb565b50565b611c68611c62612772565b83612833565b611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e90614893565b60405180910390fd5b611cb384848484612d15565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d21906148b3565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060611d7c82612706565b611dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db2906147f3565b60405180910390fd5b600060028054611dca90614c47565b905011611de65760405180602001604052806000815250611e12565b6002611df183612d71565b604051602001611e02929190614489565b6040516020818303038152906040525b9050919050565b611e21612772565b73ffffffffffffffffffffffffffffffffffffffff16611e3f611842565b73ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614793565b60405180910390fd5b60001515600860169054906101000a900460ff16151514611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee2906148f3565b60405180910390fd5b60005b6058811015611f21576000611f01610c86565b9050611f0d3382612c17565b508080611f1990614c79565b915050611eee565b506001600860166101000a81548160ff021916908315150217905550565b60606000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205467ffffffffffffffff811115611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611ff05781602001602082028036833780820191505090505b5090506000805b6003548110156120d8578473ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120c557808383815181106120a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506120c2600183612beb90919063ffffffff16565b91505b80806120d090614c79565b915050611ff7565b508192505050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860149054906101000a900460ff1681565b612192612772565b73ffffffffffffffffffffffffffffffffffffffff166121b0611842565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614793565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d906145d3565b60405180910390fd5b61227f81612c35565b50565b600481565b61228f612772565b73ffffffffffffffffffffffffffffffffffffffff166122ad611842565b73ffffffffffffffffffffffffffffffffffffffff1614612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614793565b60405180910390fd5b600860159054906101000a900460ff1615600860156101000a81548160ff021916908315150217905550565b6060600860159054906101000a900460ff16612380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612377906148d3565b60405180910390fd5b3461239b83668e1bc9bf040000612c0190919063ffffffff16565b11156123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d390614813565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245f90614853565b60405180910390fd5b60046124bc83600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b11156124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f4906146d3565b60405180910390fd5b60008267ffffffffffffffff81111561253f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561256d5781602001602082028036833780820191505090505b50905060005b838110156125fd576000612585610c86565b90506122b8612592610c86565b10156125a3576125a23382612c17565b5b808383815181106125dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505080806125f590614c79565b915050612573565b5061265083600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127ed8361133e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061283e82612706565b61287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490614693565b60405180910390fd5b60006128888361133e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128f757508373ffffffffffffffffffffffffffffffffffffffff166128df84610ae9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612908575061290781856120e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129318261133e565b73ffffffffffffffffffffffffffffffffffffffff1614612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297e906147d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ee90614633565b60405180910390fd5b612a02838383612f1e565b612a0d60008261277a565b612a606001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2390919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af66001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612bf99190614a7c565b905092915050565b60008183612c0f9190614b03565b905092915050565b612c31828260405180602001604052806000815250612f39565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029080519060200190612d11929190613367565b5050565b612d20848484612911565b612d2c84848484612f94565b612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d62906145b3565b60405180910390fd5b50505050565b60606000821415612db9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f19565b600082905060005b60008214612deb578080612dd490614c79565b915050600a82612de49190614ad2565b9150612dc1565b60008167ffffffffffffffff811115612e2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e5f5781602001600182028036833780820191505090505b5090505b60008514612f1257600182612e789190614b5d565b9150600a85612e879190614cc2565b6030612e939190614a7c565b60f81b818381518110612ecf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0b9190614ad2565b9450612e63565b8093505050505b919050565b505050565b60008183612f319190614b5d565b905092915050565b612f43838361312b565b612f506000848484612f94565b612f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f86906145b3565b60405180910390fd5b505050565b6000612fb58473ffffffffffffffffffffffffffffffffffffffff16613354565b1561311e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fde612772565b8786866040518563ffffffff1660e01b815260040161300094939291906144c8565b602060405180830381600087803b15801561301a57600080fd5b505af192505050801561304b57506040513d601f19601f8201168201806040525081019061304891906137ea565b60015b6130ce573d806000811461307b576040519150601f19603f3d011682016040523d82523d6000602084013e613080565b606091505b506000815114156130c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bd906145b3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613123565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319290614753565b60405180910390fd5b6131a481612706565b156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131db906145f3565b60405180910390fd5b6131f060008383612f1e565b6132436001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612beb90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506132ee6001600354612beb90919063ffffffff16565b600381905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461337390614c47565b90600052602060002090601f01602090048101928261339557600085556133dc565b82601f106133ae57805160ff19168380011785556133dc565b828001600101855582156133dc579182015b828111156133db5782518255916020019190600101906133c0565b5b5090506133e991906133ed565b5090565b5b808211156134065760008160009055506001016133ee565b5090565b600061341d6134188461495f565b61492e565b9050808382526020820190508285602086028201111561343c57600080fd5b60005b8581101561346c578161345288826134f2565b84526020840193506020830192505060018101905061343f565b5050509392505050565b60006134896134848461498b565b61492e565b9050828152602081018484840111156134a157600080fd5b6134ac848285614c05565b509392505050565b60006134c76134c2846149bb565b61492e565b9050828152602081018484840111156134df57600080fd5b6134ea848285614c05565b509392505050565b60008135905061350181614dc0565b92915050565b600082601f83011261351857600080fd5b813561352884826020860161340a565b91505092915050565b60008135905061354081614dd7565b92915050565b60008135905061355581614dee565b92915050565b60008151905061356a81614dee565b92915050565b600082601f83011261358157600080fd5b8135613591848260208601613476565b91505092915050565b600082601f8301126135ab57600080fd5b81356135bb8482602086016134b4565b91505092915050565b6000813590506135d381614e05565b92915050565b6000602082840312156135eb57600080fd5b60006135f9848285016134f2565b91505092915050565b6000806040838503121561361557600080fd5b6000613623858286016134f2565b9250506020613634858286016134f2565b9150509250929050565b60008060006060848603121561365357600080fd5b6000613661868287016134f2565b9350506020613672868287016134f2565b9250506040613683868287016135c4565b9150509250925092565b600080600080608085870312156136a357600080fd5b60006136b1878288016134f2565b94505060206136c2878288016134f2565b93505060406136d3878288016135c4565b925050606085013567ffffffffffffffff8111156136f057600080fd5b6136fc87828801613570565b91505092959194509250565b6000806040838503121561371b57600080fd5b6000613729858286016134f2565b925050602061373a85828601613531565b9150509250929050565b6000806040838503121561375757600080fd5b6000613765858286016134f2565b9250506020613776858286016135c4565b9150509250929050565b60006020828403121561379257600080fd5b600082013567ffffffffffffffff8111156137ac57600080fd5b6137b884828501613507565b91505092915050565b6000602082840312156137d357600080fd5b60006137e184828501613546565b91505092915050565b6000602082840312156137fc57600080fd5b600061380a8482850161355b565b91505092915050565b60006020828403121561382557600080fd5b600082013567ffffffffffffffff81111561383f57600080fd5b61384b8482850161359a565b91505092915050565b60006020828403121561386657600080fd5b6000613874848285016135c4565b91505092915050565b6000613889838361446b565b60208301905092915050565b61389e81614b91565b82525050565b60006138af82614a10565b6138b98185614a3e565b93506138c4836149eb565b8060005b838110156138f55781516138dc888261387d565b97506138e783614a31565b9250506001810190506138c8565b5085935050505092915050565b61390b81614ba3565b82525050565b600061391c82614a1b565b6139268185614a4f565b9350613936818560208601614c14565b61393f81614daf565b840191505092915050565b600061395582614a26565b61395f8185614a60565b935061396f818560208601614c14565b61397881614daf565b840191505092915050565b600061398e82614a26565b6139988185614a71565b93506139a8818560208601614c14565b80840191505092915050565b600081546139c181614c47565b6139cb8186614a71565b945060018216600081146139e657600181146139f757613a2a565b60ff19831686528186019350613a2a565b613a00856149fb565b60005b83811015613a2257815481890152600182019150602081019050613a03565b838801955050505b50505092915050565b6000613a40601d83614a60565b91507f43616e27742072656d6f766520746865206e756c6c20616464726573730000006000830152602082019050919050565b6000613a80602383614a60565b91507f53616c65206d7573742062652061637469766520746f206d696e74206120436c60008301527f6f776e00000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ae6603283614a60565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613b4c602683614a60565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bb2601c83614a60565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613bf2602e83614a60565b91507f507572636861736520776f756c642065786365656420746865206d617820737560008301527f70706c79206f6620436c6f776e7a0000000000000000000000000000000000006020830152604082019050919050565b6000613c58602483614a60565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cbe601983614a60565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613cfe601f83614a60565b91507f45746865722076616c75652073656e74206973206e6f7420636f7272656374006000830152602082019050919050565b6000613d3e602c83614a60565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613da4602183614a60565b91507f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e0a602d83614a60565b91507f43616e206f6e6c79206d696e74203420746f6b656e732070657220616464726560008301527f737320696e2070726573616c65000000000000000000000000000000000000006020830152604082019050919050565b6000613e70603883614a60565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ed6602a83614a60565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f3c602983614a60565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fa2602083614a60565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613fe2602c83614a60565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614048602083614a60565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614088601a83614a60565b91507f43616e27742061646420746865206e756c6c20616464726573730000000000006000830152602082019050919050565b60006140c8602983614a60565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061412e602f83614a60565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614194601a83614a60565b91507f45746865722076616c7565206973206e6f7420636f72726563740000000000006000830152602082019050919050565b60006141d4602183614a60565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061423a602d83614a60565b91507f596f75206861766520746f2062652077686974656c697374656420746f206d6960008301527f6e7420696e2070726573616c65000000000000000000000000000000000000006020830152604082019050919050565b60006142a0603183614a60565b91507f4d657461646174612061726520616c7265616479206c6f636b656420616e642060008301527f63616e6e6f74206265206368616e6765640000000000000000000000000000006020830152604082019050919050565b6000614306603183614a60565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061436c602483614a60565b91507f5a65726f2061646472657373206973206e6f74206f6e2074686520776869746560008301527f6c697374000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143d2603183614a60565b91507f50726573616c65206d7573742062652061637469766520746f206d696e74206160008301527f20436c6f776e20696e2070726573616c650000000000000000000000000000006020830152604082019050919050565b6000614438602083614a60565b91507f596f7520616c726561647920726573657276656420796f757220746f6b656e736000830152602082019050919050565b61447481614bfb565b82525050565b61448381614bfb565b82525050565b600061449582856139b4565b91506144a18284613983565b91508190509392505050565b60006020820190506144c26000830184613895565b92915050565b60006080820190506144dd6000830187613895565b6144ea6020830186613895565b6144f7604083018561447a565b81810360608301526145098184613911565b905095945050505050565b6000602082019050818103600083015261452e81846138a4565b905092915050565b600060208201905061454b6000830184613902565b92915050565b6000602082019050818103600083015261456b818461394a565b905092915050565b6000602082019050818103600083015261458c81613a33565b9050919050565b600060208201905081810360008301526145ac81613a73565b9050919050565b600060208201905081810360008301526145cc81613ad9565b9050919050565b600060208201905081810360008301526145ec81613b3f565b9050919050565b6000602082019050818103600083015261460c81613ba5565b9050919050565b6000602082019050818103600083015261462c81613be5565b9050919050565b6000602082019050818103600083015261464c81613c4b565b9050919050565b6000602082019050818103600083015261466c81613cb1565b9050919050565b6000602082019050818103600083015261468c81613cf1565b9050919050565b600060208201905081810360008301526146ac81613d31565b9050919050565b600060208201905081810360008301526146cc81613d97565b9050919050565b600060208201905081810360008301526146ec81613dfd565b9050919050565b6000602082019050818103600083015261470c81613e63565b9050919050565b6000602082019050818103600083015261472c81613ec9565b9050919050565b6000602082019050818103600083015261474c81613f2f565b9050919050565b6000602082019050818103600083015261476c81613f95565b9050919050565b6000602082019050818103600083015261478c81613fd5565b9050919050565b600060208201905081810360008301526147ac8161403b565b9050919050565b600060208201905081810360008301526147cc8161407b565b9050919050565b600060208201905081810360008301526147ec816140bb565b9050919050565b6000602082019050818103600083015261480c81614121565b9050919050565b6000602082019050818103600083015261482c81614187565b9050919050565b6000602082019050818103600083015261484c816141c7565b9050919050565b6000602082019050818103600083015261486c8161422d565b9050919050565b6000602082019050818103600083015261488c81614293565b9050919050565b600060208201905081810360008301526148ac816142f9565b9050919050565b600060208201905081810360008301526148cc8161435f565b9050919050565b600060208201905081810360008301526148ec816143c5565b9050919050565b6000602082019050818103600083015261490c8161442b565b9050919050565b6000602082019050614928600083018461447a565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561495557614954614d80565b5b8060405250919050565b600067ffffffffffffffff82111561497a57614979614d80565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149a6576149a5614d80565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156149d6576149d5614d80565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614a8782614bfb565b9150614a9283614bfb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ac757614ac6614cf3565b5b828201905092915050565b6000614add82614bfb565b9150614ae883614bfb565b925082614af857614af7614d22565b5b828204905092915050565b6000614b0e82614bfb565b9150614b1983614bfb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5257614b51614cf3565b5b828202905092915050565b6000614b6882614bfb565b9150614b7383614bfb565b925082821015614b8657614b85614cf3565b5b828203905092915050565b6000614b9c82614bdb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614c32578082015181840152602081019050614c17565b83811115614c41576000848401525b50505050565b60006002820490506001821680614c5f57607f821691505b60208210811415614c7357614c72614d51565b5b50919050565b6000614c8482614bfb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cb757614cb6614cf3565b5b600182019050919050565b6000614ccd82614bfb565b9150614cd883614bfb565b925082614ce857614ce7614d22565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614dc981614b91565b8114614dd457600080fd5b50565b614de081614ba3565b8114614deb57600080fd5b50565b614df781614baf565b8114614e0257600080fd5b50565b614e0e81614bfb565b8114614e1957600080fd5b5056fea2646970667358221220a61d8cbfd72f12288ef4f47a0a41762f041bd4a6405091be6aed7d5cbfcddd7e64736f6c63430008000033

Deployed Bytecode Sourcemap

42229:5398:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42786:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27488:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28433:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29954:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29477:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27136:181;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30844:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44398:91;;;;;;;;;;;;;:::i;:::-;;42468:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43631:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43949:140;;;;;;;;;;;;;:::i;:::-;;42697:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31254:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42738:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43345:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45030:807;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28127:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42387:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27857:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42513:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41273:103;;;;;;;;;;;;;:::i;:::-;;42978:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42306:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40622:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28602:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44308:82;;;;;;;;;;;;;:::i;:::-;;30247:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47457:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42610:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44097:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31510:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43745:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28777:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44660:327;;;;;;;;;;;;;:::i;:::-;;46939:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30613:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42659:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42558:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44497:96;;;;;;;;;;;;;:::i;:::-;;45891:947;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42786:35;;;;;;;;;;;;;:::o;27488:305::-;27590:4;27642:25;27627:40;;;:11;:40;;;;:105;;;;27699:33;27684:48;;;:11;:48;;;;27627:105;:158;;;;27749:36;27773:11;27749:23;:36::i;:::-;27627:158;27607:178;;27488:305;;;:::o;28433:100::-;28487:13;28520:5;28513:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28433:100;:::o;29954:221::-;30030:7;30058:16;30066:7;30058;:16::i;:::-;30050:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30143:15;:24;30159:7;30143:24;;;;;;;;;;;;;;;;;;;;;30136:31;;29954:221;;;:::o;29477:411::-;29558:13;29574:23;29589:7;29574:14;:23::i;:::-;29558:39;;29622:5;29616:11;;:2;:11;;;;29608:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29716:5;29700:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29725:37;29742:5;29749:12;:10;:12::i;:::-;29725:16;:37::i;:::-;29700:62;29678:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29859:21;29868:2;29872:7;29859:8;:21::i;:::-;29477:411;;;:::o;27136:181::-;27180:7;27296:13;;27289:20;;27136:181;:::o;30844:339::-;31039:41;31058:12;:10;:12::i;:::-;31072:7;31039:18;:41::i;:::-;31031:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31147:28;31157:4;31163:2;31167:7;31147:9;:28::i;:::-;30844:339;;;:::o;44398:91::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44470:11:::1;;;;;;;;;;;44469:12;44455:11;;:26;;;;;;;;;;;;;;;;;;44398:91::o:0;42468:38::-;42502:4;42468:38;:::o;43631:106::-;43689:4;43713:10;:16;43724:4;43713:16;;;;;;;;;;;;;;;;;;;;;;;;;43706:23;;43631:106;;;:::o;43949:140::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43997:12:::1;44012:21;43997:36;;44052:10;44044:28;;:37;44073:7;44044:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40913:1;43949:140::o:0;42697:34::-;;;;;;;;;;;;;:::o;31254:185::-;31392:39;31409:4;31415:2;31419:7;31392:39;;;;;;;;;;;;:16;:39::i;:::-;31254:185;;;:::o;42738:41::-;;;;;;;;;;;;;:::o;43345:278::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43435:6:::1;43430:186;43451:9;:16;43447:1;:20;43430:186;;;43521:1;43497:26;;:9;43507:1;43497:12;;;;;;;;;;;;;;;;;;;;;;:26;;;;43489:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43599:5;43572:10;:24;43583:9;43593:1;43583:12;;;;;;;;;;;;;;;;;;;;;;43572:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;43469:3;;;;;:::i;:::-;;;;43430:186;;;;43345:278:::0;:::o;45030:807::-;45094:13;45128:11;;;;;;;;;;;45120:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42502:4;45198:33;45216:14;45198:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:47;;45190:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45358:9;45315:39;45339:14;42352:17;45315:23;;:39;;;;:::i;:::-;:52;;45307:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;42549:2;45422:14;:30;;45414:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45501:20;45535:14;45524:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45501:49;;45567:6;45563:243;45583:14;45579:1;:18;45563:243;;;45619:14;45636:13;:11;:13::i;:::-;45619:30;;42502:4;45668:9;:22;45664:95;;;45711:32;45721:10;45733:9;45711;:32::i;:::-;45664:95;45785:9;45773:6;45780:1;45773:9;;;;;;;;;;;;;;;;;;;;;:21;;;;;45563:243;45599:3;;;;;:::i;:::-;;;;45563:243;;;;45823:6;45816:13;;;45030:807;;;:::o;28127:239::-;28199:7;28219:13;28235:7;:16;28243:7;28235:16;;;;;;;;;;;;;;;;;;;;;28219:32;;28287:1;28270:19;;:5;:19;;;;28262:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28353:5;28346:12;;;28127:239;;;:::o;42387:61::-;42431:17;42387:61;:::o;27857:208::-;27929:7;27974:1;27957:19;;:5;:19;;;;27949:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28041:9;:16;28051:5;28041:16;;;;;;;;;;;;;;;;28034:23;;27857:208;;;:::o;42513:38::-;42549:2;42513:38;:::o;41273:103::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41338:30:::1;41365:1;41338:18;:30::i;:::-;41273:103::o:0;42978:359::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43063:6:::1;43058:272;43079:9;:16;43075:1;:20;43058:272;;;43147:1;43123:26;;:9;43133:1;43123:12;;;;;;;;;;;;;;;;;;;;;;:26;;;;43115:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43230:4;43203:10;:24;43214:9;43224:1;43214:12;;;;;;;;;;;;;;;;;;;;;;43203:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;43280:1;43247:16;:30;43264:9;43274:1;43264:12;;;;;;;;;;;;;;;;;;;;;;43247:30;;;;;;;;;;;;;;;;:34;:71;;43317:1;43247:71;;;43284:16;:30;43301:9;43311:1;43301:12;;;;;;;;;;;;;;;;;;;;;;43284:30;;;;;;;;;;;;;;;;43247:71;;43097:3;;;;;:::i;:::-;;;;43058:272;;;;42978:359:::0;:::o;42306:63::-;42352:17;42306:63;:::o;40622:87::-;40668:7;40695:6;;;;;;;;;;;40688:13;;40622:87;:::o;28602:104::-;28658:13;28691:7;28684:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28602:104;:::o;44308:82::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44378:4:::1;44360:15;;:22;;;;;;;;;;;;;;;;;;44308:82::o:0;30247:295::-;30362:12;:10;:12::i;:::-;30350:24;;:8;:24;;;;30342:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30462:8;30417:18;:32;30436:12;:10;:12::i;:::-;30417:32;;;;;;;;;;;;;;;:42;30450:8;30417:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30515:8;30486:48;;30501:12;:10;:12::i;:::-;30486:48;;;30525:8;30486:48;;;;;;:::i;:::-;;;;;;;;30247:295;;:::o;47457:167::-;47513:4;47553:1;47534:9;:16;47544:5;47534:16;;;;;;;;;;;;;;;;:20;47530:64;;;47578:4;47571:11;;;;47530:64;47611:5;47604:12;;47457:167;;;;:::o;42610:40::-;42648:2;42610:40;:::o;44097:203::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44201:5:::1;44182:24;;:15;;;;;;;;;;;:24;;;44174:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;44273:19;44284:7;44273:10;:19::i;:::-;44097:203:::0;:::o;31510:328::-;31685:41;31704:12;:10;:12::i;:::-;31718:7;31685:18;:41::i;:::-;31677:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31791:39;31805:4;31811:2;31815:7;31824:5;31791:13;:39::i;:::-;31510:328;;;;:::o;43745:196::-;43807:4;43848:1;43832:18;;:4;:18;;;;43824:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43911:16;:22;43928:4;43911:22;;;;;;;;;;;;;;;;43904:29;;43745:196;;;:::o;28777:291::-;28850:13;28884:16;28892:7;28884;:16::i;:::-;28876:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28997:1;28978:8;28972:22;;;;;:::i;:::-;;;:26;:88;;;;;;;;;;;;;;;;;29025:8;29035:18;:7;:16;:18::i;:::-;29008:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28972:88;28965:95;;28777:291;;;:::o;44660:327::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44740:5:::1;44715:30;;:21;;;;;;;;;;;:30;;;44707:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44800:6;44795:146;42648:2;44812:1;:18;44795:146;;;44852:14;44869:13;:11;:13::i;:::-;44852:30;;44897:32;44907:10;44919:9;44897;:32::i;:::-;44795:146;44832:3;;;;;:::i;:::-;;;;44795:146;;;;44975:4;44951:21;;:28;;;;;;;;;;;;;;;;;;44660:327::o:0;46939:397::-;47001:13;47027:20;47061:9;:16;47071:5;47061:16;;;;;;;;;;;;;;;;47050:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47027:51;;47089:12;47121:6;47116:189;47137:13;;47133:1;:17;47116:189;;;47190:5;47176:19;;:7;:10;47184:1;47176:10;;;;;;;;;;;;;;;;;;;;;:19;;;47172:122;;;47234:1;47216:6;47223:7;47216:15;;;;;;;;;;;;;;;;;;;;;:19;;;;;47264:14;47276:1;47264:7;:11;;:14;;;;:::i;:::-;47254:24;;47172:122;47152:3;;;;;:::i;:::-;;;;47116:189;;;;47322:6;47315:13;;;;46939:397;;;:::o;30613:164::-;30710:4;30734:18;:25;30753:5;30734:25;;;;;;;;;;;;;;;:35;30760:8;30734:35;;;;;;;;;;;;;;;;;;;;;;;;;30727:42;;30613:164;;;;:::o;42659:31::-;;;;;;;;;;;;;:::o;41531:201::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41640:1:::1;41620:22;;:8;:22;;;;41612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41696:28;41715:8;41696:18;:28::i;:::-;41531:201:::0;:::o;42558:45::-;42602:1;42558:45;:::o;44497:96::-;40853:12;:10;:12::i;:::-;40842:23;;:7;:5;:7::i;:::-;:23;;;40834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44571:14:::1;;;;;;;;;;;44570:15;44553:14;;:32;;;;;;;;;;;;;;;;;;44497:96::o:0;45891:947::-;45962:13;45996:14;;;;;;;;;;;45988:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46124:9;46083:37;46105:14;42431:17;46083:21;;:37;;;;:::i;:::-;:50;;46075:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;46183:10;:22;46194:10;46183:22;;;;;;;;;;;;;;;;;;;;;;;;;46175:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;42602:1;46274:48;46307:14;46274:16;:28;46291:10;46274:28;;;;;;;;;;;;;;;;:32;;:48;;;;:::i;:::-;:72;;46266:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;46407:20;46441:14;46430:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46407:49;;46474:6;46469:248;46490:14;46486:1;:18;46469:248;;;46526:14;46543:13;:11;:13::i;:::-;46526:30;;42502:4;46575:13;:11;:13::i;:::-;:26;46571:99;;;46622:32;46632:10;46644:9;46622;:32::i;:::-;46571:99;46696:9;46684:6;46691:1;46684:9;;;;;;;;;;;;;;;;;;;;;:21;;;;;46469:248;46506:3;;;;;:::i;:::-;;;;46469:248;;;;46758:48;46791:14;46758:16;:28;46775:10;46758:28;;;;;;;;;;;;;;;;:32;;:48;;;;:::i;:::-;46727:16;:28;46744:10;46727:28;;;;;;;;;;;;;;;:79;;;;46824:6;46817:13;;;45891:947;;;:::o;10357:157::-;10442:4;10481:25;10466:40;;;:11;:40;;;;10459:47;;10357:157;;;:::o;33348:127::-;33413:4;33465:1;33437:30;;:7;:16;33445:7;33437:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33430:37;;33348:127;;;:::o;602:98::-;655:7;682:10;675:17;;602:98;:::o;37433:174::-;37535:2;37508:15;:24;37524:7;37508:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37591:7;37587:2;37553:46;;37562:23;37577:7;37562:14;:23::i;:::-;37553:46;;;;;;;;;;;;37433:174;;:::o;33642:348::-;33735:4;33760:16;33768:7;33760;:16::i;:::-;33752:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33836:13;33852:23;33867:7;33852:14;:23::i;:::-;33836:39;;33905:5;33894:16;;:7;:16;;;:51;;;;33938:7;33914:31;;:20;33926:7;33914:11;:20::i;:::-;:31;;;33894:51;:87;;;;33949:32;33966:5;33973:7;33949:16;:32::i;:::-;33894:87;33886:96;;;33642:348;;;;:::o;36699:616::-;36858:4;36831:31;;:23;36846:7;36831:14;:23::i;:::-;:31;;;36823:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36941:1;36927:16;;:2;:16;;;;36919:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36997:39;37018:4;37024:2;37028:7;36997:20;:39::i;:::-;37101:29;37118:1;37122:7;37101:8;:29::i;:::-;37161:22;37181:1;37161:9;:15;37171:4;37161:15;;;;;;;;;;;;;;;;:19;;:22;;;;:::i;:::-;37143:9;:15;37153:4;37143:15;;;;;;;;;;;;;;;:40;;;;37210:20;37228:1;37210:9;:13;37220:2;37210:13;;;;;;;;;;;;;;;;:17;;:20;;;;:::i;:::-;37194:9;:13;37204:2;37194:13;;;;;;;;;;;;;;;:36;;;;37260:2;37241:7;:16;37249:7;37241:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37299:7;37295:2;37280:27;;37289:4;37280:27;;;;;;;;;;;;36699:616;;;:::o;13249:98::-;13307:7;13338:1;13334;:5;;;;:::i;:::-;13327:12;;13249:98;;;;:::o;13987:::-;14045:7;14076:1;14072;:5;;;;:::i;:::-;14065:12;;13987:98;;;;:::o;34332:110::-;34408:26;34418:2;34422:7;34408:26;;;;;;;;;;;;:9;:26::i;:::-;34332:110;;:::o;41892:191::-;41966:16;41985:6;;;;;;;;;;;41966:25;;42011:8;42002:6;;:17;;;;;;;;;;;;;;;;;;42066:8;42035:40;;42056:8;42035:40;;;;;;;;;;;;41892:191;;:::o;27325:91::-;27400:8;27389;:19;;;;;;;;;;;;:::i;:::-;;27325:91;:::o;32720:315::-;32877:28;32887:4;32893:2;32897:7;32877:9;:28::i;:::-;32924:48;32947:4;32953:2;32957:7;32966:5;32924:22;:48::i;:::-;32916:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32720:315;;;;:::o;17667:723::-;17723:13;17953:1;17944:5;:10;17940:53;;;17971:10;;;;;;;;;;;;;;;;;;;;;17940:53;18003:12;18018:5;18003:20;;18034:14;18059:78;18074:1;18066:4;:9;18059:78;;18092:8;;;;;:::i;:::-;;;;18123:2;18115:10;;;;;:::i;:::-;;;18059:78;;;18147:19;18179:6;18169:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18147:39;;18197:154;18213:1;18204:5;:10;18197:154;;18241:1;18231:11;;;;;:::i;:::-;;;18308:2;18300:5;:10;;;;:::i;:::-;18287:2;:24;;;;:::i;:::-;18274:39;;18257:6;18264;18257:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18337:2;18328:11;;;;;:::i;:::-;;;18197:154;;;18375:6;18361:21;;;;;17667:723;;;;:::o;39543:126::-;;;;:::o;13630:98::-;13688:7;13719:1;13715;:5;;;;:::i;:::-;13708:12;;13630:98;;;;:::o;34669:321::-;34799:18;34805:2;34809:7;34799:5;:18::i;:::-;34850:54;34881:1;34885:2;34889:7;34898:5;34850:22;:54::i;:::-;34828:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34669:321;;;:::o;38172:799::-;38327:4;38348:15;:2;:13;;;:15::i;:::-;38344:620;;;38400:2;38384:36;;;38421:12;:10;:12::i;:::-;38435:4;38441:7;38450:5;38384:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38380:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38643:1;38626:6;:13;:18;38622:272;;;38669:60;;;;;;;;;;:::i;:::-;;;;;;;;38622:272;38844:6;38838:13;38829:6;38825:2;38821:15;38814:38;38380:529;38517:41;;;38507:51;;;:6;:51;;;;38500:58;;;;;38344:620;38948:4;38941:11;;38172:799;;;;;;;:::o;35326:447::-;35420:1;35406:16;;:2;:16;;;;35398:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35479:16;35487:7;35479;:16::i;:::-;35478:17;35470:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35541:45;35570:1;35574:2;35578:7;35541:20;:45::i;:::-;35615:20;35633:1;35615:9;:13;35625:2;35615:13;;;;;;;;;;;;;;;;:17;;:20;;;;:::i;:::-;35599:9;:13;35609:2;35599:13;;;;;;;;;;;;;;;:36;;;;35665:2;35646:7;:16;35654:7;35646:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35694:20;35712:1;35694:13;;:17;;:20;;;;:::i;:::-;35678:13;:36;;;;35757:7;35753:2;35732:33;;35749:1;35732:33;;;;;;;;;;;;35326:447;;:::o;1524:387::-;1584:4;1792:12;1859:7;1847:20;1839:28;;1902:1;1895:4;:8;1888:15;;;1524:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:260::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6429:1;6454:52;6498:7;6489:6;6478:9;6474:22;6454:52;:::i;:::-;6444:62;;6400:116;6328:195;;;;:::o;6529:282::-;;6647:2;6635:9;6626:7;6622:23;6618:32;6615:2;;;6663:1;6660;6653:12;6615:2;6706:1;6731:63;6786:7;6777:6;6766:9;6762:22;6731:63;:::i;:::-;6721:73;;6677:127;6605:206;;;;:::o;6817:375::-;;6935:2;6923:9;6914:7;6910:23;6906:32;6903:2;;;6951:1;6948;6941:12;6903:2;7022:1;7011:9;7007:17;6994:31;7052:18;7044:6;7041:30;7038:2;;;7084:1;7081;7074:12;7038:2;7112:63;7167:7;7158:6;7147:9;7143:22;7112:63;:::i;:::-;7102:73;;6965:220;6893:299;;;;:::o;7198:262::-;;7306:2;7294:9;7285:7;7281:23;7277:32;7274:2;;;7322:1;7319;7312:12;7274:2;7365:1;7390:53;7435:7;7426:6;7415:9;7411:22;7390:53;:::i;:::-;7380:63;;7336:117;7264:196;;;;:::o;7466:179::-;;7556:46;7598:3;7590:6;7556:46;:::i;:::-;7634:4;7629:3;7625:14;7611:28;;7546:99;;;;:::o;7651:118::-;7738:24;7756:5;7738:24;:::i;:::-;7733:3;7726:37;7716:53;;:::o;7805:732::-;;7953:54;8001:5;7953:54;:::i;:::-;8023:86;8102:6;8097:3;8023:86;:::i;:::-;8016:93;;8133:56;8183:5;8133:56;:::i;:::-;8212:7;8243:1;8228:284;8253:6;8250:1;8247:13;8228:284;;;8329:6;8323:13;8356:63;8415:3;8400:13;8356:63;:::i;:::-;8349:70;;8442:60;8495:6;8442:60;:::i;:::-;8432:70;;8288:224;8275:1;8272;8268:9;8263:14;;8228:284;;;8232:14;8528:3;8521:10;;7929:608;;;;;;;:::o;8543:109::-;8624:21;8639:5;8624:21;:::i;:::-;8619:3;8612:34;8602:50;;:::o;8658:360::-;;8772:38;8804:5;8772:38;:::i;:::-;8826:70;8889:6;8884:3;8826:70;:::i;:::-;8819:77;;8905:52;8950:6;8945:3;8938:4;8931:5;8927:16;8905:52;:::i;:::-;8982:29;9004:6;8982:29;:::i;:::-;8977:3;8973:39;8966:46;;8748:270;;;;;:::o;9024:364::-;;9140:39;9173:5;9140:39;:::i;:::-;9195:71;9259:6;9254:3;9195:71;:::i;:::-;9188:78;;9275:52;9320:6;9315:3;9308:4;9301:5;9297:16;9275:52;:::i;:::-;9352:29;9374:6;9352:29;:::i;:::-;9347:3;9343:39;9336:46;;9116:272;;;;;:::o;9394:377::-;;9528:39;9561:5;9528:39;:::i;:::-;9583:89;9665:6;9660:3;9583:89;:::i;:::-;9576:96;;9681:52;9726:6;9721:3;9714:4;9707:5;9703:16;9681:52;:::i;:::-;9758:6;9753:3;9749:16;9742:23;;9504:267;;;;;:::o;9801:845::-;;9941:5;9935:12;9970:36;9996:9;9970:36;:::i;:::-;10022:89;10104:6;10099:3;10022:89;:::i;:::-;10015:96;;10142:1;10131:9;10127:17;10158:1;10153:137;;;;10304:1;10299:341;;;;10120:520;;10153:137;10237:4;10233:9;10222;10218:25;10213:3;10206:38;10273:6;10268:3;10264:16;10257:23;;10153:137;;10299:341;10366:38;10398:5;10366:38;:::i;:::-;10426:1;10440:154;10454:6;10451:1;10448:13;10440:154;;;10528:7;10522:14;10518:1;10513:3;10509:11;10502:35;10578:1;10569:7;10565:15;10554:26;;10476:4;10473:1;10469:12;10464:17;;10440:154;;;10623:6;10618:3;10614:16;10607:23;;10306:334;;10120:520;;9908:738;;;;;;:::o;10652:327::-;;10815:67;10879:2;10874:3;10815:67;:::i;:::-;10808:74;;10912:31;10908:1;10903:3;10899:11;10892:52;10970:2;10965:3;10961:12;10954:19;;10798:181;;;:::o;10985:367::-;;11148:67;11212:2;11207:3;11148:67;:::i;:::-;11141:74;;11245:34;11241:1;11236:3;11232:11;11225:55;11311:5;11306:2;11301:3;11297:12;11290:27;11343:2;11338:3;11334:12;11327:19;;11131:221;;;:::o;11358:382::-;;11521:67;11585:2;11580:3;11521:67;:::i;:::-;11514:74;;11618:34;11614:1;11609:3;11605:11;11598:55;11684:20;11679:2;11674:3;11670:12;11663:42;11731:2;11726:3;11722:12;11715:19;;11504:236;;;:::o;11746:370::-;;11909:67;11973:2;11968:3;11909:67;:::i;:::-;11902:74;;12006:34;12002:1;11997:3;11993:11;11986:55;12072:8;12067:2;12062:3;12058:12;12051:30;12107:2;12102:3;12098:12;12091:19;;11892:224;;;:::o;12122:326::-;;12285:67;12349:2;12344:3;12285:67;:::i;:::-;12278:74;;12382:30;12378:1;12373:3;12369:11;12362:51;12439:2;12434:3;12430:12;12423:19;;12268:180;;;:::o;12454:378::-;;12617:67;12681:2;12676:3;12617:67;:::i;:::-;12610:74;;12714:34;12710:1;12705:3;12701:11;12694:55;12780:16;12775:2;12770:3;12766:12;12759:38;12823:2;12818:3;12814:12;12807:19;;12600:232;;;:::o;12838:368::-;;13001:67;13065:2;13060:3;13001:67;:::i;:::-;12994:74;;13098:34;13094:1;13089:3;13085:11;13078:55;13164:6;13159:2;13154:3;13150:12;13143:28;13197:2;13192:3;13188:12;13181:19;;12984:222;;;:::o;13212:323::-;;13375:67;13439:2;13434:3;13375:67;:::i;:::-;13368:74;;13472:27;13468:1;13463:3;13459:11;13452:48;13526:2;13521:3;13517:12;13510:19;;13358:177;;;:::o;13541:329::-;;13704:67;13768:2;13763:3;13704:67;:::i;:::-;13697:74;;13801:33;13797:1;13792:3;13788:11;13781:54;13861:2;13856:3;13852:12;13845:19;;13687:183;;;:::o;13876:376::-;;14039:67;14103:2;14098:3;14039:67;:::i;:::-;14032:74;;14136:34;14132:1;14127:3;14123:11;14116:55;14202:14;14197:2;14192:3;14188:12;14181:36;14243:2;14238:3;14234:12;14227:19;;14022:230;;;:::o;14258:365::-;;14421:67;14485:2;14480:3;14421:67;:::i;:::-;14414:74;;14518:34;14514:1;14509:3;14505:11;14498:55;14584:3;14579:2;14574:3;14570:12;14563:25;14614:2;14609:3;14605:12;14598:19;;14404:219;;;:::o;14629:377::-;;14792:67;14856:2;14851:3;14792:67;:::i;:::-;14785:74;;14889:34;14885:1;14880:3;14876:11;14869:55;14955:15;14950:2;14945:3;14941:12;14934:37;14997:2;14992:3;14988:12;14981:19;;14775:231;;;:::o;15012:388::-;;15175:67;15239:2;15234:3;15175:67;:::i;:::-;15168:74;;15272:34;15268:1;15263:3;15259:11;15252:55;15338:26;15333:2;15328:3;15324:12;15317:48;15391:2;15386:3;15382:12;15375:19;;15158:242;;;:::o;15406:374::-;;15569:67;15633:2;15628:3;15569:67;:::i;:::-;15562:74;;15666:34;15662:1;15657:3;15653:11;15646:55;15732:12;15727:2;15722:3;15718:12;15711:34;15771:2;15766:3;15762:12;15755:19;;15552:228;;;:::o;15786:373::-;;15949:67;16013:2;16008:3;15949:67;:::i;:::-;15942:74;;16046:34;16042:1;16037:3;16033:11;16026:55;16112:11;16107:2;16102:3;16098:12;16091:33;16150:2;16145:3;16141:12;16134:19;;15932:227;;;:::o;16165:330::-;;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16425:34;16421:1;16416:3;16412:11;16405:55;16486:2;16481:3;16477:12;16470:19;;16311:184;;;:::o;16501:376::-;;16664:67;16728:2;16723:3;16664:67;:::i;:::-;16657:74;;16761:34;16757:1;16752:3;16748:11;16741:55;16827:14;16822:2;16817:3;16813:12;16806:36;16868:2;16863:3;16859:12;16852:19;;16647:230;;;:::o;16883:330::-;;17046:67;17110:2;17105:3;17046:67;:::i;:::-;17039:74;;17143:34;17139:1;17134:3;17130:11;17123:55;17204:2;17199:3;17195:12;17188:19;;17029:184;;;:::o;17219:324::-;;17382:67;17446:2;17441:3;17382:67;:::i;:::-;17375:74;;17479:28;17475:1;17470:3;17466:11;17459:49;17534:2;17529:3;17525:12;17518:19;;17365:178;;;:::o;17549:373::-;;17712:67;17776:2;17771:3;17712:67;:::i;:::-;17705:74;;17809:34;17805:1;17800:3;17796:11;17789:55;17875:11;17870:2;17865:3;17861:12;17854:33;17913:2;17908:3;17904:12;17897:19;;17695:227;;;:::o;17928:379::-;;18091:67;18155:2;18150:3;18091:67;:::i;:::-;18084:74;;18188:34;18184:1;18179:3;18175:11;18168:55;18254:17;18249:2;18244:3;18240:12;18233:39;18298:2;18293:3;18289:12;18282:19;;18074:233;;;:::o;18313:324::-;;18476:67;18540:2;18535:3;18476:67;:::i;:::-;18469:74;;18573:28;18569:1;18564:3;18560:11;18553:49;18628:2;18623:3;18619:12;18612:19;;18459:178;;;:::o;18643:365::-;;18806:67;18870:2;18865:3;18806:67;:::i;:::-;18799:74;;18903:34;18899:1;18894:3;18890:11;18883:55;18969:3;18964:2;18959:3;18955:12;18948:25;18999:2;18994:3;18990:12;18983:19;;18789:219;;;:::o;19014:377::-;;19177:67;19241:2;19236:3;19177:67;:::i;:::-;19170:74;;19274:34;19270:1;19265:3;19261:11;19254:55;19340:15;19335:2;19330:3;19326:12;19319:37;19382:2;19377:3;19373:12;19366:19;;19160:231;;;:::o;19397:381::-;;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19657:34;19653:1;19648:3;19644:11;19637:55;19723:19;19718:2;19713:3;19709:12;19702:41;19769:2;19764:3;19760:12;19753:19;;19543:235;;;:::o;19784:381::-;;19947:67;20011:2;20006:3;19947:67;:::i;:::-;19940:74;;20044:34;20040:1;20035:3;20031:11;20024:55;20110:19;20105:2;20100:3;20096:12;20089:41;20156:2;20151:3;20147:12;20140:19;;19930:235;;;:::o;20171:368::-;;20334:67;20398:2;20393:3;20334:67;:::i;:::-;20327:74;;20431:34;20427:1;20422:3;20418:11;20411:55;20497:6;20492:2;20487:3;20483:12;20476:28;20530:2;20525:3;20521:12;20514:19;;20317:222;;;:::o;20545:381::-;;20708:67;20772:2;20767:3;20708:67;:::i;:::-;20701:74;;20805:34;20801:1;20796:3;20792:11;20785:55;20871:19;20866:2;20861:3;20857:12;20850:41;20917:2;20912:3;20908:12;20901:19;;20691:235;;;:::o;20932:330::-;;21095:67;21159:2;21154:3;21095:67;:::i;:::-;21088:74;;21192:34;21188:1;21183:3;21179:11;21172:55;21253:2;21248:3;21244:12;21237:19;;21078:184;;;:::o;21268:108::-;21345:24;21363:5;21345:24;:::i;:::-;21340:3;21333:37;21323:53;;:::o;21382:118::-;21469:24;21487:5;21469:24;:::i;:::-;21464:3;21457:37;21447:53;;:::o;21506:429::-;;21705:92;21793:3;21784:6;21705:92;:::i;:::-;21698:99;;21814:95;21905:3;21896:6;21814:95;:::i;:::-;21807:102;;21926:3;21919:10;;21687:248;;;;;:::o;21941:222::-;;22072:2;22061:9;22057:18;22049:26;;22085:71;22153:1;22142:9;22138:17;22129:6;22085:71;:::i;:::-;22039:124;;;;:::o;22169:640::-;;22402:3;22391:9;22387:19;22379:27;;22416:71;22484:1;22473:9;22469:17;22460:6;22416:71;:::i;:::-;22497:72;22565:2;22554:9;22550:18;22541:6;22497:72;:::i;:::-;22579;22647:2;22636:9;22632:18;22623:6;22579:72;:::i;:::-;22698:9;22692:4;22688:20;22683:2;22672:9;22668:18;22661:48;22726:76;22797:4;22788:6;22726:76;:::i;:::-;22718:84;;22369:440;;;;;;;:::o;22815:373::-;;22996:2;22985:9;22981:18;22973:26;;23045:9;23039:4;23035:20;23031:1;23020:9;23016:17;23009:47;23073:108;23176:4;23167:6;23073:108;:::i;:::-;23065:116;;22963:225;;;;:::o;23194:210::-;;23319:2;23308:9;23304:18;23296:26;;23332:65;23394:1;23383:9;23379:17;23370:6;23332:65;:::i;:::-;23286:118;;;;:::o;23410:313::-;;23561:2;23550:9;23546:18;23538:26;;23610:9;23604:4;23600:20;23596:1;23585:9;23581:17;23574:47;23638:78;23711:4;23702:6;23638:78;:::i;:::-;23630:86;;23528:195;;;;:::o;23729:419::-;;23933:2;23922:9;23918:18;23910:26;;23982:9;23976:4;23972:20;23968:1;23957:9;23953:17;23946:47;24010:131;24136:4;24010:131;:::i;:::-;24002:139;;23900:248;;;:::o;24154:419::-;;24358:2;24347:9;24343:18;24335:26;;24407:9;24401:4;24397:20;24393:1;24382:9;24378:17;24371:47;24435:131;24561:4;24435:131;:::i;:::-;24427:139;;24325:248;;;:::o;24579:419::-;;24783:2;24772:9;24768:18;24760:26;;24832:9;24826:4;24822:20;24818:1;24807:9;24803:17;24796:47;24860:131;24986:4;24860:131;:::i;:::-;24852:139;;24750:248;;;:::o;25004:419::-;;25208:2;25197:9;25193:18;25185:26;;25257:9;25251:4;25247:20;25243:1;25232:9;25228:17;25221:47;25285:131;25411:4;25285:131;:::i;:::-;25277:139;;25175:248;;;:::o;25429:419::-;;25633:2;25622:9;25618:18;25610:26;;25682:9;25676:4;25672:20;25668:1;25657:9;25653:17;25646:47;25710:131;25836:4;25710:131;:::i;:::-;25702:139;;25600:248;;;:::o;25854:419::-;;26058:2;26047:9;26043:18;26035:26;;26107:9;26101:4;26097:20;26093:1;26082:9;26078:17;26071:47;26135:131;26261:4;26135:131;:::i;:::-;26127:139;;26025:248;;;:::o;26279:419::-;;26483:2;26472:9;26468:18;26460:26;;26532:9;26526:4;26522:20;26518:1;26507:9;26503:17;26496:47;26560:131;26686:4;26560:131;:::i;:::-;26552:139;;26450:248;;;:::o;26704:419::-;;26908:2;26897:9;26893:18;26885:26;;26957:9;26951:4;26947:20;26943:1;26932:9;26928:17;26921:47;26985:131;27111:4;26985:131;:::i;:::-;26977:139;;26875:248;;;:::o;27129:419::-;;27333:2;27322:9;27318:18;27310:26;;27382:9;27376:4;27372:20;27368:1;27357:9;27353:17;27346:47;27410:131;27536:4;27410:131;:::i;:::-;27402:139;;27300:248;;;:::o;27554:419::-;;27758:2;27747:9;27743:18;27735:26;;27807:9;27801:4;27797:20;27793:1;27782:9;27778:17;27771:47;27835:131;27961:4;27835:131;:::i;:::-;27827:139;;27725:248;;;:::o;27979:419::-;;28183:2;28172:9;28168:18;28160:26;;28232:9;28226:4;28222:20;28218:1;28207:9;28203:17;28196:47;28260:131;28386:4;28260:131;:::i;:::-;28252:139;;28150:248;;;:::o;28404:419::-;;28608:2;28597:9;28593:18;28585:26;;28657:9;28651:4;28647:20;28643:1;28632:9;28628:17;28621:47;28685:131;28811:4;28685:131;:::i;:::-;28677:139;;28575:248;;;:::o;28829:419::-;;29033:2;29022:9;29018:18;29010:26;;29082:9;29076:4;29072:20;29068:1;29057:9;29053:17;29046:47;29110:131;29236:4;29110:131;:::i;:::-;29102:139;;29000:248;;;:::o;29254:419::-;;29458:2;29447:9;29443:18;29435:26;;29507:9;29501:4;29497:20;29493:1;29482:9;29478:17;29471:47;29535:131;29661:4;29535:131;:::i;:::-;29527:139;;29425:248;;;:::o;29679:419::-;;29883:2;29872:9;29868:18;29860:26;;29932:9;29926:4;29922:20;29918:1;29907:9;29903:17;29896:47;29960:131;30086:4;29960:131;:::i;:::-;29952:139;;29850:248;;;:::o;30104:419::-;;30308:2;30297:9;30293:18;30285:26;;30357:9;30351:4;30347:20;30343:1;30332:9;30328:17;30321:47;30385:131;30511:4;30385:131;:::i;:::-;30377:139;;30275:248;;;:::o;30529:419::-;;30733:2;30722:9;30718:18;30710:26;;30782:9;30776:4;30772:20;30768:1;30757:9;30753:17;30746:47;30810:131;30936:4;30810:131;:::i;:::-;30802:139;;30700:248;;;:::o;30954:419::-;;31158:2;31147:9;31143:18;31135:26;;31207:9;31201:4;31197:20;31193:1;31182:9;31178:17;31171:47;31235:131;31361:4;31235:131;:::i;:::-;31227:139;;31125:248;;;:::o;31379:419::-;;31583:2;31572:9;31568:18;31560:26;;31632:9;31626:4;31622:20;31618:1;31607:9;31603:17;31596:47;31660:131;31786:4;31660:131;:::i;:::-;31652:139;;31550:248;;;:::o;31804:419::-;;32008:2;31997:9;31993:18;31985:26;;32057:9;32051:4;32047:20;32043:1;32032:9;32028:17;32021:47;32085:131;32211:4;32085:131;:::i;:::-;32077:139;;31975:248;;;:::o;32229:419::-;;32433:2;32422:9;32418:18;32410:26;;32482:9;32476:4;32472:20;32468:1;32457:9;32453:17;32446:47;32510:131;32636:4;32510:131;:::i;:::-;32502:139;;32400:248;;;:::o;32654:419::-;;32858:2;32847:9;32843:18;32835:26;;32907:9;32901:4;32897:20;32893:1;32882:9;32878:17;32871:47;32935:131;33061:4;32935:131;:::i;:::-;32927:139;;32825:248;;;:::o;33079:419::-;;33283:2;33272:9;33268:18;33260:26;;33332:9;33326:4;33322:20;33318:1;33307:9;33303:17;33296:47;33360:131;33486:4;33360:131;:::i;:::-;33352:139;;33250:248;;;:::o;33504:419::-;;33708:2;33697:9;33693:18;33685:26;;33757:9;33751:4;33747:20;33743:1;33732:9;33728:17;33721:47;33785:131;33911:4;33785:131;:::i;:::-;33777:139;;33675:248;;;:::o;33929:419::-;;34133:2;34122:9;34118:18;34110:26;;34182:9;34176:4;34172:20;34168:1;34157:9;34153:17;34146:47;34210:131;34336:4;34210:131;:::i;:::-;34202:139;;34100:248;;;:::o;34354:419::-;;34558:2;34547:9;34543:18;34535:26;;34607:9;34601:4;34597:20;34593:1;34582:9;34578:17;34571:47;34635:131;34761:4;34635:131;:::i;:::-;34627:139;;34525:248;;;:::o;34779:419::-;;34983:2;34972:9;34968:18;34960:26;;35032:9;35026:4;35022:20;35018:1;35007:9;35003:17;34996:47;35060:131;35186:4;35060:131;:::i;:::-;35052:139;;34950:248;;;:::o;35204:419::-;;35408:2;35397:9;35393:18;35385:26;;35457:9;35451:4;35447:20;35443:1;35432:9;35428:17;35421:47;35485:131;35611:4;35485:131;:::i;:::-;35477:139;;35375:248;;;:::o;35629:419::-;;35833:2;35822:9;35818:18;35810:26;;35882:9;35876:4;35872:20;35868:1;35857:9;35853:17;35846:47;35910:131;36036:4;35910:131;:::i;:::-;35902:139;;35800:248;;;:::o;36054:222::-;;36185:2;36174:9;36170:18;36162:26;;36198:71;36266:1;36255:9;36251:17;36242:6;36198:71;:::i;:::-;36152:124;;;;:::o;36282:283::-;;36348:2;36342:9;36332:19;;36390:4;36382:6;36378:17;36497:6;36485:10;36482:22;36461:18;36449:10;36446:34;36443:62;36440:2;;;36508:18;;:::i;:::-;36440:2;36548:10;36544:2;36537:22;36322:243;;;;:::o;36571:311::-;;36738:18;36730:6;36727:30;36724:2;;;36760:18;;:::i;:::-;36724:2;36810:4;36802:6;36798:17;36790:25;;36870:4;36864;36860:15;36852:23;;36653:229;;;:::o;36888:331::-;;37039:18;37031:6;37028:30;37025:2;;;37061:18;;:::i;:::-;37025:2;37146:4;37142:9;37135:4;37127:6;37123:17;37119:33;37111:41;;37207:4;37201;37197:15;37189:23;;36954:265;;;:::o;37225:332::-;;37377:18;37369:6;37366:30;37363:2;;;37399:18;;:::i;:::-;37363:2;37484:4;37480:9;37473:4;37465:6;37461:17;37457:33;37449:41;;37545:4;37539;37535:15;37527:23;;37292:265;;;:::o;37563:132::-;;37653:3;37645:11;;37683:4;37678:3;37674:14;37666:22;;37635:60;;;:::o;37701:141::-;;37773:3;37765:11;;37796:3;37793:1;37786:14;37830:4;37827:1;37817:18;37809:26;;37755:87;;;:::o;37848:114::-;;37949:5;37943:12;37933:22;;37922:40;;;:::o;37968:98::-;;38053:5;38047:12;38037:22;;38026:40;;;:::o;38072:99::-;;38158:5;38152:12;38142:22;;38131:40;;;:::o;38177:113::-;;38279:4;38274:3;38270:14;38262:22;;38252:38;;;:::o;38296:184::-;;38429:6;38424:3;38417:19;38469:4;38464:3;38460:14;38445:29;;38407:73;;;;:::o;38486:168::-;;38603:6;38598:3;38591:19;38643:4;38638:3;38634:14;38619:29;;38581:73;;;;:::o;38660:169::-;;38778:6;38773:3;38766:19;38818:4;38813:3;38809:14;38794:29;;38756:73;;;;:::o;38835:148::-;;38974:3;38959:18;;38949:34;;;;:::o;38989:305::-;;39048:20;39066:1;39048:20;:::i;:::-;39043:25;;39082:20;39100:1;39082:20;:::i;:::-;39077:25;;39236:1;39168:66;39164:74;39161:1;39158:81;39155:2;;;39242:18;;:::i;:::-;39155:2;39286:1;39283;39279:9;39272:16;;39033:261;;;;:::o;39300:185::-;;39357:20;39375:1;39357:20;:::i;:::-;39352:25;;39391:20;39409:1;39391:20;:::i;:::-;39386:25;;39430:1;39420:2;;39435:18;;:::i;:::-;39420:2;39477:1;39474;39470:9;39465:14;;39342:143;;;;:::o;39491:348::-;;39554:20;39572:1;39554:20;:::i;:::-;39549:25;;39588:20;39606:1;39588:20;:::i;:::-;39583:25;;39776:1;39708:66;39704:74;39701:1;39698:81;39693:1;39686:9;39679:17;39675:105;39672:2;;;39783:18;;:::i;:::-;39672:2;39831:1;39828;39824:9;39813:20;;39539:300;;;;:::o;39845:191::-;;39905:20;39923:1;39905:20;:::i;:::-;39900:25;;39939:20;39957:1;39939:20;:::i;:::-;39934:25;;39978:1;39975;39972:8;39969:2;;;39983:18;;:::i;:::-;39969:2;40028:1;40025;40021:9;40013:17;;39890:146;;;;:::o;40042:96::-;;40108:24;40126:5;40108:24;:::i;:::-;40097:35;;40087:51;;;:::o;40144:90::-;;40221:5;40214:13;40207:21;40196:32;;40186:48;;;:::o;40240:149::-;;40316:66;40309:5;40305:78;40294:89;;40284:105;;;:::o;40395:126::-;;40472:42;40465:5;40461:54;40450:65;;40440:81;;;:::o;40527:77::-;;40593:5;40582:16;;40572:32;;;:::o;40610:154::-;40694:6;40689:3;40684;40671:30;40756:1;40747:6;40742:3;40738:16;40731:27;40661:103;;;:::o;40770:307::-;40838:1;40848:113;40862:6;40859:1;40856:13;40848:113;;;40947:1;40942:3;40938:11;40932:18;40928:1;40923:3;40919:11;40912:39;40884:2;40881:1;40877:10;40872:15;;40848:113;;;40979:6;40976:1;40973:13;40970:2;;;41059:1;41050:6;41045:3;41041:16;41034:27;40970:2;40819:258;;;;:::o;41083:320::-;;41164:1;41158:4;41154:12;41144:22;;41211:1;41205:4;41201:12;41232:18;41222:2;;41288:4;41280:6;41276:17;41266:27;;41222:2;41350;41342:6;41339:14;41319:18;41316:38;41313:2;;;41369:18;;:::i;:::-;41313:2;41134:269;;;;:::o;41409:233::-;;41471:24;41489:5;41471:24;:::i;:::-;41462:33;;41517:66;41510:5;41507:77;41504:2;;;41587:18;;:::i;:::-;41504:2;41634:1;41627:5;41623:13;41616:20;;41452:190;;;:::o;41648:176::-;;41697:20;41715:1;41697:20;:::i;:::-;41692:25;;41731:20;41749:1;41731:20;:::i;:::-;41726:25;;41770:1;41760:2;;41775:18;;:::i;:::-;41760:2;41816:1;41813;41809:9;41804:14;;41682:142;;;;:::o;41830:180::-;41878:77;41875:1;41868:88;41975:4;41972:1;41965:15;41999:4;41996:1;41989:15;42016:180;42064:77;42061:1;42054:88;42161:4;42158:1;42151:15;42185:4;42182:1;42175:15;42202:180;42250:77;42247:1;42240:88;42347:4;42344:1;42337:15;42371:4;42368:1;42361:15;42388:180;42436:77;42433:1;42426:88;42533:4;42530:1;42523:15;42557:4;42554:1;42547:15;42574:102;;42666:2;42662:7;42657:2;42650:5;42646:14;42642:28;42632:38;;42622:54;;;:::o;42682:122::-;42755:24;42773:5;42755:24;:::i;:::-;42748:5;42745:35;42735:2;;42794:1;42791;42784:12;42735:2;42725:79;:::o;42810:116::-;42880:21;42895:5;42880:21;:::i;:::-;42873:5;42870:32;42860:2;;42916:1;42913;42906:12;42860:2;42850:76;:::o;42932:120::-;43004:23;43021:5;43004:23;:::i;:::-;42997:5;42994:34;42984:2;;43042:1;43039;43032:12;42984:2;42974:78;:::o;43058:122::-;43131:24;43149:5;43131:24;:::i;:::-;43124:5;43121:35;43111:2;;43170:1;43167;43160:12;43111:2;43101:79;:::o

Swarm Source

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