ETH Price: $2,359.86 (+0.83%)

Token

Robottos (Robo)
 

Overview

Max Total Supply

444 Robo

Holders

176

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 Robo
0x37db633bfa5a16f23e005995922039cab167831c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Robottos

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// 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/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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.6.0) (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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

// 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: 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 override {
        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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



pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// 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() {
        _setOwner(_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 {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

//newerc.sol
pragma solidity ^0.8.0;


contract Robottos is ERC721A, Ownable, Pausable, ReentrancyGuard {
    using Strings for uint256;
    string public baseURI;
    uint256 public cost = 0.006 ether;
    uint256 public maxSupply = 444;
    uint256 public maxFree = 0;
    uint256 public maxperAddressFreeLimit = 0;
    uint256 public maxperTxnPublicMint = 4;
    bool public saleIsActive = false;

    mapping(address => uint256) public addressFreeMintedBalance;

    constructor() ERC721A("Robottos", "Robo") {
        setBaseURI("ipfs://metadataCIDcomingSoon/");

    }

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

    function freeMint(uint256 _mintAmount) public payable nonReentrant{
		uint256 s = totalSupply();
        uint256 addressFreeMintedCount = addressFreeMintedBalance[msg.sender];
        require(saleIsActive, "Sale not active");
        require(addressFreeMintedCount + _mintAmount <= maxperAddressFreeLimit, "max free NFT per wallet exceeded");
		require(_mintAmount > 0, "Cant mint 0" );
		require(s + _mintAmount <= maxFree, "Cant go over supply" );
		for (uint256 i = 0; i < _mintAmount; ++i) {
            addressFreeMintedBalance[msg.sender]++;

		}
        _safeMint(msg.sender, _mintAmount);
		delete s;
        delete addressFreeMintedCount;
	}


    function mint(uint256 _mintAmount) public payable nonReentrant {
        uint256 s = totalSupply();
        require(saleIsActive, "Sale not active");
        require(_mintAmount > 0, "Cant mint 0");
        require(_mintAmount <= maxperTxnPublicMint, "Cant mint more than maxperTxnPublicMint" );
        require(s + _mintAmount <= maxSupply, "Cant go over supply");
        require(msg.value >= cost * _mintAmount);
        _safeMint(msg.sender, _mintAmount);
        delete s;
    }

    function devMint(uint256 _mintAmount) public payable nonReentrant onlyOwner {
        uint256 s = totalSupply();
        require(_mintAmount > 0, "Cant mint 0");
        require(s + _mintAmount <= maxSupply, "Cant go over supply");
        _safeMint(msg.sender, _mintAmount);
        delete s;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json"))
                : "";
    }

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

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxSupply(uint256 _newMaxSupply) public onlyOwner {
        require(_newMaxSupply <= maxSupply, "Cannot increase max supply");
        maxSupply = _newMaxSupply;
    }
     function setmaxFreeSupply(uint256 _newMaxFreeSupply) public onlyOwner {
               maxFree = _newMaxFreeSupply;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setMaxperTxnPublicMint(uint256 _amount) public onlyOwner {
        maxperTxnPublicMint = _amount;
    }

    function setMaxperAddressFreeMint(uint256 _amount) public onlyOwner{
        maxperAddressFreeLimit = _amount;
    }
    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }
}

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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFreeMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressFreeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperTxnPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperTxnPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxFreeSupply","type":"uint256"}],"name":"setmaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052661550f7dca70000600a556101bc600b556000600c556000600d556004600e556000600f60006101000a81548160ff0219169083151502179055503480156200004c57600080fd5b506040518060400160405280600881526020017f526f626f74746f730000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f526f626f000000000000000000000000000000000000000000000000000000008152508160019081620000ca919062000584565b508060029081620000dc919062000584565b505050620000ff620000f36200016e60201b60201c565b6200017660201b60201c565b6000600760146101000a81548160ff0219169083151502179055506001600881905550620001686040518060400160405280601d81526020017f697066733a2f2f6d65746164617461434944636f6d696e67536f6f6e2f0000008152506200023c60201b60201c565b620006ee565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024c6200016e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000272620002e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c290620006cc565b60405180910390fd5b8060099081620002dc919062000584565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200038c57607f821691505b602082108103620003a257620003a162000344565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200040c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003cd565b620004188683620003cd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004656200045f620004598462000430565b6200043a565b62000430565b9050919050565b6000819050919050565b620004818362000444565b6200049962000490826200046c565b848454620003da565b825550505050565b600090565b620004b0620004a1565b620004bd81848462000476565b505050565b5b81811015620004e557620004d9600082620004a6565b600181019050620004c3565b5050565b601f8211156200053457620004fe81620003a8565b6200050984620003bd565b8101602085101562000519578190505b620005316200052885620003bd565b830182620004c2565b50505b505050565b600082821c905092915050565b6000620005596000198460080262000539565b1980831691505092915050565b600062000574838362000546565b9150826002028217905092915050565b6200058f826200030a565b67ffffffffffffffff811115620005ab57620005aa62000315565b5b620005b7825462000373565b620005c4828285620004e9565b600060209050601f831160018114620005fc5760008415620005e7578287015190505b620005f3858262000566565b86555062000663565b601f1984166200060c86620003a8565b60005b8281101562000636578489015182556001820191506020850194506020810190506200060f565b8683101562000656578489015162000652601f89168262000546565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006b46020836200066b565b9150620006c1826200067c565b602082019050919050565b60006020820190508181036000830152620006e781620006a5565b9050919050565b614c2880620006fe6000396000f3fe6080604052600436106102305760003560e01c80635c975abb1161012e578063a0712d68116100ab578063d5abeb011161006f578063d5abeb01146107f1578063dc4e66b51461081c578063e985e9c514610845578063eb8d244414610882578063f2fde38b146108ad57610230565b8063a0712d681461071d578063a22cb46514610739578063b88d4fde14610762578063bde12d731461078b578063c87b56dd146107b457610230565b8063715018a6116100f2578063715018a6146106575780637c6b172d1461066e5780637c928fe9146106ab5780638da5cb5b146106c757806395d89b41146106f257610230565b80635c975abb1461055c5780636352211e146105875780636838075b146105c45780636c0360eb146105ef57806370a082311461061a57610230565b806334918dfd116101bc578063485a68a311610180578063485a68a3146104775780634cdb966c146104a25780634f6ccce7146104cb57806355f804b31461050857806356569a1d1461053157610230565b806334918dfd146103e8578063375a069a146103ff5780633ccfd60b1461041b57806342842e0e1461042557806344a0d68a1461044e57610230565b806313faede61161020357806313faede61461030357806318160ddd1461032e578063228025e81461035957806323b872dd146103825780632f745c59146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613177565b6108d6565b60405161026991906131bf565b60405180910390f35b34801561027e57600080fd5b50610287610a20565b604051610294919061326a565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906132c2565b610ab2565b6040516102d19190613330565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613377565b610b37565b005b34801561030f57600080fd5b50610318610c4f565b60405161032591906133c6565b60405180910390f35b34801561033a57600080fd5b50610343610c55565b60405161035091906133c6565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906132c2565b610c5e565b005b34801561038e57600080fd5b506103a960048036038101906103a491906133e1565b610d29565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190613377565b610d39565b6040516103df91906133c6565b60405180910390f35b3480156103f457600080fd5b506103fd610f29565b005b610419600480360381019061041491906132c2565b610fd1565b005b610423611153565b005b34801561043157600080fd5b5061044c600480360381019061044791906133e1565b611248565b005b34801561045a57600080fd5b50610475600480360381019061047091906132c2565b611268565b005b34801561048357600080fd5b5061048c6112ee565b60405161049991906133c6565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906132c2565b6112f4565b005b3480156104d757600080fd5b506104f260048036038101906104ed91906132c2565b61137a565b6040516104ff91906133c6565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613569565b6113cd565b005b34801561053d57600080fd5b5061054661145c565b60405161055391906133c6565b60405180910390f35b34801561056857600080fd5b50610571611462565b60405161057e91906131bf565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a991906132c2565b611479565b6040516105bb9190613330565b60405180910390f35b3480156105d057600080fd5b506105d961148f565b6040516105e691906133c6565b60405180910390f35b3480156105fb57600080fd5b50610604611495565b604051610611919061326a565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c91906135b2565b611523565b60405161064e91906133c6565b60405180910390f35b34801561066357600080fd5b5061066c61160b565b005b34801561067a57600080fd5b50610695600480360381019061069091906135b2565b611693565b6040516106a291906133c6565b60405180910390f35b6106c560048036038101906106c091906132c2565b6116ab565b005b3480156106d357600080fd5b506106dc61190b565b6040516106e99190613330565b60405180910390f35b3480156106fe57600080fd5b50610707611935565b604051610714919061326a565b60405180910390f35b610737600480360381019061073291906132c2565b6119c7565b005b34801561074557600080fd5b50610760600480360381019061075b919061360b565b611b7b565b005b34801561076e57600080fd5b50610789600480360381019061078491906136ec565b611cfb565b005b34801561079757600080fd5b506107b260048036038101906107ad91906132c2565b611d57565b005b3480156107c057600080fd5b506107db60048036038101906107d691906132c2565b611ddd565b6040516107e8919061326a565b60405180910390f35b3480156107fd57600080fd5b50610806611e84565b60405161081391906133c6565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906132c2565b611e8a565b005b34801561085157600080fd5b5061086c6004803603810190610867919061376f565b611f10565b60405161087991906131bf565b60405180910390f35b34801561088e57600080fd5b50610897611fa4565b6040516108a491906131bf565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906135b2565b611fb7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a195750610a18826120ae565b5b9050919050565b606060018054610a2f906137de565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b906137de565b8015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b5050505050905090565b6000610abd82612118565b610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390613881565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4282611479565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613913565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd1612125565b73ffffffffffffffffffffffffffffffffffffffff161480610c005750610bff81610bfa612125565b611f10565b5b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906139a5565b60405180910390fd5b610c4a83838361212d565b505050565b600a5481565b60008054905090565b610c66612125565b73ffffffffffffffffffffffffffffffffffffffff16610c8461190b565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613a11565b60405180910390fd5b600b54811115610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690613a7d565b60405180910390fd5b80600b8190555050565b610d348383836121df565b505050565b6000610d4483611523565b8210610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613b0f565b60405180910390fd5b6000610d8f610c55565b905060008060005b83811015610ee7576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e8957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed957868403610ed0578195505050505050610f23565b83806001019450505b508080600101915050610d97565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90613ba1565b60405180910390fd5b92915050565b610f31612125565b73ffffffffffffffffffffffffffffffffffffffff16610f4f61190b565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90613a11565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600260085403611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90613c0d565b60405180910390fd5b6002600881905550611026612125565b73ffffffffffffffffffffffffffffffffffffffff1661104461190b565b73ffffffffffffffffffffffffffffffffffffffff161461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613a11565b60405180910390fd5b60006110a4610c55565b9050600082116110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613c79565b60405180910390fd5b600b5482826110f89190613cc8565b1115611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613d48565b60405180910390fd5b611143338361271d565b6000905050600160088190555050565b61115b612125565b73ffffffffffffffffffffffffffffffffffffffff1661117961190b565b73ffffffffffffffffffffffffffffffffffffffff16146111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690613a11565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516111f590613d99565b60006040518083038185875af1925050503d8060008114611232576040519150601f19603f3d011682016040523d82523d6000602084013e611237565b606091505b505090508061124557600080fd5b50565b61126383838360405180602001604052806000815250611cfb565b505050565b611270612125565b73ffffffffffffffffffffffffffffffffffffffff1661128e61190b565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613a11565b60405180910390fd5b80600a8190555050565b600c5481565b6112fc612125565b73ffffffffffffffffffffffffffffffffffffffff1661131a61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613a11565b60405180910390fd5b80600e8190555050565b6000611384610c55565b82106113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613e20565b60405180910390fd5b819050919050565b6113d5612125565b73ffffffffffffffffffffffffffffffffffffffff166113f361190b565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613a11565b60405180910390fd5b80600990816114589190613fec565b5050565b600d5481565b6000600760149054906101000a900460ff16905090565b60006114848261273b565b600001519050919050565b600e5481565b600980546114a2906137de565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce906137de565b801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90614130565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611613612125565b73ffffffffffffffffffffffffffffffffffffffff1661163161190b565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613a11565b60405180910390fd5b61169160006128d5565b565b60106020528060005260406000206000915090505481565b6002600854036116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613c0d565b60405180910390fd5b60026008819055506000611702610c55565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e9061419c565b60405180910390fd5b600d5483826117a69190613cc8565b11156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614208565b60405180910390fd5b6000831161182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613c79565b60405180910390fd5b600c5483836118399190613cc8565b111561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613d48565b60405180910390fd5b60005b838110156118eb57601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118d590614228565b9190505550806118e490614228565b905061187d565b506118f6338461271d565b60009150600090505050600160088190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611944906137de565b80601f0160208091040260200160405190810160405280929190818152602001828054611970906137de565b80156119bd5780601f10611992576101008083540402835291602001916119bd565b820191906000526020600020905b8154815290600101906020018083116119a057829003601f168201915b5050505050905090565b600260085403611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390613c0d565b60405180910390fd5b60026008819055506000611a1e610c55565b9050600f60009054906101000a900460ff16611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a669061419c565b60405180910390fd5b60008211611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990613c79565b60405180910390fd5b600e54821115611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906142e2565b60405180910390fd5b600b548282611b069190613cc8565b1115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90613d48565b60405180910390fd5b81600a54611b559190614302565b341015611b6157600080fd5b611b6b338361271d565b6000905050600160088190555050565b611b83612125565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614390565b60405180910390fd5b8060066000611bfd612125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611caa612125565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cef91906131bf565b60405180910390a35050565b611d068484846121df565b611d128484848461299b565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614422565b60405180910390fd5b50505050565b611d5f612125565b73ffffffffffffffffffffffffffffffffffffffff16611d7d61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90613a11565b60405180910390fd5b80600c8190555050565b6060611de882612118565b611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906144b4565b60405180910390fd5b6000611e31612b22565b90506000815111611e515760405180602001604052806000815250611e7c565b80611e5b84612bb4565b604051602001611e6c92919061455c565b6040516020818303038152906040525b915050919050565b600b5481565b611e92612125565b73ffffffffffffffffffffffffffffffffffffffff16611eb061190b565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613a11565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b611fbf612125565b73ffffffffffffffffffffffffffffffffffffffff16611fdd61190b565b73ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90613a11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906145fd565b60405180910390fd5b6120ab816128d5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121ea8261273b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612211612125565b73ffffffffffffffffffffffffffffffffffffffff16148061226d5750612236612125565b73ffffffffffffffffffffffffffffffffffffffff1661225584610ab2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061228957506122888260000151612283612125565b611f10565b5b9050806122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c29061468f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461233d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233490614721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906147b3565b60405180910390fd5b6123b98585856001612d14565b6123c9600084846000015161212d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126ad5761260c81612118565b156126ac5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127168585856001612d1a565b5050505050565b612737828260405180602001604052806000815250612d20565b5050565b6127436130d1565b61274c82612118565b61278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290614845565b60405180910390fd5b60008290505b60008110612894576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128855780925050506128d0565b50808060019003915050612791565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906148d7565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129bc8473ffffffffffffffffffffffffffffffffffffffff16612d32565b15612b15578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e5612125565b8786866040518563ffffffff1660e01b8152600401612a07949392919061494c565b6020604051808303816000875af1925050508015612a4357506040513d601f19601f82011682018060405250810190612a4091906149ad565b60015b612ac5573d8060008114612a73576040519150601f19603f3d011682016040523d82523d6000602084013e612a78565b606091505b506000815103612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614422565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b1a565b600190505b949350505050565b606060098054612b31906137de565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5d906137de565b8015612baa5780601f10612b7f57610100808354040283529160200191612baa565b820191906000526020600020905b815481529060010190602001808311612b8d57829003601f168201915b5050505050905090565b606060008203612bfb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d0f565b600082905060005b60008214612c2d578080612c1690614228565b915050600a82612c269190614a09565b9150612c03565b60008167ffffffffffffffff811115612c4957612c4861343e565b5b6040519080825280601f01601f191660200182016040528015612c7b5781602001600182028036833780820191505090505b5090505b60008514612d0857600182612c949190614a3a565b9150600a85612ca39190614a6e565b6030612caf9190613cc8565b60f81b818381518110612cc557612cc4614a9f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d019190614a09565b9450612c7f565b8093505050505b919050565b50505050565b50505050565b612d2d8383836001612d55565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614b40565b60405180910390fd5b60008403612e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0490614bd2565b60405180910390fd5b612e1a6000868387612d14565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156130b457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561309f5761305f600088848861299b565b61309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614422565b60405180910390fd5b5b81806001019250508080600101915050612fe8565b5080600081905550506130ca6000868387612d1a565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131548161311f565b811461315f57600080fd5b50565b6000813590506131718161314b565b92915050565b60006020828403121561318d5761318c613115565b5b600061319b84828501613162565b91505092915050565b60008115159050919050565b6131b9816131a4565b82525050565b60006020820190506131d460008301846131b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132145780820151818401526020810190506131f9565b60008484015250505050565b6000601f19601f8301169050919050565b600061323c826131da565b61324681856131e5565b93506132568185602086016131f6565b61325f81613220565b840191505092915050565b600060208201905081810360008301526132848184613231565b905092915050565b6000819050919050565b61329f8161328c565b81146132aa57600080fd5b50565b6000813590506132bc81613296565b92915050565b6000602082840312156132d8576132d7613115565b5b60006132e6848285016132ad565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331a826132ef565b9050919050565b61332a8161330f565b82525050565b60006020820190506133456000830184613321565b92915050565b6133548161330f565b811461335f57600080fd5b50565b6000813590506133718161334b565b92915050565b6000806040838503121561338e5761338d613115565b5b600061339c85828601613362565b92505060206133ad858286016132ad565b9150509250929050565b6133c08161328c565b82525050565b60006020820190506133db60008301846133b7565b92915050565b6000806000606084860312156133fa576133f9613115565b5b600061340886828701613362565b935050602061341986828701613362565b925050604061342a868287016132ad565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347682613220565b810181811067ffffffffffffffff821117156134955761349461343e565b5b80604052505050565b60006134a861310b565b90506134b4828261346d565b919050565b600067ffffffffffffffff8211156134d4576134d361343e565b5b6134dd82613220565b9050602081019050919050565b82818337600083830152505050565b600061350c613507846134b9565b61349e565b90508281526020810184848401111561352857613527613439565b5b6135338482856134ea565b509392505050565b600082601f8301126135505761354f613434565b5b81356135608482602086016134f9565b91505092915050565b60006020828403121561357f5761357e613115565b5b600082013567ffffffffffffffff81111561359d5761359c61311a565b5b6135a98482850161353b565b91505092915050565b6000602082840312156135c8576135c7613115565b5b60006135d684828501613362565b91505092915050565b6135e8816131a4565b81146135f357600080fd5b50565b600081359050613605816135df565b92915050565b6000806040838503121561362257613621613115565b5b600061363085828601613362565b9250506020613641858286016135f6565b9150509250929050565b600067ffffffffffffffff8211156136665761366561343e565b5b61366f82613220565b9050602081019050919050565b600061368f61368a8461364b565b61349e565b9050828152602081018484840111156136ab576136aa613439565b5b6136b68482856134ea565b509392505050565b600082601f8301126136d3576136d2613434565b5b81356136e384826020860161367c565b91505092915050565b6000806000806080858703121561370657613705613115565b5b600061371487828801613362565b945050602061372587828801613362565b9350506040613736878288016132ad565b925050606085013567ffffffffffffffff8111156137575761375661311a565b5b613763878288016136be565b91505092959194509250565b6000806040838503121561378657613785613115565b5b600061379485828601613362565b92505060206137a585828601613362565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f657607f821691505b602082108103613809576138086137af565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b600061386b602d836131e5565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006138fd6022836131e5565b9150613908826138a1565b604082019050919050565b6000602082019050818103600083015261392c816138f0565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b600061398f6039836131e5565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139fb6020836131e5565b9150613a06826139c5565b602082019050919050565b60006020820190508181036000830152613a2a816139ee565b9050919050565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b6000613a67601a836131e5565b9150613a7282613a31565b602082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613af96022836131e5565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613b8b602e836131e5565b9150613b9682613b2f565b604082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613bf7601f836131e5565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b6000613c63600b836131e5565b9150613c6e82613c2d565b602082019050919050565b60006020820190508181036000830152613c9281613c56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cd38261328c565b9150613cde8361328c565b9250828201905080821115613cf657613cf5613c99565b5b92915050565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b6000613d326013836131e5565b9150613d3d82613cfc565b602082019050919050565b60006020820190508181036000830152613d6181613d25565b9050919050565b600081905092915050565b50565b6000613d83600083613d68565b9150613d8e82613d73565b600082019050919050565b6000613da482613d76565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0a6023836131e5565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ea27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e65565b613eac8683613e65565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ee9613ee4613edf8461328c565b613ec4565b61328c565b9050919050565b6000819050919050565b613f0383613ece565b613f17613f0f82613ef0565b848454613e72565b825550505050565b600090565b613f2c613f1f565b613f37818484613efa565b505050565b5b81811015613f5b57613f50600082613f24565b600181019050613f3d565b5050565b601f821115613fa057613f7181613e40565b613f7a84613e55565b81016020851015613f89578190505b613f9d613f9585613e55565b830182613f3c565b50505b505050565b600082821c905092915050565b6000613fc360001984600802613fa5565b1980831691505092915050565b6000613fdc8383613fb2565b9150826002028217905092915050565b613ff5826131da565b67ffffffffffffffff81111561400e5761400d61343e565b5b61401882546137de565b614023828285613f5f565b600060209050601f8311600181146140565760008415614044578287015190505b61404e8582613fd0565b8655506140b6565b601f19841661406486613e40565b60005b8281101561408c57848901518255600182019150602085019450602081019050614067565b868310156140a957848901516140a5601f891682613fb2565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061411a602b836131e5565b9150614125826140be565b604082019050919050565b600060208201905081810360008301526141498161410d565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000614186600f836131e5565b915061419182614150565b602082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f6d61782066726565204e4654207065722077616c6c6574206578636565646564600082015250565b60006141f26020836131e5565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b60006142338261328c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426557614264613c99565b5b600182019050919050565b7f43616e74206d696e74206d6f7265207468616e206d617870657254786e50756260008201527f6c69634d696e7400000000000000000000000000000000000000000000000000602082015250565b60006142cc6027836131e5565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b600061430d8261328c565b91506143188361328c565b92508282026143268161328c565b9150828204841483151761433d5761433c613c99565b5b5092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061437a601a836131e5565b915061438582614344565b602082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061440c6033836131e5565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061449e6021836131e5565b91506144a982614442565b604082019050919050565b600060208201905081810360008301526144cd81614491565b9050919050565b600081905092915050565b60006144ea826131da565b6144f481856144d4565b93506145048185602086016131f6565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145466005836144d4565b915061455182614510565b600582019050919050565b600061456882856144df565b915061457482846144df565b915061457f82614539565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145e76026836131e5565b91506145f28261458b565b604082019050919050565b60006020820190508181036000830152614616816145da565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006146796032836131e5565b91506146848261461d565b604082019050919050565b600060208201905081810360008301526146a88161466c565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b600061470b6026836131e5565b9150614716826146af565b604082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061479d6025836131e5565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061482f602a836131e5565b915061483a826147d3565b604082019050919050565b6000602082019050818103600083015261485e81614822565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006148c1602f836131e5565b91506148cc82614865565b604082019050919050565b600060208201905081810360008301526148f0816148b4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061491e826148f7565b6149288185614902565b93506149388185602086016131f6565b61494181613220565b840191505092915050565b60006080820190506149616000830187613321565b61496e6020830186613321565b61497b60408301856133b7565b818103606083015261498d8184614913565b905095945050505050565b6000815190506149a78161314b565b92915050565b6000602082840312156149c3576149c2613115565b5b60006149d184828501614998565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a148261328c565b9150614a1f8361328c565b925082614a2f57614a2e6149da565b5b828204905092915050565b6000614a458261328c565b9150614a508361328c565b9250828203905081811115614a6857614a67613c99565b5b92915050565b6000614a798261328c565b9150614a848361328c565b925082614a9457614a936149da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b2a6021836131e5565b9150614b3582614ace565b604082019050919050565b60006020820190508181036000830152614b5981614b1d565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614bbc6028836131e5565b9150614bc782614b60565b604082019050919050565b60006020820190508181036000830152614beb81614baf565b905091905056fea26469706673582212202a9e8aeb038d3f352b06009c7f38f90273bd343c048e2b851abf68638abd801864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102305760003560e01c80635c975abb1161012e578063a0712d68116100ab578063d5abeb011161006f578063d5abeb01146107f1578063dc4e66b51461081c578063e985e9c514610845578063eb8d244414610882578063f2fde38b146108ad57610230565b8063a0712d681461071d578063a22cb46514610739578063b88d4fde14610762578063bde12d731461078b578063c87b56dd146107b457610230565b8063715018a6116100f2578063715018a6146106575780637c6b172d1461066e5780637c928fe9146106ab5780638da5cb5b146106c757806395d89b41146106f257610230565b80635c975abb1461055c5780636352211e146105875780636838075b146105c45780636c0360eb146105ef57806370a082311461061a57610230565b806334918dfd116101bc578063485a68a311610180578063485a68a3146104775780634cdb966c146104a25780634f6ccce7146104cb57806355f804b31461050857806356569a1d1461053157610230565b806334918dfd146103e8578063375a069a146103ff5780633ccfd60b1461041b57806342842e0e1461042557806344a0d68a1461044e57610230565b806313faede61161020357806313faede61461030357806318160ddd1461032e578063228025e81461035957806323b872dd146103825780632f745c59146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613177565b6108d6565b60405161026991906131bf565b60405180910390f35b34801561027e57600080fd5b50610287610a20565b604051610294919061326a565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906132c2565b610ab2565b6040516102d19190613330565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613377565b610b37565b005b34801561030f57600080fd5b50610318610c4f565b60405161032591906133c6565b60405180910390f35b34801561033a57600080fd5b50610343610c55565b60405161035091906133c6565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906132c2565b610c5e565b005b34801561038e57600080fd5b506103a960048036038101906103a491906133e1565b610d29565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190613377565b610d39565b6040516103df91906133c6565b60405180910390f35b3480156103f457600080fd5b506103fd610f29565b005b610419600480360381019061041491906132c2565b610fd1565b005b610423611153565b005b34801561043157600080fd5b5061044c600480360381019061044791906133e1565b611248565b005b34801561045a57600080fd5b50610475600480360381019061047091906132c2565b611268565b005b34801561048357600080fd5b5061048c6112ee565b60405161049991906133c6565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906132c2565b6112f4565b005b3480156104d757600080fd5b506104f260048036038101906104ed91906132c2565b61137a565b6040516104ff91906133c6565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613569565b6113cd565b005b34801561053d57600080fd5b5061054661145c565b60405161055391906133c6565b60405180910390f35b34801561056857600080fd5b50610571611462565b60405161057e91906131bf565b60405180910390f35b34801561059357600080fd5b506105ae60048036038101906105a991906132c2565b611479565b6040516105bb9190613330565b60405180910390f35b3480156105d057600080fd5b506105d961148f565b6040516105e691906133c6565b60405180910390f35b3480156105fb57600080fd5b50610604611495565b604051610611919061326a565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c91906135b2565b611523565b60405161064e91906133c6565b60405180910390f35b34801561066357600080fd5b5061066c61160b565b005b34801561067a57600080fd5b50610695600480360381019061069091906135b2565b611693565b6040516106a291906133c6565b60405180910390f35b6106c560048036038101906106c091906132c2565b6116ab565b005b3480156106d357600080fd5b506106dc61190b565b6040516106e99190613330565b60405180910390f35b3480156106fe57600080fd5b50610707611935565b604051610714919061326a565b60405180910390f35b610737600480360381019061073291906132c2565b6119c7565b005b34801561074557600080fd5b50610760600480360381019061075b919061360b565b611b7b565b005b34801561076e57600080fd5b50610789600480360381019061078491906136ec565b611cfb565b005b34801561079757600080fd5b506107b260048036038101906107ad91906132c2565b611d57565b005b3480156107c057600080fd5b506107db60048036038101906107d691906132c2565b611ddd565b6040516107e8919061326a565b60405180910390f35b3480156107fd57600080fd5b50610806611e84565b60405161081391906133c6565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e91906132c2565b611e8a565b005b34801561085157600080fd5b5061086c6004803603810190610867919061376f565b611f10565b60405161087991906131bf565b60405180910390f35b34801561088e57600080fd5b50610897611fa4565b6040516108a491906131bf565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906135b2565b611fb7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a195750610a18826120ae565b5b9050919050565b606060018054610a2f906137de565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b906137de565b8015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b5050505050905090565b6000610abd82612118565b610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af390613881565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b4282611479565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990613913565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd1612125565b73ffffffffffffffffffffffffffffffffffffffff161480610c005750610bff81610bfa612125565b611f10565b5b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906139a5565b60405180910390fd5b610c4a83838361212d565b505050565b600a5481565b60008054905090565b610c66612125565b73ffffffffffffffffffffffffffffffffffffffff16610c8461190b565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613a11565b60405180910390fd5b600b54811115610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1690613a7d565b60405180910390fd5b80600b8190555050565b610d348383836121df565b505050565b6000610d4483611523565b8210610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613b0f565b60405180910390fd5b6000610d8f610c55565b905060008060005b83811015610ee7576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e8957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed957868403610ed0578195505050505050610f23565b83806001019450505b508080600101915050610d97565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90613ba1565b60405180910390fd5b92915050565b610f31612125565b73ffffffffffffffffffffffffffffffffffffffff16610f4f61190b565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90613a11565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600260085403611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d90613c0d565b60405180910390fd5b6002600881905550611026612125565b73ffffffffffffffffffffffffffffffffffffffff1661104461190b565b73ffffffffffffffffffffffffffffffffffffffff161461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613a11565b60405180910390fd5b60006110a4610c55565b9050600082116110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613c79565b60405180910390fd5b600b5482826110f89190613cc8565b1115611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613d48565b60405180910390fd5b611143338361271d565b6000905050600160088190555050565b61115b612125565b73ffffffffffffffffffffffffffffffffffffffff1661117961190b565b73ffffffffffffffffffffffffffffffffffffffff16146111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690613a11565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516111f590613d99565b60006040518083038185875af1925050503d8060008114611232576040519150601f19603f3d011682016040523d82523d6000602084013e611237565b606091505b505090508061124557600080fd5b50565b61126383838360405180602001604052806000815250611cfb565b505050565b611270612125565b73ffffffffffffffffffffffffffffffffffffffff1661128e61190b565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613a11565b60405180910390fd5b80600a8190555050565b600c5481565b6112fc612125565b73ffffffffffffffffffffffffffffffffffffffff1661131a61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613a11565b60405180910390fd5b80600e8190555050565b6000611384610c55565b82106113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613e20565b60405180910390fd5b819050919050565b6113d5612125565b73ffffffffffffffffffffffffffffffffffffffff166113f361190b565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613a11565b60405180910390fd5b80600990816114589190613fec565b5050565b600d5481565b6000600760149054906101000a900460ff16905090565b60006114848261273b565b600001519050919050565b600e5481565b600980546114a2906137de565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce906137de565b801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90614130565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611613612125565b73ffffffffffffffffffffffffffffffffffffffff1661163161190b565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613a11565b60405180910390fd5b61169160006128d5565b565b60106020528060005260406000206000915090505481565b6002600854036116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613c0d565b60405180910390fd5b60026008819055506000611702610c55565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e9061419c565b60405180910390fd5b600d5483826117a69190613cc8565b11156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614208565b60405180910390fd5b6000831161182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613c79565b60405180910390fd5b600c5483836118399190613cc8565b111561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613d48565b60405180910390fd5b60005b838110156118eb57601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118d590614228565b9190505550806118e490614228565b905061187d565b506118f6338461271d565b60009150600090505050600160088190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611944906137de565b80601f0160208091040260200160405190810160405280929190818152602001828054611970906137de565b80156119bd5780601f10611992576101008083540402835291602001916119bd565b820191906000526020600020905b8154815290600101906020018083116119a057829003601f168201915b5050505050905090565b600260085403611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390613c0d565b60405180910390fd5b60026008819055506000611a1e610c55565b9050600f60009054906101000a900460ff16611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a669061419c565b60405180910390fd5b60008211611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990613c79565b60405180910390fd5b600e54821115611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906142e2565b60405180910390fd5b600b548282611b069190613cc8565b1115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90613d48565b60405180910390fd5b81600a54611b559190614302565b341015611b6157600080fd5b611b6b338361271d565b6000905050600160088190555050565b611b83612125565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614390565b60405180910390fd5b8060066000611bfd612125565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611caa612125565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cef91906131bf565b60405180910390a35050565b611d068484846121df565b611d128484848461299b565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614422565b60405180910390fd5b50505050565b611d5f612125565b73ffffffffffffffffffffffffffffffffffffffff16611d7d61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90613a11565b60405180910390fd5b80600c8190555050565b6060611de882612118565b611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906144b4565b60405180910390fd5b6000611e31612b22565b90506000815111611e515760405180602001604052806000815250611e7c565b80611e5b84612bb4565b604051602001611e6c92919061455c565b6040516020818303038152906040525b915050919050565b600b5481565b611e92612125565b73ffffffffffffffffffffffffffffffffffffffff16611eb061190b565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90613a11565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b611fbf612125565b73ffffffffffffffffffffffffffffffffffffffff16611fdd61190b565b73ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90613a11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906145fd565b60405180910390fd5b6120ab816128d5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121ea8261273b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612211612125565b73ffffffffffffffffffffffffffffffffffffffff16148061226d5750612236612125565b73ffffffffffffffffffffffffffffffffffffffff1661225584610ab2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061228957506122888260000151612283612125565b611f10565b5b9050806122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c29061468f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461233d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233490614721565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a3906147b3565b60405180910390fd5b6123b98585856001612d14565b6123c9600084846000015161212d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126ad5761260c81612118565b156126ac5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127168585856001612d1a565b5050505050565b612737828260405180602001604052806000815250612d20565b5050565b6127436130d1565b61274c82612118565b61278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290614845565b60405180910390fd5b60008290505b60008110612894576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128855780925050506128d0565b50808060019003915050612791565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c7906148d7565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129bc8473ffffffffffffffffffffffffffffffffffffffff16612d32565b15612b15578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e5612125565b8786866040518563ffffffff1660e01b8152600401612a07949392919061494c565b6020604051808303816000875af1925050508015612a4357506040513d601f19601f82011682018060405250810190612a4091906149ad565b60015b612ac5573d8060008114612a73576040519150601f19603f3d011682016040523d82523d6000602084013e612a78565b606091505b506000815103612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614422565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b1a565b600190505b949350505050565b606060098054612b31906137de565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5d906137de565b8015612baa5780601f10612b7f57610100808354040283529160200191612baa565b820191906000526020600020905b815481529060010190602001808311612b8d57829003601f168201915b5050505050905090565b606060008203612bfb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d0f565b600082905060005b60008214612c2d578080612c1690614228565b915050600a82612c269190614a09565b9150612c03565b60008167ffffffffffffffff811115612c4957612c4861343e565b5b6040519080825280601f01601f191660200182016040528015612c7b5781602001600182028036833780820191505090505b5090505b60008514612d0857600182612c949190614a3a565b9150600a85612ca39190614a6e565b6030612caf9190613cc8565b60f81b818381518110612cc557612cc4614a9f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d019190614a09565b9450612c7f565b8093505050505b919050565b50505050565b50505050565b612d2d8383836001612d55565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614b40565b60405180910390fd5b60008403612e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0490614bd2565b60405180910390fd5b612e1a6000868387612d14565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156130b457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561309f5761305f600088848861299b565b61309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614422565b60405180910390fd5b5b81806001019250508080600101915050612fe8565b5080600081905550506130ca6000868387612d1a565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131548161311f565b811461315f57600080fd5b50565b6000813590506131718161314b565b92915050565b60006020828403121561318d5761318c613115565b5b600061319b84828501613162565b91505092915050565b60008115159050919050565b6131b9816131a4565b82525050565b60006020820190506131d460008301846131b0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132145780820151818401526020810190506131f9565b60008484015250505050565b6000601f19601f8301169050919050565b600061323c826131da565b61324681856131e5565b93506132568185602086016131f6565b61325f81613220565b840191505092915050565b600060208201905081810360008301526132848184613231565b905092915050565b6000819050919050565b61329f8161328c565b81146132aa57600080fd5b50565b6000813590506132bc81613296565b92915050565b6000602082840312156132d8576132d7613115565b5b60006132e6848285016132ad565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331a826132ef565b9050919050565b61332a8161330f565b82525050565b60006020820190506133456000830184613321565b92915050565b6133548161330f565b811461335f57600080fd5b50565b6000813590506133718161334b565b92915050565b6000806040838503121561338e5761338d613115565b5b600061339c85828601613362565b92505060206133ad858286016132ad565b9150509250929050565b6133c08161328c565b82525050565b60006020820190506133db60008301846133b7565b92915050565b6000806000606084860312156133fa576133f9613115565b5b600061340886828701613362565b935050602061341986828701613362565b925050604061342a868287016132ad565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347682613220565b810181811067ffffffffffffffff821117156134955761349461343e565b5b80604052505050565b60006134a861310b565b90506134b4828261346d565b919050565b600067ffffffffffffffff8211156134d4576134d361343e565b5b6134dd82613220565b9050602081019050919050565b82818337600083830152505050565b600061350c613507846134b9565b61349e565b90508281526020810184848401111561352857613527613439565b5b6135338482856134ea565b509392505050565b600082601f8301126135505761354f613434565b5b81356135608482602086016134f9565b91505092915050565b60006020828403121561357f5761357e613115565b5b600082013567ffffffffffffffff81111561359d5761359c61311a565b5b6135a98482850161353b565b91505092915050565b6000602082840312156135c8576135c7613115565b5b60006135d684828501613362565b91505092915050565b6135e8816131a4565b81146135f357600080fd5b50565b600081359050613605816135df565b92915050565b6000806040838503121561362257613621613115565b5b600061363085828601613362565b9250506020613641858286016135f6565b9150509250929050565b600067ffffffffffffffff8211156136665761366561343e565b5b61366f82613220565b9050602081019050919050565b600061368f61368a8461364b565b61349e565b9050828152602081018484840111156136ab576136aa613439565b5b6136b68482856134ea565b509392505050565b600082601f8301126136d3576136d2613434565b5b81356136e384826020860161367c565b91505092915050565b6000806000806080858703121561370657613705613115565b5b600061371487828801613362565b945050602061372587828801613362565b9350506040613736878288016132ad565b925050606085013567ffffffffffffffff8111156137575761375661311a565b5b613763878288016136be565b91505092959194509250565b6000806040838503121561378657613785613115565b5b600061379485828601613362565b92505060206137a585828601613362565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137f657607f821691505b602082108103613809576138086137af565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b600061386b602d836131e5565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006138fd6022836131e5565b9150613908826138a1565b604082019050919050565b6000602082019050818103600083015261392c816138f0565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b600061398f6039836131e5565b915061399a82613933565b604082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139fb6020836131e5565b9150613a06826139c5565b602082019050919050565b60006020820190508181036000830152613a2a816139ee565b9050919050565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b6000613a67601a836131e5565b9150613a7282613a31565b602082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613af96022836131e5565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613b8b602e836131e5565b9150613b9682613b2f565b604082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613bf7601f836131e5565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b6000613c63600b836131e5565b9150613c6e82613c2d565b602082019050919050565b60006020820190508181036000830152613c9281613c56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cd38261328c565b9150613cde8361328c565b9250828201905080821115613cf657613cf5613c99565b5b92915050565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b6000613d326013836131e5565b9150613d3d82613cfc565b602082019050919050565b60006020820190508181036000830152613d6181613d25565b9050919050565b600081905092915050565b50565b6000613d83600083613d68565b9150613d8e82613d73565b600082019050919050565b6000613da482613d76565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0a6023836131e5565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ea27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e65565b613eac8683613e65565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ee9613ee4613edf8461328c565b613ec4565b61328c565b9050919050565b6000819050919050565b613f0383613ece565b613f17613f0f82613ef0565b848454613e72565b825550505050565b600090565b613f2c613f1f565b613f37818484613efa565b505050565b5b81811015613f5b57613f50600082613f24565b600181019050613f3d565b5050565b601f821115613fa057613f7181613e40565b613f7a84613e55565b81016020851015613f89578190505b613f9d613f9585613e55565b830182613f3c565b50505b505050565b600082821c905092915050565b6000613fc360001984600802613fa5565b1980831691505092915050565b6000613fdc8383613fb2565b9150826002028217905092915050565b613ff5826131da565b67ffffffffffffffff81111561400e5761400d61343e565b5b61401882546137de565b614023828285613f5f565b600060209050601f8311600181146140565760008415614044578287015190505b61404e8582613fd0565b8655506140b6565b601f19841661406486613e40565b60005b8281101561408c57848901518255600182019150602085019450602081019050614067565b868310156140a957848901516140a5601f891682613fb2565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061411a602b836131e5565b9150614125826140be565b604082019050919050565b600060208201905081810360008301526141498161410d565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000614186600f836131e5565b915061419182614150565b602082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f6d61782066726565204e4654207065722077616c6c6574206578636565646564600082015250565b60006141f26020836131e5565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b60006142338261328c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426557614264613c99565b5b600182019050919050565b7f43616e74206d696e74206d6f7265207468616e206d617870657254786e50756260008201527f6c69634d696e7400000000000000000000000000000000000000000000000000602082015250565b60006142cc6027836131e5565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b600061430d8261328c565b91506143188361328c565b92508282026143268161328c565b9150828204841483151761433d5761433c613c99565b5b5092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061437a601a836131e5565b915061438582614344565b602082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061440c6033836131e5565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061449e6021836131e5565b91506144a982614442565b604082019050919050565b600060208201905081810360008301526144cd81614491565b9050919050565b600081905092915050565b60006144ea826131da565b6144f481856144d4565b93506145048185602086016131f6565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b60006145466005836144d4565b915061455182614510565b600582019050919050565b600061456882856144df565b915061457482846144df565b915061457f82614539565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145e76026836131e5565b91506145f28261458b565b604082019050919050565b60006020820190508181036000830152614616816145da565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006146796032836131e5565b91506146848261461d565b604082019050919050565b600060208201905081810360008301526146a88161466c565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b600061470b6026836131e5565b9150614716826146af565b604082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061479d6025836131e5565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061482f602a836131e5565b915061483a826147d3565b604082019050919050565b6000602082019050818103600083015261485e81614822565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006148c1602f836131e5565b91506148cc82614865565b604082019050919050565b600060208201905081810360008301526148f0816148b4565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061491e826148f7565b6149288185614902565b93506149388185602086016131f6565b61494181613220565b840191505092915050565b60006080820190506149616000830187613321565b61496e6020830186613321565b61497b60408301856133b7565b818103606083015261498d8184614913565b905095945050505050565b6000815190506149a78161314b565b92915050565b6000602082840312156149c3576149c2613115565b5b60006149d184828501614998565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a148261328c565b9150614a1f8361328c565b925082614a2f57614a2e6149da565b5b828204905092915050565b6000614a458261328c565b9150614a508361328c565b9250828203905081811115614a6857614a67613c99565b5b92915050565b6000614a798261328c565b9150614a848361328c565b925082614a9457614a936149da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b2a6021836131e5565b9150614b3582614ace565b604082019050919050565b60006020820190508181036000830152614b5981614b1d565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614bbc6028836131e5565b9150614bc782614b60565b604082019050919050565b60006020820190508181036000830152614beb81614baf565b905091905056fea26469706673582212202a9e8aeb038d3f352b06009c7f38f90273bd343c048e2b851abf68638abd801864736f6c63430008110033

Deployed Bytecode Sourcemap

45192:3678:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24869:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26755:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28317:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27838:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45324:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23126:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47997:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29193:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23790:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47806:89;;;;;;;;;;;;;:::i;:::-;;47040:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48675:192;;;:::i;:::-;;29426:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47903:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45401:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48429:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23303:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48317:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45434:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39043:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26564:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45482:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45296:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25305:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41860:94;;;;;;;;;;;;;:::i;:::-;;45568:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45866:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41209:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26924:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46540:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28603:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29674:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48186:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47353:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45364:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48551:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28962:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45527:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42109:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24869:372;24971:4;25023:25;25008:40;;;:11;:40;;;;:105;;;;25080:33;25065:48;;;:11;:48;;;;25008:105;:172;;;;25145:35;25130:50;;;:11;:50;;;;25008:172;:225;;;;25197:36;25221:11;25197:23;:36::i;:::-;25008:225;24988:245;;24869:372;;;:::o;26755:100::-;26809:13;26842:5;26835:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26755:100;:::o;28317:214::-;28385:7;28413:16;28421:7;28413;:16::i;:::-;28405:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28499:15;:24;28515:7;28499:24;;;;;;;;;;;;;;;;;;;;;28492:31;;28317:214;;;:::o;27838:413::-;27911:13;27927:24;27943:7;27927:15;:24::i;:::-;27911:40;;27976:5;27970:11;;:2;:11;;;27962:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28071:5;28055:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28080:37;28097:5;28104:12;:10;:12::i;:::-;28080:16;:37::i;:::-;28055:62;28033:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28215:28;28224:2;28228:7;28237:5;28215:8;:28::i;:::-;27900:351;27838:413;;:::o;45324:33::-;;;;:::o;23126:100::-;23179:7;23206:12;;23199:19;;23126:100;:::o;47997:182::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48095:9:::1;;48078:13;:26;;48070:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48158:13;48146:9;:25;;;;47997:182:::0;:::o;29193:162::-;29319:28;29329:4;29335:2;29339:7;29319:9;:28::i;:::-;29193:162;;;:::o;23790:1007::-;23879:7;23915:16;23925:5;23915:9;:16::i;:::-;23907:5;:24;23899:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23981:22;24006:13;:11;:13::i;:::-;23981:38;;24030:19;24060:25;24249:9;24244:466;24264:14;24260:1;:18;24244:466;;;24304:31;24338:11;:14;24350:1;24338:14;;;;;;;;;;;24304:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24401:1;24375:28;;:9;:14;;;:28;;;24371:111;;24448:9;:14;;;24428:34;;24371:111;24525:5;24504:26;;:17;:26;;;24500:195;;24574:5;24559:11;:20;24555:85;;24615:1;24608:8;;;;;;;;;24555:85;24662:13;;;;;;;24500:195;24285:425;24280:3;;;;;;;24244:466;;;;24733:56;;;;;;;;;;:::i;:::-;;;;;;;;23790:1007;;;;;:::o;47806:89::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47875:12:::1;;;;;;;;;;;47874:13;47859:12;;:28;;;;;;;;;;;;;;;;;;47806:89::o:0;47040:305::-;44204:1;44800:7;;:19;44792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:1;44933:7;:18;;;;41440:12:::1;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47127:9:::2;47139:13;:11;:13::i;:::-;47127:25;;47185:1;47171:11;:15;47163:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;47240:9;;47225:11;47221:1;:15;;;;:::i;:::-;:28;;47213:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47284:34;47294:10;47306:11;47284:9;:34::i;:::-;47329:8;;;47116:229;44160:1:::0;45112:7;:22;;;;47040:305;:::o;48675:192::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48732:12:::1;48758:10;48750:24;;48796:21;48750:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48731:101;;;48851:7;48843:16;;;::::0;::::1;;48720:147;48675:192::o:0;29426:177::-;29556:39;29573:4;29579:2;29583:7;29556:39;;;;;;;;;;;;:16;:39::i;:::-;29426:177;;;:::o;47903:86::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47973:8:::1;47966:4;:15;;;;47903:86:::0;:::o;45401:26::-;;;;:::o;48429:114::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48528:7:::1;48506:19;:29;;;;48429:114:::0;:::o;23303:187::-;23370:7;23406:13;:11;:13::i;:::-;23398:5;:21;23390:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23477:5;23470:12;;23303:187;;;:::o;48317:104::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48402:11:::1;48392:7;:21;;;;;;:::i;:::-;;48317:104:::0;:::o;45434:41::-;;;;:::o;39043:86::-;39090:4;39114:7;;;;;;;;;;;39107:14;;39043:86;:::o;26564:124::-;26628:7;26655:20;26667:7;26655:11;:20::i;:::-;:25;;;26648:32;;26564:124;;;:::o;45482:38::-;;;;:::o;45296:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25305:221::-;25369:7;25414:1;25397:19;;:5;:19;;;25389:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:12;:19;25503:5;25490:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25482:36;;25475:43;;25305:221;;;:::o;41860:94::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41925:21:::1;41943:1;41925:9;:21::i;:::-;41860:94::o:0;45568:59::-;;;;;;;;;;;;;;;;;:::o;45866:664::-;44204:1;44800:7;;:19;44792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:1;44933:7;:18;;;;45937:9:::1;45949:13;:11;:13::i;:::-;45937:25;;45973:30;46006:24;:36;46031:10;46006:36;;;;;;;;;;;;;;;;45973:69;;46061:12;;;;;;;;;;;46053:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46152:22;;46137:11;46112:22;:36;;;;:::i;:::-;:62;;46104:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;46238:1;46224:11;:15;46216:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46288:7;;46273:11;46269:1;:15;;;;:::i;:::-;:26;;46261:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46330:9;46325:103;46349:11;46345:1;:15;46325:103;;;46382:24;:36;46407:10;46382:36;;;;;;;;;;;;;;;;:38;;;;;;;;;:::i;:::-;;;;;;46362:3;;;;:::i;:::-;;;46325:103;;;;46438:34;46448:10;46460:11;46438:9;:34::i;:::-;46477:8;;;46496:29;;;45932:598;;44160:1:::0;45112:7;:22;;;;45866:664;:::o;41209:87::-;41255:7;41282:6;;;;;;;;;;;41275:13;;41209:87;:::o;26924:104::-;26980:13;27013:7;27006:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26924:104;:::o;46540:492::-;44204:1;44800:7;;:19;44792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:1;44933:7;:18;;;;46614:9:::1;46626:13;:11;:13::i;:::-;46614:25;;46658:12;;;;;;;;;;;46650:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46723:1;46709:11;:15;46701:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;46774:19;;46759:11;:34;;46751:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;46876:9;;46861:11;46857:1;:15;;;;:::i;:::-;:28;;46849:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46948:11;46941:4;;:18;;;;:::i;:::-;46928:9;:31;;46920:40;;;::::0;::::1;;46971:34;46981:10;46993:11;46971:9;:34::i;:::-;47016:8;;;46603:429;44160:1:::0;45112:7;:22;;;;46540:492;:::o;28603:288::-;28710:12;:10;:12::i;:::-;28698:24;;:8;:24;;;28690:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28811:8;28766:18;:32;28785:12;:10;:12::i;:::-;28766:32;;;;;;;;;;;;;;;:42;28799:8;28766:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28864:8;28835:48;;28850:12;:10;:12::i;:::-;28835:48;;;28874:8;28835:48;;;;;;:::i;:::-;;;;;;;;28603:288;;:::o;29674:355::-;29833:28;29843:4;29849:2;29853:7;29833:9;:28::i;:::-;29894:48;29917:4;29923:2;29927:7;29936:5;29894:22;:48::i;:::-;29872:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29674:355;;;;:::o;48186:123::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48284:17:::1;48274:7;:27;;;;48186:123:::0;:::o;47353:445::-;47471:13;47510:16;47518:7;47510;:16::i;:::-;47502:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47575:28;47606:10;:8;:10::i;:::-;47575:41;;47678:1;47653:14;47647:28;:32;:143;;;;;;;;;;;;;;;;;47723:14;47739:18;:7;:16;:18::i;:::-;47706:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47647:143;47627:163;;;47353:445;;;:::o;45364:30::-;;;;:::o;48551:118::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48654:7:::1;48629:22;:32;;;;48551:118:::0;:::o;28962:164::-;29059:4;29083:18;:25;29102:5;29083:25;;;;;;;;;;;;;;;:35;29109:8;29083:35;;;;;;;;;;;;;;;;;;;;;;;;;29076:42;;28962:164;;;;:::o;45527:32::-;;;;;;;;;;;;;:::o;42109:229::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42232:1:::1;42212:22;;:8;:22;;::::0;42190:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42311:19;42321:8;42311:9;:19::i;:::-;42109:229:::0;:::o;14389:157::-;14474:4;14513:25;14498:40;;;:11;:40;;;;14491:47;;14389:157;;;:::o;30284:111::-;30341:4;30375:12;;30365:7;:22;30358:29;;30284:111;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;35204:196::-;35346:2;35319:15;:24;35335:7;35319:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35384:7;35380:2;35364:28;;35373:5;35364:28;;;;;;;;;;;;35204:196;;;:::o;33084:2002::-;33199:35;33237:20;33249:7;33237:11;:20::i;:::-;33199:58;;33270:22;33312:13;:18;;;33296:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33371:12;:10;:12::i;:::-;33347:36;;:20;33359:7;33347:11;:20::i;:::-;:36;;;33296:87;:154;;;;33400:50;33417:13;:18;;;33437:12;:10;:12::i;:::-;33400:16;:50::i;:::-;33296:154;33270:181;;33472:17;33464:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33587:4;33565:26;;:13;:18;;;:26;;;33557:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33667:1;33653:16;;:2;:16;;;33645:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33724:43;33746:4;33752:2;33756:7;33765:1;33724:21;:43::i;:::-;33832:49;33849:1;33853:7;33862:13;:18;;;33832:8;:49::i;:::-;34207:1;34177:12;:18;34190:4;34177:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34251:1;34223:12;:16;34236:2;34223:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34297:2;34269:11;:20;34281:7;34269:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34359:15;34314:11;:20;34326:7;34314:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34627:19;34659:1;34649:7;:11;34627:33;;34720:1;34679:43;;:11;:24;34691:11;34679:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34675:295;;34747:20;34755:11;34747:7;:20::i;:::-;34743:212;;;34824:13;:18;;;34792:11;:24;34804:11;34792:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34907:13;:28;;;34865:11;:24;34877:11;34865:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34743:212;34675:295;34152:829;35017:7;35013:2;34998:27;;35007:4;34998:27;;;;;;;;;;;;35036:42;35057:4;35063:2;35067:7;35076:1;35036:20;:42::i;:::-;33188:1898;;33084:2002;;;:::o;30403:104::-;30472:27;30482:2;30486:8;30472:27;;;;;;;;;;;;:9;:27::i;:::-;30403:104;;:::o;25965:537::-;26026:21;;:::i;:::-;26068:16;26076:7;26068;:16::i;:::-;26060:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26174:12;26189:7;26174:22;;26169:245;26206:1;26198:4;:9;26169:245;;26236:31;26270:11;:17;26282:4;26270:17;;;;;;;;;;;26236:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26336:1;26310:28;;:9;:14;;;:28;;;26306:93;;26370:9;26363:16;;;;;;26306:93;26217:197;26209:6;;;;;;;;26169:245;;;;26437:57;;;;;;;;;;:::i;:::-;;;;;;;;25965:537;;;;:::o;42346:173::-;42402:16;42421:6;;;;;;;;;;;42402:25;;42447:8;42438:6;;:17;;;;;;;;;;;;;;;;;;42502:8;42471:40;;42492:8;42471:40;;;;;;;;;;;;42391:128;42346:173;:::o;35965:804::-;36120:4;36141:15;:2;:13;;;:15::i;:::-;36137:625;;;36193:2;36177:36;;;36214:12;:10;:12::i;:::-;36228:4;36234:7;36243:5;36177:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36173:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36440:1;36423:6;:13;:18;36419:273;;36466:61;;;;;;;;;;:::i;:::-;;;;;;;;36419:273;36642:6;36636:13;36627:6;36623:2;36619:15;36612:38;36173:534;36310:45;;;36300:55;;;:6;:55;;;;36293:62;;;;;36137:625;36746:4;36739:11;;35965:804;;;;;;;:::o;45750:108::-;45810:13;45843:7;45836:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45750:108;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;37257:159::-;;;;;:::o;37828:158::-;;;;;:::o;30870:163::-;30993:32;30999:2;31003:8;31013:5;31020:4;30993:5;:32::i;:::-;30870:163;;;:::o;4283:326::-;4343:4;4600:1;4578:7;:19;;;:23;4571:30;;4283:326;;;:::o;31292:1538::-;31431:20;31454:12;;31431:35;;31499:1;31485:16;;:2;:16;;;31477:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31570:1;31558:8;:13;31550:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31629:61;31659:1;31663:2;31667:12;31681:8;31629:21;:61::i;:::-;32004:8;31968:12;:16;31981:2;31968:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32069:8;32028:12;:16;32041:2;32028:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32128:2;32095:11;:25;32107:12;32095:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32195:15;32145:11;:25;32157:12;32145:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32228:20;32251:12;32228:35;;32285:9;32280:415;32300:8;32296:1;:12;32280:415;;;32364:12;32360:2;32339:38;;32356:1;32339:38;;;;;;;;;;;;32400:4;32396:249;;;32463:59;32494:1;32498:2;32502:12;32516:5;32463:22;:59::i;:::-;32429:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32396:249;32665:14;;;;;;;32310:3;;;;;;;32280:415;;;;32726:12;32711;:27;;;;31943:807;32762:60;32791:1;32795:2;32799:12;32813:8;32762:20;:60::i;:::-;31420:1410;31292:1538;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:180;6161:77;6158:1;6151:88;6258:4;6255:1;6248:15;6282:4;6279:1;6272:15;6299:281;6382:27;6404:4;6382:27;:::i;:::-;6374:6;6370:40;6512:6;6500:10;6497:22;6476:18;6464:10;6461:34;6458:62;6455:88;;;6523:18;;:::i;:::-;6455:88;6563:10;6559:2;6552:22;6342:238;6299:281;;:::o;6586:129::-;6620:6;6647:20;;:::i;:::-;6637:30;;6676:33;6704:4;6696:6;6676:33;:::i;:::-;6586:129;;;:::o;6721:308::-;6783:4;6873:18;6865:6;6862:30;6859:56;;;6895:18;;:::i;:::-;6859:56;6933:29;6955:6;6933:29;:::i;:::-;6925:37;;7017:4;7011;7007:15;6999:23;;6721:308;;;:::o;7035:146::-;7132:6;7127:3;7122;7109:30;7173:1;7164:6;7159:3;7155:16;7148:27;7035:146;;;:::o;7187:425::-;7265:5;7290:66;7306:49;7348:6;7306:49;:::i;:::-;7290:66;:::i;:::-;7281:75;;7379:6;7372:5;7365:21;7417:4;7410:5;7406:16;7455:3;7446:6;7441:3;7437:16;7434:25;7431:112;;;7462:79;;:::i;:::-;7431:112;7552:54;7599:6;7594:3;7589;7552:54;:::i;:::-;7271:341;7187:425;;;;;:::o;7632:340::-;7688:5;7737:3;7730:4;7722:6;7718:17;7714:27;7704:122;;7745:79;;:::i;:::-;7704:122;7862:6;7849:20;7887:79;7962:3;7954:6;7947:4;7939:6;7935:17;7887:79;:::i;:::-;7878:88;;7694:278;7632:340;;;;:::o;7978:509::-;8047:6;8096:2;8084:9;8075:7;8071:23;8067:32;8064:119;;;8102:79;;:::i;:::-;8064:119;8250:1;8239:9;8235:17;8222:31;8280:18;8272:6;8269:30;8266:117;;;8302:79;;:::i;:::-;8266:117;8407:63;8462:7;8453:6;8442:9;8438:22;8407:63;:::i;:::-;8397:73;;8193:287;7978:509;;;;:::o;8493:329::-;8552:6;8601:2;8589:9;8580:7;8576:23;8572:32;8569:119;;;8607:79;;:::i;:::-;8569:119;8727:1;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8698:117;8493:329;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:474::-;11679:6;11687;11736:2;11724:9;11715:7;11711:23;11707:32;11704:119;;;11742:79;;:::i;:::-;11704:119;11862:1;11887:53;11932:7;11923:6;11912:9;11908:22;11887:53;:::i;:::-;11877:63;;11833:117;11989:2;12015:53;12060:7;12051:6;12040:9;12036:22;12015:53;:::i;:::-;12005:63;;11960:118;11611:474;;;;;:::o;12091:180::-;12139:77;12136:1;12129:88;12236:4;12233:1;12226:15;12260:4;12257:1;12250:15;12277:320;12321:6;12358:1;12352:4;12348:12;12338:22;;12405:1;12399:4;12395:12;12426:18;12416:81;;12482:4;12474:6;12470:17;12460:27;;12416:81;12544:2;12536:6;12533:14;12513:18;12510:38;12507:84;;12563:18;;:::i;:::-;12507:84;12328:269;12277:320;;;:::o;12603:232::-;12743:34;12739:1;12731:6;12727:14;12720:58;12812:15;12807:2;12799:6;12795:15;12788:40;12603:232;:::o;12841:366::-;12983:3;13004:67;13068:2;13063:3;13004:67;:::i;:::-;12997:74;;13080:93;13169:3;13080:93;:::i;:::-;13198:2;13193:3;13189:12;13182:19;;12841:366;;;:::o;13213:419::-;13379:4;13417:2;13406:9;13402:18;13394:26;;13466:9;13460:4;13456:20;13452:1;13441:9;13437:17;13430:47;13494:131;13620:4;13494:131;:::i;:::-;13486:139;;13213:419;;;:::o;13638:221::-;13778:34;13774:1;13766:6;13762:14;13755:58;13847:4;13842:2;13834:6;13830:15;13823:29;13638:221;:::o;13865:366::-;14007:3;14028:67;14092:2;14087:3;14028:67;:::i;:::-;14021:74;;14104:93;14193:3;14104:93;:::i;:::-;14222:2;14217:3;14213:12;14206:19;;13865:366;;;:::o;14237:419::-;14403:4;14441:2;14430:9;14426:18;14418:26;;14490:9;14484:4;14480:20;14476:1;14465:9;14461:17;14454:47;14518:131;14644:4;14518:131;:::i;:::-;14510:139;;14237:419;;;:::o;14662:244::-;14802:34;14798:1;14790:6;14786:14;14779:58;14871:27;14866:2;14858:6;14854:15;14847:52;14662:244;:::o;14912:366::-;15054:3;15075:67;15139:2;15134:3;15075:67;:::i;:::-;15068:74;;15151:93;15240:3;15151:93;:::i;:::-;15269:2;15264:3;15260:12;15253:19;;14912:366;;;:::o;15284:419::-;15450:4;15488:2;15477:9;15473:18;15465:26;;15537:9;15531:4;15527:20;15523:1;15512:9;15508:17;15501:47;15565:131;15691:4;15565:131;:::i;:::-;15557:139;;15284:419;;;:::o;15709:182::-;15849:34;15845:1;15837:6;15833:14;15826:58;15709:182;:::o;15897:366::-;16039:3;16060:67;16124:2;16119:3;16060:67;:::i;:::-;16053:74;;16136:93;16225:3;16136:93;:::i;:::-;16254:2;16249:3;16245:12;16238:19;;15897:366;;;:::o;16269:419::-;16435:4;16473:2;16462:9;16458:18;16450:26;;16522:9;16516:4;16512:20;16508:1;16497:9;16493:17;16486:47;16550:131;16676:4;16550:131;:::i;:::-;16542:139;;16269:419;;;:::o;16694:176::-;16834:28;16830:1;16822:6;16818:14;16811:52;16694:176;:::o;16876:366::-;17018:3;17039:67;17103:2;17098:3;17039:67;:::i;:::-;17032:74;;17115:93;17204:3;17115:93;:::i;:::-;17233:2;17228:3;17224:12;17217:19;;16876:366;;;:::o;17248:419::-;17414:4;17452:2;17441:9;17437:18;17429:26;;17501:9;17495:4;17491:20;17487:1;17476:9;17472:17;17465:47;17529:131;17655:4;17529:131;:::i;:::-;17521:139;;17248:419;;;:::o;17673:221::-;17813:34;17809:1;17801:6;17797:14;17790:58;17882:4;17877:2;17869:6;17865:15;17858:29;17673:221;:::o;17900:366::-;18042:3;18063:67;18127:2;18122:3;18063:67;:::i;:::-;18056:74;;18139:93;18228:3;18139:93;:::i;:::-;18257:2;18252:3;18248:12;18241:19;;17900:366;;;:::o;18272:419::-;18438:4;18476:2;18465:9;18461:18;18453:26;;18525:9;18519:4;18515:20;18511:1;18500:9;18496:17;18489:47;18553:131;18679:4;18553:131;:::i;:::-;18545:139;;18272:419;;;:::o;18697:233::-;18837:34;18833:1;18825:6;18821:14;18814:58;18906:16;18901:2;18893:6;18889:15;18882:41;18697:233;:::o;18936:366::-;19078:3;19099:67;19163:2;19158:3;19099:67;:::i;:::-;19092:74;;19175:93;19264:3;19175:93;:::i;:::-;19293:2;19288:3;19284:12;19277:19;;18936:366;;;:::o;19308:419::-;19474:4;19512:2;19501:9;19497:18;19489:26;;19561:9;19555:4;19551:20;19547:1;19536:9;19532:17;19525:47;19589:131;19715:4;19589:131;:::i;:::-;19581:139;;19308:419;;;:::o;19733:181::-;19873:33;19869:1;19861:6;19857:14;19850:57;19733:181;:::o;19920:366::-;20062:3;20083:67;20147:2;20142:3;20083:67;:::i;:::-;20076:74;;20159:93;20248:3;20159:93;:::i;:::-;20277:2;20272:3;20268:12;20261:19;;19920:366;;;:::o;20292:419::-;20458:4;20496:2;20485:9;20481:18;20473:26;;20545:9;20539:4;20535:20;20531:1;20520:9;20516:17;20509:47;20573:131;20699:4;20573:131;:::i;:::-;20565:139;;20292:419;;;:::o;20717:161::-;20857:13;20853:1;20845:6;20841:14;20834:37;20717:161;:::o;20884:366::-;21026:3;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;20884:366;;;:::o;21256:419::-;21422:4;21460:2;21449:9;21445:18;21437:26;;21509:9;21503:4;21499:20;21495:1;21484:9;21480:17;21473:47;21537:131;21663:4;21537:131;:::i;:::-;21529:139;;21256:419;;;:::o;21681:180::-;21729:77;21726:1;21719:88;21826:4;21823:1;21816:15;21850:4;21847:1;21840:15;21867:191;21907:3;21926:20;21944:1;21926:20;:::i;:::-;21921:25;;21960:20;21978:1;21960:20;:::i;:::-;21955:25;;22003:1;22000;21996:9;21989:16;;22024:3;22021:1;22018:10;22015:36;;;22031:18;;:::i;:::-;22015:36;21867:191;;;;:::o;22064:169::-;22204:21;22200:1;22192:6;22188:14;22181:45;22064:169;:::o;22239:366::-;22381:3;22402:67;22466:2;22461:3;22402:67;:::i;:::-;22395:74;;22478:93;22567:3;22478:93;:::i;:::-;22596:2;22591:3;22587:12;22580:19;;22239:366;;;:::o;22611:419::-;22777:4;22815:2;22804:9;22800:18;22792:26;;22864:9;22858:4;22854:20;22850:1;22839:9;22835:17;22828:47;22892:131;23018:4;22892:131;:::i;:::-;22884:139;;22611:419;;;:::o;23036:147::-;23137:11;23174:3;23159:18;;23036:147;;;;:::o;23189:114::-;;:::o;23309:398::-;23468:3;23489:83;23570:1;23565:3;23489:83;:::i;:::-;23482:90;;23581:93;23670:3;23581:93;:::i;:::-;23699:1;23694:3;23690:11;23683:18;;23309:398;;;:::o;23713:379::-;23897:3;23919:147;24062:3;23919:147;:::i;:::-;23912:154;;24083:3;24076:10;;23713:379;;;:::o;24098:222::-;24238:34;24234:1;24226:6;24222:14;24215:58;24307:5;24302:2;24294:6;24290:15;24283:30;24098:222;:::o;24326:366::-;24468:3;24489:67;24553:2;24548:3;24489:67;:::i;:::-;24482:74;;24565:93;24654:3;24565:93;:::i;:::-;24683:2;24678:3;24674:12;24667:19;;24326:366;;;:::o;24698:419::-;24864:4;24902:2;24891:9;24887:18;24879:26;;24951:9;24945:4;24941:20;24937:1;24926:9;24922:17;24915:47;24979:131;25105:4;24979:131;:::i;:::-;24971:139;;24698:419;;;:::o;25123:141::-;25172:4;25195:3;25187:11;;25218:3;25215:1;25208:14;25252:4;25249:1;25239:18;25231:26;;25123:141;;;:::o;25270:93::-;25307:6;25354:2;25349;25342:5;25338:14;25334:23;25324:33;;25270:93;;;:::o;25369:107::-;25413:8;25463:5;25457:4;25453:16;25432:37;;25369:107;;;;:::o;25482:393::-;25551:6;25601:1;25589:10;25585:18;25624:97;25654:66;25643:9;25624:97;:::i;:::-;25742:39;25772:8;25761:9;25742:39;:::i;:::-;25730:51;;25814:4;25810:9;25803:5;25799:21;25790:30;;25863:4;25853:8;25849:19;25842:5;25839:30;25829:40;;25558:317;;25482:393;;;;;:::o;25881:60::-;25909:3;25930:5;25923:12;;25881:60;;;:::o;25947:142::-;25997:9;26030:53;26048:34;26057:24;26075:5;26057:24;:::i;:::-;26048:34;:::i;:::-;26030:53;:::i;:::-;26017:66;;25947:142;;;:::o;26095:75::-;26138:3;26159:5;26152:12;;26095:75;;;:::o;26176:269::-;26286:39;26317:7;26286:39;:::i;:::-;26347:91;26396:41;26420:16;26396:41;:::i;:::-;26388:6;26381:4;26375:11;26347:91;:::i;:::-;26341:4;26334:105;26252:193;26176:269;;;:::o;26451:73::-;26496:3;26451:73;:::o;26530:189::-;26607:32;;:::i;:::-;26648:65;26706:6;26698;26692:4;26648:65;:::i;:::-;26583:136;26530:189;;:::o;26725:186::-;26785:120;26802:3;26795:5;26792:14;26785:120;;;26856:39;26893:1;26886:5;26856:39;:::i;:::-;26829:1;26822:5;26818:13;26809:22;;26785:120;;;26725:186;;:::o;26917:543::-;27018:2;27013:3;27010:11;27007:446;;;27052:38;27084:5;27052:38;:::i;:::-;27136:29;27154:10;27136:29;:::i;:::-;27126:8;27122:44;27319:2;27307:10;27304:18;27301:49;;;27340:8;27325:23;;27301:49;27363:80;27419:22;27437:3;27419:22;:::i;:::-;27409:8;27405:37;27392:11;27363:80;:::i;:::-;27022:431;;27007:446;26917:543;;;:::o;27466:117::-;27520:8;27570:5;27564:4;27560:16;27539:37;;27466:117;;;;:::o;27589:169::-;27633:6;27666:51;27714:1;27710:6;27702:5;27699:1;27695:13;27666:51;:::i;:::-;27662:56;27747:4;27741;27737:15;27727:25;;27640:118;27589:169;;;;:::o;27763:295::-;27839:4;27985:29;28010:3;28004:4;27985:29;:::i;:::-;27977:37;;28047:3;28044:1;28040:11;28034:4;28031:21;28023:29;;27763:295;;;;:::o;28063:1395::-;28180:37;28213:3;28180:37;:::i;:::-;28282:18;28274:6;28271:30;28268:56;;;28304:18;;:::i;:::-;28268:56;28348:38;28380:4;28374:11;28348:38;:::i;:::-;28433:67;28493:6;28485;28479:4;28433:67;:::i;:::-;28527:1;28551:4;28538:17;;28583:2;28575:6;28572:14;28600:1;28595:618;;;;29257:1;29274:6;29271:77;;;29323:9;29318:3;29314:19;29308:26;29299:35;;29271:77;29374:67;29434:6;29427:5;29374:67;:::i;:::-;29368:4;29361:81;29230:222;28565:887;;28595:618;28647:4;28643:9;28635:6;28631:22;28681:37;28713:4;28681:37;:::i;:::-;28740:1;28754:208;28768:7;28765:1;28762:14;28754:208;;;28847:9;28842:3;28838:19;28832:26;28824:6;28817:42;28898:1;28890:6;28886:14;28876:24;;28945:2;28934:9;28930:18;28917:31;;28791:4;28788:1;28784:12;28779:17;;28754:208;;;28990:6;28981:7;28978:19;28975:179;;;29048:9;29043:3;29039:19;29033:26;29091:48;29133:4;29125:6;29121:17;29110:9;29091:48;:::i;:::-;29083:6;29076:64;28998:156;28975:179;29200:1;29196;29188:6;29184:14;29180:22;29174:4;29167:36;28602:611;;;28565:887;;28155:1303;;;28063:1395;;:::o;29464:230::-;29604:34;29600:1;29592:6;29588:14;29581:58;29673:13;29668:2;29660:6;29656:15;29649:38;29464:230;:::o;29700:366::-;29842:3;29863:67;29927:2;29922:3;29863:67;:::i;:::-;29856:74;;29939:93;30028:3;29939:93;:::i;:::-;30057:2;30052:3;30048:12;30041:19;;29700:366;;;:::o;30072:419::-;30238:4;30276:2;30265:9;30261:18;30253:26;;30325:9;30319:4;30315:20;30311:1;30300:9;30296:17;30289:47;30353:131;30479:4;30353:131;:::i;:::-;30345:139;;30072:419;;;:::o;30497:165::-;30637:17;30633:1;30625:6;30621:14;30614:41;30497:165;:::o;30668:366::-;30810:3;30831:67;30895:2;30890:3;30831:67;:::i;:::-;30824:74;;30907:93;30996:3;30907:93;:::i;:::-;31025:2;31020:3;31016:12;31009:19;;30668:366;;;:::o;31040:419::-;31206:4;31244:2;31233:9;31229:18;31221:26;;31293:9;31287:4;31283:20;31279:1;31268:9;31264:17;31257:47;31321:131;31447:4;31321:131;:::i;:::-;31313:139;;31040:419;;;:::o;31465:182::-;31605:34;31601:1;31593:6;31589:14;31582:58;31465:182;:::o;31653:366::-;31795:3;31816:67;31880:2;31875:3;31816:67;:::i;:::-;31809:74;;31892:93;31981:3;31892:93;:::i;:::-;32010:2;32005:3;32001:12;31994:19;;31653:366;;;:::o;32025:419::-;32191:4;32229:2;32218:9;32214:18;32206:26;;32278:9;32272:4;32268:20;32264:1;32253:9;32249:17;32242:47;32306:131;32432:4;32306:131;:::i;:::-;32298:139;;32025:419;;;:::o;32450:233::-;32489:3;32512:24;32530:5;32512:24;:::i;:::-;32503:33;;32558:66;32551:5;32548:77;32545:103;;32628:18;;:::i;:::-;32545:103;32675:1;32668:5;32664:13;32657:20;;32450:233;;;:::o;32689:226::-;32829:34;32825:1;32817:6;32813:14;32806:58;32898:9;32893:2;32885:6;32881:15;32874:34;32689:226;:::o;32921:366::-;33063:3;33084:67;33148:2;33143:3;33084:67;:::i;:::-;33077:74;;33160:93;33249:3;33160:93;:::i;:::-;33278:2;33273:3;33269:12;33262:19;;32921:366;;;:::o;33293:419::-;33459:4;33497:2;33486:9;33482:18;33474:26;;33546:9;33540:4;33536:20;33532:1;33521:9;33517:17;33510:47;33574:131;33700:4;33574:131;:::i;:::-;33566:139;;33293:419;;;:::o;33718:410::-;33758:7;33781:20;33799:1;33781:20;:::i;:::-;33776:25;;33815:20;33833:1;33815:20;:::i;:::-;33810:25;;33870:1;33867;33863:9;33892:30;33910:11;33892:30;:::i;:::-;33881:41;;34071:1;34062:7;34058:15;34055:1;34052:22;34032:1;34025:9;34005:83;33982:139;;34101:18;;:::i;:::-;33982:139;33766:362;33718:410;;;;:::o;34134:176::-;34274:28;34270:1;34262:6;34258:14;34251:52;34134:176;:::o;34316:366::-;34458:3;34479:67;34543:2;34538:3;34479:67;:::i;:::-;34472:74;;34555:93;34644:3;34555:93;:::i;:::-;34673:2;34668:3;34664:12;34657:19;;34316:366;;;:::o;34688:419::-;34854:4;34892:2;34881:9;34877:18;34869:26;;34941:9;34935:4;34931:20;34927:1;34916:9;34912:17;34905:47;34969:131;35095:4;34969:131;:::i;:::-;34961:139;;34688:419;;;:::o;35113:238::-;35253:34;35249:1;35241:6;35237:14;35230:58;35322:21;35317:2;35309:6;35305:15;35298:46;35113:238;:::o;35357:366::-;35499:3;35520:67;35584:2;35579:3;35520:67;:::i;:::-;35513:74;;35596:93;35685:3;35596:93;:::i;:::-;35714:2;35709:3;35705:12;35698:19;;35357:366;;;:::o;35729:419::-;35895:4;35933:2;35922:9;35918:18;35910:26;;35982:9;35976:4;35972:20;35968:1;35957:9;35953:17;35946:47;36010:131;36136:4;36010:131;:::i;:::-;36002:139;;35729:419;;;:::o;36154:220::-;36294:34;36290:1;36282:6;36278:14;36271:58;36363:3;36358:2;36350:6;36346:15;36339:28;36154:220;:::o;36380:366::-;36522:3;36543:67;36607:2;36602:3;36543:67;:::i;:::-;36536:74;;36619:93;36708:3;36619:93;:::i;:::-;36737:2;36732:3;36728:12;36721:19;;36380:366;;;:::o;36752:419::-;36918:4;36956:2;36945:9;36941:18;36933:26;;37005:9;36999:4;36995:20;36991:1;36980:9;36976:17;36969:47;37033:131;37159:4;37033:131;:::i;:::-;37025:139;;36752:419;;;:::o;37177:148::-;37279:11;37316:3;37301:18;;37177:148;;;;:::o;37331:390::-;37437:3;37465:39;37498:5;37465:39;:::i;:::-;37520:89;37602:6;37597:3;37520:89;:::i;:::-;37513:96;;37618:65;37676:6;37671:3;37664:4;37657:5;37653:16;37618:65;:::i;:::-;37708:6;37703:3;37699:16;37692:23;;37441:280;37331:390;;;;:::o;37727:155::-;37867:7;37863:1;37855:6;37851:14;37844:31;37727:155;:::o;37888:400::-;38048:3;38069:84;38151:1;38146:3;38069:84;:::i;:::-;38062:91;;38162:93;38251:3;38162:93;:::i;:::-;38280:1;38275:3;38271:11;38264:18;;37888:400;;;:::o;38294:701::-;38575:3;38597:95;38688:3;38679:6;38597:95;:::i;:::-;38590:102;;38709:95;38800:3;38791:6;38709:95;:::i;:::-;38702:102;;38821:148;38965:3;38821:148;:::i;:::-;38814:155;;38986:3;38979:10;;38294:701;;;;;:::o;39001:225::-;39141:34;39137:1;39129:6;39125:14;39118:58;39210:8;39205:2;39197:6;39193:15;39186:33;39001:225;:::o;39232:366::-;39374:3;39395:67;39459:2;39454:3;39395:67;:::i;:::-;39388:74;;39471:93;39560:3;39471:93;:::i;:::-;39589:2;39584:3;39580:12;39573:19;;39232:366;;;:::o;39604:419::-;39770:4;39808:2;39797:9;39793:18;39785:26;;39857:9;39851:4;39847:20;39843:1;39832:9;39828:17;39821:47;39885:131;40011:4;39885:131;:::i;:::-;39877:139;;39604:419;;;:::o;40029:237::-;40169:34;40165:1;40157:6;40153:14;40146:58;40238:20;40233:2;40225:6;40221:15;40214:45;40029:237;:::o;40272:366::-;40414:3;40435:67;40499:2;40494:3;40435:67;:::i;:::-;40428:74;;40511:93;40600:3;40511:93;:::i;:::-;40629:2;40624:3;40620:12;40613:19;;40272:366;;;:::o;40644:419::-;40810:4;40848:2;40837:9;40833:18;40825:26;;40897:9;40891:4;40887:20;40883:1;40872:9;40868:17;40861:47;40925:131;41051:4;40925:131;:::i;:::-;40917:139;;40644:419;;;:::o;41069:225::-;41209:34;41205:1;41197:6;41193:14;41186:58;41278:8;41273:2;41265:6;41261:15;41254:33;41069:225;:::o;41300:366::-;41442:3;41463:67;41527:2;41522:3;41463:67;:::i;:::-;41456:74;;41539:93;41628:3;41539:93;:::i;:::-;41657:2;41652:3;41648:12;41641:19;;41300:366;;;:::o;41672:419::-;41838:4;41876:2;41865:9;41861:18;41853:26;;41925:9;41919:4;41915:20;41911:1;41900:9;41896:17;41889:47;41953:131;42079:4;41953:131;:::i;:::-;41945:139;;41672:419;;;:::o;42097:224::-;42237:34;42233:1;42225:6;42221:14;42214:58;42306:7;42301:2;42293:6;42289:15;42282:32;42097:224;:::o;42327:366::-;42469:3;42490:67;42554:2;42549:3;42490:67;:::i;:::-;42483:74;;42566:93;42655:3;42566:93;:::i;:::-;42684:2;42679:3;42675:12;42668:19;;42327:366;;;:::o;42699:419::-;42865:4;42903:2;42892:9;42888:18;42880:26;;42952:9;42946:4;42942:20;42938:1;42927:9;42923:17;42916:47;42980:131;43106:4;42980:131;:::i;:::-;42972:139;;42699:419;;;:::o;43124:229::-;43264:34;43260:1;43252:6;43248:14;43241:58;43333:12;43328:2;43320:6;43316:15;43309:37;43124:229;:::o;43359:366::-;43501:3;43522:67;43586:2;43581:3;43522:67;:::i;:::-;43515:74;;43598:93;43687:3;43598:93;:::i;:::-;43716:2;43711:3;43707:12;43700:19;;43359:366;;;:::o;43731:419::-;43897:4;43935:2;43924:9;43920:18;43912:26;;43984:9;43978:4;43974:20;43970:1;43959:9;43955:17;43948:47;44012:131;44138:4;44012:131;:::i;:::-;44004:139;;43731:419;;;:::o;44156:234::-;44296:34;44292:1;44284:6;44280:14;44273:58;44365:17;44360:2;44352:6;44348:15;44341:42;44156:234;:::o;44396:366::-;44538:3;44559:67;44623:2;44618:3;44559:67;:::i;:::-;44552:74;;44635:93;44724:3;44635:93;:::i;:::-;44753:2;44748:3;44744:12;44737:19;;44396:366;;;:::o;44768:419::-;44934:4;44972:2;44961:9;44957:18;44949:26;;45021:9;45015:4;45011:20;45007:1;44996:9;44992:17;44985:47;45049:131;45175:4;45049:131;:::i;:::-;45041:139;;44768:419;;;:::o;45193:98::-;45244:6;45278:5;45272:12;45262:22;;45193:98;;;:::o;45297:168::-;45380:11;45414:6;45409:3;45402:19;45454:4;45449:3;45445:14;45430:29;;45297:168;;;;:::o;45471:373::-;45557:3;45585:38;45617:5;45585:38;:::i;:::-;45639:70;45702:6;45697:3;45639:70;:::i;:::-;45632:77;;45718:65;45776:6;45771:3;45764:4;45757:5;45753:16;45718:65;:::i;:::-;45808:29;45830:6;45808:29;:::i;:::-;45803:3;45799:39;45792:46;;45561:283;45471:373;;;;:::o;45850:640::-;46045:4;46083:3;46072:9;46068:19;46060:27;;46097:71;46165:1;46154:9;46150:17;46141:6;46097:71;:::i;:::-;46178:72;46246:2;46235:9;46231:18;46222:6;46178:72;:::i;:::-;46260;46328:2;46317:9;46313:18;46304:6;46260:72;:::i;:::-;46379:9;46373:4;46369:20;46364:2;46353:9;46349:18;46342:48;46407:76;46478:4;46469:6;46407:76;:::i;:::-;46399:84;;45850:640;;;;;;;:::o;46496:141::-;46552:5;46583:6;46577:13;46568:22;;46599:32;46625:5;46599:32;:::i;:::-;46496:141;;;;:::o;46643:349::-;46712:6;46761:2;46749:9;46740:7;46736:23;46732:32;46729:119;;;46767:79;;:::i;:::-;46729:119;46887:1;46912:63;46967:7;46958:6;46947:9;46943:22;46912:63;:::i;:::-;46902:73;;46858:127;46643:349;;;;:::o;46998:180::-;47046:77;47043:1;47036:88;47143:4;47140:1;47133:15;47167:4;47164:1;47157:15;47184:185;47224:1;47241:20;47259:1;47241:20;:::i;:::-;47236:25;;47275:20;47293:1;47275:20;:::i;:::-;47270:25;;47314:1;47304:35;;47319:18;;:::i;:::-;47304:35;47361:1;47358;47354:9;47349:14;;47184:185;;;;:::o;47375:194::-;47415:4;47435:20;47453:1;47435:20;:::i;:::-;47430:25;;47469:20;47487:1;47469:20;:::i;:::-;47464:25;;47513:1;47510;47506:9;47498:17;;47537:1;47531:4;47528:11;47525:37;;;47542:18;;:::i;:::-;47525:37;47375:194;;;;:::o;47575:176::-;47607:1;47624:20;47642:1;47624:20;:::i;:::-;47619:25;;47658:20;47676:1;47658:20;:::i;:::-;47653:25;;47697:1;47687:35;;47702:18;;:::i;:::-;47687:35;47743:1;47740;47736:9;47731:14;;47575:176;;;;:::o;47757:180::-;47805:77;47802:1;47795:88;47902:4;47899:1;47892:15;47926:4;47923:1;47916:15;47943:220;48083:34;48079:1;48071:6;48067:14;48060:58;48152:3;48147:2;48139:6;48135:15;48128:28;47943:220;:::o;48169:366::-;48311:3;48332:67;48396:2;48391:3;48332:67;:::i;:::-;48325:74;;48408:93;48497:3;48408:93;:::i;:::-;48526:2;48521:3;48517:12;48510:19;;48169:366;;;:::o;48541:419::-;48707:4;48745:2;48734:9;48730:18;48722:26;;48794:9;48788:4;48784:20;48780:1;48769:9;48765:17;48758:47;48822:131;48948:4;48822:131;:::i;:::-;48814:139;;48541:419;;;:::o;48966:227::-;49106:34;49102:1;49094:6;49090:14;49083:58;49175:10;49170:2;49162:6;49158:15;49151:35;48966:227;:::o;49199:366::-;49341:3;49362:67;49426:2;49421:3;49362:67;:::i;:::-;49355:74;;49438:93;49527:3;49438:93;:::i;:::-;49556:2;49551:3;49547:12;49540:19;;49199:366;;;:::o;49571:419::-;49737:4;49775:2;49764:9;49760:18;49752:26;;49824:9;49818:4;49814:20;49810:1;49799:9;49795:17;49788:47;49852:131;49978:4;49852:131;:::i;:::-;49844:139;;49571:419;;;:::o

Swarm Source

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