ETH Price: $2,418.58 (-1.21%)

Token

Freaky Labs (CUBS)
 

Overview

Max Total Supply

513 CUBS

Holders

157

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
_mastercatalog1.eth
Balance
3 CUBS
0xeb5442e53ea30028adcfda5d8a76ac3457591e68
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

We are the Freaks of the World! | Genesis Freaks in 2D, 3D, and beyond | Imagining the future as a community, together

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FreakyLabs

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;










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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

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

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

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

            uint256 updatedIndex = startTokenId;

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

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

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

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

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

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

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



pragma solidity ^0.8.0;



contract FreakyLabs is ERC721A, Ownable {
    using Strings for uint256;
    
    bool public public_sale_running = false;
    bool public private_sale_running = false;

    uint public MINT_PRICE = 0.08 ether;
    uint public MAX_SUPPLY = 3333;
    uint public MAX_PER_TX = 5;

    bytes32 public exec_merkle_root;
    bytes32 public partial_free_mint_root;
    bytes32 public merkle_root;
    mapping(address => bool) public whitelist_claimed;
    mapping(address => uint) public total_claimed;

    
    constructor () ERC721A("Freaky Labs", "CUBS") {
        _safeMint(0x8E05Dd1aA83Ddd84dc54160766bE2DFCCD244C9B, 100);
    }
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        return string(abi.encodePacked("https://freakylabs.io/metadata/", (tokenId + 1).toString()));
    }   

    function isLabExec(bytes32 [] calldata _merkleProof) public view returns(bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(_merkleProof, exec_merkle_root, leaf);
    }

    function isPartialFreeMintWhitelisted(bytes32 [] calldata _merkleProof) public view returns(bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(_merkleProof, partial_free_mint_root, leaf);
    }

    function isStandardWhitelisted(bytes32 [] calldata _merkleProof) public view returns(bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(_merkleProof, merkle_root, leaf);
    }

    function freakyLabExecMint(bytes32 [] calldata _merkleProof) external {
        require(tx.origin == msg.sender);
        require(private_sale_running || public_sale_running, "Sale is not running");
        require(!whitelist_claimed[msg.sender], "No whitelist allocation remaining");
        require(total_claimed[msg.sender] == 0, "Cannot claim more");
        require(totalSupply() + 3 <= MAX_SUPPLY, "Not enough tokens left to mint");
        require(isLabExec(_merkleProof), "Invalid proof");

        whitelist_claimed[msg.sender] = true;
        _safeMint(msg.sender, 3);
    }

    function partialFreeMint(bytes32 [] calldata _merkleProof) external payable {
        require(tx.origin == msg.sender);
        require(private_sale_running, "Private sale is not running");
        require(!whitelist_claimed[msg.sender], "No whitelist allocation remaining");
        require(total_claimed[msg.sender] == 0, "Cannot claim more");
        require(msg.value == MINT_PRICE, "Incorrect ETH sent to mint");
        require(totalSupply() < MAX_SUPPLY, "Not enough tokens left to mint");
        require(isPartialFreeMintWhitelisted(_merkleProof), "Invalid proof");

        whitelist_claimed[msg.sender] = true;
        _safeMint(msg.sender, 2);
    }
    
    function whitelistMint(bytes32 [] calldata _merkleProof, uint _quantity) external payable {
        require(tx.origin == msg.sender);
        require(private_sale_running, "Private sale is not running");
        require(!whitelist_claimed[msg.sender], "No whitelist allocation remaining");
        require(total_claimed[msg.sender] + _quantity <= 2, "Can't claim more than 2 total");
        require(msg.value == MINT_PRICE * _quantity, "Incorrect ETH sent to mint");
        require(totalSupply() + _quantity <= MAX_SUPPLY, "Not enough tokens left to mint");
        require(isStandardWhitelisted(_merkleProof), "Invalid proof");

        total_claimed[msg.sender] += _quantity;
        _safeMint(msg.sender, _quantity);
    }

    function publicMint(uint _quantity) external payable {
        require(tx.origin == msg.sender);
        require(public_sale_running, "Public sale is not running");
        require(_quantity <= MAX_PER_TX, "Invalid number of tokens queries for minting");
        require(msg.value == MINT_PRICE * _quantity, "Incorrect ETH sent to mint");
        require(totalSupply() + _quantity <= MAX_SUPPLY, "Not enough tokens left to mint");
        
        _safeMint(msg.sender, _quantity);
    }

    function burn(uint _token_id) external {
        address burn_address = 0x000000000000000000000000000000000000dEaD;
        safeTransferFrom(msg.sender, burn_address, _token_id);
    }
    
    function togglePublicSale() external onlyOwner {
        public_sale_running = !public_sale_running;
    }

    function togglePrivateSale() external onlyOwner {
        private_sale_running = !private_sale_running;
    }

    function adminMint(address _destination, uint _quantity) external onlyOwner {
        require(totalSupply() + _quantity <= MAX_SUPPLY, "Not enough tokens left to mint");
        _safeMint(_destination, _quantity);
    }

    function updateLabExecMerkleRoot(bytes32 _new_root) external onlyOwner {
        exec_merkle_root = _new_root;
    }

    function updatePartialFreeMintRoot(bytes32 _new_root) external onlyOwner {
        partial_free_mint_root = _new_root;
    } 

    function updateWhitelistMerkleRoot(bytes32 _new_root) external onlyOwner {
        merkle_root = _new_root;
    }

    function updateMaxSupply(uint _new_supply) external onlyOwner {
        require(_new_supply < MAX_SUPPLY, "Cannot increase supply");
        MAX_SUPPLY = _new_supply;
    }

    function updateMintingPrice(uint _new_price) external onlyOwner {
        MINT_PRICE = _new_price;
    }

    function updateMaxPerTransaction(uint _new_amount) external onlyOwner {
        MAX_PER_TX = _new_amount;
    }
    
    function withdraw() external onlyOwner {
        payable(0x8E05Dd1aA83Ddd84dc54160766bE2DFCCD244C9B).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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_PER_TX","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":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"adminMint","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":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exec_merkle_root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"freakyLabExecMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isLabExec","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isPartialFreeMintWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isStandardWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkle_root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"partialFreeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"partial_free_mint_root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"private_sale_running","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"public_sale_running","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":[],"name":"togglePrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"total_claimed","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":"bytes32","name":"_new_root","type":"bytes32"}],"name":"updateLabExecMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_amount","type":"uint256"}],"name":"updateMaxPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_supply","type":"uint256"}],"name":"updateMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new_price","type":"uint256"}],"name":"updateMintingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_root","type":"bytes32"}],"name":"updatePartialFreeMintRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_new_root","type":"bytes32"}],"name":"updateWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist_claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff02191690831515021790555067011c37937e080000600855610d056009556005600a553480156200005e57600080fd5b506040518060400160405280600b81526020017f467265616b79204c6162730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43554253000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000e3929190620007e5565b508060029080519060200190620000fc929190620007e5565b5050506200011f620001136200014c60201b60201c565b6200015460201b60201c565b62000146738e05dd1aa83ddd84dc54160766be2dfccd244c9b60646200021a60201b60201c565b62000cbf565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023c8282604051806020016040528060008152506200024060201b60201c565b5050565b6200025583838360016200025a60201b60201c565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620002d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ca9062000a2c565b60405180910390fd5b60008414156200031a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003119062000a4e565b60405180910390fd5b6200032f6000868387620005fc60201b60201c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015620005d757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315620005c1576200057e60008884886200060260201b60201c565b620005c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b79062000a0a565b60405180910390fd5b5b81806001019250508080600101915050620004fd565b508060008190555050620005f56000868387620007bc60201b60201c565b5050505050565b50505050565b6000620006308473ffffffffffffffffffffffffffffffffffffffff16620007c260201b620029341760201c565b15620007af578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006626200014c60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006869493929190620009b6565b602060405180830381600087803b158015620006a157600080fd5b505af1925050508015620006d557506040513d601f19601f82011682018060405250810190620006d29190620008ac565b60015b6200075e573d806000811462000708576040519150601f19603f3d011682016040523d82523d6000602084013e6200070d565b606091505b5060008151141562000756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074d9062000a0a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007b4565b600190505b949350505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054620007f39062000b3d565b90600052602060002090601f01602090048101928262000817576000855562000863565b82601f106200083257805160ff191683800117855562000863565b8280016001018555821562000863579182015b828111156200086257825182559160200191906001019062000845565b5b50905062000872919062000876565b5090565b5b808211156200089157600081600090555060010162000877565b5090565b600081519050620008a68162000ca5565b92915050565b600060208284031215620008c557620008c462000ba2565b5b6000620008d58482850162000895565b91505092915050565b620008e98162000a9d565b82525050565b6000620008fc8262000a70565b62000908818562000a7b565b93506200091a81856020860162000b07565b620009258162000ba7565b840191505092915050565b60006200093f60338362000a8c565b91506200094c8262000bb8565b604082019050919050565b60006200096660218362000a8c565b9150620009738262000c07565b604082019050919050565b60006200098d60288362000a8c565b91506200099a8262000c56565b604082019050919050565b620009b08162000afd565b82525050565b6000608082019050620009cd6000830187620008de565b620009dc6020830186620008de565b620009eb6040830185620009a5565b8181036060830152620009ff8184620008ef565b905095945050505050565b6000602082019050818103600083015262000a258162000930565b9050919050565b6000602082019050818103600083015262000a478162000957565b9050919050565b6000602082019050818103600083015262000a69816200097e565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000aaa8262000add565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000b2757808201518184015260208101905062000b0a565b8381111562000b37576000848401525b50505050565b6000600282049050600182168062000b5657607f821691505b6020821081141562000b6d5762000b6c62000b73565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b62000cb08162000ab1565b811462000cbc57600080fd5b50565b61549f8062000ccf6000396000f3fe6080604052600436106102885760003560e01c806370a082311161015a578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c5146109b1578063f103b433146109ee578063f2fde38b14610a17578063f43a22dc14610a40578063f6faa83314610a6b578063fd5e8efe14610a9657610288565b8063c87b56dd146108b5578063dfe5dd68146108f2578063e222c7f914610909578063e3392e8a14610920578063e58306f91461095d578063e6f6ef1e1461098657610288565b8063a22cb46511610113578063a22cb465146107a9578063a44dfe6f146107d2578063b8638e1e146107fb578063b88d4fde14610838578063c002d23d14610861578063c7381b951461088c57610288565b806370a0823114610697578063715018a6146106d45780638da5cb5b146106eb5780639168e23e1461071657806395d89b41146107415780639744725b1461076c57610288565b8063328056e7116101fe57806342966c68116101b757806342966c68146105795780634f6ccce7146105a25780635006ae40146105df5780635788ff36146106085780636352211e146106315780636957637b1461066e57610288565b8063328056e71461047d57806332cb6b0c146104a857806335ce5395146104d35780633ccfd60b146105105780633fe202fc1461052757806342842e0e1461055057610288565b806316ee7d911161025057806316ee7d911461039857806318160ddd146103b457806323b872dd146103df5780632904e6d9146104085780632db11544146104245780632f745c591461044057610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b31461033257806315e1bb6a1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613d98565b610ac1565b6040516102c191906143d3565b60405180910390f35b3480156102d657600080fd5b506102df610c0b565b6040516102ec9190614409565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613df2565b610c9d565b604051610329919061436c565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613c7e565b610d22565b005b34801561036757600080fd5b50610382600480360381019061037d9190613cbe565b610e3b565b60405161038f91906143d3565b60405180910390f35b6103b260048036038101906103ad9190613cbe565b610ebe565b005b3480156103c057600080fd5b506103c9611193565b6040516103d691906147cb565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613b68565b61119c565b005b610422600480360381019061041d9190613d0b565b6111ac565b005b61043e60048036038101906104399190613df2565b6114a2565b005b34801561044c57600080fd5b5061046760048036038101906104629190613c7e565b611621565b60405161047491906147cb565b60405180910390f35b34801561048957600080fd5b50610492611813565b60405161049f91906143ee565b60405180910390f35b3480156104b457600080fd5b506104bd611819565b6040516104ca91906147cb565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613afb565b61181f565b60405161050791906143d3565b60405180910390f35b34801561051c57600080fd5b5061052561183f565b005b34801561053357600080fd5b5061054e60048036038101906105499190613d6b565b611918565b005b34801561055c57600080fd5b5061057760048036038101906105729190613b68565b61199e565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613df2565b6119be565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613df2565b6119d4565b6040516105d691906147cb565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613cbe565b611a27565b005b34801561061457600080fd5b5061062f600480360381019061062a9190613df2565b611cdc565b005b34801561063d57600080fd5b5061065860048036038101906106539190613df2565b611d62565b604051610665919061436c565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190613d6b565b611d78565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613afb565b611dfe565b6040516106cb91906147cb565b60405180910390f35b3480156106e057600080fd5b506106e9611ee7565b005b3480156106f757600080fd5b50610700611f6f565b60405161070d919061436c565b60405180910390f35b34801561072257600080fd5b5061072b611f99565b60405161073891906143d3565b60405180910390f35b34801561074d57600080fd5b50610756611fac565b6040516107639190614409565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190613cbe565b61203e565b6040516107a091906143d3565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190613c3e565b6120c1565b005b3480156107de57600080fd5b506107f960048036038101906107f49190613d6b565b612242565b005b34801561080757600080fd5b50610822600480360381019061081d9190613afb565b6122c8565b60405161082f91906147cb565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613bbb565b6122e0565b005b34801561086d57600080fd5b5061087661233c565b60405161088391906147cb565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190613df2565b612342565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613df2565b6123c8565b6040516108e99190614409565b60405180910390f35b3480156108fe57600080fd5b50610907612405565b005b34801561091557600080fd5b5061091e6124ad565b005b34801561092c57600080fd5b5061094760048036038101906109429190613cbe565b612555565b60405161095491906143d3565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613c7e565b6125d8565b005b34801561099257600080fd5b5061099b6126b9565b6040516109a891906143d3565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190613b28565b6126cc565b6040516109e591906143d3565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190613df2565b612760565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613afb565b61282a565b005b348015610a4c57600080fd5b50610a55612922565b604051610a6291906147cb565b60405180910390f35b348015610a7757600080fd5b50610a80612928565b604051610a8d91906143ee565b60405180910390f35b348015610aa257600080fd5b50610aab61292e565b604051610ab891906143ee565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c045750610c0382612957565b5b9050919050565b606060018054610c1a90614a54565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4690614a54565b8015610c935780601f10610c6857610100808354040283529160200191610c93565b820191906000526020600020905b815481529060010190602001808311610c7657829003601f168201915b5050505050905090565b6000610ca8826129c1565b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde9061478b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d2d82611d62565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d959061468b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dbd6129ce565b73ffffffffffffffffffffffffffffffffffffffff161480610dec5750610deb81610de66129ce565b6126cc565b5b610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e229061456b565b60405180910390fd5b610e368383836129d6565b505050565b60008033604051602001610e4f919061432f565b604051602081830303815290604052805190602001209050610eb5848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600d5483612a88565b91505092915050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ef657600080fd5b600760159054906101000a900460ff16610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061452b565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906147ab565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b9061466b565b60405180910390fd5b6008543414611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906146eb565b60405180910390fd5b6009546110a3611193565b106110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da9061462b565b60405180910390fd5b6110ed8282612555565b61112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061470b565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061118f336002612a9f565b5050565b60008054905090565b6111a7838383612abd565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111e457600080fd5b600760159054906101000a900460ff16611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061452b565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906147ab565b60405180910390fd5b600281600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461130d919061487f565b111561134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906144cb565b60405180910390fd5b8060085461135c9190614906565b341461139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906146eb565b60405180910390fd5b600954816113a9611193565b6113b3919061487f565b11156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb9061462b565b60405180910390fd5b6113fe8383610e3b565b61143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114349061470b565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461148c919061487f565b9250508190555061149d3382612a9f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114da57600080fd5b600760149054906101000a900460ff16611529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115209061464b565b60405180910390fd5b600a5481111561156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115659061446b565b60405180910390fd5b8060085461157c9190614906565b34146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b4906146eb565b60405180910390fd5b600954816115c9611193565b6115d3919061487f565b1115611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b9061462b565b60405180910390fd5b61161e3382612a9f565b50565b600061162c83611dfe565b821061166d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116649061442b565b60405180910390fd5b6000611677611193565b905060008060005b838110156117d1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461177157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117c357868414156117ba57819550505050505061180d565b83806001019450505b50808060010191505061167f565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118049061474b565b60405180910390fd5b92915050565b600c5481565b60095481565b600e6020528060005260406000206000915054906101000a900460ff1681565b6118476129ce565b73ffffffffffffffffffffffffffffffffffffffff16611865611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b2906145cb565b60405180910390fd5b738e05dd1aa83ddd84dc54160766be2dfccd244c9b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611915573d6000803e3d6000fd5b50565b6119206129ce565b73ffffffffffffffffffffffffffffffffffffffff1661193e611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b906145cb565b60405180910390fd5b80600c8190555050565b6119b9838383604051806020016040528060008152506122e0565b505050565b600061dead90506119d033828461199e565b5050565b60006119de611193565b8210611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906144eb565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a5f57600080fd5b600760159054906101000a900460ff1680611a865750600760149054906101000a900460ff165b611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061454b565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b49906147ab565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb9061466b565b60405180910390fd5b6009546003611be1611193565b611beb919061487f565b1115611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c239061462b565b60405180910390fd5b611c36828261203e565b611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c9061470b565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cd8336003612a9f565b5050565b611ce46129ce565b73ffffffffffffffffffffffffffffffffffffffff16611d02611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f906145cb565b60405180910390fd5b8060088190555050565b6000611d6d82612ffd565b600001519050919050565b611d806129ce565b73ffffffffffffffffffffffffffffffffffffffff16611d9e611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906145cb565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e669061458b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611eef6129ce565b73ffffffffffffffffffffffffffffffffffffffff16611f0d611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a906145cb565b60405180910390fd5b611f6d6000613197565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760159054906101000a900460ff1681565b606060028054611fbb90614a54565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe790614a54565b80156120345780601f1061200957610100808354040283529160200191612034565b820191906000526020600020905b81548152906001019060200180831161201757829003601f168201915b5050505050905090565b60008033604051602001612052919061432f565b6040516020818303038152906040528051906020012090506120b8848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483612a88565b91505092915050565b6120c96129ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145eb565b60405180910390fd5b80600660006121446129ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121f16129ce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161223691906143d3565b60405180910390a35050565b61224a6129ce565b73ffffffffffffffffffffffffffffffffffffffff16612268611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b5906145cb565b60405180910390fd5b80600b8190555050565b600f6020528060005260406000206000915090505481565b6122eb848484612abd565b6122f78484848461325d565b612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d906146ab565b60405180910390fd5b50505050565b60085481565b61234a6129ce565b73ffffffffffffffffffffffffffffffffffffffff16612368611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b5906145cb565b60405180910390fd5b80600a8190555050565b60606123df6001836123da919061487f565b6133f4565b6040516020016123ef919061434a565b6040516020818303038152906040529050919050565b61240d6129ce565b73ffffffffffffffffffffffffffffffffffffffff1661242b611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614612481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612478906145cb565b60405180910390fd5b600760159054906101000a900460ff1615600760156101000a81548160ff021916908315150217905550565b6124b56129ce565b73ffffffffffffffffffffffffffffffffffffffff166124d3611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906145cb565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b60008033604051602001612569919061432f565b6040516020818303038152906040528051906020012090506125cf848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5483612a88565b91505092915050565b6125e06129ce565b73ffffffffffffffffffffffffffffffffffffffff166125fe611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614612654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264b906145cb565b60405180910390fd5b60095481612660611193565b61266a919061487f565b11156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061462b565b60405180910390fd5b6126b58282612a9f565b5050565b600760149054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127686129ce565b73ffffffffffffffffffffffffffffffffffffffff16612786611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d3906145cb565b60405180910390fd5b6009548110612820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128179061444b565b60405180910390fd5b8060098190555050565b6128326129ce565b73ffffffffffffffffffffffffffffffffffffffff16612850611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d906145cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d9061448b565b60405180910390fd5b61291f81613197565b50565b600a5481565b600b5481565b600d5481565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600082612a958584613555565b1490509392505050565b612ab98282604051806020016040528060008152506135ca565b5050565b6000612ac882612ffd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612aef6129ce565b73ffffffffffffffffffffffffffffffffffffffff161480612b4b5750612b146129ce565b73ffffffffffffffffffffffffffffffffffffffff16612b3384610c9d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b675750612b668260000151612b616129ce565b6126cc565b5b905080612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba09061460b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c12906145ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c829061450b565b60405180910390fd5b612c9885858560016135dc565b612ca860008484600001516129d6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f8d57612eec816129c1565b15612f8c5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff685858560016135e2565b5050505050565b61300561397d565b61300e826129c1565b61304d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613044906144ab565b60405180910390fd5b60008290505b60008110613156576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613147578092505050613192565b50808060019003915050613053565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131899061476b565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061327e8473ffffffffffffffffffffffffffffffffffffffff16612934565b156133e7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132a76129ce565b8786866040518563ffffffff1660e01b81526004016132c99493929190614387565b602060405180830381600087803b1580156132e357600080fd5b505af192505050801561331457506040513d601f19601f820116820180604052508101906133119190613dc5565b60015b613397573d8060008114613344576040519150601f19603f3d011682016040523d82523d6000602084013e613349565b606091505b5060008151141561338f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613386906146ab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133ec565b600190505b949350505050565b6060600082141561343c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613550565b600082905060005b6000821461346e57808061345790614ab7565b915050600a8261346791906148d5565b9150613444565b60008167ffffffffffffffff81111561348a57613489614c11565b5b6040519080825280601f01601f1916602001820160405280156134bc5781602001600182028036833780820191505090505b5090505b60008514613549576001826134d59190614960565b9150600a856134e49190614b24565b60306134f0919061487f565b60f81b81838151811061350657613505614be2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561354291906148d5565b94506134c0565b8093505050505b919050565b60008082905060005b84518110156135bf57600085828151811061357c5761357b614be2565b5b6020026020010151905080831161359e5761359783826135e8565b92506135ab565b6135a881846135e8565b92505b5080806135b790614ab7565b91505061355e565b508091505092915050565b6135d783838360016135ff565b505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366c906146cb565b60405180910390fd5b60008414156136b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b09061472b565b60405180910390fd5b6136c660008683876135dc565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561396057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561394b5761390b600088848861325d565b61394a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613941906146ab565b60405180910390fd5b5b81806001019250508080600101915050613894565b50806000819055505061397660008683876135e2565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b60006139ca6139c58461480b565b6147e6565b9050828152602081018484840111156139e6576139e5614c4f565b5b6139f1848285614a12565b509392505050565b600081359050613a08816153f6565b92915050565b60008083601f840112613a2457613a23614c45565b5b8235905067ffffffffffffffff811115613a4157613a40614c40565b5b602083019150836020820283011115613a5d57613a5c614c4a565b5b9250929050565b600081359050613a738161540d565b92915050565b600081359050613a8881615424565b92915050565b600081359050613a9d8161543b565b92915050565b600081519050613ab28161543b565b92915050565b600082601f830112613acd57613acc614c45565b5b8135613add8482602086016139b7565b91505092915050565b600081359050613af581615452565b92915050565b600060208284031215613b1157613b10614c59565b5b6000613b1f848285016139f9565b91505092915050565b60008060408385031215613b3f57613b3e614c59565b5b6000613b4d858286016139f9565b9250506020613b5e858286016139f9565b9150509250929050565b600080600060608486031215613b8157613b80614c59565b5b6000613b8f868287016139f9565b9350506020613ba0868287016139f9565b9250506040613bb186828701613ae6565b9150509250925092565b60008060008060808587031215613bd557613bd4614c59565b5b6000613be3878288016139f9565b9450506020613bf4878288016139f9565b9350506040613c0587828801613ae6565b925050606085013567ffffffffffffffff811115613c2657613c25614c54565b5b613c3287828801613ab8565b91505092959194509250565b60008060408385031215613c5557613c54614c59565b5b6000613c63858286016139f9565b9250506020613c7485828601613a64565b9150509250929050565b60008060408385031215613c9557613c94614c59565b5b6000613ca3858286016139f9565b9250506020613cb485828601613ae6565b9150509250929050565b60008060208385031215613cd557613cd4614c59565b5b600083013567ffffffffffffffff811115613cf357613cf2614c54565b5b613cff85828601613a0e565b92509250509250929050565b600080600060408486031215613d2457613d23614c59565b5b600084013567ffffffffffffffff811115613d4257613d41614c54565b5b613d4e86828701613a0e565b93509350506020613d6186828701613ae6565b9150509250925092565b600060208284031215613d8157613d80614c59565b5b6000613d8f84828501613a79565b91505092915050565b600060208284031215613dae57613dad614c59565b5b6000613dbc84828501613a8e565b91505092915050565b600060208284031215613ddb57613dda614c59565b5b6000613de984828501613aa3565b91505092915050565b600060208284031215613e0857613e07614c59565b5b6000613e1684828501613ae6565b91505092915050565b613e2881614994565b82525050565b613e3f613e3a82614994565b614b00565b82525050565b613e4e816149a6565b82525050565b613e5d816149b2565b82525050565b6000613e6e8261483c565b613e788185614852565b9350613e88818560208601614a21565b613e9181614c5e565b840191505092915050565b6000613ea782614847565b613eb18185614863565b9350613ec1818560208601614a21565b613eca81614c5e565b840191505092915050565b6000613ee082614847565b613eea8185614874565b9350613efa818560208601614a21565b80840191505092915050565b6000613f13602283614863565b9150613f1e82614c7c565b604082019050919050565b6000613f36601683614863565b9150613f4182614ccb565b602082019050919050565b6000613f59602c83614863565b9150613f6482614cf4565b604082019050919050565b6000613f7c601f83614874565b9150613f8782614d43565b601f82019050919050565b6000613f9f602683614863565b9150613faa82614d6c565b604082019050919050565b6000613fc2602a83614863565b9150613fcd82614dbb565b604082019050919050565b6000613fe5601d83614863565b9150613ff082614e0a565b602082019050919050565b6000614008602383614863565b915061401382614e33565b604082019050919050565b600061402b602583614863565b915061403682614e82565b604082019050919050565b600061404e601b83614863565b915061405982614ed1565b602082019050919050565b6000614071601383614863565b915061407c82614efa565b602082019050919050565b6000614094603983614863565b915061409f82614f23565b604082019050919050565b60006140b7602b83614863565b91506140c282614f72565b604082019050919050565b60006140da602683614863565b91506140e582614fc1565b604082019050919050565b60006140fd602083614863565b915061410882615010565b602082019050919050565b6000614120601a83614863565b915061412b82615039565b602082019050919050565b6000614143603283614863565b915061414e82615062565b604082019050919050565b6000614166601e83614863565b9150614171826150b1565b602082019050919050565b6000614189601a83614863565b9150614194826150da565b602082019050919050565b60006141ac601183614863565b91506141b782615103565b602082019050919050565b60006141cf602283614863565b91506141da8261512c565b604082019050919050565b60006141f2603383614863565b91506141fd8261517b565b604082019050919050565b6000614215602183614863565b9150614220826151ca565b604082019050919050565b6000614238601a83614863565b915061424382615219565b602082019050919050565b600061425b600d83614863565b915061426682615242565b602082019050919050565b600061427e602883614863565b91506142898261526b565b604082019050919050565b60006142a1602e83614863565b91506142ac826152ba565b604082019050919050565b60006142c4602f83614863565b91506142cf82615309565b604082019050919050565b60006142e7602d83614863565b91506142f282615358565b604082019050919050565b600061430a602183614863565b9150614315826153a7565b604082019050919050565b61432981614a08565b82525050565b600061433b8284613e2e565b60148201915081905092915050565b600061435582613f6f565b91506143618284613ed5565b915081905092915050565b60006020820190506143816000830184613e1f565b92915050565b600060808201905061439c6000830187613e1f565b6143a96020830186613e1f565b6143b66040830185614320565b81810360608301526143c88184613e63565b905095945050505050565b60006020820190506143e86000830184613e45565b92915050565b60006020820190506144036000830184613e54565b92915050565b600060208201905081810360008301526144238184613e9c565b905092915050565b6000602082019050818103600083015261444481613f06565b9050919050565b6000602082019050818103600083015261446481613f29565b9050919050565b6000602082019050818103600083015261448481613f4c565b9050919050565b600060208201905081810360008301526144a481613f92565b9050919050565b600060208201905081810360008301526144c481613fb5565b9050919050565b600060208201905081810360008301526144e481613fd8565b9050919050565b6000602082019050818103600083015261450481613ffb565b9050919050565b600060208201905081810360008301526145248161401e565b9050919050565b6000602082019050818103600083015261454481614041565b9050919050565b6000602082019050818103600083015261456481614064565b9050919050565b6000602082019050818103600083015261458481614087565b9050919050565b600060208201905081810360008301526145a4816140aa565b9050919050565b600060208201905081810360008301526145c4816140cd565b9050919050565b600060208201905081810360008301526145e4816140f0565b9050919050565b6000602082019050818103600083015261460481614113565b9050919050565b6000602082019050818103600083015261462481614136565b9050919050565b6000602082019050818103600083015261464481614159565b9050919050565b600060208201905081810360008301526146648161417c565b9050919050565b600060208201905081810360008301526146848161419f565b9050919050565b600060208201905081810360008301526146a4816141c2565b9050919050565b600060208201905081810360008301526146c4816141e5565b9050919050565b600060208201905081810360008301526146e481614208565b9050919050565b600060208201905081810360008301526147048161422b565b9050919050565b600060208201905081810360008301526147248161424e565b9050919050565b6000602082019050818103600083015261474481614271565b9050919050565b6000602082019050818103600083015261476481614294565b9050919050565b60006020820190508181036000830152614784816142b7565b9050919050565b600060208201905081810360008301526147a4816142da565b9050919050565b600060208201905081810360008301526147c4816142fd565b9050919050565b60006020820190506147e06000830184614320565b92915050565b60006147f0614801565b90506147fc8282614a86565b919050565b6000604051905090565b600067ffffffffffffffff82111561482657614825614c11565b5b61482f82614c5e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061488a82614a08565b915061489583614a08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ca576148c9614b55565b5b828201905092915050565b60006148e082614a08565b91506148eb83614a08565b9250826148fb576148fa614b84565b5b828204905092915050565b600061491182614a08565b915061491c83614a08565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495557614954614b55565b5b828202905092915050565b600061496b82614a08565b915061497683614a08565b92508282101561498957614988614b55565b5b828203905092915050565b600061499f826149e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a3f578082015181840152602081019050614a24565b83811115614a4e576000848401525b50505050565b60006002820490506001821680614a6c57607f821691505b60208210811415614a8057614a7f614bb3565b5b50919050565b614a8f82614c5e565b810181811067ffffffffffffffff82111715614aae57614aad614c11565b5b80604052505050565b6000614ac282614a08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af557614af4614b55565b5b600182019050919050565b6000614b0b82614b12565b9050919050565b6000614b1d82614c6f565b9050919050565b6000614b2f82614a08565b9150614b3a83614a08565b925082614b4a57614b49614b84565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420696e63726561736520737570706c7900000000000000000000600082015250565b7f496e76616c6964206e756d626572206f6620746f6b656e73207175657269657360008201527f20666f72206d696e74696e670000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f667265616b796c6162732e696f2f6d657461646174612f00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f43616e277420636c61696d206d6f7265207468616e203220746f74616c000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f507269766174652073616c65206973206e6f742072756e6e696e670000000000600082015250565b7f53616c65206973206e6f742072756e6e696e6700000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667420746f206d696e740000600082015250565b7f5075626c69632073616c65206973206e6f742072756e6e696e67000000000000600082015250565b7f43616e6e6f7420636c61696d206d6f7265000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e636f7272656374204554482073656e7420746f206d696e74000000000000600082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f4e6f2077686974656c69737420616c6c6f636174696f6e2072656d61696e696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b6153ff81614994565b811461540a57600080fd5b50565b615416816149a6565b811461542157600080fd5b50565b61542d816149b2565b811461543857600080fd5b50565b615444816149bc565b811461544f57600080fd5b50565b61545b81614a08565b811461546657600080fd5b5056fea26469706673582212209cb14681aa6f6421909303cc0a27cc9521a81f96c6ddb7685fd79782b99a3e1564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102885760003560e01c806370a082311161015a578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c5146109b1578063f103b433146109ee578063f2fde38b14610a17578063f43a22dc14610a40578063f6faa83314610a6b578063fd5e8efe14610a9657610288565b8063c87b56dd146108b5578063dfe5dd68146108f2578063e222c7f914610909578063e3392e8a14610920578063e58306f91461095d578063e6f6ef1e1461098657610288565b8063a22cb46511610113578063a22cb465146107a9578063a44dfe6f146107d2578063b8638e1e146107fb578063b88d4fde14610838578063c002d23d14610861578063c7381b951461088c57610288565b806370a0823114610697578063715018a6146106d45780638da5cb5b146106eb5780639168e23e1461071657806395d89b41146107415780639744725b1461076c57610288565b8063328056e7116101fe57806342966c68116101b757806342966c68146105795780634f6ccce7146105a25780635006ae40146105df5780635788ff36146106085780636352211e146106315780636957637b1461066e57610288565b8063328056e71461047d57806332cb6b0c146104a857806335ce5395146104d35780633ccfd60b146105105780633fe202fc1461052757806342842e0e1461055057610288565b806316ee7d911161025057806316ee7d911461039857806318160ddd146103b457806323b872dd146103df5780632904e6d9146104085780632db11544146104245780632f745c591461044057610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b31461033257806315e1bb6a1461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613d98565b610ac1565b6040516102c191906143d3565b60405180910390f35b3480156102d657600080fd5b506102df610c0b565b6040516102ec9190614409565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613df2565b610c9d565b604051610329919061436c565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190613c7e565b610d22565b005b34801561036757600080fd5b50610382600480360381019061037d9190613cbe565b610e3b565b60405161038f91906143d3565b60405180910390f35b6103b260048036038101906103ad9190613cbe565b610ebe565b005b3480156103c057600080fd5b506103c9611193565b6040516103d691906147cb565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613b68565b61119c565b005b610422600480360381019061041d9190613d0b565b6111ac565b005b61043e60048036038101906104399190613df2565b6114a2565b005b34801561044c57600080fd5b5061046760048036038101906104629190613c7e565b611621565b60405161047491906147cb565b60405180910390f35b34801561048957600080fd5b50610492611813565b60405161049f91906143ee565b60405180910390f35b3480156104b457600080fd5b506104bd611819565b6040516104ca91906147cb565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613afb565b61181f565b60405161050791906143d3565b60405180910390f35b34801561051c57600080fd5b5061052561183f565b005b34801561053357600080fd5b5061054e60048036038101906105499190613d6b565b611918565b005b34801561055c57600080fd5b5061057760048036038101906105729190613b68565b61199e565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613df2565b6119be565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613df2565b6119d4565b6040516105d691906147cb565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613cbe565b611a27565b005b34801561061457600080fd5b5061062f600480360381019061062a9190613df2565b611cdc565b005b34801561063d57600080fd5b5061065860048036038101906106539190613df2565b611d62565b604051610665919061436c565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190613d6b565b611d78565b005b3480156106a357600080fd5b506106be60048036038101906106b99190613afb565b611dfe565b6040516106cb91906147cb565b60405180910390f35b3480156106e057600080fd5b506106e9611ee7565b005b3480156106f757600080fd5b50610700611f6f565b60405161070d919061436c565b60405180910390f35b34801561072257600080fd5b5061072b611f99565b60405161073891906143d3565b60405180910390f35b34801561074d57600080fd5b50610756611fac565b6040516107639190614409565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190613cbe565b61203e565b6040516107a091906143d3565b60405180910390f35b3480156107b557600080fd5b506107d060048036038101906107cb9190613c3e565b6120c1565b005b3480156107de57600080fd5b506107f960048036038101906107f49190613d6b565b612242565b005b34801561080757600080fd5b50610822600480360381019061081d9190613afb565b6122c8565b60405161082f91906147cb565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613bbb565b6122e0565b005b34801561086d57600080fd5b5061087661233c565b60405161088391906147cb565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190613df2565b612342565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613df2565b6123c8565b6040516108e99190614409565b60405180910390f35b3480156108fe57600080fd5b50610907612405565b005b34801561091557600080fd5b5061091e6124ad565b005b34801561092c57600080fd5b5061094760048036038101906109429190613cbe565b612555565b60405161095491906143d3565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613c7e565b6125d8565b005b34801561099257600080fd5b5061099b6126b9565b6040516109a891906143d3565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190613b28565b6126cc565b6040516109e591906143d3565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190613df2565b612760565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613afb565b61282a565b005b348015610a4c57600080fd5b50610a55612922565b604051610a6291906147cb565b60405180910390f35b348015610a7757600080fd5b50610a80612928565b604051610a8d91906143ee565b60405180910390f35b348015610aa257600080fd5b50610aab61292e565b604051610ab891906143ee565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bf457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c045750610c0382612957565b5b9050919050565b606060018054610c1a90614a54565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4690614a54565b8015610c935780601f10610c6857610100808354040283529160200191610c93565b820191906000526020600020905b815481529060010190602001808311610c7657829003601f168201915b5050505050905090565b6000610ca8826129c1565b610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde9061478b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d2d82611d62565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d959061468b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dbd6129ce565b73ffffffffffffffffffffffffffffffffffffffff161480610dec5750610deb81610de66129ce565b6126cc565b5b610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e229061456b565b60405180910390fd5b610e368383836129d6565b505050565b60008033604051602001610e4f919061432f565b604051602081830303815290604052805190602001209050610eb5848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600d5483612a88565b91505092915050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ef657600080fd5b600760159054906101000a900460ff16610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061452b565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906147ab565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b9061466b565b60405180910390fd5b6008543414611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f906146eb565b60405180910390fd5b6009546110a3611193565b106110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da9061462b565b60405180910390fd5b6110ed8282612555565b61112c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111239061470b565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061118f336002612a9f565b5050565b60008054905090565b6111a7838383612abd565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111e457600080fd5b600760159054906101000a900460ff16611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a9061452b565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906147ab565b60405180910390fd5b600281600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461130d919061487f565b111561134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906144cb565b60405180910390fd5b8060085461135c9190614906565b341461139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906146eb565b60405180910390fd5b600954816113a9611193565b6113b3919061487f565b11156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb9061462b565b60405180910390fd5b6113fe8383610e3b565b61143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114349061470b565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461148c919061487f565b9250508190555061149d3382612a9f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114da57600080fd5b600760149054906101000a900460ff16611529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115209061464b565b60405180910390fd5b600a5481111561156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115659061446b565b60405180910390fd5b8060085461157c9190614906565b34146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b4906146eb565b60405180910390fd5b600954816115c9611193565b6115d3919061487f565b1115611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b9061462b565b60405180910390fd5b61161e3382612a9f565b50565b600061162c83611dfe565b821061166d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116649061442b565b60405180910390fd5b6000611677611193565b905060008060005b838110156117d1576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461177157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117c357868414156117ba57819550505050505061180d565b83806001019450505b50808060010191505061167f565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118049061474b565b60405180910390fd5b92915050565b600c5481565b60095481565b600e6020528060005260406000206000915054906101000a900460ff1681565b6118476129ce565b73ffffffffffffffffffffffffffffffffffffffff16611865611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b2906145cb565b60405180910390fd5b738e05dd1aa83ddd84dc54160766be2dfccd244c9b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611915573d6000803e3d6000fd5b50565b6119206129ce565b73ffffffffffffffffffffffffffffffffffffffff1661193e611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b906145cb565b60405180910390fd5b80600c8190555050565b6119b9838383604051806020016040528060008152506122e0565b505050565b600061dead90506119d033828461199e565b5050565b60006119de611193565b8210611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906144eb565b60405180910390fd5b819050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a5f57600080fd5b600760159054906101000a900460ff1680611a865750600760149054906101000a900460ff165b611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061454b565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b49906147ab565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb9061466b565b60405180910390fd5b6009546003611be1611193565b611beb919061487f565b1115611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c239061462b565b60405180910390fd5b611c36828261203e565b611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c9061470b565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cd8336003612a9f565b5050565b611ce46129ce565b73ffffffffffffffffffffffffffffffffffffffff16611d02611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f906145cb565b60405180910390fd5b8060088190555050565b6000611d6d82612ffd565b600001519050919050565b611d806129ce565b73ffffffffffffffffffffffffffffffffffffffff16611d9e611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb906145cb565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e669061458b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611eef6129ce565b73ffffffffffffffffffffffffffffffffffffffff16611f0d611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a906145cb565b60405180910390fd5b611f6d6000613197565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760159054906101000a900460ff1681565b606060028054611fbb90614a54565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe790614a54565b80156120345780601f1061200957610100808354040283529160200191612034565b820191906000526020600020905b81548152906001019060200180831161201757829003601f168201915b5050505050905090565b60008033604051602001612052919061432f565b6040516020818303038152906040528051906020012090506120b8848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600b5483612a88565b91505092915050565b6120c96129ce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906145eb565b60405180910390fd5b80600660006121446129ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121f16129ce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161223691906143d3565b60405180910390a35050565b61224a6129ce565b73ffffffffffffffffffffffffffffffffffffffff16612268611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b5906145cb565b60405180910390fd5b80600b8190555050565b600f6020528060005260406000206000915090505481565b6122eb848484612abd565b6122f78484848461325d565b612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d906146ab565b60405180910390fd5b50505050565b60085481565b61234a6129ce565b73ffffffffffffffffffffffffffffffffffffffff16612368611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b5906145cb565b60405180910390fd5b80600a8190555050565b60606123df6001836123da919061487f565b6133f4565b6040516020016123ef919061434a565b6040516020818303038152906040529050919050565b61240d6129ce565b73ffffffffffffffffffffffffffffffffffffffff1661242b611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614612481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612478906145cb565b60405180910390fd5b600760159054906101000a900460ff1615600760156101000a81548160ff021916908315150217905550565b6124b56129ce565b73ffffffffffffffffffffffffffffffffffffffff166124d3611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614612529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612520906145cb565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b60008033604051602001612569919061432f565b6040516020818303038152906040528051906020012090506125cf848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5483612a88565b91505092915050565b6125e06129ce565b73ffffffffffffffffffffffffffffffffffffffff166125fe611f6f565b73ffffffffffffffffffffffffffffffffffffffff1614612654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264b906145cb565b60405180910390fd5b60095481612660611193565b61266a919061487f565b11156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061462b565b60405180910390fd5b6126b58282612a9f565b5050565b600760149054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127686129ce565b73ffffffffffffffffffffffffffffffffffffffff16612786611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d3906145cb565b60405180910390fd5b6009548110612820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128179061444b565b60405180910390fd5b8060098190555050565b6128326129ce565b73ffffffffffffffffffffffffffffffffffffffff16612850611f6f565b73ffffffffffffffffffffffffffffffffffffffff16146128a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289d906145cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d9061448b565b60405180910390fd5b61291f81613197565b50565b600a5481565b600b5481565b600d5481565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600082612a958584613555565b1490509392505050565b612ab98282604051806020016040528060008152506135ca565b5050565b6000612ac882612ffd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612aef6129ce565b73ffffffffffffffffffffffffffffffffffffffff161480612b4b5750612b146129ce565b73ffffffffffffffffffffffffffffffffffffffff16612b3384610c9d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b675750612b668260000151612b616129ce565b6126cc565b5b905080612ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba09061460b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c12906145ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c829061450b565b60405180910390fd5b612c9885858560016135dc565b612ca860008484600001516129d6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f8d57612eec816129c1565b15612f8c5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff685858560016135e2565b5050505050565b61300561397d565b61300e826129c1565b61304d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613044906144ab565b60405180910390fd5b60008290505b60008110613156576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613147578092505050613192565b50808060019003915050613053565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131899061476b565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061327e8473ffffffffffffffffffffffffffffffffffffffff16612934565b156133e7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132a76129ce565b8786866040518563ffffffff1660e01b81526004016132c99493929190614387565b602060405180830381600087803b1580156132e357600080fd5b505af192505050801561331457506040513d601f19601f820116820180604052508101906133119190613dc5565b60015b613397573d8060008114613344576040519150601f19603f3d011682016040523d82523d6000602084013e613349565b606091505b5060008151141561338f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613386906146ab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133ec565b600190505b949350505050565b6060600082141561343c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613550565b600082905060005b6000821461346e57808061345790614ab7565b915050600a8261346791906148d5565b9150613444565b60008167ffffffffffffffff81111561348a57613489614c11565b5b6040519080825280601f01601f1916602001820160405280156134bc5781602001600182028036833780820191505090505b5090505b60008514613549576001826134d59190614960565b9150600a856134e49190614b24565b60306134f0919061487f565b60f81b81838151811061350657613505614be2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561354291906148d5565b94506134c0565b8093505050505b919050565b60008082905060005b84518110156135bf57600085828151811061357c5761357b614be2565b5b6020026020010151905080831161359e5761359783826135e8565b92506135ab565b6135a881846135e8565b92505b5080806135b790614ab7565b91505061355e565b508091505092915050565b6135d783838360016135ff565b505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366c906146cb565b60405180910390fd5b60008414156136b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b09061472b565b60405180910390fd5b6136c660008683876135dc565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561396057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561394b5761390b600088848861325d565b61394a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613941906146ab565b60405180910390fd5b5b81806001019250508080600101915050613894565b50806000819055505061397660008683876135e2565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b60006139ca6139c58461480b565b6147e6565b9050828152602081018484840111156139e6576139e5614c4f565b5b6139f1848285614a12565b509392505050565b600081359050613a08816153f6565b92915050565b60008083601f840112613a2457613a23614c45565b5b8235905067ffffffffffffffff811115613a4157613a40614c40565b5b602083019150836020820283011115613a5d57613a5c614c4a565b5b9250929050565b600081359050613a738161540d565b92915050565b600081359050613a8881615424565b92915050565b600081359050613a9d8161543b565b92915050565b600081519050613ab28161543b565b92915050565b600082601f830112613acd57613acc614c45565b5b8135613add8482602086016139b7565b91505092915050565b600081359050613af581615452565b92915050565b600060208284031215613b1157613b10614c59565b5b6000613b1f848285016139f9565b91505092915050565b60008060408385031215613b3f57613b3e614c59565b5b6000613b4d858286016139f9565b9250506020613b5e858286016139f9565b9150509250929050565b600080600060608486031215613b8157613b80614c59565b5b6000613b8f868287016139f9565b9350506020613ba0868287016139f9565b9250506040613bb186828701613ae6565b9150509250925092565b60008060008060808587031215613bd557613bd4614c59565b5b6000613be3878288016139f9565b9450506020613bf4878288016139f9565b9350506040613c0587828801613ae6565b925050606085013567ffffffffffffffff811115613c2657613c25614c54565b5b613c3287828801613ab8565b91505092959194509250565b60008060408385031215613c5557613c54614c59565b5b6000613c63858286016139f9565b9250506020613c7485828601613a64565b9150509250929050565b60008060408385031215613c9557613c94614c59565b5b6000613ca3858286016139f9565b9250506020613cb485828601613ae6565b9150509250929050565b60008060208385031215613cd557613cd4614c59565b5b600083013567ffffffffffffffff811115613cf357613cf2614c54565b5b613cff85828601613a0e565b92509250509250929050565b600080600060408486031215613d2457613d23614c59565b5b600084013567ffffffffffffffff811115613d4257613d41614c54565b5b613d4e86828701613a0e565b93509350506020613d6186828701613ae6565b9150509250925092565b600060208284031215613d8157613d80614c59565b5b6000613d8f84828501613a79565b91505092915050565b600060208284031215613dae57613dad614c59565b5b6000613dbc84828501613a8e565b91505092915050565b600060208284031215613ddb57613dda614c59565b5b6000613de984828501613aa3565b91505092915050565b600060208284031215613e0857613e07614c59565b5b6000613e1684828501613ae6565b91505092915050565b613e2881614994565b82525050565b613e3f613e3a82614994565b614b00565b82525050565b613e4e816149a6565b82525050565b613e5d816149b2565b82525050565b6000613e6e8261483c565b613e788185614852565b9350613e88818560208601614a21565b613e9181614c5e565b840191505092915050565b6000613ea782614847565b613eb18185614863565b9350613ec1818560208601614a21565b613eca81614c5e565b840191505092915050565b6000613ee082614847565b613eea8185614874565b9350613efa818560208601614a21565b80840191505092915050565b6000613f13602283614863565b9150613f1e82614c7c565b604082019050919050565b6000613f36601683614863565b9150613f4182614ccb565b602082019050919050565b6000613f59602c83614863565b9150613f6482614cf4565b604082019050919050565b6000613f7c601f83614874565b9150613f8782614d43565b601f82019050919050565b6000613f9f602683614863565b9150613faa82614d6c565b604082019050919050565b6000613fc2602a83614863565b9150613fcd82614dbb565b604082019050919050565b6000613fe5601d83614863565b9150613ff082614e0a565b602082019050919050565b6000614008602383614863565b915061401382614e33565b604082019050919050565b600061402b602583614863565b915061403682614e82565b604082019050919050565b600061404e601b83614863565b915061405982614ed1565b602082019050919050565b6000614071601383614863565b915061407c82614efa565b602082019050919050565b6000614094603983614863565b915061409f82614f23565b604082019050919050565b60006140b7602b83614863565b91506140c282614f72565b604082019050919050565b60006140da602683614863565b91506140e582614fc1565b604082019050919050565b60006140fd602083614863565b915061410882615010565b602082019050919050565b6000614120601a83614863565b915061412b82615039565b602082019050919050565b6000614143603283614863565b915061414e82615062565b604082019050919050565b6000614166601e83614863565b9150614171826150b1565b602082019050919050565b6000614189601a83614863565b9150614194826150da565b602082019050919050565b60006141ac601183614863565b91506141b782615103565b602082019050919050565b60006141cf602283614863565b91506141da8261512c565b604082019050919050565b60006141f2603383614863565b91506141fd8261517b565b604082019050919050565b6000614215602183614863565b9150614220826151ca565b604082019050919050565b6000614238601a83614863565b915061424382615219565b602082019050919050565b600061425b600d83614863565b915061426682615242565b602082019050919050565b600061427e602883614863565b91506142898261526b565b604082019050919050565b60006142a1602e83614863565b91506142ac826152ba565b604082019050919050565b60006142c4602f83614863565b91506142cf82615309565b604082019050919050565b60006142e7602d83614863565b91506142f282615358565b604082019050919050565b600061430a602183614863565b9150614315826153a7565b604082019050919050565b61432981614a08565b82525050565b600061433b8284613e2e565b60148201915081905092915050565b600061435582613f6f565b91506143618284613ed5565b915081905092915050565b60006020820190506143816000830184613e1f565b92915050565b600060808201905061439c6000830187613e1f565b6143a96020830186613e1f565b6143b66040830185614320565b81810360608301526143c88184613e63565b905095945050505050565b60006020820190506143e86000830184613e45565b92915050565b60006020820190506144036000830184613e54565b92915050565b600060208201905081810360008301526144238184613e9c565b905092915050565b6000602082019050818103600083015261444481613f06565b9050919050565b6000602082019050818103600083015261446481613f29565b9050919050565b6000602082019050818103600083015261448481613f4c565b9050919050565b600060208201905081810360008301526144a481613f92565b9050919050565b600060208201905081810360008301526144c481613fb5565b9050919050565b600060208201905081810360008301526144e481613fd8565b9050919050565b6000602082019050818103600083015261450481613ffb565b9050919050565b600060208201905081810360008301526145248161401e565b9050919050565b6000602082019050818103600083015261454481614041565b9050919050565b6000602082019050818103600083015261456481614064565b9050919050565b6000602082019050818103600083015261458481614087565b9050919050565b600060208201905081810360008301526145a4816140aa565b9050919050565b600060208201905081810360008301526145c4816140cd565b9050919050565b600060208201905081810360008301526145e4816140f0565b9050919050565b6000602082019050818103600083015261460481614113565b9050919050565b6000602082019050818103600083015261462481614136565b9050919050565b6000602082019050818103600083015261464481614159565b9050919050565b600060208201905081810360008301526146648161417c565b9050919050565b600060208201905081810360008301526146848161419f565b9050919050565b600060208201905081810360008301526146a4816141c2565b9050919050565b600060208201905081810360008301526146c4816141e5565b9050919050565b600060208201905081810360008301526146e481614208565b9050919050565b600060208201905081810360008301526147048161422b565b9050919050565b600060208201905081810360008301526147248161424e565b9050919050565b6000602082019050818103600083015261474481614271565b9050919050565b6000602082019050818103600083015261476481614294565b9050919050565b60006020820190508181036000830152614784816142b7565b9050919050565b600060208201905081810360008301526147a4816142da565b9050919050565b600060208201905081810360008301526147c4816142fd565b9050919050565b60006020820190506147e06000830184614320565b92915050565b60006147f0614801565b90506147fc8282614a86565b919050565b6000604051905090565b600067ffffffffffffffff82111561482657614825614c11565b5b61482f82614c5e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061488a82614a08565b915061489583614a08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ca576148c9614b55565b5b828201905092915050565b60006148e082614a08565b91506148eb83614a08565b9250826148fb576148fa614b84565b5b828204905092915050565b600061491182614a08565b915061491c83614a08565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495557614954614b55565b5b828202905092915050565b600061496b82614a08565b915061497683614a08565b92508282101561498957614988614b55565b5b828203905092915050565b600061499f826149e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a3f578082015181840152602081019050614a24565b83811115614a4e576000848401525b50505050565b60006002820490506001821680614a6c57607f821691505b60208210811415614a8057614a7f614bb3565b5b50919050565b614a8f82614c5e565b810181811067ffffffffffffffff82111715614aae57614aad614c11565b5b80604052505050565b6000614ac282614a08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af557614af4614b55565b5b600182019050919050565b6000614b0b82614b12565b9050919050565b6000614b1d82614c6f565b9050919050565b6000614b2f82614a08565b9150614b3a83614a08565b925082614b4a57614b49614b84565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420696e63726561736520737570706c7900000000000000000000600082015250565b7f496e76616c6964206e756d626572206f6620746f6b656e73207175657269657360008201527f20666f72206d696e74696e670000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f667265616b796c6162732e696f2f6d657461646174612f00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f43616e277420636c61696d206d6f7265207468616e203220746f74616c000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f507269766174652073616c65206973206e6f742072756e6e696e670000000000600082015250565b7f53616c65206973206e6f742072756e6e696e6700000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667420746f206d696e740000600082015250565b7f5075626c69632073616c65206973206e6f742072756e6e696e67000000000000600082015250565b7f43616e6e6f7420636c61696d206d6f7265000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e636f7272656374204554482073656e7420746f206d696e74000000000000600082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f4e6f2077686974656c69737420616c6c6f636174696f6e2072656d61696e696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b6153ff81614994565b811461540a57600080fd5b50565b615416816149a6565b811461542157600080fd5b50565b61542d816149b2565b811461543857600080fd5b50565b615444816149bc565b811461544f57600080fd5b50565b61545b81614a08565b811461546657600080fd5b5056fea26469706673582212209cb14681aa6f6421909303cc0a27cc9521a81f96c6ddb7685fd79782b99a3e1564736f6c63430008070033

Deployed Bytecode Sourcemap

42939:5752:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29729:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31615:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33177:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32698:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44301:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45144:672;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27986:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34053:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45828:738;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46574:495;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28650:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43270:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43161:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43347:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48547:141;;;;;;;;;;;;;:::i;:::-;;47867:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34294:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47077:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44542:594;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48308:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31424:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48002:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30165:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7119:103;;;;;;;;;;;;;:::i;:::-;;6468:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43070:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31784:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43808:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33463:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47741:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43403:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34550:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43119:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48422:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43598:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47392:111;;;;;;;;;;;;;:::i;:::-;;47276:108;;;;;;;;;;;;;:::i;:::-;;44042:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47511:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43024:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33822:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48125:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7377:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43197:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43232:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43314:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29729:372;29831:4;29883:25;29868:40;;;:11;:40;;;;:105;;;;29940:33;29925:48;;;:11;:48;;;;29868:105;:172;;;;30005:35;29990:50;;;:11;:50;;;;29868:172;:225;;;;30057:36;30081:11;30057:23;:36::i;:::-;29868:225;29848:245;;29729:372;;;:::o;31615:100::-;31669:13;31702:5;31695:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31615:100;:::o;33177:214::-;33245:7;33273:16;33281:7;33273;:16::i;:::-;33265:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33359:15;:24;33375:7;33359:24;;;;;;;;;;;;;;;;;;;;;33352:31;;33177:214;;;:::o;32698:413::-;32771:13;32787:24;32803:7;32787:15;:24::i;:::-;32771:40;;32836:5;32830:11;;:2;:11;;;;32822:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32931:5;32915:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32940:37;32957:5;32964:12;:10;:12::i;:::-;32940:16;:37::i;:::-;32915:62;32893:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33075:28;33084:2;33088:7;33097:5;33075:8;:28::i;:::-;32760:351;32698:413;;:::o;44301:233::-;44386:4;44403:12;44445:10;44428:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;44418:39;;;;;;44403:54;;44475:51;44494:12;;44475:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44508:11;;44521:4;44475:18;:51::i;:::-;44468:58;;;44301:233;;;;:::o;45144:672::-;45252:10;45239:23;;:9;:23;;;45231:32;;;;;;45282:20;;;;;;;;;;;45274:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45354:17;:29;45372:10;45354:29;;;;;;;;;;;;;;;;;;;;;;;;;45353:30;45345:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45469:1;45440:13;:25;45454:10;45440:25;;;;;;;;;;;;;;;;:30;45432:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45524:10;;45511:9;:23;45503:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45600:10;;45584:13;:11;:13::i;:::-;:26;45576:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45664:42;45693:12;;45664:28;:42::i;:::-;45656:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45769:4;45737:17;:29;45755:10;45737:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;45784:24;45794:10;45806:1;45784:9;:24::i;:::-;45144:672;;:::o;27986:100::-;28039:7;28066:12;;28059:19;;27986:100;:::o;34053:170::-;34187:28;34197:4;34203:2;34207:7;34187:9;:28::i;:::-;34053:170;;;:::o;45828:738::-;45950:10;45937:23;;:9;:23;;;45929:32;;;;;;45980:20;;;;;;;;;;;45972:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46052:17;:29;46070:10;46052:29;;;;;;;;;;;;;;;;;;;;;;;;;46051:30;46043:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46179:1;46166:9;46138:13;:25;46152:10;46138:25;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:42;;46130:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46259:9;46246:10;;:22;;;;:::i;:::-;46233:9;:35;46225:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46347:10;;46334:9;46318:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;46310:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;46411:35;46433:12;;46411:21;:35::i;:::-;46403:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46506:9;46477:13;:25;46491:10;46477:25;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;46526:32;46536:10;46548:9;46526;:32::i;:::-;45828:738;;;:::o;46574:495::-;46659:10;46646:23;;:9;:23;;;46638:32;;;;;;46689:19;;;;;;;;;;;46681:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46771:10;;46758:9;:23;;46750:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46875:9;46862:10;;:22;;;;:::i;:::-;46849:9;:35;46841:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46963:10;;46950:9;46934:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;46926:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;47029:32;47039:10;47051:9;47029;:32::i;:::-;46574:495;:::o;28650:1007::-;28739:7;28775:16;28785:5;28775:9;:16::i;:::-;28767:5;:24;28759:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28841:22;28866:13;:11;:13::i;:::-;28841:38;;28890:19;28920:25;29109:9;29104:466;29124:14;29120:1;:18;29104:466;;;29164:31;29198:11;:14;29210:1;29198:14;;;;;;;;;;;29164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29261:1;29235:28;;:9;:14;;;:28;;;29231:111;;29308:9;:14;;;29288:34;;29231:111;29385:5;29364:26;;:17;:26;;;29360:195;;;29434:5;29419:11;:20;29415:85;;;29475:1;29468:8;;;;;;;;;29415:85;29522:13;;;;;;;29360:195;29145:425;29140:3;;;;;;;29104:466;;;;29593:56;;;;;;;;;;:::i;:::-;;;;;;;;28650:1007;;;;;:::o;43270:37::-;;;;:::o;43161:29::-;;;;:::o;43347:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;48547:141::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48605:42:::1;48597:60;;:83;48658:21;48597:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48547:141::o:0;47867:126::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47976:9:::1;47951:22;:34;;;;47867:126:::0;:::o;34294:185::-;34432:39;34449:4;34455:2;34459:7;34432:39;;;;;;;;;;;;:16;:39::i;:::-;34294:185;;;:::o;47077:187::-;47127:20;47150:42;47127:65;;47203:53;47220:10;47232:12;47246:9;47203:16;:53::i;:::-;47116:148;47077:187;:::o;28163:::-;28230:7;28266:13;:11;:13::i;:::-;28258:5;:21;28250:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28337:5;28330:12;;28163:187;;;:::o;44542:594::-;44644:10;44631:23;;:9;:23;;;44623:32;;;;;;44674:20;;;;;;;;;;;:43;;;;44698:19;;;;;;;;;;;44674:43;44666:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44761:17;:29;44779:10;44761:29;;;;;;;;;;;;;;;;;;;;;;;;;44760:30;44752:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44876:1;44847:13;:25;44861:10;44847:25;;;;;;;;;;;;;;;;:30;44839:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44939:10;;44934:1;44918:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;44910:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45003:23;45013:12;;45003:9;:23::i;:::-;44995:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45089:4;45057:17;:29;45075:10;45057:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;45104:24;45114:10;45126:1;45104:9;:24::i;:::-;44542:594;;:::o;48308:106::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48396:10:::1;48383;:23;;;;48308:106:::0;:::o;31424:124::-;31488:7;31515:20;31527:7;31515:11;:20::i;:::-;:25;;;31508:32;;31424:124;;;:::o;48002:115::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48100:9:::1;48086:11;:23;;;;48002:115:::0;:::o;30165:221::-;30229:7;30274:1;30257:19;;:5;:19;;;;30249:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30350:12;:19;30363:5;30350:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30342:36;;30335:43;;30165:221;;;:::o;7119:103::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7184:30:::1;7211:1;7184:18;:30::i;:::-;7119:103::o:0;6468:87::-;6514:7;6541:6;;;;;;;;;;;6534:13;;6468:87;:::o;43070:40::-;;;;;;;;;;;;;:::o;31784:104::-;31840:13;31873:7;31866:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31784:104;:::o;43808:226::-;43881:4;43898:12;43940:10;43923:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;43913:39;;;;;;43898:54;;43970:56;43989:12;;43970:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44003:16;;44021:4;43970:18;:56::i;:::-;43963:63;;;43808:226;;;;:::o;33463:288::-;33570:12;:10;:12::i;:::-;33558:24;;:8;:24;;;;33550:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33671:8;33626:18;:32;33645:12;:10;:12::i;:::-;33626:32;;;;;;;;;;;;;;;:42;33659:8;33626:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33724:8;33695:48;;33710:12;:10;:12::i;:::-;33695:48;;;33734:8;33695:48;;;;;;:::i;:::-;;;;;;;;33463:288;;:::o;47741:118::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47842:9:::1;47823:16;:28;;;;47741:118:::0;:::o;43403:45::-;;;;;;;;;;;;;;;;;:::o;34550:355::-;34709:28;34719:4;34725:2;34729:7;34709:9;:28::i;:::-;34770:48;34793:4;34799:2;34803:7;34812:5;34770:22;:48::i;:::-;34748:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;34550:355;;;;:::o;43119:35::-;;;;:::o;48422:113::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48516:11:::1;48503:10;:24;;;;48422:113:::0;:::o;43598:199::-;43671:13;43763:24;43774:1;43764:7;:11;;;;:::i;:::-;43763:22;:24::i;:::-;43711:77;;;;;;;;:::i;:::-;;;;;;;;;;;;;43697:92;;43598:199;;;:::o;47392:111::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47475:20:::1;;;;;;;;;;;47474:21;47451:20;;:44;;;;;;;;;;;;;;;;;;47392:111::o:0;47276:108::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47357:19:::1;;;;;;;;;;;47356:20;47334:19;;:42;;;;;;;;;;;;;;;;;;47276:108::o:0;44042:251::-;44134:4;44151:12;44193:10;44176:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;44166:39;;;;;;44151:54;;44223:62;44242:12;;44223:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44256:22;;44280:4;44223:18;:62::i;:::-;44216:69;;;44042:251;;;;:::o;47511:222::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47635:10:::1;;47622:9;47606:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;47598:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;47691:34;47701:12;47715:9;47691;:34::i;:::-;47511:222:::0;;:::o;43024:39::-;;;;;;;;;;;;;:::o;33822:164::-;33919:4;33943:18;:25;33962:5;33943:25;;;;;;;;;;;;;;;:35;33969:8;33943:35;;;;;;;;;;;;;;;;;;;;;;;;;33936:42;;33822:164;;;;:::o;48125:175::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48220:10:::1;;48206:11;:24;48198:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;48281:11;48268:10;:24;;;;48125:175:::0;:::o;7377:201::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7486:1:::1;7466:22;;:8;:22;;;;7458:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7542:28;7561:8;7542:18;:28::i;:::-;7377:201:::0;:::o;43197:26::-;;;;:::o;43232:31::-;;;;:::o;43314:26::-;;;;:::o;9169:326::-;9229:4;9486:1;9464:7;:19;;;:23;9457:30;;9169:326;;;:::o;19252:157::-;19337:4;19376:25;19361:40;;;:11;:40;;;;19354:47;;19252:157;;;:::o;35160:111::-;35217:4;35251:12;;35241:7;:22;35234:29;;35160:111;;;:::o;5192:98::-;5245:7;5272:10;5265:17;;5192:98;:::o;40080:196::-;40222:2;40195:15;:24;40211:7;40195:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40260:7;40256:2;40240:28;;40249:5;40240:28;;;;;;;;;;;;40080:196;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;35279:104::-;35348:27;35358:2;35362:8;35348:27;;;;;;;;;;;;:9;:27::i;:::-;35279:104;;:::o;37960:2002::-;38075:35;38113:20;38125:7;38113:11;:20::i;:::-;38075:58;;38146:22;38188:13;:18;;;38172:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;38247:12;:10;:12::i;:::-;38223:36;;:20;38235:7;38223:11;:20::i;:::-;:36;;;38172:87;:154;;;;38276:50;38293:13;:18;;;38313:12;:10;:12::i;:::-;38276:16;:50::i;:::-;38172:154;38146:181;;38348:17;38340:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;38463:4;38441:26;;:13;:18;;;:26;;;38433:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38543:1;38529:16;;:2;:16;;;;38521:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38600:43;38622:4;38628:2;38632:7;38641:1;38600:21;:43::i;:::-;38708:49;38725:1;38729:7;38738:13;:18;;;38708:8;:49::i;:::-;39083:1;39053:12;:18;39066:4;39053:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39127:1;39099:12;:16;39112:2;39099:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39173:2;39145:11;:20;39157:7;39145:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39235:15;39190:11;:20;39202:7;39190:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;39503:19;39535:1;39525:7;:11;39503:33;;39596:1;39555:43;;:11;:24;39567:11;39555:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;39551:295;;;39623:20;39631:11;39623:7;:20::i;:::-;39619:212;;;39700:13;:18;;;39668:11;:24;39680:11;39668:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;39783:13;:28;;;39741:11;:24;39753:11;39741:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;39619:212;39551:295;39028:829;39893:7;39889:2;39874:27;;39883:4;39874:27;;;;;;;;;;;;39912:42;39933:4;39939:2;39943:7;39952:1;39912:20;:42::i;:::-;38064:1898;;37960:2002;;;:::o;30825:537::-;30886:21;;:::i;:::-;30928:16;30936:7;30928;:16::i;:::-;30920:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31034:12;31049:7;31034:22;;31029:245;31066:1;31058:4;:9;31029:245;;31096:31;31130:11;:17;31142:4;31130:17;;;;;;;;;;;31096:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31196:1;31170:28;;:9;:14;;;:28;;;31166:93;;31230:9;31223:16;;;;;;31166:93;31077:197;31069:6;;;;;;;;31029:245;;;;31297:57;;;;;;;;;;:::i;:::-;;;;;;;;30825:537;;;;:::o;7738:191::-;7812:16;7831:6;;;;;;;;;;;7812:25;;7857:8;7848:6;;:17;;;;;;;;;;;;;;;;;;7912:8;7881:40;;7902:8;7881:40;;;;;;;;;;;;7801:128;7738:191;:::o;40841:804::-;40996:4;41017:15;:2;:13;;;:15::i;:::-;41013:625;;;41069:2;41053:36;;;41090:12;:10;:12::i;:::-;41104:4;41110:7;41119:5;41053:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41049:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41316:1;41299:6;:13;:18;41295:273;;;41342:61;;;;;;;;;;:::i;:::-;;;;;;;;41295:273;41518:6;41512:13;41503:6;41499:2;41495:15;41488:38;41049:534;41186:45;;;41176:55;;;:6;:55;;;;41169:62;;;;;41013:625;41622:4;41615:11;;40841:804;;;;;;;:::o;2754:723::-;2810:13;3040:1;3031:5;:10;3027:53;;;3058:10;;;;;;;;;;;;;;;;;;;;;3027:53;3090:12;3105:5;3090:20;;3121:14;3146:78;3161:1;3153:4;:9;3146:78;;3179:8;;;;;:::i;:::-;;;;3210:2;3202:10;;;;;:::i;:::-;;;3146:78;;;3234:19;3266:6;3256:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:39;;3284:154;3300:1;3291:5;:10;3284:154;;3328:1;3318:11;;;;;:::i;:::-;;;3395:2;3387:5;:10;;;;:::i;:::-;3374:2;:24;;;;:::i;:::-;3361:39;;3344:6;3351;3344:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3424:2;3415:11;;;;;:::i;:::-;;;3284:154;;;3462:6;3448:21;;;;;2754:723;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;35746:163::-;35869:32;35875:2;35879:8;35889:5;35896:4;35869:5;:32::i;:::-;35746:163;;;:::o;42133:159::-;;;;;:::o;42704:158::-;;;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;36168:1538::-;36307:20;36330:12;;36307:35;;36375:1;36361:16;;:2;:16;;;;36353:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36446:1;36434:8;:13;;36426:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36505:61;36535:1;36539:2;36543:12;36557:8;36505:21;:61::i;:::-;36880:8;36844:12;:16;36857:2;36844:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36945:8;36904:12;:16;36917:2;36904:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37004:2;36971:11;:25;36983:12;36971:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37071:15;37021:11;:25;37033:12;37021:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37104:20;37127:12;37104:35;;37161:9;37156:415;37176:8;37172:1;:12;37156:415;;;37240:12;37236:2;37215:38;;37232:1;37215:38;;;;;;;;;;;;37276:4;37272:249;;;37339:59;37370:1;37374:2;37378:12;37392:5;37339:22;:59::i;:::-;37305:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;37272:249;37541:14;;;;;;;37186:3;;;;;;;37156:415;;;;37602:12;37587;:27;;;;36819:807;37638:60;37667:1;37671:2;37675:12;37689:8;37638:20;:60::i;:::-;36296:1410;36168:1538;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1443:137::-;1488:5;1526:6;1513:20;1504:29;;1542:32;1568:5;1542:32;:::i;:::-;1443:137;;;;:::o;1586:141::-;1642:5;1673:6;1667:13;1658:22;;1689:32;1715:5;1689:32;:::i;:::-;1586:141;;;;:::o;1746:338::-;1801:5;1850:3;1843:4;1835:6;1831:17;1827:27;1817:122;;1858:79;;:::i;:::-;1817:122;1975:6;1962:20;2000:78;2074:3;2066:6;2059:4;2051:6;2047:17;2000:78;:::i;:::-;1991:87;;1807:277;1746:338;;;;:::o;2090:139::-;2136:5;2174:6;2161:20;2152:29;;2190:33;2217:5;2190:33;:::i;:::-;2090:139;;;;:::o;2235:329::-;2294:6;2343:2;2331:9;2322:7;2318:23;2314:32;2311:119;;;2349:79;;:::i;:::-;2311:119;2469:1;2494:53;2539:7;2530:6;2519:9;2515:22;2494:53;:::i;:::-;2484:63;;2440:117;2235:329;;;;:::o;2570:474::-;2638:6;2646;2695:2;2683:9;2674:7;2670:23;2666:32;2663:119;;;2701:79;;:::i;:::-;2663:119;2821:1;2846:53;2891:7;2882:6;2871:9;2867:22;2846:53;:::i;:::-;2836:63;;2792:117;2948:2;2974:53;3019:7;3010:6;2999:9;2995:22;2974:53;:::i;:::-;2964:63;;2919:118;2570:474;;;;;:::o;3050:619::-;3127:6;3135;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3573:2;3599:53;3644:7;3635:6;3624:9;3620:22;3599:53;:::i;:::-;3589:63;;3544:118;3050:619;;;;;:::o;3675:943::-;3770:6;3778;3786;3794;3843:3;3831:9;3822:7;3818:23;3814:33;3811:120;;;3850:79;;:::i;:::-;3811:120;3970:1;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3941:117;4097:2;4123:53;4168:7;4159:6;4148:9;4144:22;4123:53;:::i;:::-;4113:63;;4068:118;4225:2;4251:53;4296:7;4287:6;4276:9;4272:22;4251:53;:::i;:::-;4241:63;;4196:118;4381:2;4370:9;4366:18;4353:32;4412:18;4404:6;4401:30;4398:117;;;4434:79;;:::i;:::-;4398:117;4539:62;4593:7;4584:6;4573:9;4569:22;4539:62;:::i;:::-;4529:72;;4324:287;3675:943;;;;;;;:::o;4624:468::-;4689:6;4697;4746:2;4734:9;4725:7;4721:23;4717:32;4714:119;;;4752:79;;:::i;:::-;4714:119;4872:1;4897:53;4942:7;4933:6;4922:9;4918:22;4897:53;:::i;:::-;4887:63;;4843:117;4999:2;5025:50;5067:7;5058:6;5047:9;5043:22;5025:50;:::i;:::-;5015:60;;4970:115;4624:468;;;;;:::o;5098:474::-;5166:6;5174;5223:2;5211:9;5202:7;5198:23;5194:32;5191:119;;;5229:79;;:::i;:::-;5191:119;5349:1;5374:53;5419:7;5410:6;5399:9;5395:22;5374:53;:::i;:::-;5364:63;;5320:117;5476:2;5502:53;5547:7;5538:6;5527:9;5523:22;5502:53;:::i;:::-;5492:63;;5447:118;5098:474;;;;;:::o;5578:559::-;5664:6;5672;5721:2;5709:9;5700:7;5696:23;5692:32;5689:119;;;5727:79;;:::i;:::-;5689:119;5875:1;5864:9;5860:17;5847:31;5905:18;5897:6;5894:30;5891:117;;;5927:79;;:::i;:::-;5891:117;6040:80;6112:7;6103:6;6092:9;6088:22;6040:80;:::i;:::-;6022:98;;;;5818:312;5578:559;;;;;:::o;6143:704::-;6238:6;6246;6254;6303:2;6291:9;6282:7;6278:23;6274:32;6271:119;;;6309:79;;:::i;:::-;6271:119;6457:1;6446:9;6442:17;6429:31;6487:18;6479:6;6476:30;6473:117;;;6509:79;;:::i;:::-;6473:117;6622:80;6694:7;6685:6;6674:9;6670:22;6622:80;:::i;:::-;6604:98;;;;6400:312;6751:2;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6722:118;6143:704;;;;;:::o;6853:329::-;6912:6;6961:2;6949:9;6940:7;6936:23;6932:32;6929:119;;;6967:79;;:::i;:::-;6929:119;7087:1;7112:53;7157:7;7148:6;7137:9;7133:22;7112:53;:::i;:::-;7102:63;;7058:117;6853:329;;;;:::o;7188:327::-;7246:6;7295:2;7283:9;7274:7;7270:23;7266:32;7263:119;;;7301:79;;:::i;:::-;7263:119;7421:1;7446:52;7490:7;7481:6;7470:9;7466:22;7446:52;:::i;:::-;7436:62;;7392:116;7188:327;;;;:::o;7521:349::-;7590:6;7639:2;7627:9;7618:7;7614:23;7610:32;7607:119;;;7645:79;;:::i;:::-;7607:119;7765:1;7790:63;7845:7;7836:6;7825:9;7821:22;7790:63;:::i;:::-;7780:73;;7736:127;7521:349;;;;:::o;7876:329::-;7935:6;7984:2;7972:9;7963:7;7959:23;7955:32;7952:119;;;7990:79;;:::i;:::-;7952:119;8110:1;8135:53;8180:7;8171:6;8160:9;8156:22;8135:53;:::i;:::-;8125:63;;8081:117;7876:329;;;;:::o;8211:118::-;8298:24;8316:5;8298:24;:::i;:::-;8293:3;8286:37;8211:118;;:::o;8335:157::-;8440:45;8460:24;8478:5;8460:24;:::i;:::-;8440:45;:::i;:::-;8435:3;8428:58;8335:157;;:::o;8498:109::-;8579:21;8594:5;8579:21;:::i;:::-;8574:3;8567:34;8498:109;;:::o;8613:118::-;8700:24;8718:5;8700:24;:::i;:::-;8695:3;8688:37;8613:118;;:::o;8737:360::-;8823:3;8851:38;8883:5;8851:38;:::i;:::-;8905:70;8968:6;8963:3;8905:70;:::i;:::-;8898:77;;8984:52;9029:6;9024:3;9017:4;9010:5;9006:16;8984:52;:::i;:::-;9061:29;9083:6;9061:29;:::i;:::-;9056:3;9052:39;9045:46;;8827:270;8737:360;;;;:::o;9103:364::-;9191:3;9219:39;9252:5;9219:39;:::i;:::-;9274:71;9338:6;9333:3;9274:71;:::i;:::-;9267:78;;9354:52;9399:6;9394:3;9387:4;9380:5;9376:16;9354:52;:::i;:::-;9431:29;9453:6;9431:29;:::i;:::-;9426:3;9422:39;9415:46;;9195:272;9103:364;;;;:::o;9473:377::-;9579:3;9607:39;9640:5;9607:39;:::i;:::-;9662:89;9744:6;9739:3;9662:89;:::i;:::-;9655:96;;9760:52;9805:6;9800:3;9793:4;9786:5;9782:16;9760:52;:::i;:::-;9837:6;9832:3;9828:16;9821:23;;9583:267;9473:377;;;;:::o;9856:366::-;9998:3;10019:67;10083:2;10078:3;10019:67;:::i;:::-;10012:74;;10095:93;10184:3;10095:93;:::i;:::-;10213:2;10208:3;10204:12;10197:19;;9856:366;;;:::o;10228:::-;10370:3;10391:67;10455:2;10450:3;10391:67;:::i;:::-;10384:74;;10467:93;10556:3;10467:93;:::i;:::-;10585:2;10580:3;10576:12;10569:19;;10228:366;;;:::o;10600:::-;10742:3;10763:67;10827:2;10822:3;10763:67;:::i;:::-;10756:74;;10839:93;10928:3;10839:93;:::i;:::-;10957:2;10952:3;10948:12;10941:19;;10600:366;;;:::o;10972:402::-;11132:3;11153:85;11235:2;11230:3;11153:85;:::i;:::-;11146:92;;11247:93;11336:3;11247:93;:::i;:::-;11365:2;11360:3;11356:12;11349:19;;10972:402;;;:::o;11380:366::-;11522:3;11543:67;11607:2;11602:3;11543:67;:::i;:::-;11536:74;;11619:93;11708:3;11619:93;:::i;:::-;11737:2;11732:3;11728:12;11721:19;;11380:366;;;:::o;11752:::-;11894:3;11915:67;11979:2;11974:3;11915:67;:::i;:::-;11908:74;;11991:93;12080:3;11991:93;:::i;:::-;12109:2;12104:3;12100:12;12093:19;;11752:366;;;:::o;12124:::-;12266:3;12287:67;12351:2;12346:3;12287:67;:::i;:::-;12280:74;;12363:93;12452:3;12363:93;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12124:366;;;:::o;12496:::-;12638:3;12659:67;12723:2;12718:3;12659:67;:::i;:::-;12652:74;;12735:93;12824:3;12735:93;:::i;:::-;12853:2;12848:3;12844:12;12837:19;;12496:366;;;:::o;12868:::-;13010:3;13031:67;13095:2;13090:3;13031:67;:::i;:::-;13024:74;;13107:93;13196:3;13107:93;:::i;:::-;13225:2;13220:3;13216:12;13209:19;;12868:366;;;:::o;13240:::-;13382:3;13403:67;13467:2;13462:3;13403:67;:::i;:::-;13396:74;;13479:93;13568:3;13479:93;:::i;:::-;13597:2;13592:3;13588:12;13581:19;;13240:366;;;:::o;13612:::-;13754:3;13775:67;13839:2;13834:3;13775:67;:::i;:::-;13768:74;;13851:93;13940:3;13851:93;:::i;:::-;13969:2;13964:3;13960:12;13953:19;;13612:366;;;:::o;13984:::-;14126:3;14147:67;14211:2;14206:3;14147:67;:::i;:::-;14140:74;;14223:93;14312:3;14223:93;:::i;:::-;14341:2;14336:3;14332:12;14325:19;;13984:366;;;:::o;14356:::-;14498:3;14519:67;14583:2;14578:3;14519:67;:::i;:::-;14512:74;;14595:93;14684:3;14595:93;:::i;:::-;14713:2;14708:3;14704:12;14697:19;;14356:366;;;:::o;14728:::-;14870:3;14891:67;14955:2;14950:3;14891:67;:::i;:::-;14884:74;;14967:93;15056:3;14967:93;:::i;:::-;15085:2;15080:3;15076:12;15069:19;;14728:366;;;:::o;15100:::-;15242:3;15263:67;15327:2;15322:3;15263:67;:::i;:::-;15256:74;;15339:93;15428:3;15339:93;:::i;:::-;15457:2;15452:3;15448:12;15441:19;;15100:366;;;:::o;15472:::-;15614:3;15635:67;15699:2;15694:3;15635:67;:::i;:::-;15628:74;;15711:93;15800:3;15711:93;:::i;:::-;15829:2;15824:3;15820:12;15813:19;;15472:366;;;:::o;15844:::-;15986:3;16007:67;16071:2;16066:3;16007:67;:::i;:::-;16000:74;;16083:93;16172:3;16083:93;:::i;:::-;16201:2;16196:3;16192:12;16185:19;;15844:366;;;:::o;16216:::-;16358:3;16379:67;16443:2;16438:3;16379:67;:::i;:::-;16372:74;;16455:93;16544:3;16455:93;:::i;:::-;16573:2;16568:3;16564:12;16557:19;;16216:366;;;:::o;16588:::-;16730:3;16751:67;16815:2;16810:3;16751:67;:::i;:::-;16744:74;;16827:93;16916:3;16827:93;:::i;:::-;16945:2;16940:3;16936:12;16929:19;;16588:366;;;:::o;16960:::-;17102:3;17123:67;17187:2;17182:3;17123:67;:::i;:::-;17116:74;;17199:93;17288:3;17199:93;:::i;:::-;17317:2;17312:3;17308:12;17301:19;;16960:366;;;:::o;17332:::-;17474:3;17495:67;17559:2;17554:3;17495:67;:::i;:::-;17488:74;;17571:93;17660:3;17571:93;:::i;:::-;17689:2;17684:3;17680:12;17673:19;;17332:366;;;:::o;17704:::-;17846:3;17867:67;17931:2;17926:3;17867:67;:::i;:::-;17860:74;;17943:93;18032:3;17943:93;:::i;:::-;18061:2;18056:3;18052:12;18045:19;;17704:366;;;:::o;18076:::-;18218:3;18239:67;18303:2;18298:3;18239:67;:::i;:::-;18232:74;;18315:93;18404:3;18315:93;:::i;:::-;18433:2;18428:3;18424:12;18417:19;;18076:366;;;:::o;18448:::-;18590:3;18611:67;18675:2;18670:3;18611:67;:::i;:::-;18604:74;;18687:93;18776:3;18687:93;:::i;:::-;18805:2;18800:3;18796:12;18789:19;;18448:366;;;:::o;18820:::-;18962:3;18983:67;19047:2;19042:3;18983:67;:::i;:::-;18976:74;;19059:93;19148:3;19059:93;:::i;:::-;19177:2;19172:3;19168:12;19161:19;;18820:366;;;:::o;19192:::-;19334:3;19355:67;19419:2;19414:3;19355:67;:::i;:::-;19348:74;;19431:93;19520:3;19431:93;:::i;:::-;19549:2;19544:3;19540:12;19533:19;;19192:366;;;:::o;19564:::-;19706:3;19727:67;19791:2;19786:3;19727:67;:::i;:::-;19720:74;;19803:93;19892:3;19803:93;:::i;:::-;19921:2;19916:3;19912:12;19905:19;;19564:366;;;:::o;19936:::-;20078:3;20099:67;20163:2;20158:3;20099:67;:::i;:::-;20092:74;;20175:93;20264:3;20175:93;:::i;:::-;20293:2;20288:3;20284:12;20277:19;;19936:366;;;:::o;20308:::-;20450:3;20471:67;20535:2;20530:3;20471:67;:::i;:::-;20464:74;;20547:93;20636:3;20547:93;:::i;:::-;20665:2;20660:3;20656:12;20649:19;;20308:366;;;:::o;20680:::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:118::-;21139:24;21157:5;21139:24;:::i;:::-;21134:3;21127:37;21052:118;;:::o;21176:256::-;21288:3;21303:75;21374:3;21365:6;21303:75;:::i;:::-;21403:2;21398:3;21394:12;21387:19;;21423:3;21416:10;;21176:256;;;;:::o;21438:541::-;21671:3;21693:148;21837:3;21693:148;:::i;:::-;21686:155;;21858:95;21949:3;21940:6;21858:95;:::i;:::-;21851:102;;21970:3;21963:10;;21438:541;;;;:::o;21985:222::-;22078:4;22116:2;22105:9;22101:18;22093:26;;22129:71;22197:1;22186:9;22182:17;22173:6;22129:71;:::i;:::-;21985:222;;;;:::o;22213:640::-;22408:4;22446:3;22435:9;22431:19;22423:27;;22460:71;22528:1;22517:9;22513:17;22504:6;22460:71;:::i;:::-;22541:72;22609:2;22598:9;22594:18;22585:6;22541:72;:::i;:::-;22623;22691:2;22680:9;22676:18;22667:6;22623:72;:::i;:::-;22742:9;22736:4;22732:20;22727:2;22716:9;22712:18;22705:48;22770:76;22841:4;22832:6;22770:76;:::i;:::-;22762:84;;22213:640;;;;;;;:::o;22859:210::-;22946:4;22984:2;22973:9;22969:18;22961:26;;22997:65;23059:1;23048:9;23044:17;23035:6;22997:65;:::i;:::-;22859:210;;;;:::o;23075:222::-;23168:4;23206:2;23195:9;23191:18;23183:26;;23219:71;23287:1;23276:9;23272:17;23263:6;23219:71;:::i;:::-;23075:222;;;;:::o;23303:313::-;23416:4;23454:2;23443:9;23439:18;23431:26;;23503:9;23497:4;23493:20;23489:1;23478:9;23474:17;23467:47;23531:78;23604:4;23595:6;23531:78;:::i;:::-;23523:86;;23303:313;;;;:::o;23622:419::-;23788:4;23826:2;23815:9;23811:18;23803:26;;23875:9;23869:4;23865:20;23861:1;23850:9;23846:17;23839:47;23903:131;24029:4;23903:131;:::i;:::-;23895:139;;23622:419;;;:::o;24047:::-;24213:4;24251:2;24240:9;24236:18;24228:26;;24300:9;24294:4;24290:20;24286:1;24275:9;24271:17;24264:47;24328:131;24454:4;24328:131;:::i;:::-;24320:139;;24047:419;;;:::o;24472:::-;24638:4;24676:2;24665:9;24661:18;24653:26;;24725:9;24719:4;24715:20;24711:1;24700:9;24696:17;24689:47;24753:131;24879:4;24753:131;:::i;:::-;24745:139;;24472:419;;;:::o;24897:::-;25063:4;25101:2;25090:9;25086:18;25078:26;;25150:9;25144:4;25140:20;25136:1;25125:9;25121:17;25114:47;25178:131;25304:4;25178:131;:::i;:::-;25170:139;;24897:419;;;:::o;25322:::-;25488:4;25526:2;25515:9;25511:18;25503:26;;25575:9;25569:4;25565:20;25561:1;25550:9;25546:17;25539:47;25603:131;25729:4;25603:131;:::i;:::-;25595:139;;25322:419;;;:::o;25747:::-;25913:4;25951:2;25940:9;25936:18;25928:26;;26000:9;25994:4;25990:20;25986:1;25975:9;25971:17;25964:47;26028:131;26154:4;26028:131;:::i;:::-;26020:139;;25747:419;;;:::o;26172:::-;26338:4;26376:2;26365:9;26361:18;26353:26;;26425:9;26419:4;26415:20;26411:1;26400:9;26396:17;26389:47;26453:131;26579:4;26453:131;:::i;:::-;26445:139;;26172:419;;;:::o;26597:::-;26763:4;26801:2;26790:9;26786:18;26778:26;;26850:9;26844:4;26840:20;26836:1;26825:9;26821:17;26814:47;26878:131;27004:4;26878:131;:::i;:::-;26870:139;;26597:419;;;:::o;27022:::-;27188:4;27226:2;27215:9;27211:18;27203:26;;27275:9;27269:4;27265:20;27261:1;27250:9;27246:17;27239:47;27303:131;27429:4;27303:131;:::i;:::-;27295:139;;27022:419;;;:::o;27447:::-;27613:4;27651:2;27640:9;27636:18;27628:26;;27700:9;27694:4;27690:20;27686:1;27675:9;27671:17;27664:47;27728:131;27854:4;27728:131;:::i;:::-;27720:139;;27447:419;;;:::o;27872:::-;28038:4;28076:2;28065:9;28061:18;28053:26;;28125:9;28119:4;28115:20;28111:1;28100:9;28096:17;28089:47;28153:131;28279:4;28153:131;:::i;:::-;28145:139;;27872:419;;;:::o;28297:::-;28463:4;28501:2;28490:9;28486:18;28478:26;;28550:9;28544:4;28540:20;28536:1;28525:9;28521:17;28514:47;28578:131;28704:4;28578:131;:::i;:::-;28570:139;;28297:419;;;:::o;28722:::-;28888:4;28926:2;28915:9;28911:18;28903:26;;28975:9;28969:4;28965:20;28961:1;28950:9;28946:17;28939:47;29003:131;29129:4;29003:131;:::i;:::-;28995:139;;28722:419;;;:::o;29147:::-;29313:4;29351:2;29340:9;29336:18;29328:26;;29400:9;29394:4;29390:20;29386:1;29375:9;29371:17;29364:47;29428:131;29554:4;29428:131;:::i;:::-;29420:139;;29147:419;;;:::o;29572:::-;29738:4;29776:2;29765:9;29761:18;29753:26;;29825:9;29819:4;29815:20;29811:1;29800:9;29796:17;29789:47;29853:131;29979:4;29853:131;:::i;:::-;29845:139;;29572:419;;;:::o;29997:::-;30163:4;30201:2;30190:9;30186:18;30178:26;;30250:9;30244:4;30240:20;30236:1;30225:9;30221:17;30214:47;30278:131;30404:4;30278:131;:::i;:::-;30270:139;;29997:419;;;:::o;30422:::-;30588:4;30626:2;30615:9;30611:18;30603:26;;30675:9;30669:4;30665:20;30661:1;30650:9;30646:17;30639:47;30703:131;30829:4;30703:131;:::i;:::-;30695:139;;30422:419;;;:::o;30847:::-;31013:4;31051:2;31040:9;31036:18;31028:26;;31100:9;31094:4;31090:20;31086:1;31075:9;31071:17;31064:47;31128:131;31254:4;31128:131;:::i;:::-;31120:139;;30847:419;;;:::o;31272:::-;31438:4;31476:2;31465:9;31461:18;31453:26;;31525:9;31519:4;31515:20;31511:1;31500:9;31496:17;31489:47;31553:131;31679:4;31553:131;:::i;:::-;31545:139;;31272:419;;;:::o;31697:::-;31863:4;31901:2;31890:9;31886:18;31878:26;;31950:9;31944:4;31940:20;31936:1;31925:9;31921:17;31914:47;31978:131;32104:4;31978:131;:::i;:::-;31970:139;;31697:419;;;:::o;32122:::-;32288:4;32326:2;32315:9;32311:18;32303:26;;32375:9;32369:4;32365:20;32361:1;32350:9;32346:17;32339:47;32403:131;32529:4;32403:131;:::i;:::-;32395:139;;32122:419;;;:::o;32547:::-;32713:4;32751:2;32740:9;32736:18;32728:26;;32800:9;32794:4;32790:20;32786:1;32775:9;32771:17;32764:47;32828:131;32954:4;32828:131;:::i;:::-;32820:139;;32547:419;;;:::o;32972:::-;33138:4;33176:2;33165:9;33161:18;33153:26;;33225:9;33219:4;33215:20;33211:1;33200:9;33196:17;33189:47;33253:131;33379:4;33253:131;:::i;:::-;33245:139;;32972:419;;;:::o;33397:::-;33563:4;33601:2;33590:9;33586:18;33578:26;;33650:9;33644:4;33640:20;33636:1;33625:9;33621:17;33614:47;33678:131;33804:4;33678:131;:::i;:::-;33670:139;;33397:419;;;:::o;33822:::-;33988:4;34026:2;34015:9;34011:18;34003:26;;34075:9;34069:4;34065:20;34061:1;34050:9;34046:17;34039:47;34103:131;34229:4;34103:131;:::i;:::-;34095:139;;33822:419;;;:::o;34247:::-;34413:4;34451:2;34440:9;34436:18;34428:26;;34500:9;34494:4;34490:20;34486:1;34475:9;34471:17;34464:47;34528:131;34654:4;34528:131;:::i;:::-;34520:139;;34247:419;;;:::o;34672:::-;34838:4;34876:2;34865:9;34861:18;34853:26;;34925:9;34919:4;34915:20;34911:1;34900:9;34896:17;34889:47;34953:131;35079:4;34953:131;:::i;:::-;34945:139;;34672:419;;;:::o;35097:::-;35263:4;35301:2;35290:9;35286:18;35278:26;;35350:9;35344:4;35340:20;35336:1;35325:9;35321:17;35314:47;35378:131;35504:4;35378:131;:::i;:::-;35370:139;;35097:419;;;:::o;35522:::-;35688:4;35726:2;35715:9;35711:18;35703:26;;35775:9;35769:4;35765:20;35761:1;35750:9;35746:17;35739:47;35803:131;35929:4;35803:131;:::i;:::-;35795:139;;35522:419;;;:::o;35947:222::-;36040:4;36078:2;36067:9;36063:18;36055:26;;36091:71;36159:1;36148:9;36144:17;36135:6;36091:71;:::i;:::-;35947:222;;;;:::o;36175:129::-;36209:6;36236:20;;:::i;:::-;36226:30;;36265:33;36293:4;36285:6;36265:33;:::i;:::-;36175:129;;;:::o;36310:75::-;36343:6;36376:2;36370:9;36360:19;;36310:75;:::o;36391:307::-;36452:4;36542:18;36534:6;36531:30;36528:56;;;36564:18;;:::i;:::-;36528:56;36602:29;36624:6;36602:29;:::i;:::-;36594:37;;36686:4;36680;36676:15;36668:23;;36391:307;;;:::o;36704:98::-;36755:6;36789:5;36783:12;36773:22;;36704:98;;;:::o;36808:99::-;36860:6;36894:5;36888:12;36878:22;;36808:99;;;:::o;36913:168::-;36996:11;37030:6;37025:3;37018:19;37070:4;37065:3;37061:14;37046:29;;36913:168;;;;:::o;37087:169::-;37171:11;37205:6;37200:3;37193:19;37245:4;37240:3;37236:14;37221:29;;37087:169;;;;:::o;37262:148::-;37364:11;37401:3;37386:18;;37262:148;;;;:::o;37416:305::-;37456:3;37475:20;37493:1;37475:20;:::i;:::-;37470:25;;37509:20;37527:1;37509:20;:::i;:::-;37504:25;;37663:1;37595:66;37591:74;37588:1;37585:81;37582:107;;;37669:18;;:::i;:::-;37582:107;37713:1;37710;37706:9;37699:16;;37416:305;;;;:::o;37727:185::-;37767:1;37784:20;37802:1;37784:20;:::i;:::-;37779:25;;37818:20;37836:1;37818:20;:::i;:::-;37813:25;;37857:1;37847:35;;37862:18;;:::i;:::-;37847:35;37904:1;37901;37897:9;37892:14;;37727:185;;;;:::o;37918:348::-;37958:7;37981:20;37999:1;37981:20;:::i;:::-;37976:25;;38015:20;38033:1;38015:20;:::i;:::-;38010:25;;38203:1;38135:66;38131:74;38128:1;38125:81;38120:1;38113:9;38106:17;38102:105;38099:131;;;38210:18;;:::i;:::-;38099:131;38258:1;38255;38251:9;38240:20;;37918:348;;;;:::o;38272:191::-;38312:4;38332:20;38350:1;38332:20;:::i;:::-;38327:25;;38366:20;38384:1;38366:20;:::i;:::-;38361:25;;38405:1;38402;38399:8;38396:34;;;38410:18;;:::i;:::-;38396:34;38455:1;38452;38448:9;38440:17;;38272:191;;;;:::o;38469:96::-;38506:7;38535:24;38553:5;38535:24;:::i;:::-;38524:35;;38469:96;;;:::o;38571:90::-;38605:7;38648:5;38641:13;38634:21;38623:32;;38571:90;;;:::o;38667:77::-;38704:7;38733:5;38722:16;;38667:77;;;:::o;38750:149::-;38786:7;38826:66;38819:5;38815:78;38804:89;;38750:149;;;:::o;38905:126::-;38942:7;38982:42;38975:5;38971:54;38960:65;;38905:126;;;:::o;39037:77::-;39074:7;39103:5;39092:16;;39037:77;;;:::o;39120:154::-;39204:6;39199:3;39194;39181:30;39266:1;39257:6;39252:3;39248:16;39241:27;39120:154;;;:::o;39280:307::-;39348:1;39358:113;39372:6;39369:1;39366:13;39358:113;;;39457:1;39452:3;39448:11;39442:18;39438:1;39433:3;39429:11;39422:39;39394:2;39391:1;39387:10;39382:15;;39358:113;;;39489:6;39486:1;39483:13;39480:101;;;39569:1;39560:6;39555:3;39551:16;39544:27;39480:101;39329:258;39280:307;;;:::o;39593:320::-;39637:6;39674:1;39668:4;39664:12;39654:22;;39721:1;39715:4;39711:12;39742:18;39732:81;;39798:4;39790:6;39786:17;39776:27;;39732:81;39860:2;39852:6;39849:14;39829:18;39826:38;39823:84;;;39879:18;;:::i;:::-;39823:84;39644:269;39593:320;;;:::o;39919:281::-;40002:27;40024:4;40002:27;:::i;:::-;39994:6;39990:40;40132:6;40120:10;40117:22;40096:18;40084:10;40081:34;40078:62;40075:88;;;40143:18;;:::i;:::-;40075:88;40183:10;40179:2;40172:22;39962:238;39919:281;;:::o;40206:233::-;40245:3;40268:24;40286:5;40268:24;:::i;:::-;40259:33;;40314:66;40307:5;40304:77;40301:103;;;40384:18;;:::i;:::-;40301:103;40431:1;40424:5;40420:13;40413:20;;40206:233;;;:::o;40445:100::-;40484:7;40513:26;40533:5;40513:26;:::i;:::-;40502:37;;40445:100;;;:::o;40551:94::-;40590:7;40619:20;40633:5;40619:20;:::i;:::-;40608:31;;40551:94;;;:::o;40651:176::-;40683:1;40700:20;40718:1;40700:20;:::i;:::-;40695:25;;40734:20;40752:1;40734:20;:::i;:::-;40729:25;;40773:1;40763:35;;40778:18;;:::i;:::-;40763:35;40819:1;40816;40812:9;40807:14;;40651:176;;;;:::o;40833:180::-;40881:77;40878:1;40871:88;40978:4;40975:1;40968:15;41002:4;40999:1;40992:15;41019:180;41067:77;41064:1;41057:88;41164:4;41161:1;41154:15;41188:4;41185:1;41178:15;41205:180;41253:77;41250:1;41243:88;41350:4;41347:1;41340:15;41374:4;41371:1;41364:15;41391:180;41439:77;41436:1;41429:88;41536:4;41533:1;41526:15;41560:4;41557:1;41550:15;41577:180;41625:77;41622:1;41615:88;41722:4;41719:1;41712:15;41746:4;41743:1;41736:15;41763:117;41872:1;41869;41862:12;41886:117;41995:1;41992;41985:12;42009:117;42118:1;42115;42108:12;42132:117;42241:1;42238;42231:12;42255:117;42364:1;42361;42354:12;42378:117;42487:1;42484;42477:12;42501:102;42542:6;42593:2;42589:7;42584:2;42577:5;42573:14;42569:28;42559:38;;42501:102;;;:::o;42609:94::-;42642:8;42690:5;42686:2;42682:14;42661:35;;42609:94;;;:::o;42709:221::-;42849:34;42845:1;42837:6;42833:14;42826:58;42918:4;42913:2;42905:6;42901:15;42894:29;42709:221;:::o;42936:172::-;43076:24;43072:1;43064:6;43060:14;43053:48;42936:172;:::o;43114:231::-;43254:34;43250:1;43242:6;43238:14;43231:58;43323:14;43318:2;43310:6;43306:15;43299:39;43114:231;:::o;43351:185::-;43491:33;43487:1;43479:6;43475:14;43468:57;43351:185;:::o;43546:237::-;43690:34;43686:1;43678:6;43674:14;43667:58;43763:8;43758:2;43750:6;43746:15;43739:33;43546:237;:::o;43793:241::-;43937:34;43933:1;43925:6;43921:14;43914:58;44010:12;44005:2;43997:6;43993:15;43986:37;43793:241;:::o;44044:187::-;44188:31;44184:1;44176:6;44172:14;44165:55;44044:187;:::o;44241:234::-;44385:34;44381:1;44373:6;44369:14;44362:58;44458:5;44453:2;44445:6;44441:15;44434:30;44241:234;:::o;44485:236::-;44629:34;44625:1;44617:6;44613:14;44606:58;44702:7;44697:2;44689:6;44685:15;44678:32;44485:236;:::o;44731:185::-;44875:29;44871:1;44863:6;44859:14;44852:53;44731:185;:::o;44926:177::-;45070:21;45066:1;45058:6;45054:14;45047:45;44926:177;:::o;45113:256::-;45257:34;45253:1;45245:6;45241:14;45234:58;45330:27;45325:2;45317:6;45313:15;45306:52;45113:256;:::o;45379:242::-;45523:34;45519:1;45511:6;45507:14;45500:58;45596:13;45591:2;45583:6;45579:15;45572:38;45379:242;:::o;45631:237::-;45775:34;45771:1;45763:6;45759:14;45752:58;45848:8;45843:2;45835:6;45831:15;45824:33;45631:237;:::o;45878:190::-;46022:34;46018:1;46010:6;46006:14;45999:58;45878:190;:::o;46078:184::-;46222:28;46218:1;46210:6;46206:14;46199:52;46078:184;:::o;46272:249::-;46416:34;46412:1;46404:6;46400:14;46393:58;46489:20;46484:2;46476:6;46472:15;46465:45;46272:249;:::o;46531:188::-;46675:32;46671:1;46663:6;46659:14;46652:56;46531:188;:::o;46729:184::-;46873:28;46869:1;46861:6;46857:14;46850:52;46729:184;:::o;46923:175::-;47067:19;47063:1;47055:6;47051:14;47044:43;46923:175;:::o;47108:233::-;47252:34;47248:1;47240:6;47236:14;47229:58;47325:4;47320:2;47312:6;47308:15;47301:29;47108:233;:::o;47351:250::-;47495:34;47491:1;47483:6;47479:14;47472:58;47568:21;47563:2;47555:6;47551:15;47544:46;47351:250;:::o;47611:232::-;47755:34;47751:1;47743:6;47739:14;47732:58;47828:3;47823:2;47815:6;47811:15;47804:28;47611:232;:::o;47853:184::-;47997:28;47993:1;47985:6;47981:14;47974:52;47853:184;:::o;48047:171::-;48191:15;48187:1;48179:6;48175:14;48168:39;48047:171;:::o;48228:239::-;48372:34;48368:1;48360:6;48356:14;48349:58;48445:10;48440:2;48432:6;48428:15;48421:35;48228:239;:::o;48477:245::-;48621:34;48617:1;48609:6;48605:14;48598:58;48694:16;48689:2;48681:6;48677:15;48670:41;48477:245;:::o;48732:246::-;48876:34;48872:1;48864:6;48860:14;48853:58;48949:17;48944:2;48936:6;48932:15;48925:42;48732:246;:::o;48988:244::-;49132:34;49128:1;49120:6;49116:14;49109:58;49205:15;49200:2;49192:6;49188:15;49181:40;48988:244;:::o;49242:232::-;49386:34;49382:1;49374:6;49370:14;49363:58;49459:3;49454:2;49446:6;49442:15;49435:28;49242:232;:::o;49484:130::-;49561:24;49579:5;49561:24;:::i;:::-;49554:5;49551:35;49541:63;;49600:1;49597;49590:12;49541:63;49484:130;:::o;49624:124::-;49698:21;49713:5;49698:21;:::i;:::-;49691:5;49688:32;49678:60;;49734:1;49731;49724:12;49678:60;49624:124;:::o;49758:130::-;49835:24;49853:5;49835:24;:::i;:::-;49828:5;49825:35;49815:63;;49874:1;49871;49864:12;49815:63;49758:130;:::o;49898:128::-;49974:23;49991:5;49974:23;:::i;:::-;49967:5;49964:34;49954:62;;50012:1;50009;50002:12;49954:62;49898:128;:::o;50036:130::-;50113:24;50131:5;50113:24;:::i;:::-;50106:5;50103:35;50093:63;;50152:1;50149;50142:12;50093:63;50036:130;:::o

Swarm Source

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