ETH Price: $2,494.42 (-0.98%)

Token

Augmented Aliens (ALIEN)
 

Overview

Max Total Supply

602 ALIEN

Holders

287

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ALIEN
0x19beca68f1c4cb6c23215dad8bea0120aa720954
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:
AugmentedAliens

Compiler Version
v0.8.9+commit.e5eed63a

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-26
*/

// File: @openzeppelin/[email protected]/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.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
                /// @solidity memory-safe-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.7.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 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/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: @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/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

        _balances[to] += 1;
        _owners[tokenId] = to;

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: contracts/AugmentedAliens.sol


 
pragma solidity ^0.8.9;
 
// @title: AugmentedAliens.sol




 
contract AugmentedAliens is ERC721, Ownable {
    using Strings for uint256;

    bytes32 private root;
 
    uint256 public constant MAX_TOKENS = 5000;
    uint256 private constant TOKENS_RESERVED = 10;
    uint256 public price = 1000000000000000000000;
    uint256 public MAX_MINT_PER_TX = 5;
    uint256 public MAX_MINT_PER_WALLET = 5;
    uint256 public RESERVED_BALLER;
    uint256 public RESERVED_HONORARY = 159;
    uint256 public RESERVED_OLD_CONTRACT = 201;

    uint256 public minted_public = 0;
    uint256 public minted_honorary = 0;
    uint256 public minted_old_contract = 0;
    IERC20 public tokenAddress = IERC20(0x4F0c5042A11830fEaBA227840402e2409b0FC9dC);
    ERC721 public honoraryAddress = ERC721(0x4f0915A980fD5C9033D4ba5B297d2A5f149231F1);
 
    bool public isSaleActive;
    uint256 public totalSupply;
    mapping(address => uint256) private mintedPerWallet;
    mapping(uint256 => uint256) private honoraryClaimedPerId;
    mapping(address => uint256) private oldContractClaimedPerWallet;
 
    string public baseUri;
    string public baseExtension = ".json";
 
    constructor() ERC721("Augmented Aliens", "ALIEN") {
        baseUri = "ipfs://bafybeibhhizrg5fb2dif5wakxtcs56mwf3lh5lhdnwsbth3n5da6dmzenu/";
        for (uint256 i = 0; i < TOKENS_RESERVED; ++i) {
            _safeMint(msg.sender, ((RESERVED_HONORARY + RESERVED_OLD_CONTRACT)) + i);
        }
        totalSupply = TOKENS_RESERVED;
        minted_public = TOKENS_RESERVED;
        RESERVED_BALLER = MAX_TOKENS - (RESERVED_HONORARY + RESERVED_OLD_CONTRACT);
    }
 
    // PUBLIC FUNCTIONS
    function mint(address sender, uint256 _numTokens) external payable {
        require(isSaleActive, "The sale is paused.");
        require(minted_public + _numTokens <= RESERVED_BALLER, "There is not enough supply to mint that many (public)");
        require(_numTokens <= MAX_MINT_PER_TX, "You can't mint that many in one transaction");
        require(mintedPerWallet[msg.sender] + _numTokens <= MAX_MINT_PER_WALLET, "You can't mint that many per wallet");
        require(_numTokens * price <= tokenAddress.balanceOf(sender), "Insufficient Honey balance");

        // Remove Honey from your wallet
        tokenAddress.transferFrom(msg.sender, address(this), _numTokens * price);

        // Mint your Aliens from the public supply
        for (uint256 i = 0; i <= _numTokens-1; i++) {
            _safeMint(msg.sender, ((RESERVED_HONORARY + RESERVED_OLD_CONTRACT) + minted_public) + i);
        }

        // Set variables to keep track of mints
        mintedPerWallet[msg.sender] += _numTokens;
        totalSupply += _numTokens;
        minted_public += _numTokens;
    }

    // Claiming if you own an Honorary Baller Bear
    function claimHonorary(uint256[] calldata _tokenIds) external payable {
        // Make sure you're eligible to claim
        require(isSaleActive, "The sale is paused.");
        require(minted_honorary + _tokenIds.length <= RESERVED_HONORARY, "There is not enough supply to mint that many (honorary)");
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            require(honoraryAddress.ownerOf(_tokenIds[i]) == msg.sender, "You do not own that Bear");
            require(honoraryClaimedPerId[_tokenIds[i]] + 1 <= 1, "Bear already claimed for");
        }

        for (uint256 i = 0; i <= _tokenIds.length-1; i++) {
            // Mint your Aliens from the honorary reserved supply, which starts at 1
            _safeMint(msg.sender, (minted_honorary + 1 + i)); 
            // Set variables to keep track of mints
            honoraryClaimedPerId[_tokenIds[i]] += 1;
        }
        
        totalSupply += _tokenIds.length;
        minted_honorary += _tokenIds.length;
    }

    function claimOldContract(bytes32[] memory proof) external payable {
        require(isSaleActive, "The sale is paused.");
        require(minted_old_contract + 1 <= RESERVED_OLD_CONTRACT, "There is not enough supply to mint that many (old)");
        require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Not eligible");
        require(oldContractClaimedPerWallet[msg.sender] + 1 <= 1, "You already claimed");
        
        // Mint your alien from the old contract supply (which comes after the honorary supply)
        _safeMint(msg.sender, (RESERVED_HONORARY + 1));

        // Set variables to keep track of mints
        oldContractClaimedPerWallet[msg.sender] += 1;
        totalSupply += 1;
        minted_old_contract += 1;
    }
 
    // OWNER ONLY FUNCTIONS

    function devMint(uint256 _numTokens) external onlyOwner {
        require(minted_public + _numTokens <= RESERVED_BALLER, "There is not enough supply to mint that many");

        // Mint your Aliens from the public supply
        for (uint256 i = 0; i <= _numTokens; i++) {
            _safeMint(msg.sender, ((RESERVED_HONORARY + RESERVED_OLD_CONTRACT) + minted_public) + i);
        }

        // Set variables to keep track of mints
        mintedPerWallet[msg.sender] += _numTokens;
        totalSupply += _numTokens;
        minted_public += _numTokens;
    }

    function setTokenAddress(address _addr) external onlyOwner {
        tokenAddress = IERC20(_addr);
    }
    function setHonoraryAddress(address _addr) external onlyOwner {
        honoraryAddress = ERC721(_addr);
    }

    function flipSaleState() external onlyOwner {
        isSaleActive = !isSaleActive;
    }

    function isValid(bytes32[] memory proof, bytes32 leaf) public view returns (bool) {
        return MerkleProof.verify(proof, root, leaf);
    }
    function setRoot(bytes32 _root) public onlyOwner {
        root = _root;
    }
 
    function setBaseURI(string memory _baseUri) external onlyOwner {
        baseUri = _baseUri;
    }
 
    function setPrice(uint256 _price) external onlyOwner {
        price = _price;
    }

    function setReservedBaller(uint256 amount) external onlyOwner {
        RESERVED_BALLER = amount;
    }
    function setReservedHonorary(uint256 amount) external onlyOwner {
        RESERVED_HONORARY = amount;
    }
    function setReservedOldContract(uint256 amount) external onlyOwner {
        RESERVED_OLD_CONTRACT = amount;
    }
    
    function setMaxMintPerWallet(uint256 _amount) external onlyOwner {
        MAX_MINT_PER_TX = _amount;
        MAX_MINT_PER_WALLET = _amount;
    }
 
    function withdrawToken() public onlyOwner {
        tokenAddress.transfer(msg.sender, tokenAddress.balanceOf(address(this)));
    }
 
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
 
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
            : "";
    }
 
    function _baseURI() internal view virtual override returns (string memory) {
        return baseUri;
    }
 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_BALLER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_HONORARY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_OLD_CONTRACT","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claimHonorary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claimOldContract","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"honoraryAddress","outputs":[{"internalType":"contract ERC721","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":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minted_honorary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted_old_contract","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted_public","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setHonoraryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setReservedBaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setReservedHonorary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setReservedOldContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052683635c9adc5dea0000060085560056009556005600a55609f600c5560c9600d556000600e556000600f556000601055734f0c5042a11830feaba227840402e2409b0fc9dc601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f0915a980fd5c9033d4ba5b297d2a5f149231f1601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601890805190602001906200012b9291906200086a565b503480156200013957600080fd5b506040518060400160405280601081526020017f4175676d656e74656420416c69656e73000000000000000000000000000000008152506040518060400160405280600581526020017f414c49454e0000000000000000000000000000000000000000000000000000008152508160009080519060200190620001be9291906200086a565b508060019080519060200190620001d79291906200086a565b505050620001fa620001ee620002bb60201b60201c565b620002c360201b60201c565b60405180608001604052806043815260200162005c5160439139601790805190602001906200022b9291906200086a565b5060005b600a8110156200027d57620002693382600d54600c5462000251919062000953565b6200025d919062000953565b6200038960201b60201c565b806200027590620009b0565b90506200022f565b50600a601381905550600a600e81905550600d54600c54620002a0919062000953565b611388620002af9190620009fe565b600b8190555062000e0d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003ab828260405180602001604052806000815250620003af60201b60201c565b5050565b620003c183836200041d60201b60201c565b620003d660008484846200061760201b60201c565b62000418576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040f9062000ac0565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004879062000b32565b60405180910390fd5b620004a181620007d160201b60201c565b15620004e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004db9062000ba4565b60405180910390fd5b620004f8600083836200083d60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054a919062000953565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a462000613600083836200084260201b60201c565b5050565b6000620006458473ffffffffffffffffffffffffffffffffffffffff166200084760201b620021cc1760201c565b15620007c4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000677620002bb60201b60201c565b8786866040518563ffffffff1660e01b81526004016200069b949392919062000cc0565b602060405180830381600087803b158015620006b657600080fd5b505af1925050508015620006ea57506040513d601f19601f82011682018060405250810190620006e7919062000d76565b60015b62000773573d80600081146200071d576040519150601f19603f3d011682016040523d82523d6000602084013e62000722565b606091505b506000815114156200076b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007629062000ac0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007c9565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054620008789062000dd7565b90600052602060002090601f0160209004810192826200089c5760008555620008e8565b82601f10620008b757805160ff1916838001178555620008e8565b82800160010185558215620008e8579182015b82811115620008e7578251825591602001919060010190620008ca565b5b509050620008f79190620008fb565b5090565b5b8082111562000916576000816000905550600101620008fc565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000960826200091a565b91506200096d836200091a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620009a557620009a462000924565b5b828201905092915050565b6000620009bd826200091a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620009f357620009f262000924565b5b600182019050919050565b600062000a0b826200091a565b915062000a18836200091a565b92508282101562000a2e5762000a2d62000924565b5b828203905092915050565b600082825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000aa860328362000a39565b915062000ab58262000a4a565b604082019050919050565b6000602082019050818103600083015262000adb8162000a99565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062000b1a60208362000a39565b915062000b278262000ae2565b602082019050919050565b6000602082019050818103600083015262000b4d8162000b0b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062000b8c601c8362000a39565b915062000b998262000b54565b602082019050919050565b6000602082019050818103600083015262000bbf8162000b7d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bf38262000bc6565b9050919050565b62000c058162000be6565b82525050565b62000c16816200091a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000c5857808201518184015260208101905062000c3b565b8381111562000c68576000848401525b50505050565b6000601f19601f8301169050919050565b600062000c8c8262000c1c565b62000c98818562000c27565b935062000caa81856020860162000c38565b62000cb58162000c6e565b840191505092915050565b600060808201905062000cd7600083018762000bfa565b62000ce6602083018662000bfa565b62000cf5604083018562000c0b565b818103606083015262000d09818462000c7f565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000d508162000d19565b811462000d5c57600080fd5b50565b60008151905062000d708162000d45565b92915050565b60006020828403121562000d8f5762000d8e62000d14565b5b600062000d9f8482850162000d5f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000df057607f821691505b6020821081141562000e075762000e0662000da8565b5b50919050565b614e348062000e1d6000396000f3fe6080604052600436106102935760003560e01c8063980d52781161015a578063bb5c5139116100c1578063ca628c781161007a578063ca628c78146109a3578063dab5f340146109ba578063e44e69c1146109e3578063e985e9c514610a0c578063f2fde38b14610a49578063f47c84c514610a7257610293565b8063bb5c51391461089e578063bdf99814146108c9578063c0485ecb146108f4578063c66828621461091f578063c87b56dd1461094a578063ca31fc111461098757610293565b8063afdf613411610113578063afdf613414610792578063b02a4901146107bb578063b19960e6146107e4578063b617bc171461080f578063b88d4fde14610838578063b8a20ed01461086157610293565b8063980d5278146106925780639abc8320146106bd5780639d76ea58146106e8578063a035b1fe14610713578063a22cb4651461073e578063a8c6c2131461076757610293565b80634286eb47116101fe578063715018a6116101b7578063715018a6146105a8578063814bea02146105bf5780638da5cb5b146105e85780638ecad7211461061357806391b7f5ed1461063e57806395d89b411461066757610293565b80634286eb47146104845780634e11b9c0146104af57806355f804b3146104da578063564566a8146105035780636352211e1461052e57806370a082311461056b57610293565b806323b872dd1161025057806323b872dd146103ad57806326a4e8d2146103d657806334918dfd146103ff578063375a069a1461041657806340c10f191461043f57806342842e0e1461045b57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d578063178653891461036657806318160ddd14610382575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613173565b610a9d565b6040516102cc91906131bb565b60405180910390f35b3480156102e157600080fd5b506102ea610b7f565b6040516102f7919061326f565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906132c7565b610c11565b6040516103349190613335565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f919061337c565b610c57565b005b610380600480360381019061037b919061353a565b610d6f565b005b34801561038e57600080fd5b50610397610fb4565b6040516103a49190613592565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906135ad565b610fba565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190613600565b61101a565b005b34801561040b57600080fd5b50610414611066565b005b34801561042257600080fd5b5061043d600480360381019061043891906132c7565b61109a565b005b6104596004803603810190610454919061337c565b6111ce565b005b34801561046757600080fd5b50610482600480360381019061047d91906135ad565b6115e3565b005b34801561049057600080fd5b50610499611603565b6040516104a69190613592565b60405180910390f35b3480156104bb57600080fd5b506104c4611609565b6040516104d1919061368c565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061375c565b61162f565b005b34801561050f57600080fd5b50610518611651565b60405161052591906131bb565b60405180910390f35b34801561053a57600080fd5b50610555600480360381019061055091906132c7565b611664565b6040516105629190613335565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613600565b611716565b60405161059f9190613592565b60405180910390f35b3480156105b457600080fd5b506105bd6117ce565b005b3480156105cb57600080fd5b506105e660048036038101906105e19190613600565b6117e2565b005b3480156105f457600080fd5b506105fd61182e565b60405161060a9190613335565b60405180910390f35b34801561061f57600080fd5b50610628611858565b6040516106359190613592565b60405180910390f35b34801561064a57600080fd5b50610665600480360381019061066091906132c7565b61185e565b005b34801561067357600080fd5b5061067c611870565b604051610689919061326f565b60405180910390f35b34801561069e57600080fd5b506106a7611902565b6040516106b49190613592565b60405180910390f35b3480156106c957600080fd5b506106d2611908565b6040516106df919061326f565b60405180910390f35b3480156106f457600080fd5b506106fd611996565b60405161070a91906137c6565b60405180910390f35b34801561071f57600080fd5b506107286119bc565b6040516107359190613592565b60405180910390f35b34801561074a57600080fd5b506107656004803603810190610760919061380d565b6119c2565b005b34801561077357600080fd5b5061077c6119d8565b6040516107899190613592565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b491906132c7565b6119de565b005b3480156107c757600080fd5b506107e260048036038101906107dd91906132c7565b6119f7565b005b3480156107f057600080fd5b506107f9611a09565b6040516108069190613592565b60405180910390f35b34801561081b57600080fd5b50610836600480360381019061083191906132c7565b611a0f565b005b34801561084457600080fd5b5061085f600480360381019061085a91906138ee565b611a21565b005b34801561086d57600080fd5b5061088860048036038101906108839190613971565b611a83565b60405161089591906131bb565b60405180910390f35b3480156108aa57600080fd5b506108b3611a9a565b6040516108c09190613592565b60405180910390f35b3480156108d557600080fd5b506108de611aa0565b6040516108eb9190613592565b60405180910390f35b34801561090057600080fd5b50610909611aa6565b6040516109169190613592565b60405180910390f35b34801561092b57600080fd5b50610934611aac565b604051610941919061326f565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906132c7565b611b3a565b60405161097e919061326f565b60405180910390f35b6109a1600480360381019061099c9190613a28565b611be4565b005b3480156109af57600080fd5b506109b8611f26565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613a75565b61208a565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906132c7565b61209c565b005b348015610a1857600080fd5b50610a336004803603810190610a2e9190613aa2565b6120ae565b604051610a4091906131bb565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190613600565b612142565b005b348015610a7e57600080fd5b50610a876121c6565b604051610a949190613592565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b785750610b77826121ef565b5b9050919050565b606060008054610b8e90613b11565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba90613b11565b8015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c1c82612259565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6282611664565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90613bb5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf26122a4565b73ffffffffffffffffffffffffffffffffffffffff161480610d215750610d2081610d1b6122a4565b6120ae565b5b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790613c47565b60405180910390fd5b610d6a83836122ac565b505050565b601260149054906101000a900460ff16610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613cb3565b60405180910390fd5b600d546001601054610dd09190613d02565b1115610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613dca565b60405180910390fd5b610e418133604051602001610e269190613e32565b60405160208183030381529060405280519060200120611a83565b610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613e99565b60405180910390fd5b600180601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecd9190613d02565b1115610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590613f05565b60405180910390fd5b610f26336001600c54610f219190613d02565b612365565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f769190613d02565b92505081905550600160136000828254610f909190613d02565b92505081905550600160106000828254610faa9190613d02565b9250508190555050565b60135481565b610fcb610fc56122a4565b82612383565b61100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190613f97565b60405180910390fd5b611015838383612418565b505050565b61102261267f565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61106e61267f565b601260149054906101000a900460ff1615601260146101000a81548160ff021916908315150217905550565b6110a261267f565b600b5481600e546110b39190613d02565b11156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614029565b60405180910390fd5b60005b8181116111425761112f3382600e54600d54600c546111169190613d02565b6111209190613d02565b61112a9190613d02565b612365565b808061113a90614049565b9150506110f7565b5080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111929190613d02565b9250508190555080601360008282546111ab9190613d02565b9250508190555080600e60008282546111c49190613d02565b9250508190555050565b601260149054906101000a900460ff1661121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490613cb3565b60405180910390fd5b600b5481600e5461122e9190613d02565b111561126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690614104565b60405180910390fd5b6009548111156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90614196565b60405180910390fd5b600a5481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113029190613d02565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90614228565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161139e9190613335565b60206040518083038186803b1580156113b657600080fd5b505afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee919061425d565b600854826113fc919061428a565b111561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614330565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33306008548561148b919061428a565b6040518463ffffffff1660e01b81526004016114a993929190614350565b602060405180830381600087803b1580156114c357600080fd5b505af11580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb919061439c565b5060005b60018261150c91906143c9565b8111611556576115433382600e54600d54600c5461152a9190613d02565b6115349190613d02565b61153e9190613d02565b612365565b808061154e90614049565b9150506114ff565b5080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115a69190613d02565b9250508190555080601360008282546115bf9190613d02565b9250508190555080600e60008282546115d89190613d02565b925050819055505050565b6115fe83838360405180602001604052806000815250611a21565b505050565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163761267f565b806017908051906020019061164d929190613064565b5050565b601260149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614449565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e906144db565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117d661267f565b6117e060006126fd565b565b6117ea61267f565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b61186661267f565b8060088190555050565b60606001805461187f90613b11565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90613b11565b80156118f85780601f106118cd576101008083540402835291602001916118f8565b820191906000526020600020905b8154815290600101906020018083116118db57829003601f168201915b5050505050905090565b600e5481565b6017805461191590613b11565b80601f016020809104026020016040519081016040528092919081815260200182805461194190613b11565b801561198e5780601f106119635761010080835404028352916020019161198e565b820191906000526020600020905b81548152906001019060200180831161197157829003601f168201915b505050505081565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6119d46119cd6122a4565b83836127c3565b5050565b600c5481565b6119e661267f565b8060098190555080600a8190555050565b6119ff61267f565b80600c8190555050565b600a5481565b611a1761267f565b80600d8190555050565b611a32611a2c6122a4565b83612383565b611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890613f97565b60405180910390fd5b611a7d84848484612930565b50505050565b6000611a92836007548461298c565b905092915050565b600f5481565b60105481565b600d5481565b60188054611ab990613b11565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae590613b11565b8015611b325780601f10611b0757610100808354040283529160200191611b32565b820191906000526020600020905b815481529060010190602001808311611b1557829003601f168201915b505050505081565b6060611b45826129a3565b611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b9061456d565b60405180910390fd5b6000611b8e612a0f565b90506000815111611bae5760405180602001604052806000815250611bdc565b80611bb884612aa1565b6018604051602001611bcc9392919061465d565b6040516020818303038152906040525b915050919050565b601260149054906101000a900460ff16611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613cb3565b60405180910390fd5b600c5482829050600f54611c479190613d02565b1115611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614700565b60405180910390fd5b60005b82829050811015611e55573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858585818110611cfe57611cfd614720565b5b905060200201356040518263ffffffff1660e01b8152600401611d219190613592565b60206040518083038186803b158015611d3957600080fd5b505afa158015611d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d719190614764565b73ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe906147dd565b60405180910390fd5b60018060156000868686818110611de157611de0614720565b5b90506020020135815260200190815260200160002054611e019190613d02565b1115611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990614849565b60405180910390fd5b8080611e4d90614049565b915050611c8b565b5060005b600183839050611e6991906143c9565b8111611ee957611e9233826001600f54611e839190613d02565b611e8d9190613d02565b612365565b600160156000858585818110611eab57611eaa614720565b5b9050602002013581526020019081526020016000206000828254611ecf9190613d02565b925050819055508080611ee190614049565b915050611e59565b508181905060136000828254611eff9190613d02565b9250508190555081819050600f6000828254611f1b9190613d02565b925050819055505050565b611f2e61267f565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fc89190613335565b60206040518083038186803b158015611fe057600080fd5b505afa158015611ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612018919061425d565b6040518363ffffffff1660e01b8152600401612035929190614869565b602060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612087919061439c565b50565b61209261267f565b8060078190555050565b6120a461267f565b80600b8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214a61267f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614904565b60405180910390fd5b6121c3816126fd565b50565b61138881565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612262816129a3565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614449565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661231f83611664565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61237f828260405180602001604052806000815250612c02565b5050565b60008061238f83611664565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123d157506123d081856120ae565b5b8061240f57508373ffffffffffffffffffffffffffffffffffffffff166123f784610c11565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661243882611664565b73ffffffffffffffffffffffffffffffffffffffff161461248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590614996565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590614a28565b60405180910390fd5b612509838383612c5d565b6125146000826122ac565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256491906143c9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125bb9190613d02565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461267a838383612c62565b505050565b6126876122a4565b73ffffffffffffffffffffffffffffffffffffffff166126a561182e565b73ffffffffffffffffffffffffffffffffffffffff16146126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290614a94565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282990614b00565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161292391906131bb565b60405180910390a3505050565b61293b848484612418565b61294784848484612c67565b612986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d90614b92565b60405180910390fd5b50505050565b6000826129998584612dfe565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060178054612a1e90613b11565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4a90613b11565b8015612a975780601f10612a6c57610100808354040283529160200191612a97565b820191906000526020600020905b815481529060010190602001808311612a7a57829003601f168201915b5050505050905090565b60606000821415612ae9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bfd565b600082905060005b60008214612b1b578080612b0490614049565b915050600a82612b149190614be1565b9150612af1565b60008167ffffffffffffffff811115612b3757612b366133c1565b5b6040519080825280601f01601f191660200182016040528015612b695781602001600182028036833780820191505090505b5090505b60008514612bf657600182612b8291906143c9565b9150600a85612b919190614c12565b6030612b9d9190613d02565b60f81b818381518110612bb357612bb2614720565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bef9190614be1565b9450612b6d565b8093505050505b919050565b612c0c8383612e73565b612c196000848484612c67565b612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f90614b92565b60405180910390fd5b505050565b505050565b505050565b6000612c888473ffffffffffffffffffffffffffffffffffffffff166121cc565b15612df1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cb16122a4565b8786866040518563ffffffff1660e01b8152600401612cd39493929190614c98565b602060405180830381600087803b158015612ced57600080fd5b505af1925050508015612d1e57506040513d601f19601f82011682018060405250810190612d1b9190614cf9565b60015b612da1573d8060008114612d4e576040519150601f19603f3d011682016040523d82523d6000602084013e612d53565b606091505b50600081511415612d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9090614b92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df6565b600190505b949350505050565b60008082905060005b8451811015612e68576000858281518110612e2557612e24614720565b5b60200260200101519050808311612e4757612e40838261304d565b9250612e54565b612e51818461304d565b92505b508080612e6090614049565b915050612e07565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614d72565b60405180910390fd5b612eec816129a3565b15612f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2390614dde565b60405180910390fd5b612f3860008383612c5d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f889190613d02565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304960008383612c62565b5050565b600082600052816020526040600020905092915050565b82805461307090613b11565b90600052602060002090601f01602090048101928261309257600085556130d9565b82601f106130ab57805160ff19168380011785556130d9565b828001600101855582156130d9579182015b828111156130d85782518255916020019190600101906130bd565b5b5090506130e691906130ea565b5090565b5b808211156131035760008160009055506001016130eb565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131508161311b565b811461315b57600080fd5b50565b60008135905061316d81613147565b92915050565b60006020828403121561318957613188613111565b5b60006131978482850161315e565b91505092915050565b60008115159050919050565b6131b5816131a0565b82525050565b60006020820190506131d060008301846131ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132105780820151818401526020810190506131f5565b8381111561321f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613241826131d6565b61324b81856131e1565b935061325b8185602086016131f2565b61326481613225565b840191505092915050565b600060208201905081810360008301526132898184613236565b905092915050565b6000819050919050565b6132a481613291565b81146132af57600080fd5b50565b6000813590506132c18161329b565b92915050565b6000602082840312156132dd576132dc613111565b5b60006132eb848285016132b2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331f826132f4565b9050919050565b61332f81613314565b82525050565b600060208201905061334a6000830184613326565b92915050565b61335981613314565b811461336457600080fd5b50565b60008135905061337681613350565b92915050565b6000806040838503121561339357613392613111565b5b60006133a185828601613367565b92505060206133b2858286016132b2565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133f982613225565b810181811067ffffffffffffffff82111715613418576134176133c1565b5b80604052505050565b600061342b613107565b905061343782826133f0565b919050565b600067ffffffffffffffff821115613457576134566133c1565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6134808161346d565b811461348b57600080fd5b50565b60008135905061349d81613477565b92915050565b60006134b66134b18461343c565b613421565b905080838252602082019050602084028301858111156134d9576134d8613468565b5b835b8181101561350257806134ee888261348e565b8452602084019350506020810190506134db565b5050509392505050565b600082601f830112613521576135206133bc565b5b81356135318482602086016134a3565b91505092915050565b6000602082840312156135505761354f613111565b5b600082013567ffffffffffffffff81111561356e5761356d613116565b5b61357a8482850161350c565b91505092915050565b61358c81613291565b82525050565b60006020820190506135a76000830184613583565b92915050565b6000806000606084860312156135c6576135c5613111565b5b60006135d486828701613367565b93505060206135e586828701613367565b92505060406135f6868287016132b2565b9150509250925092565b60006020828403121561361657613615613111565b5b600061362484828501613367565b91505092915050565b6000819050919050565b600061365261364d613648846132f4565b61362d565b6132f4565b9050919050565b600061366482613637565b9050919050565b600061367682613659565b9050919050565b6136868161366b565b82525050565b60006020820190506136a1600083018461367d565b92915050565b600080fd5b600067ffffffffffffffff8211156136c7576136c66133c1565b5b6136d082613225565b9050602081019050919050565b82818337600083830152505050565b60006136ff6136fa846136ac565b613421565b90508281526020810184848401111561371b5761371a6136a7565b5b6137268482856136dd565b509392505050565b600082601f830112613743576137426133bc565b5b81356137538482602086016136ec565b91505092915050565b60006020828403121561377257613771613111565b5b600082013567ffffffffffffffff8111156137905761378f613116565b5b61379c8482850161372e565b91505092915050565b60006137b082613659565b9050919050565b6137c0816137a5565b82525050565b60006020820190506137db60008301846137b7565b92915050565b6137ea816131a0565b81146137f557600080fd5b50565b600081359050613807816137e1565b92915050565b6000806040838503121561382457613823613111565b5b600061383285828601613367565b9250506020613843858286016137f8565b9150509250929050565b600067ffffffffffffffff821115613868576138676133c1565b5b61387182613225565b9050602081019050919050565b600061389161388c8461384d565b613421565b9050828152602081018484840111156138ad576138ac6136a7565b5b6138b88482856136dd565b509392505050565b600082601f8301126138d5576138d46133bc565b5b81356138e584826020860161387e565b91505092915050565b6000806000806080858703121561390857613907613111565b5b600061391687828801613367565b945050602061392787828801613367565b9350506040613938878288016132b2565b925050606085013567ffffffffffffffff81111561395957613958613116565b5b613965878288016138c0565b91505092959194509250565b6000806040838503121561398857613987613111565b5b600083013567ffffffffffffffff8111156139a6576139a5613116565b5b6139b28582860161350c565b92505060206139c38582860161348e565b9150509250929050565b600080fd5b60008083601f8401126139e8576139e76133bc565b5b8235905067ffffffffffffffff811115613a0557613a046139cd565b5b602083019150836020820283011115613a2157613a20613468565b5b9250929050565b60008060208385031215613a3f57613a3e613111565b5b600083013567ffffffffffffffff811115613a5d57613a5c613116565b5b613a69858286016139d2565b92509250509250929050565b600060208284031215613a8b57613a8a613111565b5b6000613a998482850161348e565b91505092915050565b60008060408385031215613ab957613ab8613111565b5b6000613ac785828601613367565b9250506020613ad885828601613367565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2957607f821691505b60208210811415613b3d57613b3c613ae2565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b9f6021836131e1565b9150613baa82613b43565b604082019050919050565b60006020820190508181036000830152613bce81613b92565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613c31603e836131e1565b9150613c3c82613bd5565b604082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f5468652073616c65206973207061757365642e00000000000000000000000000600082015250565b6000613c9d6013836131e1565b9150613ca882613c67565b602082019050919050565b60006020820190508181036000830152613ccc81613c90565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d0d82613291565b9150613d1883613291565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d4d57613d4c613cd3565b5b828201905092915050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e7920286f6c64290000000000000000000000000000602082015250565b6000613db46032836131e1565b9150613dbf82613d58565b604082019050919050565b60006020820190508181036000830152613de381613da7565b9050919050565b60008160601b9050919050565b6000613e0282613dea565b9050919050565b6000613e1482613df7565b9050919050565b613e2c613e2782613314565b613e09565b82525050565b6000613e3e8284613e1b565b60148201915081905092915050565b7f4e6f7420656c696769626c650000000000000000000000000000000000000000600082015250565b6000613e83600c836131e1565b9150613e8e82613e4d565b602082019050919050565b60006020820190508181036000830152613eb281613e76565b9050919050565b7f596f7520616c726561647920636c61696d656400000000000000000000000000600082015250565b6000613eef6013836131e1565b9150613efa82613eb9565b602082019050919050565b60006020820190508181036000830152613f1e81613ee2565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613f81602e836131e1565b9150613f8c82613f25565b604082019050919050565b60006020820190508181036000830152613fb081613f74565b9050919050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e790000000000000000000000000000000000000000602082015250565b6000614013602c836131e1565b915061401e82613fb7565b604082019050919050565b6000602082019050818103600083015261404281614006565b9050919050565b600061405482613291565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408757614086613cd3565b5b600182019050919050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e7920287075626c6963290000000000000000000000602082015250565b60006140ee6035836131e1565b91506140f982614092565b604082019050919050565b6000602082019050818103600083015261411d816140e1565b9050919050565b7f596f752063616e2774206d696e742074686174206d616e7920696e206f6e652060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b6000614180602b836131e1565b915061418b82614124565b604082019050919050565b600060208201905081810360008301526141af81614173565b9050919050565b7f596f752063616e2774206d696e742074686174206d616e79207065722077616c60008201527f6c65740000000000000000000000000000000000000000000000000000000000602082015250565b60006142126023836131e1565b915061421d826141b6565b604082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b6000815190506142578161329b565b92915050565b60006020828403121561427357614272613111565b5b600061428184828501614248565b91505092915050565b600061429582613291565b91506142a083613291565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142d9576142d8613cd3565b5b828202905092915050565b7f496e73756666696369656e7420486f6e65792062616c616e6365000000000000600082015250565b600061431a601a836131e1565b9150614325826142e4565b602082019050919050565b600060208201905081810360008301526143498161430d565b9050919050565b60006060820190506143656000830186613326565b6143726020830185613326565b61437f6040830184613583565b949350505050565b600081519050614396816137e1565b92915050565b6000602082840312156143b2576143b1613111565b5b60006143c084828501614387565b91505092915050565b60006143d482613291565b91506143df83613291565b9250828210156143f2576143f1613cd3565b5b828203905092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006144336018836131e1565b915061443e826143fd565b602082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006144c56029836131e1565b91506144d082614469565b604082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614557602f836131e1565b9150614562826144fb565b604082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b600081905092915050565b60006145a3826131d6565b6145ad818561458d565b93506145bd8185602086016131f2565b80840191505092915050565b60008190508160005260206000209050919050565b600081546145eb81613b11565b6145f5818661458d565b94506001821660008114614610576001811461462157614654565b60ff19831686528186019350614654565b61462a856145c9565b60005b8381101561464c5781548189015260018201915060208101905061462d565b838801955050505b50505092915050565b60006146698286614598565b91506146758285614598565b915061468182846145de565b9150819050949350505050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e792028686f6e6f7261727929000000000000000000602082015250565b60006146ea6037836131e1565b91506146f58261468e565b604082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061475e81613350565b92915050565b60006020828403121561477a57614779613111565b5b60006147888482850161474f565b91505092915050565b7f596f7520646f206e6f74206f776e207468617420426561720000000000000000600082015250565b60006147c76018836131e1565b91506147d282614791565b602082019050919050565b600060208201905081810360008301526147f6816147ba565b9050919050565b7f4265617220616c726561647920636c61696d656420666f720000000000000000600082015250565b60006148336018836131e1565b915061483e826147fd565b602082019050919050565b6000602082019050818103600083015261486281614826565b9050919050565b600060408201905061487e6000830185613326565b61488b6020830184613583565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148ee6026836131e1565b91506148f982614892565b604082019050919050565b6000602082019050818103600083015261491d816148e1565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006149806025836131e1565b915061498b82614924565b604082019050919050565b600060208201905081810360008301526149af81614973565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a126024836131e1565b9150614a1d826149b6565b604082019050919050565b60006020820190508181036000830152614a4181614a05565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a7e6020836131e1565b9150614a8982614a48565b602082019050919050565b60006020820190508181036000830152614aad81614a71565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614aea6019836131e1565b9150614af582614ab4565b602082019050919050565b60006020820190508181036000830152614b1981614add565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614b7c6032836131e1565b9150614b8782614b20565b604082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bec82613291565b9150614bf783613291565b925082614c0757614c06614bb2565b5b828204905092915050565b6000614c1d82613291565b9150614c2883613291565b925082614c3857614c37614bb2565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614c6a82614c43565b614c748185614c4e565b9350614c848185602086016131f2565b614c8d81613225565b840191505092915050565b6000608082019050614cad6000830187613326565b614cba6020830186613326565b614cc76040830185613583565b8181036060830152614cd98184614c5f565b905095945050505050565b600081519050614cf381613147565b92915050565b600060208284031215614d0f57614d0e613111565b5b6000614d1d84828501614ce4565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d5c6020836131e1565b9150614d6782614d26565b602082019050919050565b60006020820190508181036000830152614d8b81614d4f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614dc8601c836131e1565b9150614dd382614d92565b602082019050919050565b60006020820190508181036000830152614df781614dbb565b905091905056fea264697066735822122080e877aaef4a34402c953d644aae3c4fe2b6e132c98b14f3ce8ceb5d8cd778f164736f6c63430008090033697066733a2f2f62616679626569626868697a7267356662326469663577616b7874637335366d7766336c68356c68646e7773627468336e35646136646d7a656e752f

Deployed Bytecode

0x6080604052600436106102935760003560e01c8063980d52781161015a578063bb5c5139116100c1578063ca628c781161007a578063ca628c78146109a3578063dab5f340146109ba578063e44e69c1146109e3578063e985e9c514610a0c578063f2fde38b14610a49578063f47c84c514610a7257610293565b8063bb5c51391461089e578063bdf99814146108c9578063c0485ecb146108f4578063c66828621461091f578063c87b56dd1461094a578063ca31fc111461098757610293565b8063afdf613411610113578063afdf613414610792578063b02a4901146107bb578063b19960e6146107e4578063b617bc171461080f578063b88d4fde14610838578063b8a20ed01461086157610293565b8063980d5278146106925780639abc8320146106bd5780639d76ea58146106e8578063a035b1fe14610713578063a22cb4651461073e578063a8c6c2131461076757610293565b80634286eb47116101fe578063715018a6116101b7578063715018a6146105a8578063814bea02146105bf5780638da5cb5b146105e85780638ecad7211461061357806391b7f5ed1461063e57806395d89b411461066757610293565b80634286eb47146104845780634e11b9c0146104af57806355f804b3146104da578063564566a8146105035780636352211e1461052e57806370a082311461056b57610293565b806323b872dd1161025057806323b872dd146103ad57806326a4e8d2146103d657806334918dfd146103ff578063375a069a1461041657806340c10f191461043f57806342842e0e1461045b57610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d578063178653891461036657806318160ddd14610382575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613173565b610a9d565b6040516102cc91906131bb565b60405180910390f35b3480156102e157600080fd5b506102ea610b7f565b6040516102f7919061326f565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906132c7565b610c11565b6040516103349190613335565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f919061337c565b610c57565b005b610380600480360381019061037b919061353a565b610d6f565b005b34801561038e57600080fd5b50610397610fb4565b6040516103a49190613592565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906135ad565b610fba565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190613600565b61101a565b005b34801561040b57600080fd5b50610414611066565b005b34801561042257600080fd5b5061043d600480360381019061043891906132c7565b61109a565b005b6104596004803603810190610454919061337c565b6111ce565b005b34801561046757600080fd5b50610482600480360381019061047d91906135ad565b6115e3565b005b34801561049057600080fd5b50610499611603565b6040516104a69190613592565b60405180910390f35b3480156104bb57600080fd5b506104c4611609565b6040516104d1919061368c565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc919061375c565b61162f565b005b34801561050f57600080fd5b50610518611651565b60405161052591906131bb565b60405180910390f35b34801561053a57600080fd5b50610555600480360381019061055091906132c7565b611664565b6040516105629190613335565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613600565b611716565b60405161059f9190613592565b60405180910390f35b3480156105b457600080fd5b506105bd6117ce565b005b3480156105cb57600080fd5b506105e660048036038101906105e19190613600565b6117e2565b005b3480156105f457600080fd5b506105fd61182e565b60405161060a9190613335565b60405180910390f35b34801561061f57600080fd5b50610628611858565b6040516106359190613592565b60405180910390f35b34801561064a57600080fd5b50610665600480360381019061066091906132c7565b61185e565b005b34801561067357600080fd5b5061067c611870565b604051610689919061326f565b60405180910390f35b34801561069e57600080fd5b506106a7611902565b6040516106b49190613592565b60405180910390f35b3480156106c957600080fd5b506106d2611908565b6040516106df919061326f565b60405180910390f35b3480156106f457600080fd5b506106fd611996565b60405161070a91906137c6565b60405180910390f35b34801561071f57600080fd5b506107286119bc565b6040516107359190613592565b60405180910390f35b34801561074a57600080fd5b506107656004803603810190610760919061380d565b6119c2565b005b34801561077357600080fd5b5061077c6119d8565b6040516107899190613592565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b491906132c7565b6119de565b005b3480156107c757600080fd5b506107e260048036038101906107dd91906132c7565b6119f7565b005b3480156107f057600080fd5b506107f9611a09565b6040516108069190613592565b60405180910390f35b34801561081b57600080fd5b50610836600480360381019061083191906132c7565b611a0f565b005b34801561084457600080fd5b5061085f600480360381019061085a91906138ee565b611a21565b005b34801561086d57600080fd5b5061088860048036038101906108839190613971565b611a83565b60405161089591906131bb565b60405180910390f35b3480156108aa57600080fd5b506108b3611a9a565b6040516108c09190613592565b60405180910390f35b3480156108d557600080fd5b506108de611aa0565b6040516108eb9190613592565b60405180910390f35b34801561090057600080fd5b50610909611aa6565b6040516109169190613592565b60405180910390f35b34801561092b57600080fd5b50610934611aac565b604051610941919061326f565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906132c7565b611b3a565b60405161097e919061326f565b60405180910390f35b6109a1600480360381019061099c9190613a28565b611be4565b005b3480156109af57600080fd5b506109b8611f26565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613a75565b61208a565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906132c7565b61209c565b005b348015610a1857600080fd5b50610a336004803603810190610a2e9190613aa2565b6120ae565b604051610a4091906131bb565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190613600565b612142565b005b348015610a7e57600080fd5b50610a876121c6565b604051610a949190613592565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b785750610b77826121ef565b5b9050919050565b606060008054610b8e90613b11565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba90613b11565b8015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c1c82612259565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6282611664565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca90613bb5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf26122a4565b73ffffffffffffffffffffffffffffffffffffffff161480610d215750610d2081610d1b6122a4565b6120ae565b5b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790613c47565b60405180910390fd5b610d6a83836122ac565b505050565b601260149054906101000a900460ff16610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613cb3565b60405180910390fd5b600d546001601054610dd09190613d02565b1115610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613dca565b60405180910390fd5b610e418133604051602001610e269190613e32565b60405160208183030381529060405280519060200120611a83565b610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613e99565b60405180910390fd5b600180601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecd9190613d02565b1115610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590613f05565b60405180910390fd5b610f26336001600c54610f219190613d02565b612365565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f769190613d02565b92505081905550600160136000828254610f909190613d02565b92505081905550600160106000828254610faa9190613d02565b9250508190555050565b60135481565b610fcb610fc56122a4565b82612383565b61100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190613f97565b60405180910390fd5b611015838383612418565b505050565b61102261267f565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61106e61267f565b601260149054906101000a900460ff1615601260146101000a81548160ff021916908315150217905550565b6110a261267f565b600b5481600e546110b39190613d02565b11156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90614029565b60405180910390fd5b60005b8181116111425761112f3382600e54600d54600c546111169190613d02565b6111209190613d02565b61112a9190613d02565b612365565b808061113a90614049565b9150506110f7565b5080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111929190613d02565b9250508190555080601360008282546111ab9190613d02565b9250508190555080600e60008282546111c49190613d02565b9250508190555050565b601260149054906101000a900460ff1661121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490613cb3565b60405180910390fd5b600b5481600e5461122e9190613d02565b111561126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690614104565b60405180910390fd5b6009548111156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90614196565b60405180910390fd5b600a5481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113029190613d02565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90614228565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161139e9190613335565b60206040518083038186803b1580156113b657600080fd5b505afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee919061425d565b600854826113fc919061428a565b111561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614330565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33306008548561148b919061428a565b6040518463ffffffff1660e01b81526004016114a993929190614350565b602060405180830381600087803b1580156114c357600080fd5b505af11580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb919061439c565b5060005b60018261150c91906143c9565b8111611556576115433382600e54600d54600c5461152a9190613d02565b6115349190613d02565b61153e9190613d02565b612365565b808061154e90614049565b9150506114ff565b5080601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115a69190613d02565b9250508190555080601360008282546115bf9190613d02565b9250508190555080600e60008282546115d89190613d02565b925050819055505050565b6115fe83838360405180602001604052806000815250611a21565b505050565b600b5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163761267f565b806017908051906020019061164d929190613064565b5050565b601260149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614449565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e906144db565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117d661267f565b6117e060006126fd565b565b6117ea61267f565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b61186661267f565b8060088190555050565b60606001805461187f90613b11565b80601f01602080910402602001604051908101604052809291908181526020018280546118ab90613b11565b80156118f85780601f106118cd576101008083540402835291602001916118f8565b820191906000526020600020905b8154815290600101906020018083116118db57829003601f168201915b5050505050905090565b600e5481565b6017805461191590613b11565b80601f016020809104026020016040519081016040528092919081815260200182805461194190613b11565b801561198e5780601f106119635761010080835404028352916020019161198e565b820191906000526020600020905b81548152906001019060200180831161197157829003601f168201915b505050505081565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6119d46119cd6122a4565b83836127c3565b5050565b600c5481565b6119e661267f565b8060098190555080600a8190555050565b6119ff61267f565b80600c8190555050565b600a5481565b611a1761267f565b80600d8190555050565b611a32611a2c6122a4565b83612383565b611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890613f97565b60405180910390fd5b611a7d84848484612930565b50505050565b6000611a92836007548461298c565b905092915050565b600f5481565b60105481565b600d5481565b60188054611ab990613b11565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae590613b11565b8015611b325780601f10611b0757610100808354040283529160200191611b32565b820191906000526020600020905b815481529060010190602001808311611b1557829003601f168201915b505050505081565b6060611b45826129a3565b611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b9061456d565b60405180910390fd5b6000611b8e612a0f565b90506000815111611bae5760405180602001604052806000815250611bdc565b80611bb884612aa1565b6018604051602001611bcc9392919061465d565b6040516020818303038152906040525b915050919050565b601260149054906101000a900460ff16611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613cb3565b60405180910390fd5b600c5482829050600f54611c479190613d02565b1115611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90614700565b60405180910390fd5b60005b82829050811015611e55573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858585818110611cfe57611cfd614720565b5b905060200201356040518263ffffffff1660e01b8152600401611d219190613592565b60206040518083038186803b158015611d3957600080fd5b505afa158015611d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d719190614764565b73ffffffffffffffffffffffffffffffffffffffff1614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe906147dd565b60405180910390fd5b60018060156000868686818110611de157611de0614720565b5b90506020020135815260200190815260200160002054611e019190613d02565b1115611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990614849565b60405180910390fd5b8080611e4d90614049565b915050611c8b565b5060005b600183839050611e6991906143c9565b8111611ee957611e9233826001600f54611e839190613d02565b611e8d9190613d02565b612365565b600160156000858585818110611eab57611eaa614720565b5b9050602002013581526020019081526020016000206000828254611ecf9190613d02565b925050819055508080611ee190614049565b915050611e59565b508181905060136000828254611eff9190613d02565b9250508190555081819050600f6000828254611f1b9190613d02565b925050819055505050565b611f2e61267f565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fc89190613335565b60206040518083038186803b158015611fe057600080fd5b505afa158015611ff4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612018919061425d565b6040518363ffffffff1660e01b8152600401612035929190614869565b602060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612087919061439c565b50565b61209261267f565b8060078190555050565b6120a461267f565b80600b8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214a61267f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614904565b60405180910390fd5b6121c3816126fd565b50565b61138881565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612262816129a3565b6122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614449565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661231f83611664565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61237f828260405180602001604052806000815250612c02565b5050565b60008061238f83611664565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123d157506123d081856120ae565b5b8061240f57508373ffffffffffffffffffffffffffffffffffffffff166123f784610c11565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661243882611664565b73ffffffffffffffffffffffffffffffffffffffff161461248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590614996565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590614a28565b60405180910390fd5b612509838383612c5d565b6125146000826122ac565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256491906143c9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125bb9190613d02565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461267a838383612c62565b505050565b6126876122a4565b73ffffffffffffffffffffffffffffffffffffffff166126a561182e565b73ffffffffffffffffffffffffffffffffffffffff16146126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290614a94565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282990614b00565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161292391906131bb565b60405180910390a3505050565b61293b848484612418565b61294784848484612c67565b612986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d90614b92565b60405180910390fd5b50505050565b6000826129998584612dfe565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060178054612a1e90613b11565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4a90613b11565b8015612a975780601f10612a6c57610100808354040283529160200191612a97565b820191906000526020600020905b815481529060010190602001808311612a7a57829003601f168201915b5050505050905090565b60606000821415612ae9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bfd565b600082905060005b60008214612b1b578080612b0490614049565b915050600a82612b149190614be1565b9150612af1565b60008167ffffffffffffffff811115612b3757612b366133c1565b5b6040519080825280601f01601f191660200182016040528015612b695781602001600182028036833780820191505090505b5090505b60008514612bf657600182612b8291906143c9565b9150600a85612b919190614c12565b6030612b9d9190613d02565b60f81b818381518110612bb357612bb2614720565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bef9190614be1565b9450612b6d565b8093505050505b919050565b612c0c8383612e73565b612c196000848484612c67565b612c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4f90614b92565b60405180910390fd5b505050565b505050565b505050565b6000612c888473ffffffffffffffffffffffffffffffffffffffff166121cc565b15612df1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cb16122a4565b8786866040518563ffffffff1660e01b8152600401612cd39493929190614c98565b602060405180830381600087803b158015612ced57600080fd5b505af1925050508015612d1e57506040513d601f19601f82011682018060405250810190612d1b9190614cf9565b60015b612da1573d8060008114612d4e576040519150601f19603f3d011682016040523d82523d6000602084013e612d53565b606091505b50600081511415612d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9090614b92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df6565b600190505b949350505050565b60008082905060005b8451811015612e68576000858281518110612e2557612e24614720565b5b60200260200101519050808311612e4757612e40838261304d565b9250612e54565b612e51818461304d565b92505b508080612e6090614049565b915050612e07565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614d72565b60405180910390fd5b612eec816129a3565b15612f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2390614dde565b60405180910390fd5b612f3860008383612c5d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f889190613d02565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304960008383612c62565b5050565b600082600052816020526040600020905092915050565b82805461307090613b11565b90600052602060002090601f01602090048101928261309257600085556130d9565b82601f106130ab57805160ff19168380011785556130d9565b828001600101855582156130d9579182015b828111156130d85782518255916020019190600101906130bd565b5b5090506130e691906130ea565b5090565b5b808211156131035760008160009055506001016130eb565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131508161311b565b811461315b57600080fd5b50565b60008135905061316d81613147565b92915050565b60006020828403121561318957613188613111565b5b60006131978482850161315e565b91505092915050565b60008115159050919050565b6131b5816131a0565b82525050565b60006020820190506131d060008301846131ac565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132105780820151818401526020810190506131f5565b8381111561321f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613241826131d6565b61324b81856131e1565b935061325b8185602086016131f2565b61326481613225565b840191505092915050565b600060208201905081810360008301526132898184613236565b905092915050565b6000819050919050565b6132a481613291565b81146132af57600080fd5b50565b6000813590506132c18161329b565b92915050565b6000602082840312156132dd576132dc613111565b5b60006132eb848285016132b2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331f826132f4565b9050919050565b61332f81613314565b82525050565b600060208201905061334a6000830184613326565b92915050565b61335981613314565b811461336457600080fd5b50565b60008135905061337681613350565b92915050565b6000806040838503121561339357613392613111565b5b60006133a185828601613367565b92505060206133b2858286016132b2565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133f982613225565b810181811067ffffffffffffffff82111715613418576134176133c1565b5b80604052505050565b600061342b613107565b905061343782826133f0565b919050565b600067ffffffffffffffff821115613457576134566133c1565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6134808161346d565b811461348b57600080fd5b50565b60008135905061349d81613477565b92915050565b60006134b66134b18461343c565b613421565b905080838252602082019050602084028301858111156134d9576134d8613468565b5b835b8181101561350257806134ee888261348e565b8452602084019350506020810190506134db565b5050509392505050565b600082601f830112613521576135206133bc565b5b81356135318482602086016134a3565b91505092915050565b6000602082840312156135505761354f613111565b5b600082013567ffffffffffffffff81111561356e5761356d613116565b5b61357a8482850161350c565b91505092915050565b61358c81613291565b82525050565b60006020820190506135a76000830184613583565b92915050565b6000806000606084860312156135c6576135c5613111565b5b60006135d486828701613367565b93505060206135e586828701613367565b92505060406135f6868287016132b2565b9150509250925092565b60006020828403121561361657613615613111565b5b600061362484828501613367565b91505092915050565b6000819050919050565b600061365261364d613648846132f4565b61362d565b6132f4565b9050919050565b600061366482613637565b9050919050565b600061367682613659565b9050919050565b6136868161366b565b82525050565b60006020820190506136a1600083018461367d565b92915050565b600080fd5b600067ffffffffffffffff8211156136c7576136c66133c1565b5b6136d082613225565b9050602081019050919050565b82818337600083830152505050565b60006136ff6136fa846136ac565b613421565b90508281526020810184848401111561371b5761371a6136a7565b5b6137268482856136dd565b509392505050565b600082601f830112613743576137426133bc565b5b81356137538482602086016136ec565b91505092915050565b60006020828403121561377257613771613111565b5b600082013567ffffffffffffffff8111156137905761378f613116565b5b61379c8482850161372e565b91505092915050565b60006137b082613659565b9050919050565b6137c0816137a5565b82525050565b60006020820190506137db60008301846137b7565b92915050565b6137ea816131a0565b81146137f557600080fd5b50565b600081359050613807816137e1565b92915050565b6000806040838503121561382457613823613111565b5b600061383285828601613367565b9250506020613843858286016137f8565b9150509250929050565b600067ffffffffffffffff821115613868576138676133c1565b5b61387182613225565b9050602081019050919050565b600061389161388c8461384d565b613421565b9050828152602081018484840111156138ad576138ac6136a7565b5b6138b88482856136dd565b509392505050565b600082601f8301126138d5576138d46133bc565b5b81356138e584826020860161387e565b91505092915050565b6000806000806080858703121561390857613907613111565b5b600061391687828801613367565b945050602061392787828801613367565b9350506040613938878288016132b2565b925050606085013567ffffffffffffffff81111561395957613958613116565b5b613965878288016138c0565b91505092959194509250565b6000806040838503121561398857613987613111565b5b600083013567ffffffffffffffff8111156139a6576139a5613116565b5b6139b28582860161350c565b92505060206139c38582860161348e565b9150509250929050565b600080fd5b60008083601f8401126139e8576139e76133bc565b5b8235905067ffffffffffffffff811115613a0557613a046139cd565b5b602083019150836020820283011115613a2157613a20613468565b5b9250929050565b60008060208385031215613a3f57613a3e613111565b5b600083013567ffffffffffffffff811115613a5d57613a5c613116565b5b613a69858286016139d2565b92509250509250929050565b600060208284031215613a8b57613a8a613111565b5b6000613a998482850161348e565b91505092915050565b60008060408385031215613ab957613ab8613111565b5b6000613ac785828601613367565b9250506020613ad885828601613367565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2957607f821691505b60208210811415613b3d57613b3c613ae2565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b9f6021836131e1565b9150613baa82613b43565b604082019050919050565b60006020820190508181036000830152613bce81613b92565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613c31603e836131e1565b9150613c3c82613bd5565b604082019050919050565b60006020820190508181036000830152613c6081613c24565b9050919050565b7f5468652073616c65206973207061757365642e00000000000000000000000000600082015250565b6000613c9d6013836131e1565b9150613ca882613c67565b602082019050919050565b60006020820190508181036000830152613ccc81613c90565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d0d82613291565b9150613d1883613291565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d4d57613d4c613cd3565b5b828201905092915050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e7920286f6c64290000000000000000000000000000602082015250565b6000613db46032836131e1565b9150613dbf82613d58565b604082019050919050565b60006020820190508181036000830152613de381613da7565b9050919050565b60008160601b9050919050565b6000613e0282613dea565b9050919050565b6000613e1482613df7565b9050919050565b613e2c613e2782613314565b613e09565b82525050565b6000613e3e8284613e1b565b60148201915081905092915050565b7f4e6f7420656c696769626c650000000000000000000000000000000000000000600082015250565b6000613e83600c836131e1565b9150613e8e82613e4d565b602082019050919050565b60006020820190508181036000830152613eb281613e76565b9050919050565b7f596f7520616c726561647920636c61696d656400000000000000000000000000600082015250565b6000613eef6013836131e1565b9150613efa82613eb9565b602082019050919050565b60006020820190508181036000830152613f1e81613ee2565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613f81602e836131e1565b9150613f8c82613f25565b604082019050919050565b60006020820190508181036000830152613fb081613f74565b9050919050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e790000000000000000000000000000000000000000602082015250565b6000614013602c836131e1565b915061401e82613fb7565b604082019050919050565b6000602082019050818103600083015261404281614006565b9050919050565b600061405482613291565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408757614086613cd3565b5b600182019050919050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e7920287075626c6963290000000000000000000000602082015250565b60006140ee6035836131e1565b91506140f982614092565b604082019050919050565b6000602082019050818103600083015261411d816140e1565b9050919050565b7f596f752063616e2774206d696e742074686174206d616e7920696e206f6e652060008201527f7472616e73616374696f6e000000000000000000000000000000000000000000602082015250565b6000614180602b836131e1565b915061418b82614124565b604082019050919050565b600060208201905081810360008301526141af81614173565b9050919050565b7f596f752063616e2774206d696e742074686174206d616e79207065722077616c60008201527f6c65740000000000000000000000000000000000000000000000000000000000602082015250565b60006142126023836131e1565b915061421d826141b6565b604082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b6000815190506142578161329b565b92915050565b60006020828403121561427357614272613111565b5b600061428184828501614248565b91505092915050565b600061429582613291565b91506142a083613291565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142d9576142d8613cd3565b5b828202905092915050565b7f496e73756666696369656e7420486f6e65792062616c616e6365000000000000600082015250565b600061431a601a836131e1565b9150614325826142e4565b602082019050919050565b600060208201905081810360008301526143498161430d565b9050919050565b60006060820190506143656000830186613326565b6143726020830185613326565b61437f6040830184613583565b949350505050565b600081519050614396816137e1565b92915050565b6000602082840312156143b2576143b1613111565b5b60006143c084828501614387565b91505092915050565b60006143d482613291565b91506143df83613291565b9250828210156143f2576143f1613cd3565b5b828203905092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006144336018836131e1565b915061443e826143fd565b602082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006144c56029836131e1565b91506144d082614469565b604082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614557602f836131e1565b9150614562826144fb565b604082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b600081905092915050565b60006145a3826131d6565b6145ad818561458d565b93506145bd8185602086016131f2565b80840191505092915050565b60008190508160005260206000209050919050565b600081546145eb81613b11565b6145f5818661458d565b94506001821660008114614610576001811461462157614654565b60ff19831686528186019350614654565b61462a856145c9565b60005b8381101561464c5781548189015260018201915060208101905061462d565b838801955050505b50505092915050565b60006146698286614598565b91506146758285614598565b915061468182846145de565b9150819050949350505050565b7f5468657265206973206e6f7420656e6f75676820737570706c7920746f206d6960008201527f6e742074686174206d616e792028686f6e6f7261727929000000000000000000602082015250565b60006146ea6037836131e1565b91506146f58261468e565b604082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061475e81613350565b92915050565b60006020828403121561477a57614779613111565b5b60006147888482850161474f565b91505092915050565b7f596f7520646f206e6f74206f776e207468617420426561720000000000000000600082015250565b60006147c76018836131e1565b91506147d282614791565b602082019050919050565b600060208201905081810360008301526147f6816147ba565b9050919050565b7f4265617220616c726561647920636c61696d656420666f720000000000000000600082015250565b60006148336018836131e1565b915061483e826147fd565b602082019050919050565b6000602082019050818103600083015261486281614826565b9050919050565b600060408201905061487e6000830185613326565b61488b6020830184613583565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148ee6026836131e1565b91506148f982614892565b604082019050919050565b6000602082019050818103600083015261491d816148e1565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006149806025836131e1565b915061498b82614924565b604082019050919050565b600060208201905081810360008301526149af81614973565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a126024836131e1565b9150614a1d826149b6565b604082019050919050565b60006020820190508181036000830152614a4181614a05565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a7e6020836131e1565b9150614a8982614a48565b602082019050919050565b60006020820190508181036000830152614aad81614a71565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614aea6019836131e1565b9150614af582614ab4565b602082019050919050565b60006020820190508181036000830152614b1981614add565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614b7c6032836131e1565b9150614b8782614b20565b604082019050919050565b60006020820190508181036000830152614bab81614b6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bec82613291565b9150614bf783613291565b925082614c0757614c06614bb2565b5b828204905092915050565b6000614c1d82613291565b9150614c2883613291565b925082614c3857614c37614bb2565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614c6a82614c43565b614c748185614c4e565b9350614c848185602086016131f2565b614c8d81613225565b840191505092915050565b6000608082019050614cad6000830187613326565b614cba6020830186613326565b614cc76040830185613583565b8181036060830152614cd98184614c5f565b905095945050505050565b600081519050614cf381613147565b92915050565b600060208284031215614d0f57614d0e613111565b5b6000614d1d84828501614ce4565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d5c6020836131e1565b9150614d6782614d26565b602082019050919050565b60006020820190508181036000830152614d8b81614d4f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614dc8601c836131e1565b9150614dd382614d92565b602082019050919050565b60006020820190508181036000830152614df781614dbb565b905091905056fea264697066735822122080e877aaef4a34402c953d644aae3c4fe2b6e132c98b14f3ce8ceb5d8cd778f164736f6c63430008090033

Deployed Bytecode Sourcemap

43311:7140:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27311:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28238:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29751:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29268:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47114:766;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44131:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30451:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48503:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48735:91;;;;;;;;;;;;;:::i;:::-;;47920:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44937:1099;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30858:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43664:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44008:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49074:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44100:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27949:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27680:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42376:103;;;;;;;;;;;;;:::i;:::-;;48615:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41728:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43578:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49183:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28407:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43797:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44358:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43922:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43526:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29994:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43701:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49631:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49388:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43619:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49503:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31114:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48834:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43836:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43877:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43746:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44386:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49931:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46096:1010;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49789:133;;;;;;;;;;;;;:::i;:::-;;48985:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49277:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30220:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42634:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43426:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27311:305;27413:4;27465:25;27450:40;;;:11;:40;;;;:105;;;;27522:33;27507:48;;;:11;:48;;;;27450:105;:158;;;;27572:36;27596:11;27572:23;:36::i;:::-;27450:158;27430:178;;27311:305;;;:::o;28238:100::-;28292:13;28325:5;28318:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28238:100;:::o;29751:171::-;29827:7;29847:23;29862:7;29847:14;:23::i;:::-;29890:15;:24;29906:7;29890:24;;;;;;;;;;;;;;;;;;;;;29883:31;;29751:171;;;:::o;29268:417::-;29349:13;29365:23;29380:7;29365:14;:23::i;:::-;29349:39;;29413:5;29407:11;;:2;:11;;;;29399:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29507:5;29491:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29516:37;29533:5;29540:12;:10;:12::i;:::-;29516:16;:37::i;:::-;29491:62;29469:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29656:21;29665:2;29669:7;29656:8;:21::i;:::-;29338:347;29268:417;;:::o;47114:766::-;47200:12;;;;;;;;;;;47192:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47282:21;;47277:1;47255:19;;:23;;;;:::i;:::-;:48;;47247:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;47377:55;47385:5;47419:10;47402:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;47392:39;;;;;;47377:7;:55::i;:::-;47369:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47515:1;47510;47468:27;:39;47496:10;47468:39;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:48;;47460:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47658:46;47668:10;47701:1;47681:17;;:21;;;;:::i;:::-;47658:9;:46::i;:::-;47809:1;47766:27;:39;47794:10;47766:39;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;47836:1;47821:11;;:16;;;;;;;:::i;:::-;;;;;;;;47871:1;47848:19;;:24;;;;;;;:::i;:::-;;;;;;;;47114:766;:::o;44131:26::-;;;;:::o;30451:336::-;30646:41;30665:12;:10;:12::i;:::-;30679:7;30646:18;:41::i;:::-;30638:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30751:28;30761:4;30767:2;30771:7;30751:9;:28::i;:::-;30451:336;;;:::o;48503:106::-;41614:13;:11;:13::i;:::-;48595:5:::1;48573:12;;:28;;;;;;;;;;;;;;;;;;48503:106:::0;:::o;48735:91::-;41614:13;:11;:13::i;:::-;48806:12:::1;;;;;;;;;;;48805:13;48790:12;;:28;;;;;;;;;;;;;;;;;;48735:91::o:0;47920:575::-;41614:13;:11;:13::i;:::-;48025:15:::1;;48011:10;47995:13;;:26;;;;:::i;:::-;:45;;47987:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;48159:9;48154:157;48179:10;48174:1;:15;48154:157;;48211:88;48221:10;48297:1;48280:13;;48255:21;;48235:17;;:41;;;;:::i;:::-;48234:59;;;;:::i;:::-;48233:65;;;;:::i;:::-;48211:9;:88::i;:::-;48191:3;;;;;:::i;:::-;;;;48154:157;;;;48403:10;48372:15;:27;48388:10;48372:27;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;48439:10;48424:11;;:25;;;;;;;:::i;:::-;;;;;;;;48477:10;48460:13;;:27;;;;;;;:::i;:::-;;;;;;;;47920:575:::0;:::o;44937:1099::-;45023:12;;;;;;;;;;;45015:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45108:15;;45094:10;45078:13;;:26;;;;:::i;:::-;:45;;45070:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;45214:15;;45200:10;:29;;45192:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;45340:19;;45326:10;45296:15;:27;45312:10;45296:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:63;;45288:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;45440:12;;;;;;;;;;;:22;;;45463:6;45440:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45431:5;;45418:10;:18;;;;:::i;:::-;:52;;45410:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;45556:12;;;;;;;;;;;:25;;;45582:10;45602:4;45622:5;;45609:10;:18;;;;:::i;:::-;45556:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45698:9;45693:159;45729:1;45718:10;:12;;;;:::i;:::-;45713:1;:17;45693:159;;45752:88;45762:10;45838:1;45821:13;;45796:21;;45776:17;;:41;;;;:::i;:::-;45775:59;;;;:::i;:::-;45774:65;;;;:::i;:::-;45752:9;:88::i;:::-;45732:3;;;;;:::i;:::-;;;;45693:159;;;;45944:10;45913:15;:27;45929:10;45913:27;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;45980:10;45965:11;;:25;;;;;;;:::i;:::-;;;;;;;;46018:10;46001:13;;:27;;;;;;;:::i;:::-;;;;;;;;44937:1099;;:::o;30858:185::-;30996:39;31013:4;31019:2;31023:7;30996:39;;;;;;;;;;;;:16;:39::i;:::-;30858:185;;;:::o;43664:30::-;;;;:::o;44008:82::-;;;;;;;;;;;;;:::o;49074:100::-;41614:13;:11;:13::i;:::-;49158:8:::1;49148:7;:18;;;;;;;;;;;;:::i;:::-;;49074:100:::0;:::o;44100:24::-;;;;;;;;;;;;;:::o;27949:222::-;28021:7;28041:13;28057:7;:16;28065:7;28057:16;;;;;;;;;;;;;;;;;;;;;28041:32;;28109:1;28092:19;;:5;:19;;;;28084:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28158:5;28151:12;;;27949:222;;;:::o;27680:207::-;27752:7;27797:1;27780:19;;:5;:19;;;;27772:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27863:9;:16;27873:5;27863:16;;;;;;;;;;;;;;;;27856:23;;27680:207;;;:::o;42376:103::-;41614:13;:11;:13::i;:::-;42441:30:::1;42468:1;42441:18;:30::i;:::-;42376:103::o:0;48615:112::-;41614:13;:11;:13::i;:::-;48713:5:::1;48688:15;;:31;;;;;;;;;;;;;;;;;;48615:112:::0;:::o;41728:87::-;41774:7;41801:6;;;;;;;;;;;41794:13;;41728:87;:::o;43578:34::-;;;;:::o;49183:86::-;41614:13;:11;:13::i;:::-;49255:6:::1;49247:5;:14;;;;49183:86:::0;:::o;28407:104::-;28463:13;28496:7;28489:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28407:104;:::o;43797:32::-;;;;:::o;44358:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43922:79::-;;;;;;;;;;;;;:::o;43526:45::-;;;;:::o;29994:155::-;30089:52;30108:12;:10;:12::i;:::-;30122:8;30132;30089:18;:52::i;:::-;29994:155;;:::o;43701:38::-;;;;:::o;49631:149::-;41614:13;:11;:13::i;:::-;49725:7:::1;49707:15;:25;;;;49765:7;49743:19;:29;;;;49631:149:::0;:::o;49388:109::-;41614:13;:11;:13::i;:::-;49483:6:::1;49463:17;:26;;;;49388:109:::0;:::o;43619:38::-;;;;:::o;49503:116::-;41614:13;:11;:13::i;:::-;49605:6:::1;49581:21;:30;;;;49503:116:::0;:::o;31114:323::-;31288:41;31307:12;:10;:12::i;:::-;31321:7;31288:18;:41::i;:::-;31280:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31391:38;31405:4;31411:2;31415:7;31424:4;31391:13;:38::i;:::-;31114:323;;;;:::o;48834:145::-;48910:4;48934:37;48953:5;48960:4;;48966;48934:18;:37::i;:::-;48927:44;;48834:145;;;;:::o;43836:34::-;;;;:::o;43877:38::-;;;;:::o;43746:42::-;;;;:::o;44386:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49931:397::-;50004:13;50038:16;50046:7;50038;:16::i;:::-;50030:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50120:28;50151:10;:8;:10::i;:::-;50120:41;;50210:1;50185:14;50179:28;:32;:141;;;;;;;;;;;;;;;;;50251:14;50267:18;:7;:16;:18::i;:::-;50287:13;50234:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50179:141;50172:148;;;49931:397;;;:::o;46096:1010::-;46232:12;;;;;;;;;;;46224:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;46325:17;;46305:9;;:16;;46287:15;;:34;;;;:::i;:::-;:55;;46279:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;46418:9;46413:257;46437:9;;:16;;46433:1;:20;46413:257;;;46524:10;46483:51;;:15;;;;;;;;;;;:23;;;46507:9;;46517:1;46507:12;;;;;;;:::i;:::-;;;;;;;;46483:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;46475:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;46628:1;46623;46586:20;:34;46607:9;;46617:1;46607:12;;;;;;;:::i;:::-;;;;;;;;46586:34;;;;;;;;;;;;:38;;;;:::i;:::-;:43;;46578:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46455:3;;;;;:::i;:::-;;;;46413:257;;;;46687:9;46682:319;46724:1;46707:9;;:16;;:18;;;;:::i;:::-;46702:1;:23;46682:319;;46833:48;46843:10;46878:1;46874;46856:15;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;46833:9;:48::i;:::-;46988:1;46950:20;:34;46971:9;;46981:1;46971:12;;;;;;;:::i;:::-;;;;;;;;46950:34;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;46727:3;;;;;:::i;:::-;;;;46682:319;;;;47036:9;;:16;;47021:11;;:31;;;;;;;:::i;:::-;;;;;;;;47082:9;;:16;;47063:15;;:35;;;;;;;:::i;:::-;;;;;;;;46096:1010;;:::o;49789:133::-;41614:13;:11;:13::i;:::-;49842:12:::1;;;;;;;;;;;:21;;;49864:10;49876:12;;;;;;;;;;;:22;;;49907:4;49876:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49842:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49789:133::o:0;48985:80::-;41614:13;:11;:13::i;:::-;49052:5:::1;49045:4;:12;;;;48985:80:::0;:::o;49277:105::-;41614:13;:11;:13::i;:::-;49368:6:::1;49350:15;:24;;;;49277:105:::0;:::o;30220:164::-;30317:4;30341:18;:25;30360:5;30341:25;;;;;;;;;;;;;;;:35;30367:8;30341:35;;;;;;;;;;;;;;;;;;;;;;;;;30334:42;;30220:164;;;;:::o;42634:201::-;41614:13;:11;:13::i;:::-;42743:1:::1;42723:22;;:8;:22;;;;42715:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42799:28;42818:8;42799:18;:28::i;:::-;42634:201:::0;:::o;43426:41::-;43463:4;43426:41;:::o;9004:326::-;9064:4;9321:1;9299:7;:19;;;:23;9292:30;;9004:326;;;:::o;19160:157::-;19245:4;19284:25;19269:40;;;:11;:40;;;;19262:47;;19160:157;;;:::o;37726:135::-;37808:16;37816:7;37808;:16::i;:::-;37800:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37726:135;:::o;25690:98::-;25743:7;25770:10;25763:17;;25690:98;:::o;37005:174::-;37107:2;37080:15;:24;37096:7;37080:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37163:7;37159:2;37125:46;;37134:23;37149:7;37134:14;:23::i;:::-;37125:46;;;;;;;;;;;;37005:174;;:::o;33844:110::-;33920:26;33930:2;33934:7;33920:26;;;;;;;;;;;;:9;:26::i;:::-;33844:110;;:::o;33238:264::-;33331:4;33348:13;33364:23;33379:7;33364:14;:23::i;:::-;33348:39;;33417:5;33406:16;;:7;:16;;;:52;;;;33426:32;33443:5;33450:7;33426:16;:32::i;:::-;33406:52;:87;;;;33486:7;33462:31;;:20;33474:7;33462:11;:20::i;:::-;:31;;;33406:87;33398:96;;;33238:264;;;;:::o;36261:625::-;36420:4;36393:31;;:23;36408:7;36393:14;:23::i;:::-;:31;;;36385:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36499:1;36485:16;;:2;:16;;;;36477:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36555:39;36576:4;36582:2;36586:7;36555:20;:39::i;:::-;36659:29;36676:1;36680:7;36659:8;:29::i;:::-;36720:1;36701:9;:15;36711:4;36701:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36749:1;36732:9;:13;36742:2;36732:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36780:2;36761:7;:16;36769:7;36761:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36819:7;36815:2;36800:27;;36809:4;36800:27;;;;;;;;;;;;36840:38;36860:4;36866:2;36870:7;36840:19;:38::i;:::-;36261:625;;;:::o;41893:132::-;41968:12;:10;:12::i;:::-;41957:23;;:7;:5;:7::i;:::-;:23;;;41949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41893:132::o;42995:191::-;43069:16;43088:6;;;;;;;;;;;43069:25;;43114:8;43105:6;;:17;;;;;;;;;;;;;;;;;;43169:8;43138:40;;43159:8;43138:40;;;;;;;;;;;;43058:128;42995:191;:::o;37322:315::-;37477:8;37468:17;;:5;:17;;;;37460:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37564:8;37526:18;:25;37545:5;37526:25;;;;;;;;;;;;;;;:35;37552:8;37526:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37610:8;37588:41;;37603:5;37588:41;;;37620:8;37588:41;;;;;;:::i;:::-;;;;;;;;37322:315;;;:::o;32318:313::-;32474:28;32484:4;32490:2;32494:7;32474:9;:28::i;:::-;32521:47;32544:4;32550:2;32554:7;32563:4;32521:22;:47::i;:::-;32513:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32318:313;;;;:::o;929:190::-;1054:4;1107;1078:25;1091:5;1098:4;1078:12;:25::i;:::-;:33;1071:40;;929:190;;;;;:::o;32944:127::-;33009:4;33061:1;33033:30;;:7;:16;33041:7;33033:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33026:37;;32944:127;;;:::o;50337:108::-;50397:13;50430:7;50423:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50337:108;:::o;5704:723::-;5760:13;5990:1;5981:5;:10;5977:53;;;6008:10;;;;;;;;;;;;;;;;;;;;;5977:53;6040:12;6055:5;6040:20;;6071:14;6096:78;6111:1;6103:4;:9;6096:78;;6129:8;;;;;:::i;:::-;;;;6160:2;6152:10;;;;;:::i;:::-;;;6096:78;;;6184:19;6216:6;6206:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6184:39;;6234:154;6250:1;6241:5;:10;6234:154;;6278:1;6268:11;;;;;:::i;:::-;;;6345:2;6337:5;:10;;;;:::i;:::-;6324:2;:24;;;;:::i;:::-;6311:39;;6294:6;6301;6294:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6374:2;6365:11;;;;;:::i;:::-;;;6234:154;;;6412:6;6398:21;;;;;5704:723;;;;:::o;34181:319::-;34310:18;34316:2;34320:7;34310:5;:18::i;:::-;34361:53;34392:1;34396:2;34400:7;34409:4;34361:22;:53::i;:::-;34339:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34181:319;;;:::o;39850:126::-;;;;:::o;40361:125::-;;;;:::o;38425:853::-;38579:4;38600:15;:2;:13;;;:15::i;:::-;38596:675;;;38652:2;38636:36;;;38673:12;:10;:12::i;:::-;38687:4;38693:7;38702:4;38636:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38632:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38894:1;38877:6;:13;:18;38873:328;;;38920:60;;;;;;;;;;:::i;:::-;;;;;;;;38873:328;39151:6;39145:13;39136:6;39132:2;39128:15;39121:38;38632:584;38768:41;;;38758:51;;;:6;:51;;;;38751:58;;;;;38596:675;39255:4;39248:11;;38425:853;;;;;;;:::o;1481:675::-;1564:7;1584:20;1607:4;1584:27;;1627:9;1622:497;1646:5;:12;1642:1;:16;1622:497;;;1680:20;1703:5;1709:1;1703:8;;;;;;;;:::i;:::-;;;;;;;;1680:31;;1746:12;1730;:28;1726:382;;1873:42;1888:12;1902;1873:14;:42::i;:::-;1858:57;;1726:382;;;2050:42;2065:12;2079;2050:14;:42::i;:::-;2035:57;;1726:382;1665:454;1660:3;;;;;:::i;:::-;;;;1622:497;;;;2136:12;2129:19;;;1481:675;;;;:::o;34836:439::-;34930:1;34916:16;;:2;:16;;;;34908:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34989:16;34997:7;34989;:16::i;:::-;34988:17;34980:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35051:45;35080:1;35084:2;35088:7;35051:20;:45::i;:::-;35126:1;35109:9;:13;35119:2;35109:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35157:2;35138:7;:16;35146:7;35138:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35202:7;35198:2;35177:33;;35194:1;35177:33;;;;;;;;;;;;35223:44;35251:1;35255:2;35259:7;35223:19;:44::i;:::-;34836:439;;:::o;2164:224::-;2232:13;2295:1;2289:4;2282:15;2324:1;2318:4;2311:15;2365:4;2359;2349:21;2340:30;;2164:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6109:77;6146:7;6175:5;6164:16;;6109:77;;;:::o;6192:122::-;6265:24;6283:5;6265:24;:::i;:::-;6258:5;6255:35;6245:63;;6304:1;6301;6294:12;6245:63;6192:122;:::o;6320:139::-;6366:5;6404:6;6391:20;6382:29;;6420:33;6447:5;6420:33;:::i;:::-;6320:139;;;;:::o;6482:710::-;6578:5;6603:81;6619:64;6676:6;6619:64;:::i;:::-;6603:81;:::i;:::-;6594:90;;6704:5;6733:6;6726:5;6719:21;6767:4;6760:5;6756:16;6749:23;;6820:4;6812:6;6808:17;6800:6;6796:30;6849:3;6841:6;6838:15;6835:122;;;6868:79;;:::i;:::-;6835:122;6983:6;6966:220;7000:6;6995:3;6992:15;6966:220;;;7075:3;7104:37;7137:3;7125:10;7104:37;:::i;:::-;7099:3;7092:50;7171:4;7166:3;7162:14;7155:21;;7042:144;7026:4;7021:3;7017:14;7010:21;;6966:220;;;6970:21;6584:608;;6482:710;;;;;:::o;7215:370::-;7286:5;7335:3;7328:4;7320:6;7316:17;7312:27;7302:122;;7343:79;;:::i;:::-;7302:122;7460:6;7447:20;7485:94;7575:3;7567:6;7560:4;7552:6;7548:17;7485:94;:::i;:::-;7476:103;;7292:293;7215:370;;;;:::o;7591:539::-;7675:6;7724:2;7712:9;7703:7;7699:23;7695:32;7692:119;;;7730:79;;:::i;:::-;7692:119;7878:1;7867:9;7863:17;7850:31;7908:18;7900:6;7897:30;7894:117;;;7930:79;;:::i;:::-;7894:117;8035:78;8105:7;8096:6;8085:9;8081:22;8035:78;:::i;:::-;8025:88;;7821:302;7591:539;;;;:::o;8136:118::-;8223:24;8241:5;8223:24;:::i;:::-;8218:3;8211:37;8136:118;;:::o;8260:222::-;8353:4;8391:2;8380:9;8376:18;8368:26;;8404:71;8472:1;8461:9;8457:17;8448:6;8404:71;:::i;:::-;8260:222;;;;:::o;8488:619::-;8565:6;8573;8581;8630:2;8618:9;8609:7;8605:23;8601:32;8598:119;;;8636:79;;:::i;:::-;8598:119;8756:1;8781:53;8826:7;8817:6;8806:9;8802:22;8781:53;:::i;:::-;8771:63;;8727:117;8883:2;8909:53;8954:7;8945:6;8934:9;8930:22;8909:53;:::i;:::-;8899:63;;8854:118;9011:2;9037:53;9082:7;9073:6;9062:9;9058:22;9037:53;:::i;:::-;9027:63;;8982:118;8488:619;;;;;:::o;9113:329::-;9172:6;9221:2;9209:9;9200:7;9196:23;9192:32;9189:119;;;9227:79;;:::i;:::-;9189:119;9347:1;9372:53;9417:7;9408:6;9397:9;9393:22;9372:53;:::i;:::-;9362:63;;9318:117;9113:329;;;;:::o;9448:60::-;9476:3;9497:5;9490:12;;9448:60;;;:::o;9514:142::-;9564:9;9597:53;9615:34;9624:24;9642:5;9624:24;:::i;:::-;9615:34;:::i;:::-;9597:53;:::i;:::-;9584:66;;9514:142;;;:::o;9662:126::-;9712:9;9745:37;9776:5;9745:37;:::i;:::-;9732:50;;9662:126;;;:::o;9794:141::-;9859:9;9892:37;9923:5;9892:37;:::i;:::-;9879:50;;9794:141;;;:::o;9941:161::-;10043:52;10089:5;10043:52;:::i;:::-;10038:3;10031:65;9941:161;;:::o;10108:252::-;10216:4;10254:2;10243:9;10239:18;10231:26;;10267:86;10350:1;10339:9;10335:17;10326:6;10267:86;:::i;:::-;10108:252;;;;:::o;10366:117::-;10475:1;10472;10465:12;10489:308;10551:4;10641:18;10633:6;10630:30;10627:56;;;10663:18;;:::i;:::-;10627:56;10701:29;10723:6;10701:29;:::i;:::-;10693:37;;10785:4;10779;10775:15;10767:23;;10489:308;;;:::o;10803:154::-;10887:6;10882:3;10877;10864:30;10949:1;10940:6;10935:3;10931:16;10924:27;10803:154;;;:::o;10963:412::-;11041:5;11066:66;11082:49;11124:6;11082:49;:::i;:::-;11066:66;:::i;:::-;11057:75;;11155:6;11148:5;11141:21;11193:4;11186:5;11182:16;11231:3;11222:6;11217:3;11213:16;11210:25;11207:112;;;11238:79;;:::i;:::-;11207:112;11328:41;11362:6;11357:3;11352;11328:41;:::i;:::-;11047:328;10963:412;;;;;:::o;11395:340::-;11451:5;11500:3;11493:4;11485:6;11481:17;11477:27;11467:122;;11508:79;;:::i;:::-;11467:122;11625:6;11612:20;11650:79;11725:3;11717:6;11710:4;11702:6;11698:17;11650:79;:::i;:::-;11641:88;;11457:278;11395:340;;;;:::o;11741:509::-;11810:6;11859:2;11847:9;11838:7;11834:23;11830:32;11827:119;;;11865:79;;:::i;:::-;11827:119;12013:1;12002:9;11998:17;11985:31;12043:18;12035:6;12032:30;12029:117;;;12065:79;;:::i;:::-;12029:117;12170:63;12225:7;12216:6;12205:9;12201:22;12170:63;:::i;:::-;12160:73;;11956:287;11741:509;;;;:::o;12256:140::-;12320:9;12353:37;12384:5;12353:37;:::i;:::-;12340:50;;12256:140;;;:::o;12402:159::-;12503:51;12548:5;12503:51;:::i;:::-;12498:3;12491:64;12402:159;;:::o;12567:250::-;12674:4;12712:2;12701:9;12697:18;12689:26;;12725:85;12807:1;12796:9;12792:17;12783:6;12725:85;:::i;:::-;12567:250;;;;:::o;12823:116::-;12893:21;12908:5;12893:21;:::i;:::-;12886:5;12883:32;12873:60;;12929:1;12926;12919:12;12873:60;12823:116;:::o;12945:133::-;12988:5;13026:6;13013:20;13004:29;;13042:30;13066:5;13042:30;:::i;:::-;12945:133;;;;:::o;13084:468::-;13149:6;13157;13206:2;13194:9;13185:7;13181:23;13177:32;13174:119;;;13212:79;;:::i;:::-;13174:119;13332:1;13357:53;13402:7;13393:6;13382:9;13378:22;13357:53;:::i;:::-;13347:63;;13303:117;13459:2;13485:50;13527:7;13518:6;13507:9;13503:22;13485:50;:::i;:::-;13475:60;;13430:115;13084:468;;;;;:::o;13558:307::-;13619:4;13709:18;13701:6;13698:30;13695:56;;;13731:18;;:::i;:::-;13695:56;13769:29;13791:6;13769:29;:::i;:::-;13761:37;;13853:4;13847;13843:15;13835:23;;13558:307;;;:::o;13871:410::-;13948:5;13973:65;13989:48;14030:6;13989:48;:::i;:::-;13973:65;:::i;:::-;13964:74;;14061:6;14054:5;14047:21;14099:4;14092:5;14088:16;14137:3;14128:6;14123:3;14119:16;14116:25;14113:112;;;14144:79;;:::i;:::-;14113:112;14234:41;14268:6;14263:3;14258;14234:41;:::i;:::-;13954:327;13871:410;;;;;:::o;14300:338::-;14355:5;14404:3;14397:4;14389:6;14385:17;14381:27;14371:122;;14412:79;;:::i;:::-;14371:122;14529:6;14516:20;14554:78;14628:3;14620:6;14613:4;14605:6;14601:17;14554:78;:::i;:::-;14545:87;;14361:277;14300:338;;;;:::o;14644:943::-;14739:6;14747;14755;14763;14812:3;14800:9;14791:7;14787:23;14783:33;14780:120;;;14819:79;;:::i;:::-;14780:120;14939:1;14964:53;15009:7;15000:6;14989:9;14985:22;14964:53;:::i;:::-;14954:63;;14910:117;15066:2;15092:53;15137:7;15128:6;15117:9;15113:22;15092:53;:::i;:::-;15082:63;;15037:118;15194:2;15220:53;15265:7;15256:6;15245:9;15241:22;15220:53;:::i;:::-;15210:63;;15165:118;15350:2;15339:9;15335:18;15322:32;15381:18;15373:6;15370:30;15367:117;;;15403:79;;:::i;:::-;15367:117;15508:62;15562:7;15553:6;15542:9;15538:22;15508:62;:::i;:::-;15498:72;;15293:287;14644:943;;;;;;;:::o;15593:684::-;15686:6;15694;15743:2;15731:9;15722:7;15718:23;15714:32;15711:119;;;15749:79;;:::i;:::-;15711:119;15897:1;15886:9;15882:17;15869:31;15927:18;15919:6;15916:30;15913:117;;;15949:79;;:::i;:::-;15913:117;16054:78;16124:7;16115:6;16104:9;16100:22;16054:78;:::i;:::-;16044:88;;15840:302;16181:2;16207:53;16252:7;16243:6;16232:9;16228:22;16207:53;:::i;:::-;16197:63;;16152:118;15593:684;;;;;:::o;16283:117::-;16392:1;16389;16382:12;16423:568;16496:8;16506:6;16556:3;16549:4;16541:6;16537:17;16533:27;16523:122;;16564:79;;:::i;:::-;16523:122;16677:6;16664:20;16654:30;;16707:18;16699:6;16696:30;16693:117;;;16729:79;;:::i;:::-;16693:117;16843:4;16835:6;16831:17;16819:29;;16897:3;16889:4;16881:6;16877:17;16867:8;16863:32;16860:41;16857:128;;;16904:79;;:::i;:::-;16857:128;16423:568;;;;;:::o;16997:559::-;17083:6;17091;17140:2;17128:9;17119:7;17115:23;17111:32;17108:119;;;17146:79;;:::i;:::-;17108:119;17294:1;17283:9;17279:17;17266:31;17324:18;17316:6;17313:30;17310:117;;;17346:79;;:::i;:::-;17310:117;17459:80;17531:7;17522:6;17511:9;17507:22;17459:80;:::i;:::-;17441:98;;;;17237:312;16997:559;;;;;:::o;17562:329::-;17621:6;17670:2;17658:9;17649:7;17645:23;17641:32;17638:119;;;17676:79;;:::i;:::-;17638:119;17796:1;17821:53;17866:7;17857:6;17846:9;17842:22;17821:53;:::i;:::-;17811:63;;17767:117;17562:329;;;;:::o;17897:474::-;17965:6;17973;18022:2;18010:9;18001:7;17997:23;17993:32;17990:119;;;18028:79;;:::i;:::-;17990:119;18148:1;18173:53;18218:7;18209:6;18198:9;18194:22;18173:53;:::i;:::-;18163:63;;18119:117;18275:2;18301:53;18346:7;18337:6;18326:9;18322:22;18301:53;:::i;:::-;18291:63;;18246:118;17897:474;;;;;:::o;18377:180::-;18425:77;18422:1;18415:88;18522:4;18519:1;18512:15;18546:4;18543:1;18536:15;18563:320;18607:6;18644:1;18638:4;18634:12;18624:22;;18691:1;18685:4;18681:12;18712:18;18702:81;;18768:4;18760:6;18756:17;18746:27;;18702:81;18830:2;18822:6;18819:14;18799:18;18796:38;18793:84;;;18849:18;;:::i;:::-;18793:84;18614:269;18563:320;;;:::o;18889:220::-;19029:34;19025:1;19017:6;19013:14;19006:58;19098:3;19093:2;19085:6;19081:15;19074:28;18889:220;:::o;19115:366::-;19257:3;19278:67;19342:2;19337:3;19278:67;:::i;:::-;19271:74;;19354:93;19443:3;19354:93;:::i;:::-;19472:2;19467:3;19463:12;19456:19;;19115:366;;;:::o;19487:419::-;19653:4;19691:2;19680:9;19676:18;19668:26;;19740:9;19734:4;19730:20;19726:1;19715:9;19711:17;19704:47;19768:131;19894:4;19768:131;:::i;:::-;19760:139;;19487:419;;;:::o;19912:249::-;20052:34;20048:1;20040:6;20036:14;20029:58;20121:32;20116:2;20108:6;20104:15;20097:57;19912:249;:::o;20167:366::-;20309:3;20330:67;20394:2;20389:3;20330:67;:::i;:::-;20323:74;;20406:93;20495:3;20406:93;:::i;:::-;20524:2;20519:3;20515:12;20508:19;;20167:366;;;:::o;20539:419::-;20705:4;20743:2;20732:9;20728:18;20720:26;;20792:9;20786:4;20782:20;20778:1;20767:9;20763:17;20756:47;20820:131;20946:4;20820:131;:::i;:::-;20812:139;;20539:419;;;:::o;20964:169::-;21104:21;21100:1;21092:6;21088:14;21081:45;20964:169;:::o;21139:366::-;21281:3;21302:67;21366:2;21361:3;21302:67;:::i;:::-;21295:74;;21378:93;21467:3;21378:93;:::i;:::-;21496:2;21491:3;21487:12;21480:19;;21139:366;;;:::o;21511:419::-;21677:4;21715:2;21704:9;21700:18;21692:26;;21764:9;21758:4;21754:20;21750:1;21739:9;21735:17;21728:47;21792:131;21918:4;21792:131;:::i;:::-;21784:139;;21511:419;;;:::o;21936:180::-;21984:77;21981:1;21974:88;22081:4;22078:1;22071:15;22105:4;22102:1;22095:15;22122:305;22162:3;22181:20;22199:1;22181:20;:::i;:::-;22176:25;;22215:20;22233:1;22215:20;:::i;:::-;22210:25;;22369:1;22301:66;22297:74;22294:1;22291:81;22288:107;;;22375:18;;:::i;:::-;22288:107;22419:1;22416;22412:9;22405:16;;22122:305;;;;:::o;22433:237::-;22573:34;22569:1;22561:6;22557:14;22550:58;22642:20;22637:2;22629:6;22625:15;22618:45;22433:237;:::o;22676:366::-;22818:3;22839:67;22903:2;22898:3;22839:67;:::i;:::-;22832:74;;22915:93;23004:3;22915:93;:::i;:::-;23033:2;23028:3;23024:12;23017:19;;22676:366;;;:::o;23048:419::-;23214:4;23252:2;23241:9;23237:18;23229:26;;23301:9;23295:4;23291:20;23287:1;23276:9;23272:17;23265:47;23329:131;23455:4;23329:131;:::i;:::-;23321:139;;23048:419;;;:::o;23473:94::-;23506:8;23554:5;23550:2;23546:14;23525:35;;23473:94;;;:::o;23573:::-;23612:7;23641:20;23655:5;23641:20;:::i;:::-;23630:31;;23573:94;;;:::o;23673:100::-;23712:7;23741:26;23761:5;23741:26;:::i;:::-;23730:37;;23673:100;;;:::o;23779:157::-;23884:45;23904:24;23922:5;23904:24;:::i;:::-;23884:45;:::i;:::-;23879:3;23872:58;23779:157;;:::o;23942:256::-;24054:3;24069:75;24140:3;24131:6;24069:75;:::i;:::-;24169:2;24164:3;24160:12;24153:19;;24189:3;24182:10;;23942:256;;;;:::o;24204:162::-;24344:14;24340:1;24332:6;24328:14;24321:38;24204:162;:::o;24372:366::-;24514:3;24535:67;24599:2;24594:3;24535:67;:::i;:::-;24528:74;;24611:93;24700:3;24611:93;:::i;:::-;24729:2;24724:3;24720:12;24713:19;;24372:366;;;:::o;24744:419::-;24910:4;24948:2;24937:9;24933:18;24925:26;;24997:9;24991:4;24987:20;24983:1;24972:9;24968:17;24961:47;25025:131;25151:4;25025:131;:::i;:::-;25017:139;;24744:419;;;:::o;25169:169::-;25309:21;25305:1;25297:6;25293:14;25286:45;25169:169;:::o;25344:366::-;25486:3;25507:67;25571:2;25566:3;25507:67;:::i;:::-;25500:74;;25583:93;25672:3;25583:93;:::i;:::-;25701:2;25696:3;25692:12;25685:19;;25344:366;;;:::o;25716:419::-;25882:4;25920:2;25909:9;25905:18;25897:26;;25969:9;25963:4;25959:20;25955:1;25944:9;25940:17;25933:47;25997:131;26123:4;25997:131;:::i;:::-;25989:139;;25716:419;;;:::o;26141:233::-;26281:34;26277:1;26269:6;26265:14;26258:58;26350:16;26345:2;26337:6;26333:15;26326:41;26141:233;:::o;26380:366::-;26522:3;26543:67;26607:2;26602:3;26543:67;:::i;:::-;26536:74;;26619:93;26708:3;26619:93;:::i;:::-;26737:2;26732:3;26728:12;26721:19;;26380:366;;;:::o;26752:419::-;26918:4;26956:2;26945:9;26941:18;26933:26;;27005:9;26999:4;26995:20;26991:1;26980:9;26976:17;26969:47;27033:131;27159:4;27033:131;:::i;:::-;27025:139;;26752:419;;;:::o;27177:231::-;27317:34;27313:1;27305:6;27301:14;27294:58;27386:14;27381:2;27373:6;27369:15;27362:39;27177:231;:::o;27414:366::-;27556:3;27577:67;27641:2;27636:3;27577:67;:::i;:::-;27570:74;;27653:93;27742:3;27653:93;:::i;:::-;27771:2;27766:3;27762:12;27755:19;;27414:366;;;:::o;27786:419::-;27952:4;27990:2;27979:9;27975:18;27967:26;;28039:9;28033:4;28029:20;28025:1;28014:9;28010:17;28003:47;28067:131;28193:4;28067:131;:::i;:::-;28059:139;;27786:419;;;:::o;28211:233::-;28250:3;28273:24;28291:5;28273:24;:::i;:::-;28264:33;;28319:66;28312:5;28309:77;28306:103;;;28389:18;;:::i;:::-;28306:103;28436:1;28429:5;28425:13;28418:20;;28211:233;;;:::o;28450:240::-;28590:34;28586:1;28578:6;28574:14;28567:58;28659:23;28654:2;28646:6;28642:15;28635:48;28450:240;:::o;28696:366::-;28838:3;28859:67;28923:2;28918:3;28859:67;:::i;:::-;28852:74;;28935:93;29024:3;28935:93;:::i;:::-;29053:2;29048:3;29044:12;29037:19;;28696:366;;;:::o;29068:419::-;29234:4;29272:2;29261:9;29257:18;29249:26;;29321:9;29315:4;29311:20;29307:1;29296:9;29292:17;29285:47;29349:131;29475:4;29349:131;:::i;:::-;29341:139;;29068:419;;;:::o;29493:230::-;29633:34;29629:1;29621:6;29617:14;29610:58;29702:13;29697:2;29689:6;29685:15;29678:38;29493:230;:::o;29729:366::-;29871:3;29892:67;29956:2;29951:3;29892:67;:::i;:::-;29885:74;;29968:93;30057:3;29968:93;:::i;:::-;30086:2;30081:3;30077:12;30070:19;;29729:366;;;:::o;30101:419::-;30267:4;30305:2;30294:9;30290:18;30282:26;;30354:9;30348:4;30344:20;30340:1;30329:9;30325:17;30318:47;30382:131;30508:4;30382:131;:::i;:::-;30374:139;;30101:419;;;:::o;30526:222::-;30666:34;30662:1;30654:6;30650:14;30643:58;30735:5;30730:2;30722:6;30718:15;30711:30;30526:222;:::o;30754:366::-;30896:3;30917:67;30981:2;30976:3;30917:67;:::i;:::-;30910:74;;30993:93;31082:3;30993:93;:::i;:::-;31111:2;31106:3;31102:12;31095:19;;30754:366;;;:::o;31126:419::-;31292:4;31330:2;31319:9;31315:18;31307:26;;31379:9;31373:4;31369:20;31365:1;31354:9;31350:17;31343:47;31407:131;31533:4;31407:131;:::i;:::-;31399:139;;31126:419;;;:::o;31551:143::-;31608:5;31639:6;31633:13;31624:22;;31655:33;31682:5;31655:33;:::i;:::-;31551:143;;;;:::o;31700:351::-;31770:6;31819:2;31807:9;31798:7;31794:23;31790:32;31787:119;;;31825:79;;:::i;:::-;31787:119;31945:1;31970:64;32026:7;32017:6;32006:9;32002:22;31970:64;:::i;:::-;31960:74;;31916:128;31700:351;;;;:::o;32057:348::-;32097:7;32120:20;32138:1;32120:20;:::i;:::-;32115:25;;32154:20;32172:1;32154:20;:::i;:::-;32149:25;;32342:1;32274:66;32270:74;32267:1;32264:81;32259:1;32252:9;32245:17;32241:105;32238:131;;;32349:18;;:::i;:::-;32238:131;32397:1;32394;32390:9;32379:20;;32057:348;;;;:::o;32411:176::-;32551:28;32547:1;32539:6;32535:14;32528:52;32411:176;:::o;32593:366::-;32735:3;32756:67;32820:2;32815:3;32756:67;:::i;:::-;32749:74;;32832:93;32921:3;32832:93;:::i;:::-;32950:2;32945:3;32941:12;32934:19;;32593:366;;;:::o;32965:419::-;33131:4;33169:2;33158:9;33154:18;33146:26;;33218:9;33212:4;33208:20;33204:1;33193:9;33189:17;33182:47;33246:131;33372:4;33246:131;:::i;:::-;33238:139;;32965:419;;;:::o;33390:442::-;33539:4;33577:2;33566:9;33562:18;33554:26;;33590:71;33658:1;33647:9;33643:17;33634:6;33590:71;:::i;:::-;33671:72;33739:2;33728:9;33724:18;33715:6;33671:72;:::i;:::-;33753;33821:2;33810:9;33806:18;33797:6;33753:72;:::i;:::-;33390:442;;;;;;:::o;33838:137::-;33892:5;33923:6;33917:13;33908:22;;33939:30;33963:5;33939:30;:::i;:::-;33838:137;;;;:::o;33981:345::-;34048:6;34097:2;34085:9;34076:7;34072:23;34068:32;34065:119;;;34103:79;;:::i;:::-;34065:119;34223:1;34248:61;34301:7;34292:6;34281:9;34277:22;34248:61;:::i;:::-;34238:71;;34194:125;33981:345;;;;:::o;34332:191::-;34372:4;34392:20;34410:1;34392:20;:::i;:::-;34387:25;;34426:20;34444:1;34426:20;:::i;:::-;34421:25;;34465:1;34462;34459:8;34456:34;;;34470:18;;:::i;:::-;34456:34;34515:1;34512;34508:9;34500:17;;34332:191;;;;:::o;34529:174::-;34669:26;34665:1;34657:6;34653:14;34646:50;34529:174;:::o;34709:366::-;34851:3;34872:67;34936:2;34931:3;34872:67;:::i;:::-;34865:74;;34948:93;35037:3;34948:93;:::i;:::-;35066:2;35061:3;35057:12;35050:19;;34709:366;;;:::o;35081:419::-;35247:4;35285:2;35274:9;35270:18;35262:26;;35334:9;35328:4;35324:20;35320:1;35309:9;35305:17;35298:47;35362:131;35488:4;35362:131;:::i;:::-;35354:139;;35081:419;;;:::o;35506:228::-;35646:34;35642:1;35634:6;35630:14;35623:58;35715:11;35710:2;35702:6;35698:15;35691:36;35506:228;:::o;35740:366::-;35882:3;35903:67;35967:2;35962:3;35903:67;:::i;:::-;35896:74;;35979:93;36068:3;35979:93;:::i;:::-;36097:2;36092:3;36088:12;36081:19;;35740:366;;;:::o;36112:419::-;36278:4;36316:2;36305:9;36301:18;36293:26;;36365:9;36359:4;36355:20;36351:1;36340:9;36336:17;36329:47;36393:131;36519:4;36393:131;:::i;:::-;36385:139;;36112:419;;;:::o;36537:234::-;36677:34;36673:1;36665:6;36661:14;36654:58;36746:17;36741:2;36733:6;36729:15;36722:42;36537:234;:::o;36777:366::-;36919:3;36940:67;37004:2;36999:3;36940:67;:::i;:::-;36933:74;;37016:93;37105:3;37016:93;:::i;:::-;37134:2;37129:3;37125:12;37118:19;;36777:366;;;:::o;37149:419::-;37315:4;37353:2;37342:9;37338:18;37330:26;;37402:9;37396:4;37392:20;37388:1;37377:9;37373:17;37366:47;37430:131;37556:4;37430:131;:::i;:::-;37422:139;;37149:419;;;:::o;37574:148::-;37676:11;37713:3;37698:18;;37574:148;;;;:::o;37728:377::-;37834:3;37862:39;37895:5;37862:39;:::i;:::-;37917:89;37999:6;37994:3;37917:89;:::i;:::-;37910:96;;38015:52;38060:6;38055:3;38048:4;38041:5;38037:16;38015:52;:::i;:::-;38092:6;38087:3;38083:16;38076:23;;37838:267;37728:377;;;;:::o;38111:141::-;38160:4;38183:3;38175:11;;38206:3;38203:1;38196:14;38240:4;38237:1;38227:18;38219:26;;38111:141;;;:::o;38282:845::-;38385:3;38422:5;38416:12;38451:36;38477:9;38451:36;:::i;:::-;38503:89;38585:6;38580:3;38503:89;:::i;:::-;38496:96;;38623:1;38612:9;38608:17;38639:1;38634:137;;;;38785:1;38780:341;;;;38601:520;;38634:137;38718:4;38714:9;38703;38699:25;38694:3;38687:38;38754:6;38749:3;38745:16;38738:23;;38634:137;;38780:341;38847:38;38879:5;38847:38;:::i;:::-;38907:1;38921:154;38935:6;38932:1;38929:13;38921:154;;;39009:7;39003:14;38999:1;38994:3;38990:11;38983:35;39059:1;39050:7;39046:15;39035:26;;38957:4;38954:1;38950:12;38945:17;;38921:154;;;39104:6;39099:3;39095:16;39088:23;;38787:334;;38601:520;;38389:738;;38282:845;;;;:::o;39133:589::-;39358:3;39380:95;39471:3;39462:6;39380:95;:::i;:::-;39373:102;;39492:95;39583:3;39574:6;39492:95;:::i;:::-;39485:102;;39604:92;39692:3;39683:6;39604:92;:::i;:::-;39597:99;;39713:3;39706:10;;39133:589;;;;;;:::o;39728:242::-;39868:34;39864:1;39856:6;39852:14;39845:58;39937:25;39932:2;39924:6;39920:15;39913:50;39728:242;:::o;39976:366::-;40118:3;40139:67;40203:2;40198:3;40139:67;:::i;:::-;40132:74;;40215:93;40304:3;40215:93;:::i;:::-;40333:2;40328:3;40324:12;40317:19;;39976:366;;;:::o;40348:419::-;40514:4;40552:2;40541:9;40537:18;40529:26;;40601:9;40595:4;40591:20;40587:1;40576:9;40572:17;40565:47;40629:131;40755:4;40629:131;:::i;:::-;40621:139;;40348:419;;;:::o;40773:180::-;40821:77;40818:1;40811:88;40918:4;40915:1;40908:15;40942:4;40939:1;40932:15;40959:143;41016:5;41047:6;41041:13;41032:22;;41063:33;41090:5;41063:33;:::i;:::-;40959:143;;;;:::o;41108:351::-;41178:6;41227:2;41215:9;41206:7;41202:23;41198:32;41195:119;;;41233:79;;:::i;:::-;41195:119;41353:1;41378:64;41434:7;41425:6;41414:9;41410:22;41378:64;:::i;:::-;41368:74;;41324:128;41108:351;;;;:::o;41465:174::-;41605:26;41601:1;41593:6;41589:14;41582:50;41465:174;:::o;41645:366::-;41787:3;41808:67;41872:2;41867:3;41808:67;:::i;:::-;41801:74;;41884:93;41973:3;41884:93;:::i;:::-;42002:2;41997:3;41993:12;41986:19;;41645:366;;;:::o;42017:419::-;42183:4;42221:2;42210:9;42206:18;42198:26;;42270:9;42264:4;42260:20;42256:1;42245:9;42241:17;42234:47;42298:131;42424:4;42298:131;:::i;:::-;42290:139;;42017:419;;;:::o;42442:174::-;42582:26;42578:1;42570:6;42566:14;42559:50;42442:174;:::o;42622:366::-;42764:3;42785:67;42849:2;42844:3;42785:67;:::i;:::-;42778:74;;42861:93;42950:3;42861:93;:::i;:::-;42979:2;42974:3;42970:12;42963:19;;42622:366;;;:::o;42994:419::-;43160:4;43198:2;43187:9;43183:18;43175:26;;43247:9;43241:4;43237:20;43233:1;43222:9;43218:17;43211:47;43275:131;43401:4;43275:131;:::i;:::-;43267:139;;42994:419;;;:::o;43419:332::-;43540:4;43578:2;43567:9;43563:18;43555:26;;43591:71;43659:1;43648:9;43644:17;43635:6;43591:71;:::i;:::-;43672:72;43740:2;43729:9;43725:18;43716:6;43672:72;:::i;:::-;43419:332;;;;;:::o;43757:225::-;43897:34;43893:1;43885:6;43881:14;43874:58;43966:8;43961:2;43953:6;43949:15;43942:33;43757:225;:::o;43988:366::-;44130:3;44151:67;44215:2;44210:3;44151:67;:::i;:::-;44144:74;;44227:93;44316:3;44227:93;:::i;:::-;44345:2;44340:3;44336:12;44329:19;;43988:366;;;:::o;44360:419::-;44526:4;44564:2;44553:9;44549:18;44541:26;;44613:9;44607:4;44603:20;44599:1;44588:9;44584:17;44577:47;44641:131;44767:4;44641:131;:::i;:::-;44633:139;;44360:419;;;:::o;44785:224::-;44925:34;44921:1;44913:6;44909:14;44902:58;44994:7;44989:2;44981:6;44977:15;44970:32;44785:224;:::o;45015:366::-;45157:3;45178:67;45242:2;45237:3;45178:67;:::i;:::-;45171:74;;45254:93;45343:3;45254:93;:::i;:::-;45372:2;45367:3;45363:12;45356:19;;45015:366;;;:::o;45387:419::-;45553:4;45591:2;45580:9;45576:18;45568:26;;45640:9;45634:4;45630:20;45626:1;45615:9;45611:17;45604:47;45668:131;45794:4;45668:131;:::i;:::-;45660:139;;45387:419;;;:::o;45812:223::-;45952:34;45948:1;45940:6;45936:14;45929:58;46021:6;46016:2;46008:6;46004:15;45997:31;45812:223;:::o;46041:366::-;46183:3;46204:67;46268:2;46263:3;46204:67;:::i;:::-;46197:74;;46280:93;46369:3;46280:93;:::i;:::-;46398:2;46393:3;46389:12;46382:19;;46041:366;;;:::o;46413:419::-;46579:4;46617:2;46606:9;46602:18;46594:26;;46666:9;46660:4;46656:20;46652:1;46641:9;46637:17;46630:47;46694:131;46820:4;46694:131;:::i;:::-;46686:139;;46413:419;;;:::o;46838:182::-;46978:34;46974:1;46966:6;46962:14;46955:58;46838:182;:::o;47026:366::-;47168:3;47189:67;47253:2;47248:3;47189:67;:::i;:::-;47182:74;;47265:93;47354:3;47265:93;:::i;:::-;47383:2;47378:3;47374:12;47367:19;;47026:366;;;:::o;47398:419::-;47564:4;47602:2;47591:9;47587:18;47579:26;;47651:9;47645:4;47641:20;47637:1;47626:9;47622:17;47615:47;47679:131;47805:4;47679:131;:::i;:::-;47671:139;;47398:419;;;:::o;47823:175::-;47963:27;47959:1;47951:6;47947:14;47940:51;47823:175;:::o;48004:366::-;48146:3;48167:67;48231:2;48226:3;48167:67;:::i;:::-;48160:74;;48243:93;48332:3;48243:93;:::i;:::-;48361:2;48356:3;48352:12;48345:19;;48004:366;;;:::o;48376:419::-;48542:4;48580:2;48569:9;48565:18;48557:26;;48629:9;48623:4;48619:20;48615:1;48604:9;48600:17;48593:47;48657:131;48783:4;48657:131;:::i;:::-;48649:139;;48376:419;;;:::o;48801:237::-;48941:34;48937:1;48929:6;48925:14;48918:58;49010:20;49005:2;48997:6;48993:15;48986:45;48801:237;:::o;49044:366::-;49186:3;49207:67;49271:2;49266:3;49207:67;:::i;:::-;49200:74;;49283:93;49372:3;49283:93;:::i;:::-;49401:2;49396:3;49392:12;49385:19;;49044:366;;;:::o;49416:419::-;49582:4;49620:2;49609:9;49605:18;49597:26;;49669:9;49663:4;49659:20;49655:1;49644:9;49640:17;49633:47;49697:131;49823:4;49697:131;:::i;:::-;49689:139;;49416:419;;;:::o;49841:180::-;49889:77;49886:1;49879:88;49986:4;49983:1;49976:15;50010:4;50007:1;50000:15;50027:185;50067:1;50084:20;50102:1;50084:20;:::i;:::-;50079:25;;50118:20;50136:1;50118:20;:::i;:::-;50113:25;;50157:1;50147:35;;50162:18;;:::i;:::-;50147:35;50204:1;50201;50197:9;50192:14;;50027:185;;;;:::o;50218:176::-;50250:1;50267:20;50285:1;50267:20;:::i;:::-;50262:25;;50301:20;50319:1;50301:20;:::i;:::-;50296:25;;50340:1;50330:35;;50345:18;;:::i;:::-;50330:35;50386:1;50383;50379:9;50374:14;;50218:176;;;;:::o;50400:98::-;50451:6;50485:5;50479:12;50469:22;;50400:98;;;:::o;50504:168::-;50587:11;50621:6;50616:3;50609:19;50661:4;50656:3;50652:14;50637:29;;50504:168;;;;:::o;50678:360::-;50764:3;50792:38;50824:5;50792:38;:::i;:::-;50846:70;50909:6;50904:3;50846:70;:::i;:::-;50839:77;;50925:52;50970:6;50965:3;50958:4;50951:5;50947:16;50925:52;:::i;:::-;51002:29;51024:6;51002:29;:::i;:::-;50997:3;50993:39;50986:46;;50768:270;50678:360;;;;:::o;51044:640::-;51239:4;51277:3;51266:9;51262:19;51254:27;;51291:71;51359:1;51348:9;51344:17;51335:6;51291:71;:::i;:::-;51372:72;51440:2;51429:9;51425:18;51416:6;51372:72;:::i;:::-;51454;51522:2;51511:9;51507:18;51498:6;51454:72;:::i;:::-;51573:9;51567:4;51563:20;51558:2;51547:9;51543:18;51536:48;51601:76;51672:4;51663:6;51601:76;:::i;:::-;51593:84;;51044:640;;;;;;;:::o;51690:141::-;51746:5;51777:6;51771:13;51762:22;;51793:32;51819:5;51793:32;:::i;:::-;51690:141;;;;:::o;51837:349::-;51906:6;51955:2;51943:9;51934:7;51930:23;51926:32;51923:119;;;51961:79;;:::i;:::-;51923:119;52081:1;52106:63;52161:7;52152:6;52141:9;52137:22;52106:63;:::i;:::-;52096:73;;52052:127;51837:349;;;;:::o;52192:182::-;52332:34;52328:1;52320:6;52316:14;52309:58;52192:182;:::o;52380:366::-;52522:3;52543:67;52607:2;52602:3;52543:67;:::i;:::-;52536:74;;52619:93;52708:3;52619:93;:::i;:::-;52737:2;52732:3;52728:12;52721:19;;52380:366;;;:::o;52752:419::-;52918:4;52956:2;52945:9;52941:18;52933:26;;53005:9;52999:4;52995:20;52991:1;52980:9;52976:17;52969:47;53033:131;53159:4;53033:131;:::i;:::-;53025:139;;52752:419;;;:::o;53177:178::-;53317:30;53313:1;53305:6;53301:14;53294:54;53177:178;:::o;53361:366::-;53503:3;53524:67;53588:2;53583:3;53524:67;:::i;:::-;53517:74;;53600:93;53689:3;53600:93;:::i;:::-;53718:2;53713:3;53709:12;53702:19;;53361:366;;;:::o;53733:419::-;53899:4;53937:2;53926:9;53922:18;53914:26;;53986:9;53980:4;53976:20;53972:1;53961:9;53957:17;53950:47;54014:131;54140:4;54014:131;:::i;:::-;54006:139;;53733:419;;;:::o

Swarm Source

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