Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
[ Download CSV Export ]
Contract Name:
CryptoAstroClub
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-09 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.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: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _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: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 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 a {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 a {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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @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/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/Crypto_Astro_Club.sol pragma solidity ^0.8.10; /* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .;8888888888888888888888888888888888888888888888888888888888888888888888; . . . . . . . . . ;8888::::88:::::88::8::88::::88::::88:::88888888888888888888888888888888888888; . . . . . . . .88888::88888::8::888:::888::8:888::88:888:888888888888888888888888888888888888888.. . . . . . ..8888888::88888::::88888:8888::::888::88:888:88888888888888888888888888888888888888888.. . . . . :888888888::::88::8::8888:8888::88888::888:::8888888888888888888888888888888888888888888. . . . . 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888: . . . .888888888888. . . . . . . . . . 888888888888 . . . . . . . . . . .88888888888.. . . 888888888888 . . ./\. . .\\\\\\\\\\\ \\\\\\\\\\\\\\\ \\\\\\\\\\ . .\\\\\\\\ . 88888888888. . . :88888888888. . . //\\ \\\\\\\\\\\ \\\\\\\\\\\\\\\\ \\\\\\\\\\\ \\\. . .\\\. .8888888888: . . 88888888888. . .///\\\ . .\\\: . .888888\\\\888888 \\\\ . \\\\ \\\ . . .\\\. . 8888888888 . . 8888888888 . ////\\\\ .\\\\\\\\\\\888888\\\\888888 \\\\ . \\\ \\\ . . .\\\. . 8888888888 . . 8888888888.. . ////==\\\\ . \\\\\\\\\8888888\\\\8888888\\\\\\\\\\\\ \\\ . . .\\\. . 8888888888 . . 8888888888.. ./////==\\\\\. . .\\\\\88888\\\\8888888\\\\\\\\\ . \\\ . . .\\\. . 8888888888 . . 8888888888;. //////==\\\\\\ \\\\\\\\\\\\8888\\\\8888888\\\\ .\\\\. \\\. . \\\ . . 8888888888 . . :8888888888 ////// \\\\\ \\\\\\\\\\\88888\\\\8888888\\\\ .\\\\ . \\\\\\ . .8888888888; . . 888888888888 . . . . . . 888888888888. . 88888888888 . . . . . . . 88888888888. . . ;8888888888888888888888888888888888888888. . . .8888888888888888888888888888888888888888888.. . . . 88888888888888888888888888888888888888 . . . . 88888::::88::8888::88::88::88:8888888888; . . . . : 888888888888888888888888888888888888. . . . . .888::88888::8888::88::88::::8888888888 . . . . . : 8888888888888888888888888888888888 . . . . . . 88::88888::8888::88::88::88:88888888. . . . . . . ;88888888888888888888888888888888 . . . . . . 88::::88:::::88::::888:::::8888888; . . . . . . . ;88888888888888888888888888888. . . . . . .88888888888888888888888888888888:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */ contract CryptoAstroClub is ERC721Enumerable, Ownable { using Strings for uint256; uint256 public constant MAX_ASTROS = 10000; uint256 public constant MAX_PER_MINT = 20; uint256 public constant PRESALE_MAX_MINT = 20; uint256 public constant MAX_ASTROS_MINT = 50; uint256 public constant RESERVED_ASTROS = 500; //The contract scientists will only claim the first 500 reserved NFTs. //Some reserved NFTs will be given to the community members. //The remaining reserved NFTs will be distributed to its scientists. address public constant address1 = 0xB5b1afDE90be74399D021E263E86760c23538F81; address public constant address2 = 0x90BF2155411F74f6319AfE9eAEf9578912ef9C7f; address public constant address3 = 0x746eF388aCB9Fd3477f0b783Aa78427F471dcc6D; uint256 public PRICE = 180 ether; uint256 public PRESALE_PRICE = 60 ether; uint256 public reservedClaimed; uint256 public numAstrosMinted; string public baseTokenURI; string public notRevealedUri; string public baseExtension = ".json"; bool public publicSaleStarted; bool public presaleStarted; bool public revealed = false; mapping(address => bool) private _presaleEligible; mapping(address => uint256) private _totalClaimed; event BaseURIChanged(string baseURI); event PresaleMint(address minter, uint256 amountOfAstros); event PublicSaleMint(address minter, uint256 amountOfAstros); modifier whenPresaleStarted() { require(presaleStarted, "Presale has not started"); _; } modifier whenPublicSaleStarted() { require(publicSaleStarted, "Public sale has not started"); _; } constructor() ERC721("CryptoAstroClub", "CAC") { } function checkPresaleEligiblity(address addr) external view returns (bool) { return _presaleEligible[addr]; } function amountClaimedBy(address owner) external view returns (uint256) { require(owner != address(0), "Cannot add null address"); return _totalClaimed[owner]; } function mintPresale(uint256 amountOfAstros) external payable whenPresaleStarted { require(_presaleEligible[msg.sender], "You are not eligible for the presale"); require(totalSupply() < MAX_ASTROS, "All tokens have been minted"); require(amountOfAstros <= PRESALE_MAX_MINT, "Cannot purchase this many tokens during presale"); require(totalSupply() + amountOfAstros <= MAX_ASTROS, "Minting would exceed max supply"); require(_totalClaimed[msg.sender] + amountOfAstros <= PRESALE_MAX_MINT, "Purchase exceeds max allowed"); require(amountOfAstros > 0, "Must mint at least one Astro"); require(PRESALE_PRICE * amountOfAstros == msg.value, "Matic amount is incorrect"); for (uint256 i = 0; i < amountOfAstros; i++) { uint256 tokenId = numAstrosMinted + 1; numAstrosMinted += 1; _totalClaimed[msg.sender] += 1; _safeMint(msg.sender, tokenId); } emit PresaleMint(msg.sender, amountOfAstros); } function mint(uint256 amountOfAstros) external payable whenPublicSaleStarted { require(totalSupply() < MAX_ASTROS, "All tokens have been minted"); require(amountOfAstros <= MAX_PER_MINT, "Cannot purchase this many tokens in a transaction"); require(totalSupply() + amountOfAstros <= MAX_ASTROS, "Minting would exceed max supply"); require(_totalClaimed[msg.sender] + amountOfAstros <= MAX_ASTROS_MINT, "Purchase exceeds max allowed per address"); require(amountOfAstros > 0, "Must mint at least one Astro"); require(PRICE * amountOfAstros == msg.value, "Matic amount is incorrect"); for (uint256 i = 0; i < amountOfAstros; i++) { uint256 tokenId = numAstrosMinted + 1; numAstrosMinted += 1; _totalClaimed[msg.sender] += 1; _safeMint(msg.sender, tokenId); } emit PublicSaleMint(msg.sender, amountOfAstros); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } //Owner functions function claimReserved(address recipient, uint256 amount) external onlyOwner { require(reservedClaimed != RESERVED_ASTROS, "Already have claimed all reserved Astros"); require(reservedClaimed + amount <= RESERVED_ASTROS, "Minting would exceed max reserved Astros"); require(recipient != address(0), "Cannot add null address"); require(totalSupply() < MAX_ASTROS, "All tokens have been minted"); require(totalSupply() + amount <= MAX_ASTROS, "Minting would exceed max supply"); uint256 _nextTokenId = numAstrosMinted + 1; for (uint256 i = 0; i < amount; i++) { _safeMint(recipient, _nextTokenId + i); } numAstrosMinted += amount; reservedClaimed += amount; } function addToPresale(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Cannot add null address"); _presaleEligible[addresses[i]] = true; _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0; } } function togglePresaleStarted() external onlyOwner { presaleStarted = !presaleStarted; } function togglePublicSaleStarted() external onlyOwner { publicSaleStarted = !publicSaleStarted; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; emit BaseURIChanged(baseURI); } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setPrice(uint256 _newPrice) public onlyOwner() { PRICE = _newPrice; } function setPresalePrice(uint256 _newPrice) public onlyOwner() { PRESALE_PRICE = _newPrice; } function reveal() public onlyOwner { revealed = true; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Insufficent balance"); _widthdraw(address1, ((balance * 34) / 100)); _widthdraw(address2, ((balance * 33) / 100)); _widthdraw(address3, address(this).balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{ value: _amount }(""); require(success, "Failed to widthdraw"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfAstros","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfAstros","type":"uint256"}],"name":"PublicSaleMint","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_ASTROS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ASTROS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_ASTROS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"address1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"address2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"address3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfAstros","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfAstros","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numAstrosMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526809c2007651b2500000600b55680340aad21b3b700000600c556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601190805190602001906200006b92919062000229565b506000601260026101000a81548160ff0219169083151502179055503480156200009457600080fd5b506040518060400160405280600f81526020017f43727970746f417374726f436c756200000000000000000000000000000000008152506040518060400160405280600381526020017f434143000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011992919062000229565b5080600190805190602001906200013292919062000229565b50505062000155620001496200015b60201b60201c565b6200016360201b60201c565b6200033e565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002379062000308565b90600052602060002090601f0160209004810192826200025b5760008555620002a7565b82601f106200027657805160ff1916838001178555620002a7565b82800160010185558215620002a7579182015b82811115620002a657825182559160200191906001019062000289565b5b509050620002b69190620002ba565b5090565b5b80821115620002d5576000816000905550600101620002bb565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200032157607f821691505b60208210811415620003385762000337620002d9565b5b50919050565b615db4806200034e6000396000f3fe6080604052600436106102ff5760003560e01c806362dc6e2111610190578063a2e91477116100dc578063d547cfb711610095578063ed1fc2a21161006f578063ed1fc2a214610b53578063f2c4ce1e14610b6a578063f2fde38b14610b93578063f759867a14610bbc576102ff565b8063d547cfb714610ac2578063da3ef23f14610aed578063e985e9c514610b16576102ff565b8063a2e91477146109c6578063a475b5dd146109f1578063aef6ee1f14610a08578063b88d4fde14610a31578063c668286214610a5a578063c87b56dd14610a85576102ff565b80638da5cb5b116101495780639eea4a3a116101235780639eea4a3a1461092b578063a0712d6814610956578063a22cb46514610972578063a2a880801461099b576102ff565b80638da5cb5b146108ac57806391b7f5ed146108d757806395d89b4114610900576102ff565b806362dc6e21146107ae5780636352211e146107d957806370a0823114610816578063715018a614610853578063853828b61461086a5780638d859f3e14610881576102ff565b80631e38046c1161024f5780633549345e116102085780634f6ccce7116101e25780634f6ccce7146106f2578063518302271461072f578063549527c31461075a57806355f804b314610785576102ff565b80633549345e146106755780633a36399e1461069e57806342842e0e146106c9576102ff565b80631e38046c1461057757806323b872dd146105a257806324510043146105cb5780632e886541146105f65780632f745c59146106215780632f8145751461065e576102ff565b8063095ea7b3116102bc57806318160ddd1161029657806318160ddd146104a9578063191f65ac146104d45780631978f469146105115780631b5757f21461054e576102ff565b8063095ea7b31461042a57806309d42b301461045357806317e7efbd1461047e576102ff565b806301ffc9a71461030457806304549d6f1461034157806306fdde031461036c57806307a7c35614610397578063081812fc146103c2578063081c8c44146103ff575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190614041565b610bd8565b6040516103389190614089565b60405180910390f35b34801561034d57600080fd5b50610356610c52565b6040516103639190614089565b60405180910390f35b34801561037857600080fd5b50610381610c65565b60405161038e919061413d565b60405180910390f35b3480156103a357600080fd5b506103ac610cf7565b6040516103b99190614178565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e491906141bf565b610cfd565b6040516103f6919061422d565b60405180910390f35b34801561040b57600080fd5b50610414610d82565b604051610421919061413d565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190614274565b610e10565b005b34801561045f57600080fd5b50610468610f28565b6040516104759190614178565b60405180910390f35b34801561048a57600080fd5b50610493610f2d565b6040516104a09190614178565b60405180910390f35b3480156104b557600080fd5b506104be610f33565b6040516104cb9190614178565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906142b4565b610f40565b6040516105089190614089565b60405180910390f35b34801561051d57600080fd5b50610538600480360381019061053391906142b4565b610f96565b6040516105459190614178565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190614274565b61104e565b005b34801561058357600080fd5b5061058c6112f3565b604051610599919061422d565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c491906142e1565b61130b565b005b3480156105d757600080fd5b506105e061136b565b6040516105ed9190614178565b60405180910390f35b34801561060257600080fd5b5061060b611371565b6040516106189190614178565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614274565b611376565b6040516106559190614178565b60405180910390f35b34801561066a57600080fd5b5061067361141b565b005b34801561068157600080fd5b5061069c600480360381019061069791906141bf565b6114c3565b005b3480156106aa57600080fd5b506106b3611549565b6040516106c0919061422d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb91906142e1565b611561565b005b3480156106fe57600080fd5b50610719600480360381019061071491906141bf565b611581565b6040516107269190614178565b60405180910390f35b34801561073b57600080fd5b506107446115f2565b6040516107519190614089565b60405180910390f35b34801561076657600080fd5b5061076f611605565b60405161077c9190614178565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190614469565b61160a565b005b3480156107ba57600080fd5b506107c36116d7565b6040516107d09190614178565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb91906141bf565b6116dd565b60405161080d919061422d565b60405180910390f35b34801561082257600080fd5b5061083d600480360381019061083891906142b4565b61178f565b60405161084a9190614178565b60405180910390f35b34801561085f57600080fd5b50610868611847565b005b34801561087657600080fd5b5061087f6118cf565b005b34801561088d57600080fd5b50610896611a20565b6040516108a39190614178565b60405180910390f35b3480156108b857600080fd5b506108c1611a26565b6040516108ce919061422d565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f991906141bf565b611a50565b005b34801561090c57600080fd5b50610915611ad6565b604051610922919061413d565b60405180910390f35b34801561093757600080fd5b50610940611b68565b60405161094d919061422d565b60405180910390f35b610970600480360381019061096b91906141bf565b611b80565b005b34801561097e57600080fd5b50610999600480360381019061099491906144de565b611ebf565b005b3480156109a757600080fd5b506109b0611ed5565b6040516109bd9190614178565b60405180910390f35b3480156109d257600080fd5b506109db611edb565b6040516109e89190614089565b60405180910390f35b3480156109fd57600080fd5b50610a06611eee565b005b348015610a1457600080fd5b50610a2f6004803603810190610a2a919061457e565b611f87565b005b348015610a3d57600080fd5b50610a586004803603810190610a53919061466c565b61221d565b005b348015610a6657600080fd5b50610a6f61227f565b604051610a7c919061413d565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa791906141bf565b61230d565b604051610ab9919061413d565b60405180910390f35b348015610ace57600080fd5b50610ad7612466565b604051610ae4919061413d565b60405180910390f35b348015610af957600080fd5b50610b146004803603810190610b0f9190614469565b6124f4565b005b348015610b2257600080fd5b50610b3d6004803603810190610b3891906146ef565b61258a565b604051610b4a9190614089565b60405180910390f35b348015610b5f57600080fd5b50610b6861261e565b005b348015610b7657600080fd5b50610b916004803603810190610b8c9190614469565b6126c6565b005b348015610b9f57600080fd5b50610bba6004803603810190610bb591906142b4565b61275c565b005b610bd66004803603810190610bd191906141bf565b612854565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c4b5750610c4a82612c1f565b5b9050919050565b601260019054906101000a900460ff1681565b606060008054610c749061475e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca09061475e565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6101f481565b6000610d0882612d01565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90614802565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60108054610d8f9061475e565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb9061475e565b8015610e085780601f10610ddd57610100808354040283529160200191610e08565b820191906000526020600020905b815481529060010190602001808311610deb57829003601f168201915b505050505081565b6000610e1b826116dd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390614894565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eab612d6d565b73ffffffffffffffffffffffffffffffffffffffff161480610eda5750610ed981610ed4612d6d565b61258a565b5b610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614926565b60405180910390fd5b610f238383612d75565b505050565b601481565b61271081565b6000600880549050905090565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614992565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611056612d6d565b73ffffffffffffffffffffffffffffffffffffffff16611074611a26565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c1906149fe565b60405180910390fd5b6101f4600d541415611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614a90565b60405180910390fd5b6101f481600d546111229190614adf565b1115611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90614ba7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90614992565b60405180910390fd5b6127106111de610f33565b1061121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590614c13565b60405180910390fd5b6127108161122a610f33565b6112349190614adf565b1115611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614c7f565b60405180910390fd5b60006001600e546112869190614adf565b905060005b828110156112bb576112a88482846112a39190614adf565b612e2e565b80806112b390614c9f565b91505061128b565b5081600e60008282546112ce9190614adf565b9250508190555081600d60008282546112e79190614adf565b92505081905550505050565b73746ef388acb9fd3477f0b783aa78427f471dcc6d81565b61131c611316612d6d565b82612e4c565b61135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135290614d5a565b60405180910390fd5b611366838383612f2a565b505050565b600d5481565b603281565b60006113818361178f565b82106113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990614dec565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b611423612d6d565b73ffffffffffffffffffffffffffffffffffffffff16611441611a26565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906149fe565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b6114cb612d6d565b73ffffffffffffffffffffffffffffffffffffffff166114e9611a26565b73ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906149fe565b60405180910390fd5b80600c8190555050565b73b5b1afde90be74399d021e263e86760c23538f8181565b61157c8383836040518060200160405280600081525061221d565b505050565b600061158b610f33565b82106115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614e7e565b60405180910390fd5b600882815481106115e0576115df614e9e565b5b90600052602060002001549050919050565b601260029054906101000a900460ff1681565b601481565b611612612d6d565b73ffffffffffffffffffffffffffffffffffffffff16611630611a26565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906149fe565b60405180910390fd5b80600f908051906020019061169c929190613f32565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf6816040516116cc919061413d565b60405180910390a150565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90614f3f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f790614fd1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61184f612d6d565b73ffffffffffffffffffffffffffffffffffffffff1661186d611a26565b73ffffffffffffffffffffffffffffffffffffffff16146118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba906149fe565b60405180910390fd5b6118cd6000613191565b565b6118d7612d6d565b73ffffffffffffffffffffffffffffffffffffffff166118f5611a26565b73ffffffffffffffffffffffffffffffffffffffff161461194b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611942906149fe565b60405180910390fd5b600047905060008111611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a9061503d565b60405180910390fd5b6119c973b5b1afde90be74399d021e263e86760c23538f8160646022846119ba919061505d565b6119c491906150e6565b613257565b6119ff7390bf2155411f74f6319afe9eaef9578912ef9c7f60646021846119f0919061505d565b6119fa91906150e6565b613257565b611a1d73746ef388acb9fd3477f0b783aa78427f471dcc6d47613257565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a58612d6d565b73ffffffffffffffffffffffffffffffffffffffff16611a76611a26565b73ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac3906149fe565b60405180910390fd5b80600b8190555050565b606060018054611ae59061475e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b119061475e565b8015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b5050505050905090565b7390bf2155411f74f6319afe9eaef9578912ef9c7f81565b601260009054906101000a900460ff16611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690615163565b60405180910390fd5b612710611bda610f33565b10611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614c13565b60405180910390fd5b6014811115611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c55906151f5565b60405180910390fd5b61271081611c6a610f33565b611c749190614adf565b1115611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614c7f565b60405180910390fd5b603281601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d029190614adf565b1115611d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3a90615287565b60405180910390fd5b60008111611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d906152f3565b60405180910390fd5b3481600b54611d95919061505d565b14611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc9061535f565b60405180910390fd5b60005b81811015611e825760006001600e54611df19190614adf565b90506001600e6000828254611e069190614adf565b925050819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5d9190614adf565b92505081905550611e6e3382612e2e565b508080611e7a90614c9f565b915050611dd8565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b53382604051611eb492919061537f565b60405180910390a150565b611ed1611eca612d6d565b8383613308565b5050565b600e5481565b601260009054906101000a900460ff1681565b611ef6612d6d565b73ffffffffffffffffffffffffffffffffffffffff16611f14611a26565b73ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f61906149fe565b60405180910390fd5b6001601260026101000a81548160ff021916908315150217905550565b611f8f612d6d565b73ffffffffffffffffffffffffffffffffffffffff16611fad611a26565b73ffffffffffffffffffffffffffffffffffffffff1614612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906149fe565b60405180910390fd5b60005b8282905081101561221857600073ffffffffffffffffffffffffffffffffffffffff1683838381811061203c5761203b614e9e565b5b905060200201602081019061205191906142b4565b73ffffffffffffffffffffffffffffffffffffffff1614156120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f90614992565b60405180910390fd5b6001601360008585858181106120c1576120c0614e9e565b5b90506020020160208101906120d691906142b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008585858181106121405761213f614e9e565b5b905060200201602081019061215591906142b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161219c576000612204565b601460008484848181106121b3576121b2614e9e565b5b90506020020160208101906121c891906142b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b50808061221090614c9f565b915050612006565b505050565b61222e612228612d6d565b83612e4c565b61226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490614d5a565b60405180910390fd5b61227984848484613475565b50505050565b6011805461228c9061475e565b80601f01602080910402602001604051908101604052809291908181526020018280546122b89061475e565b80156123055780601f106122da57610100808354040283529160200191612305565b820191906000526020600020905b8154815290600101906020018083116122e857829003601f168201915b505050505081565b606061231882612d01565b612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e9061541a565b60405180910390fd5b60001515601260029054906101000a900460ff161515141561240557601080546123809061475e565b80601f01602080910402602001604051908101604052809291908181526020018280546123ac9061475e565b80156123f95780601f106123ce576101008083540402835291602001916123f9565b820191906000526020600020905b8154815290600101906020018083116123dc57829003601f168201915b50505050509050612461565b600061240f6134d1565b9050600081511161242f576040518060200160405280600081525061245d565b8061243984613563565b601160405160200161244d9392919061550a565b6040516020818303038152906040525b9150505b919050565b600f80546124739061475e565b80601f016020809104026020016040519081016040528092919081815260200182805461249f9061475e565b80156124ec5780601f106124c1576101008083540402835291602001916124ec565b820191906000526020600020905b8154815290600101906020018083116124cf57829003601f168201915b505050505081565b6124fc612d6d565b73ffffffffffffffffffffffffffffffffffffffff1661251a611a26565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612567906149fe565b60405180910390fd5b8060119080519060200190612586929190613f32565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612626612d6d565b73ffffffffffffffffffffffffffffffffffffffff16612644611a26565b73ffffffffffffffffffffffffffffffffffffffff161461269a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612691906149fe565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b6126ce612d6d565b73ffffffffffffffffffffffffffffffffffffffff166126ec611a26565b73ffffffffffffffffffffffffffffffffffffffff1614612742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612739906149fe565b60405180910390fd5b8060109080519060200190612758929190613f32565b5050565b612764612d6d565b73ffffffffffffffffffffffffffffffffffffffff16612782611a26565b73ffffffffffffffffffffffffffffffffffffffff16146127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906149fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f906155ad565b60405180910390fd5b61285181613191565b50565b601260019054906101000a900460ff166128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90615619565b60405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661292f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612926906156ab565b60405180910390fd5b61271061293a610f33565b1061297a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297190614c13565b60405180910390fd5b60148111156129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b59061573d565b60405180910390fd5b612710816129ca610f33565b6129d49190614adf565b1115612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c90614c7f565b60405180910390fd5b601481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a629190614adf565b1115612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a906157a9565b60405180910390fd5b60008111612ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612add906152f3565b60405180910390fd5b3481600c54612af5919061505d565b14612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c9061535f565b60405180910390fd5b60005b81811015612be25760006001600e54612b519190614adf565b90506001600e6000828254612b669190614adf565b925050819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bbd9190614adf565b92505081905550612bce3382612e2e565b508080612bda90614c9f565b915050612b38565b507ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a33382604051612c1492919061537f565b60405180910390a150565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cfa5750612cf9826136c4565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612de8836116dd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612e4882826040518060200160405280600081525061372e565b5050565b6000612e5782612d01565b612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d9061583b565b60405180910390fd5b6000612ea1836116dd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f1057508373ffffffffffffffffffffffffffffffffffffffff16612ef884610cfd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f215750612f20818561258a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f4a826116dd565b73ffffffffffffffffffffffffffffffffffffffff1614612fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f97906158cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613010576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130079061595f565b60405180910390fd5b61301b838383613789565b613026600082612d75565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613076919061597f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130cd9190614adf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461318c83838361389d565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161327d906159e4565b60006040518083038185875af1925050503d80600081146132ba576040519150601f19603f3d011682016040523d82523d6000602084013e6132bf565b606091505b5050905080613303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fa90615a45565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336e90615ab1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134689190614089565b60405180910390a3505050565b613480848484612f2a565b61348c848484846138a2565b6134cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c290615b43565b60405180910390fd5b50505050565b6060600f80546134e09061475e565b80601f016020809104026020016040519081016040528092919081815260200182805461350c9061475e565b80156135595780601f1061352e57610100808354040283529160200191613559565b820191906000526020600020905b81548152906001019060200180831161353c57829003601f168201915b5050505050905090565b606060008214156135ab576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506136bf565b600082905060005b600082146135dd5780806135c690614c9f565b915050600a826135d691906150e6565b91506135b3565b60008167ffffffffffffffff8111156135f9576135f861433e565b5b6040519080825280601f01601f19166020018201604052801561362b5781602001600182028036833780820191505090505b5090505b600085146136b857600182613644919061597f565b9150600a856136539190615b63565b603061365f9190614adf565b60f81b81838151811061367557613674614e9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856136b191906150e6565b945061362f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137388383613a2a565b61374560008484846138a2565b613784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377b90615b43565b60405180910390fd5b505050565b613794838383613c04565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137d7576137d281613c09565b613816565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613815576138148382613c52565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138595761385481613dbf565b613898565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613897576138968282613e90565b5b5b505050565b505050565b60006138c38473ffffffffffffffffffffffffffffffffffffffff16613f0f565b15613a1d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138ec612d6d565b8786866040518563ffffffff1660e01b815260040161390e9493929190615be9565b6020604051808303816000875af192505050801561394a57506040513d601f19601f820116820180604052508101906139479190615c4a565b60015b6139cd573d806000811461397a576040519150601f19603f3d011682016040523d82523d6000602084013e61397f565b606091505b506000815114156139c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139bc90615b43565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a22565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190615cc3565b60405180910390fd5b613aa381612d01565b15613ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ada90615d2f565b60405180910390fd5b613aef60008383613789565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b3f9190614adf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c006000838361389d565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c5f8461178f565b613c69919061597f565b9050600060076000848152602001908152602001600020549050818114613d4e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613dd3919061597f565b9050600060096000848152602001908152602001600020549050600060088381548110613e0357613e02614e9e565b5b906000526020600020015490508060088381548110613e2557613e24614e9e565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e7457613e73615d4f565b5b6001900381819060005260206000200160009055905550505050565b6000613e9b8361178f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613f3e9061475e565b90600052602060002090601f016020900481019282613f605760008555613fa7565b82601f10613f7957805160ff1916838001178555613fa7565b82800160010185558215613fa7579182015b82811115613fa6578251825591602001919060010190613f8b565b5b509050613fb49190613fb8565b5090565b5b80821115613fd1576000816000905550600101613fb9565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61401e81613fe9565b811461402957600080fd5b50565b60008135905061403b81614015565b92915050565b60006020828403121561405757614056613fdf565b5b60006140658482850161402c565b91505092915050565b60008115159050919050565b6140838161406e565b82525050565b600060208201905061409e600083018461407a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156140de5780820151818401526020810190506140c3565b838111156140ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061410f826140a4565b61411981856140af565b93506141298185602086016140c0565b614132816140f3565b840191505092915050565b600060208201905081810360008301526141578184614104565b905092915050565b6000819050919050565b6141728161415f565b82525050565b600060208201905061418d6000830184614169565b92915050565b61419c8161415f565b81146141a757600080fd5b50565b6000813590506141b981614193565b92915050565b6000602082840312156141d5576141d4613fdf565b5b60006141e3848285016141aa565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614217826141ec565b9050919050565b6142278161420c565b82525050565b6000602082019050614242600083018461421e565b92915050565b6142518161420c565b811461425c57600080fd5b50565b60008135905061426e81614248565b92915050565b6000806040838503121561428b5761428a613fdf565b5b60006142998582860161425f565b92505060206142aa858286016141aa565b9150509250929050565b6000602082840312156142ca576142c9613fdf565b5b60006142d88482850161425f565b91505092915050565b6000806000606084860312156142fa576142f9613fdf565b5b60006143088682870161425f565b93505060206143198682870161425f565b925050604061432a868287016141aa565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614376826140f3565b810181811067ffffffffffffffff821117156143955761439461433e565b5b80604052505050565b60006143a8613fd5565b90506143b4828261436d565b919050565b600067ffffffffffffffff8211156143d4576143d361433e565b5b6143dd826140f3565b9050602081019050919050565b82818337600083830152505050565b600061440c614407846143b9565b61439e565b90508281526020810184848401111561442857614427614339565b5b6144338482856143ea565b509392505050565b600082601f8301126144505761444f614334565b5b81356144608482602086016143f9565b91505092915050565b60006020828403121561447f5761447e613fdf565b5b600082013567ffffffffffffffff81111561449d5761449c613fe4565b5b6144a98482850161443b565b91505092915050565b6144bb8161406e565b81146144c657600080fd5b50565b6000813590506144d8816144b2565b92915050565b600080604083850312156144f5576144f4613fdf565b5b60006145038582860161425f565b9250506020614514858286016144c9565b9150509250929050565b600080fd5b600080fd5b60008083601f84011261453e5761453d614334565b5b8235905067ffffffffffffffff81111561455b5761455a61451e565b5b60208301915083602082028301111561457757614576614523565b5b9250929050565b6000806020838503121561459557614594613fdf565b5b600083013567ffffffffffffffff8111156145b3576145b2613fe4565b5b6145bf85828601614528565b92509250509250929050565b600067ffffffffffffffff8211156145e6576145e561433e565b5b6145ef826140f3565b9050602081019050919050565b600061460f61460a846145cb565b61439e565b90508281526020810184848401111561462b5761462a614339565b5b6146368482856143ea565b509392505050565b600082601f83011261465357614652614334565b5b81356146638482602086016145fc565b91505092915050565b6000806000806080858703121561468657614685613fdf565b5b60006146948782880161425f565b94505060206146a58782880161425f565b93505060406146b6878288016141aa565b925050606085013567ffffffffffffffff8111156146d7576146d6613fe4565b5b6146e38782880161463e565b91505092959194509250565b6000806040838503121561470657614705613fdf565b5b60006147148582860161425f565b92505060206147258582860161425f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061477657607f821691505b6020821081141561478a5761478961472f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006147ec602c836140af565b91506147f782614790565b604082019050919050565b6000602082019050818103600083015261481b816147df565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061487e6021836140af565b915061488982614822565b604082019050919050565b600060208201905081810360008301526148ad81614871565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006149106038836140af565b915061491b826148b4565b604082019050919050565b6000602082019050818103600083015261493f81614903565b9050919050565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b600061497c6017836140af565b915061498782614946565b602082019050919050565b600060208201905081810360008301526149ab8161496f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149e86020836140af565b91506149f3826149b2565b602082019050919050565b60006020820190508181036000830152614a17816149db565b9050919050565b7f416c7265616479206861766520636c61696d656420616c6c207265736572766560008201527f6420417374726f73000000000000000000000000000000000000000000000000602082015250565b6000614a7a6028836140af565b9150614a8582614a1e565b604082019050919050565b60006020820190508181036000830152614aa981614a6d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614aea8261415f565b9150614af58361415f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b2a57614b29614ab0565b5b828201905092915050565b7f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560008201527f6420417374726f73000000000000000000000000000000000000000000000000602082015250565b6000614b916028836140af565b9150614b9c82614b35565b604082019050919050565b60006020820190508181036000830152614bc081614b84565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614bfd601b836140af565b9150614c0882614bc7565b602082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b6000614c69601f836140af565b9150614c7482614c33565b602082019050919050565b60006020820190508181036000830152614c9881614c5c565b9050919050565b6000614caa8261415f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cdd57614cdc614ab0565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614d446031836140af565b9150614d4f82614ce8565b604082019050919050565b60006020820190508181036000830152614d7381614d37565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614dd6602b836140af565b9150614de182614d7a565b604082019050919050565b60006020820190508181036000830152614e0581614dc9565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614e68602c836140af565b9150614e7382614e0c565b604082019050919050565b60006020820190508181036000830152614e9781614e5b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614f296029836140af565b9150614f3482614ecd565b604082019050919050565b60006020820190508181036000830152614f5881614f1c565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614fbb602a836140af565b9150614fc682614f5f565b604082019050919050565b60006020820190508181036000830152614fea81614fae565b9050919050565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b60006150276013836140af565b915061503282614ff1565b602082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b60006150688261415f565b91506150738361415f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150ac576150ab614ab0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150f18261415f565b91506150fc8361415f565b92508261510c5761510b6150b7565b5b828204905092915050565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b600061514d601b836140af565b915061515882615117565b602082019050919050565b6000602082019050818103600083015261517c81615140565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b60006151df6031836140af565b91506151ea82615183565b604082019050919050565b6000602082019050818103600083015261520e816151d2565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006152716028836140af565b915061527c82615215565b604082019050919050565b600060208201905081810360008301526152a081615264565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e6520417374726f00000000600082015250565b60006152dd601c836140af565b91506152e8826152a7565b602082019050919050565b6000602082019050818103600083015261530c816152d0565b9050919050565b7f4d6174696320616d6f756e7420697320696e636f727265637400000000000000600082015250565b60006153496019836140af565b915061535482615313565b602082019050919050565b600060208201905081810360008301526153788161533c565b9050919050565b6000604082019050615394600083018561421e565b6153a16020830184614169565b9392505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615404602f836140af565b915061540f826153a8565b604082019050919050565b60006020820190508181036000830152615433816153f7565b9050919050565b600081905092915050565b6000615450826140a4565b61545a818561543a565b935061546a8185602086016140c0565b80840191505092915050565b60008190508160005260206000209050919050565b600081546154988161475e565b6154a2818661543a565b945060018216600081146154bd57600181146154ce57615501565b60ff19831686528186019350615501565b6154d785615476565b60005b838110156154f9578154818901526001820191506020810190506154da565b838801955050505b50505092915050565b60006155168286615445565b91506155228285615445565b915061552e828461548b565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155976026836140af565b91506155a28261553b565b604082019050919050565b600060208201905081810360008301526155c68161558a565b9050919050565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b60006156036017836140af565b915061560e826155cd565b602082019050919050565b60006020820190508181036000830152615632816155f6565b9050919050565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6500000000000000000000000000000000000000000000000000000000602082015250565b60006156956024836140af565b91506156a082615639565b604082019050919050565b600060208201905081810360008301526156c481615688565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20647572696e672070726573616c650000000000000000000000000000000000602082015250565b6000615727602f836140af565b9150615732826156cb565b604082019050919050565b600060208201905081810360008301526157568161571a565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b6000615793601c836140af565b915061579e8261575d565b602082019050919050565b600060208201905081810360008301526157c281615786565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615825602c836140af565b9150615830826157c9565b604082019050919050565b6000602082019050818103600083015261585481615818565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006158b76025836140af565b91506158c28261585b565b604082019050919050565b600060208201905081810360008301526158e6816158aa565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006159496024836140af565b9150615954826158ed565b604082019050919050565b600060208201905081810360008301526159788161593c565b9050919050565b600061598a8261415f565b91506159958361415f565b9250828210156159a8576159a7614ab0565b5b828203905092915050565b600081905092915050565b50565b60006159ce6000836159b3565b91506159d9826159be565b600082019050919050565b60006159ef826159c1565b9150819050919050565b7f4661696c656420746f2077696474686472617700000000000000000000000000600082015250565b6000615a2f6013836140af565b9150615a3a826159f9565b602082019050919050565b60006020820190508181036000830152615a5e81615a22565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615a9b6019836140af565b9150615aa682615a65565b602082019050919050565b60006020820190508181036000830152615aca81615a8e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615b2d6032836140af565b9150615b3882615ad1565b604082019050919050565b60006020820190508181036000830152615b5c81615b20565b9050919050565b6000615b6e8261415f565b9150615b798361415f565b925082615b8957615b886150b7565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000615bbb82615b94565b615bc58185615b9f565b9350615bd58185602086016140c0565b615bde816140f3565b840191505092915050565b6000608082019050615bfe600083018761421e565b615c0b602083018661421e565b615c186040830185614169565b8181036060830152615c2a8184615bb0565b905095945050505050565b600081519050615c4481614015565b92915050565b600060208284031215615c6057615c5f613fdf565b5b6000615c6e84828501615c35565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615cad6020836140af565b9150615cb882615c77565b602082019050919050565b60006020820190508181036000830152615cdc81615ca0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615d19601c836140af565b9150615d2482615ce3565b602082019050919050565b60006020820190508181036000830152615d4881615d0c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207a8d1ce1c00894b3199281c08d6e6f9b89024a2125719b116fb52add9822dd5464736f6c634300080a0033
Deployed ByteCode Sourcemap
50834:7348:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41669:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51968:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28489:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51129:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30048:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51851:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29571:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50978:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50929:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42309:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52641:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52772:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55118:769;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51571:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30798:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51742:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51078:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41977:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56374:111;;;;;;;;;;;;;:::i;:::-;;57006:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51403:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31208:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42499:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52001:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51026:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56493:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51696:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28183:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27913:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7085:103;;;;;;;;;;;;;:::i;:::-;;57669:316;;;;;;;;;;;;;:::i;:::-;;51657:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6434:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56908:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28658:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51487:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54013:951;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30341:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51779:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51932:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57119:66;;;;;;;;;;;;;:::i;:::-;;55895:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31464:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51886:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57193:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51818:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56641:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30567:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56264:102;;;;;;;;;;;;;:::i;:::-;;56776:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7343:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52966:1039;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41669:224;41771:4;41810:35;41795:50;;;:11;:50;;;;:90;;;;41849:36;41873:11;41849:23;:36::i;:::-;41795:90;41788:97;;41669:224;;;:::o;51968:26::-;;;;;;;;;;;;;:::o;28489:100::-;28543:13;28576:5;28569:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28489:100;:::o;51129:45::-;51171:3;51129:45;:::o;30048:221::-;30124:7;30152:16;30160:7;30152;:16::i;:::-;30144:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:15;:24;30253:7;30237:24;;;;;;;;;;;;;;;;;;;;;30230:31;;30048:221;;;:::o;51851:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29571:411::-;29652:13;29668:23;29683:7;29668:14;:23::i;:::-;29652:39;;29716:5;29710:11;;:2;:11;;;;29702:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29810:5;29794:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29819:37;29836:5;29843:12;:10;:12::i;:::-;29819:16;:37::i;:::-;29794:62;29772:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29953:21;29962:2;29966:7;29953:8;:21::i;:::-;29641:341;29571:411;;:::o;50978:41::-;51017:2;50978:41;:::o;50929:42::-;50966:5;50929:42;:::o;42309:113::-;42370:7;42397:10;:17;;;;42390:24;;42309:113;:::o;52641:123::-;52710:4;52734:16;:22;52751:4;52734:22;;;;;;;;;;;;;;;;;;;;;;;;;52727:29;;52641:123;;;:::o;52772:186::-;52835:7;52880:1;52863:19;;:5;:19;;;;52855:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52930:13;:20;52944:5;52930:20;;;;;;;;;;;;;;;;52923:27;;52772:186;;;:::o;55118:769::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51171:3:::1;55214:15;;:34;;55206:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;51171:3;55330:6;55312:15;;:24;;;;:::i;:::-;:43;;55304:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;55440:1;55419:23;;:9;:23;;;;55411:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;50966:5;55489:13;:11;:13::i;:::-;:26;55481:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50966:5;55582:6;55566:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;55558:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;55651:20;55692:1;55674:15;;:19;;;;:::i;:::-;55651:42;;55711:9;55706:102;55730:6;55726:1;:10;55706:102;;;55758:38;55768:9;55794:1;55779:12;:16;;;;:::i;:::-;55758:9;:38::i;:::-;55738:3;;;;;:::i;:::-;;;;55706:102;;;;55837:6;55818:15;;:25;;;;;;;:::i;:::-;;;;;;;;55873:6;55854:15;;:25;;;;;;;:::i;:::-;;;;;;;;55195:692;55118:769:::0;;:::o;51571:77::-;51606:42;51571:77;:::o;30798:339::-;30993:41;31012:12;:10;:12::i;:::-;31026:7;30993:18;:41::i;:::-;30985:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31101:28;31111:4;31117:2;31121:7;31101:9;:28::i;:::-;30798:339;;;:::o;51742:30::-;;;;:::o;51078:44::-;51120:2;51078:44;:::o;41977:256::-;42074:7;42110:23;42127:5;42110:16;:23::i;:::-;42102:5;:31;42094:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42199:12;:19;42212:5;42199:19;;;;;;;;;;;;;;;:26;42219:5;42199:26;;;;;;;;;;;;42192:33;;41977:256;;;;:::o;56374:111::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56460:17:::1;;;;;;;;;;;56459:18;56439:17;;:38;;;;;;;;;;;;;;;;;;56374:111::o:0;57006:106::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57096:9:::1;57080:13;:25;;;;57006:106:::0;:::o;51403:77::-;51438:42;51403:77;:::o;31208:185::-;31346:39;31363:4;31369:2;31373:7;31346:39;;;;;;;;;;;;:16;:39::i;:::-;31208:185;;;:::o;42499:233::-;42574:7;42610:30;:28;:30::i;:::-;42602:5;:38;42594:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42707:10;42718:5;42707:17;;;;;;;;:::i;:::-;;;;;;;;;;42700:24;;42499:233;;;:::o;52001:28::-;;;;;;;;;;;;;:::o;51026:45::-;51069:2;51026:45;:::o;56493:140::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56579:7:::1;56564:12;:22;;;;;;;;;;;;:::i;:::-;;56602:23;56617:7;56602:23;;;;;;:::i;:::-;;;;;;;;56493:140:::0;:::o;51696:39::-;;;;:::o;28183:239::-;28255:7;28275:13;28291:7;:16;28299:7;28291:16;;;;;;;;;;;;;;;;;;;;;28275:32;;28343:1;28326:19;;:5;:19;;;;28318:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28409:5;28402:12;;;28183:239;;;:::o;27913:208::-;27985:7;28030:1;28013:19;;:5;:19;;;;28005:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28097:9;:16;28107:5;28097:16;;;;;;;;;;;;;;;;28090:23;;27913:208;;;:::o;7085:103::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7150:30:::1;7177:1;7150:18;:30::i;:::-;7085:103::o:0;57669:316::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57720:15:::1;57738:21;57720:39;;57788:1;57778:7;:11;57770:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;57824:44;51438:42;57863:3;57857:2;57847:7;:12;;;;:::i;:::-;57846:20;;;;:::i;:::-;57824:10;:44::i;:::-;57879;51522:42;57918:3;57912:2;57902:7;:12;;;;:::i;:::-;57901:20;;;;:::i;:::-;57879:10;:44::i;:::-;57934:43;51606:42;57955:21;57934:10;:43::i;:::-;57709:276;57669:316::o:0;51657:32::-;;;;:::o;6434:87::-;6480:7;6507:6;;;;;;;;;;;6500:13;;6434:87;:::o;56908:91::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56983:9:::1;56975:5;:17;;;;56908:91:::0;:::o;28658:104::-;28714:13;28747:7;28740:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28658:104;:::o;51487:77::-;51522:42;51487:77;:::o;54013:951::-;52499:17;;;;;;;;;;;52491:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50966:5:::1;54109:13;:11;:13::i;:::-;:26;54101:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51017:2;54186:14;:30;;54178:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;50966:5;54305:14;54289:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;54281:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;51120:2;54416:14;54388:13;:25;54402:10;54388:25;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:61;;54380:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;54530:1;54513:14;:18;54505:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;54609:9;54591:14;54583:5;;:22;;;;:::i;:::-;:35;54575:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;54666:9;54661:236;54685:14;54681:1;:18;54661:236;;;54721:15;54757:1;54739:15;;:19;;;;:::i;:::-;54721:37;;54794:1;54775:15;;:20;;;;;;;:::i;:::-;;;;;;;;54839:1;54810:13;:25;54824:10;54810:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;54855;54865:10;54877:7;54855:9;:30::i;:::-;54706:191;54701:3;;;;;:::i;:::-;;;;54661:236;;;;54914:42;54929:10;54941:14;54914:42;;;;;;;:::i;:::-;;;;;;;;54013:951:::0;:::o;30341:155::-;30436:52;30455:12;:10;:12::i;:::-;30469:8;30479;30436:18;:52::i;:::-;30341:155;;:::o;51779:30::-;;;;:::o;51932:29::-;;;;;;;;;;;;;:::o;57119:66::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57174:4:::1;57163:8;;:15;;;;;;;;;;;;;;;;;;57119:66::o:0;55895:361::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55982:9:::1;55977:272;56001:9;;:16;;55997:1;:20;55977:272;;;56071:1;56047:26;;:9;;56057:1;56047:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;56039:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;56151:4;56118:16;:30;56135:9;;56145:1;56135:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;56118:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;56202:1;56172:13;:27;56186:9;;56196:1;56186:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;56172:27;;;;;;;;;;;;;;;;:31;:65;;56236:1;56172:65;;;56206:13;:27;56220:9;;56230:1;56220:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;56206:27;;;;;;;;;;;;;;;;56172:65;;56019:3;;;;;:::i;:::-;;;;55977:272;;;;55895:361:::0;;:::o;31464:328::-;31639:41;31658:12;:10;:12::i;:::-;31672:7;31639:18;:41::i;:::-;31631:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31745:39;31759:4;31765:2;31769:7;31778:5;31745:13;:39::i;:::-;31464:328;;;;:::o;51886:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57193:468::-;57266:13;57300:16;57308:7;57300;:16::i;:::-;57292:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;57396:5;57384:17;;:8;;;;;;;;;;;:17;;;57381:70;;;57425:14;57418:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57381:70;57461:28;57492:10;:8;:10::i;:::-;57461:41;;57551:1;57526:14;57520:28;:32;:133;;;;;;;;;;;;;;;;;57588:14;57604:18;:7;:16;:18::i;:::-;57624:13;57571:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57520:133;57513:140;;;57193:468;;;;:::o;51818:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56641:127::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56744:17:::1;56728:13;:33;;;;;;;;;;;;:::i;:::-;;56641:127:::0;:::o;30567:164::-;30664:4;30688:18;:25;30707:5;30688:25;;;;;;;;;;;;;;;:35;30714:8;30688:35;;;;;;;;;;;;;;;;;;;;;;;;;30681:42;;30567:164;;;;:::o;56264:102::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56344:14:::1;;;;;;;;;;;56343:15;56326:14;;:32;;;;;;;;;;;;;;;;;;56264:102::o:0;56776:125::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56879:15:::1;56862:14;:32;;;;;;;;;;;;:::i;:::-;;56776:125:::0;:::o;7343:201::-;6665:12;:10;:12::i;:::-;6654:23;;:7;:5;:7::i;:::-;:23;;;6646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7452:1:::1;7432:22;;:8;:22;;;;7424:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7508:28;7527:8;7508:18;:28::i;:::-;7343:201:::0;:::o;52966:1039::-;52377:14;;;;;;;;;;;52369:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;53066:16:::1;:28;53083:10;53066:28;;;;;;;;;;;;;;;;;;;;;;;;;53058:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50966:5;53154:13;:11;:13::i;:::-;:26;53146:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51069:2;53231:14;:34;;53223:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;50966:5;53352:14;53336:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;53328:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;51069:2;53463:14;53435:13;:25;53449:10;53435:25;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:62;;53427:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;53566:1;53549:14;:18;53541:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;53653:9;53635:14;53619:13;;:30;;;;:::i;:::-;:43;53611:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;53710:9;53705:236;53729:14;53725:1;:18;53705:236;;;53765:15;53801:1;53783:15;;:19;;;;:::i;:::-;53765:37;;53838:1;53819:15;;:20;;;;;;;:::i;:::-;;;;;;;;53883:1;53854:13;:25;53868:10;53854:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;53899;53909:10;53921:7;53899:9;:30::i;:::-;53750:191;53745:3;;;;;:::i;:::-;;;;53705:236;;;;53958:39;53970:10;53982:14;53958:39;;;;;;;:::i;:::-;;;;;;;;52966:1039:::0;:::o;27544:305::-;27646:4;27698:25;27683:40;;;:11;:40;;;;:105;;;;27755:33;27740:48;;;:11;:48;;;;27683:105;:158;;;;27805:36;27829:11;27805:23;:36::i;:::-;27683:158;27663:178;;27544:305;;;:::o;33302:127::-;33367:4;33419:1;33391:30;;:7;:16;33399:7;33391:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33384:37;;33302:127;;;:::o;2840:98::-;2893:7;2920:10;2913:17;;2840:98;:::o;37448:174::-;37550:2;37523:15;:24;37539:7;37523:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37606:7;37602:2;37568:46;;37577:23;37592:7;37577:14;:23::i;:::-;37568:46;;;;;;;;;;;;37448:174;;:::o;34286:110::-;34362:26;34372:2;34376:7;34362:26;;;;;;;;;;;;:9;:26::i;:::-;34286:110;;:::o;33596:348::-;33689:4;33714:16;33722:7;33714;:16::i;:::-;33706:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33790:13;33806:23;33821:7;33806:14;:23::i;:::-;33790:39;;33859:5;33848:16;;:7;:16;;;:51;;;;33892:7;33868:31;;:20;33880:7;33868:11;:20::i;:::-;:31;;;33848:51;:87;;;;33903:32;33920:5;33927:7;33903:16;:32::i;:::-;33848:87;33840:96;;;33596:348;;;;:::o;36705:625::-;36864:4;36837:31;;:23;36852:7;36837:14;:23::i;:::-;:31;;;36829:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36943:1;36929:16;;:2;:16;;;;36921:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36999:39;37020:4;37026:2;37030:7;36999:20;:39::i;:::-;37103:29;37120:1;37124:7;37103:8;:29::i;:::-;37164:1;37145:9;:15;37155:4;37145:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37193:1;37176:9;:13;37186:2;37176:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37224:2;37205:7;:16;37213:7;37205:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37263:7;37259:2;37244:27;;37253:4;37244:27;;;;;;;;;;;;37284:38;37304:4;37310:2;37314:7;37284:19;:38::i;:::-;36705:625;;;:::o;7704:191::-;7778:16;7797:6;;;;;;;;;;;7778:25;;7823:8;7814:6;;:17;;;;;;;;;;;;;;;;;;7878:8;7847:40;;7868:8;7847:40;;;;;;;;;;;;7767:128;7704:191;:::o;57993:186::-;58068:12;58086:8;:13;;58108:7;58086:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58067:54;;;58140:7;58132:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;58056:123;57993:186;;:::o;37764:315::-;37919:8;37910:17;;:5;:17;;;;37902:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38006:8;37968:18;:25;37987:5;37968:25;;;;;;;;;;;;;;;:35;37994:8;37968:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38052:8;38030:41;;38045:5;38030:41;;;38062:8;38030:41;;;;;;:::i;:::-;;;;;;;;37764:315;;;:::o;32674:::-;32831:28;32841:4;32847:2;32851:7;32831:9;:28::i;:::-;32878:48;32901:4;32907:2;32911:7;32920:5;32878:22;:48::i;:::-;32870:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32674:315;;;;:::o;54972:113::-;55032:13;55065:12;55058:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54972:113;:::o;402:723::-;458:13;688:1;679:5;:10;675:53;;;706:10;;;;;;;;;;;;;;;;;;;;;675:53;738:12;753:5;738:20;;769:14;794:78;809:1;801:4;:9;794:78;;827:8;;;;;:::i;:::-;;;;858:2;850:10;;;;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;882:39;;932:154;948:1;939:5;:10;932:154;;976:1;966:11;;;;;:::i;:::-;;;1043:2;1035:5;:10;;;;:::i;:::-;1022:2;:24;;;;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1072:2;1063:11;;;;;:::i;:::-;;;932:154;;;1110:6;1096:21;;;;;402:723;;;;:::o;19218:157::-;19303:4;19342:25;19327:40;;;:11;:40;;;;19320:47;;19218:157;;;:::o;34623:321::-;34753:18;34759:2;34763:7;34753:5;:18::i;:::-;34804:54;34835:1;34839:2;34843:7;34852:5;34804:22;:54::i;:::-;34782:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34623:321;;;:::o;43345:589::-;43489:45;43516:4;43522:2;43526:7;43489:26;:45::i;:::-;43567:1;43551:18;;:4;:18;;;43547:187;;;43586:40;43618:7;43586:31;:40::i;:::-;43547:187;;;43656:2;43648:10;;:4;:10;;;43644:90;;43675:47;43708:4;43714:7;43675:32;:47::i;:::-;43644:90;43547:187;43762:1;43748:16;;:2;:16;;;43744:183;;;43781:45;43818:7;43781:36;:45::i;:::-;43744:183;;;43854:4;43848:10;;:2;:10;;;43844:83;;43875:40;43903:2;43907:7;43875:27;:40::i;:::-;43844:83;43744:183;43345:589;;;:::o;40526:125::-;;;;:::o;38644:799::-;38799:4;38820:15;:2;:13;;;:15::i;:::-;38816:620;;;38872:2;38856:36;;;38893:12;:10;:12::i;:::-;38907:4;38913:7;38922:5;38856:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38852:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39115:1;39098:6;:13;:18;39094:272;;;39141:60;;;;;;;;;;:::i;:::-;;;;;;;;39094:272;39316:6;39310:13;39301:6;39297:2;39293:15;39286:38;38852:529;38989:41;;;38979:51;;;:6;:51;;;;38972:58;;;;;38816:620;39420:4;39413:11;;38644:799;;;;;;;:::o;35280:439::-;35374:1;35360:16;;:2;:16;;;;35352:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35433:16;35441:7;35433;:16::i;:::-;35432:17;35424:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35495:45;35524:1;35528:2;35532:7;35495:20;:45::i;:::-;35570:1;35553:9;:13;35563:2;35553:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35601:2;35582:7;:16;35590:7;35582:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35646:7;35642:2;35621:33;;35638:1;35621:33;;;;;;;;;;;;35667:44;35695:1;35699:2;35703:7;35667:19;:44::i;:::-;35280:439;;:::o;40015:126::-;;;;:::o;44657:164::-;44761:10;:17;;;;44734:15;:24;44750:7;44734:24;;;;;;;;;;;:44;;;;44789:10;44805:7;44789:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44657:164;:::o;45448:988::-;45714:22;45764:1;45739:22;45756:4;45739:16;:22::i;:::-;:26;;;;:::i;:::-;45714:51;;45776:18;45797:17;:26;45815:7;45797:26;;;;;;;;;;;;45776:47;;45944:14;45930:10;:28;45926:328;;45975:19;45997:12;:18;46010:4;45997:18;;;;;;;;;;;;;;;:34;46016:14;45997:34;;;;;;;;;;;;45975:56;;46081:11;46048:12;:18;46061:4;46048:18;;;;;;;;;;;;;;;:30;46067:10;46048:30;;;;;;;;;;;:44;;;;46198:10;46165:17;:30;46183:11;46165:30;;;;;;;;;;;:43;;;;45960:294;45926:328;46350:17;:26;46368:7;46350:26;;;;;;;;;;;46343:33;;;46394:12;:18;46407:4;46394:18;;;;;;;;;;;;;;;:34;46413:14;46394:34;;;;;;;;;;;46387:41;;;45529:907;;45448:988;;:::o;46731:1079::-;46984:22;47029:1;47009:10;:17;;;;:21;;;;:::i;:::-;46984:46;;47041:18;47062:15;:24;47078:7;47062:24;;;;;;;;;;;;47041:45;;47413:19;47435:10;47446:14;47435:26;;;;;;;;:::i;:::-;;;;;;;;;;47413:48;;47499:11;47474:10;47485;47474:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47610:10;47579:15;:28;47595:11;47579:28;;;;;;;;;;;:41;;;;47751:15;:24;47767:7;47751:24;;;;;;;;;;;47744:31;;;47786:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46802:1008;;;46731:1079;:::o;44235:221::-;44320:14;44337:20;44354:2;44337:16;:20::i;:::-;44320:37;;44395:7;44368:12;:16;44381:2;44368:16;;;;;;;;;;;;;;;:24;44385:6;44368:24;;;;;;;;;;;:34;;;;44442:6;44413:17;:26;44431:7;44413:26;;;;;;;;;;;:35;;;;44309:147;44235:221;;:::o;9135:326::-;9195:4;9452:1;9430:7;:19;;;:23;9423:30;;9135:326;;;:::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:118::-;3078:24;3096:5;3078:24;:::i;:::-;3073:3;3066:37;2991:118;;:::o;3115:222::-;3208:4;3246:2;3235:9;3231:18;3223:26;;3259:71;3327:1;3316:9;3312:17;3303:6;3259:71;:::i;:::-;3115:222;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:329::-;5349:6;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5290:329;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:117::-;9715:1;9712;9705:12;9729:117;9838:1;9835;9828:12;9869:568;9942:8;9952:6;10002:3;9995:4;9987:6;9983:17;9979:27;9969:122;;10010:79;;:::i;:::-;9969:122;10123:6;10110:20;10100:30;;10153:18;10145:6;10142:30;10139:117;;;10175:79;;:::i;:::-;10139:117;10289:4;10281:6;10277:17;10265:29;;10343:3;10335:4;10327:6;10323:17;10313:8;10309:32;10306:41;10303:128;;;10350:79;;:::i;:::-;10303:128;9869:568;;;;;:::o;10443:559::-;10529:6;10537;10586:2;10574:9;10565:7;10561:23;10557:32;10554:119;;;10592:79;;:::i;:::-;10554:119;10740:1;10729:9;10725:17;10712:31;10770:18;10762:6;10759:30;10756:117;;;10792:79;;:::i;:::-;10756:117;10905:80;10977:7;10968:6;10957:9;10953:22;10905:80;:::i;:::-;10887:98;;;;10683:312;10443:559;;;;;:::o;11008:307::-;11069:4;11159:18;11151:6;11148:30;11145:56;;;11181:18;;:::i;:::-;11145:56;11219:29;11241:6;11219:29;:::i;:::-;11211:37;;11303:4;11297;11293:15;11285:23;;11008:307;;;:::o;11321:410::-;11398:5;11423:65;11439:48;11480:6;11439:48;:::i;:::-;11423:65;:::i;:::-;11414:74;;11511:6;11504:5;11497:21;11549:4;11542:5;11538:16;11587:3;11578:6;11573:3;11569:16;11566:25;11563:112;;;11594:79;;:::i;:::-;11563:112;11684:41;11718:6;11713:3;11708;11684:41;:::i;:::-;11404:327;11321:410;;;;;:::o;11750:338::-;11805:5;11854:3;11847:4;11839:6;11835:17;11831:27;11821:122;;11862:79;;:::i;:::-;11821:122;11979:6;11966:20;12004:78;12078:3;12070:6;12063:4;12055:6;12051:17;12004:78;:::i;:::-;11995:87;;11811:277;11750:338;;;;:::o;12094:943::-;12189:6;12197;12205;12213;12262:3;12250:9;12241:7;12237:23;12233:33;12230:120;;;12269:79;;:::i;:::-;12230:120;12389:1;12414:53;12459:7;12450:6;12439:9;12435:22;12414:53;:::i;:::-;12404:63;;12360:117;12516:2;12542:53;12587:7;12578:6;12567:9;12563:22;12542:53;:::i;:::-;12532:63;;12487:118;12644:2;12670:53;12715:7;12706:6;12695:9;12691:22;12670:53;:::i;:::-;12660:63;;12615:118;12800:2;12789:9;12785:18;12772:32;12831:18;12823:6;12820:30;12817:117;;;12853:79;;:::i;:::-;12817:117;12958:62;13012:7;13003:6;12992:9;12988:22;12958:62;:::i;:::-;12948:72;;12743:287;12094:943;;;;;;;:::o;13043:474::-;13111:6;13119;13168:2;13156:9;13147:7;13143:23;13139:32;13136:119;;;13174:79;;:::i;:::-;13136:119;13294:1;13319:53;13364:7;13355:6;13344:9;13340:22;13319:53;:::i;:::-;13309:63;;13265:117;13421:2;13447:53;13492:7;13483:6;13472:9;13468:22;13447:53;:::i;:::-;13437:63;;13392:118;13043:474;;;;;:::o;13523:180::-;13571:77;13568:1;13561:88;13668:4;13665:1;13658:15;13692:4;13689:1;13682:15;13709:320;13753:6;13790:1;13784:4;13780:12;13770:22;;13837:1;13831:4;13827:12;13858:18;13848:81;;13914:4;13906:6;13902:17;13892:27;;13848:81;13976:2;13968:6;13965:14;13945:18;13942:38;13939:84;;;13995:18;;:::i;:::-;13939:84;13760:269;13709:320;;;:::o;14035:231::-;14175:34;14171:1;14163:6;14159:14;14152:58;14244:14;14239:2;14231:6;14227:15;14220:39;14035:231;:::o;14272:366::-;14414:3;14435:67;14499:2;14494:3;14435:67;:::i;:::-;14428:74;;14511:93;14600:3;14511:93;:::i;:::-;14629:2;14624:3;14620:12;14613:19;;14272:366;;;:::o;14644:419::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:220::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:3;15273:2;15265:6;15261:15;15254:28;15069:220;:::o;15295:366::-;15437:3;15458:67;15522:2;15517:3;15458:67;:::i;:::-;15451:74;;15534:93;15623:3;15534:93;:::i;:::-;15652:2;15647:3;15643:12;15636:19;;15295:366;;;:::o;15667:419::-;15833:4;15871:2;15860:9;15856:18;15848:26;;15920:9;15914:4;15910:20;15906:1;15895:9;15891:17;15884:47;15948:131;16074:4;15948:131;:::i;:::-;15940:139;;15667:419;;;:::o;16092:243::-;16232:34;16228:1;16220:6;16216:14;16209:58;16301:26;16296:2;16288:6;16284:15;16277:51;16092:243;:::o;16341:366::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:419::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16994:131;17120:4;16994:131;:::i;:::-;16986:139;;16713:419;;;:::o;17138:173::-;17278:25;17274:1;17266:6;17262:14;17255:49;17138:173;:::o;17317:366::-;17459:3;17480:67;17544:2;17539:3;17480:67;:::i;:::-;17473:74;;17556:93;17645:3;17556:93;:::i;:::-;17674:2;17669:3;17665:12;17658:19;;17317:366;;;:::o;17689:419::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17689:419;;;:::o;18114:182::-;18254:34;18250:1;18242:6;18238:14;18231:58;18114:182;:::o;18302:366::-;18444:3;18465:67;18529:2;18524:3;18465:67;:::i;:::-;18458:74;;18541:93;18630:3;18541:93;:::i;:::-;18659:2;18654:3;18650:12;18643:19;;18302:366;;;:::o;18674:419::-;18840:4;18878:2;18867:9;18863:18;18855:26;;18927:9;18921:4;18917:20;18913:1;18902:9;18898:17;18891:47;18955:131;19081:4;18955:131;:::i;:::-;18947:139;;18674:419;;;:::o;19099:227::-;19239:34;19235:1;19227:6;19223:14;19216:58;19308:10;19303:2;19295:6;19291:15;19284:35;19099:227;:::o;19332:366::-;19474:3;19495:67;19559:2;19554:3;19495:67;:::i;:::-;19488:74;;19571:93;19660:3;19571:93;:::i;:::-;19689:2;19684:3;19680:12;19673:19;;19332:366;;;:::o;19704:419::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19985:131;20111:4;19985:131;:::i;:::-;19977:139;;19704:419;;;:::o;20129:180::-;20177:77;20174:1;20167:88;20274:4;20271:1;20264:15;20298:4;20295:1;20288:15;20315:305;20355:3;20374:20;20392:1;20374:20;:::i;:::-;20369:25;;20408:20;20426:1;20408:20;:::i;:::-;20403:25;;20562:1;20494:66;20490:74;20487:1;20484:81;20481:107;;;20568:18;;:::i;:::-;20481:107;20612:1;20609;20605:9;20598:16;;20315:305;;;;:::o;20626:227::-;20766:34;20762:1;20754:6;20750:14;20743:58;20835:10;20830:2;20822:6;20818:15;20811:35;20626:227;:::o;20859:366::-;21001:3;21022:67;21086:2;21081:3;21022:67;:::i;:::-;21015:74;;21098:93;21187:3;21098:93;:::i;:::-;21216:2;21211:3;21207:12;21200:19;;20859:366;;;:::o;21231:419::-;21397:4;21435:2;21424:9;21420:18;21412:26;;21484:9;21478:4;21474:20;21470:1;21459:9;21455:17;21448:47;21512:131;21638:4;21512:131;:::i;:::-;21504:139;;21231:419;;;:::o;21656:177::-;21796:29;21792:1;21784:6;21780:14;21773:53;21656:177;:::o;21839:366::-;21981:3;22002:67;22066:2;22061:3;22002:67;:::i;:::-;21995:74;;22078:93;22167:3;22078:93;:::i;:::-;22196:2;22191:3;22187:12;22180:19;;21839:366;;;:::o;22211:419::-;22377:4;22415:2;22404:9;22400:18;22392:26;;22464:9;22458:4;22454:20;22450:1;22439:9;22435:17;22428:47;22492:131;22618:4;22492:131;:::i;:::-;22484:139;;22211:419;;;:::o;22636:181::-;22776:33;22772:1;22764:6;22760:14;22753:57;22636:181;:::o;22823:366::-;22965:3;22986:67;23050:2;23045:3;22986:67;:::i;:::-;22979:74;;23062:93;23151:3;23062:93;:::i;:::-;23180:2;23175:3;23171:12;23164:19;;22823:366;;;:::o;23195:419::-;23361:4;23399:2;23388:9;23384:18;23376:26;;23448:9;23442:4;23438:20;23434:1;23423:9;23419:17;23412:47;23476:131;23602:4;23476:131;:::i;:::-;23468:139;;23195:419;;;:::o;23620:233::-;23659:3;23682:24;23700:5;23682:24;:::i;:::-;23673:33;;23728:66;23721:5;23718:77;23715:103;;;23798:18;;:::i;:::-;23715:103;23845:1;23838:5;23834:13;23827:20;;23620:233;;;:::o;23859:236::-;23999:34;23995:1;23987:6;23983:14;23976:58;24068:19;24063:2;24055:6;24051:15;24044:44;23859:236;:::o;24101:366::-;24243:3;24264:67;24328:2;24323:3;24264:67;:::i;:::-;24257:74;;24340:93;24429:3;24340:93;:::i;:::-;24458:2;24453:3;24449:12;24442:19;;24101:366;;;:::o;24473:419::-;24639:4;24677:2;24666:9;24662:18;24654:26;;24726:9;24720:4;24716:20;24712:1;24701:9;24697:17;24690:47;24754:131;24880:4;24754:131;:::i;:::-;24746:139;;24473:419;;;:::o;24898:230::-;25038:34;25034:1;25026:6;25022:14;25015:58;25107:13;25102:2;25094:6;25090:15;25083:38;24898:230;:::o;25134:366::-;25276:3;25297:67;25361:2;25356:3;25297:67;:::i;:::-;25290:74;;25373:93;25462:3;25373:93;:::i;:::-;25491:2;25486:3;25482:12;25475:19;;25134:366;;;:::o;25506:419::-;25672:4;25710:2;25699:9;25695:18;25687:26;;25759:9;25753:4;25749:20;25745:1;25734:9;25730:17;25723:47;25787:131;25913:4;25787:131;:::i;:::-;25779:139;;25506:419;;;:::o;25931:231::-;26071:34;26067:1;26059:6;26055:14;26048:58;26140:14;26135:2;26127:6;26123:15;26116:39;25931:231;:::o;26168:366::-;26310:3;26331:67;26395:2;26390:3;26331:67;:::i;:::-;26324:74;;26407:93;26496:3;26407:93;:::i;:::-;26525:2;26520:3;26516:12;26509:19;;26168:366;;;:::o;26540:419::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:180::-;27013:77;27010:1;27003:88;27110:4;27107:1;27100:15;27134:4;27131:1;27124:15;27151:228;27291:34;27287:1;27279:6;27275:14;27268:58;27360:11;27355:2;27347:6;27343:15;27336:36;27151:228;:::o;27385:366::-;27527:3;27548:67;27612:2;27607:3;27548:67;:::i;:::-;27541:74;;27624:93;27713:3;27624:93;:::i;:::-;27742:2;27737:3;27733:12;27726:19;;27385:366;;;:::o;27757:419::-;27923:4;27961:2;27950:9;27946:18;27938:26;;28010:9;28004:4;28000:20;27996:1;27985:9;27981:17;27974:47;28038:131;28164:4;28038:131;:::i;:::-;28030:139;;27757:419;;;:::o;28182:229::-;28322:34;28318:1;28310:6;28306:14;28299:58;28391:12;28386:2;28378:6;28374:15;28367:37;28182:229;:::o;28417:366::-;28559:3;28580:67;28644:2;28639:3;28580:67;:::i;:::-;28573:74;;28656:93;28745:3;28656:93;:::i;:::-;28774:2;28769:3;28765:12;28758:19;;28417:366;;;:::o;28789:419::-;28955:4;28993:2;28982:9;28978:18;28970:26;;29042:9;29036:4;29032:20;29028:1;29017:9;29013:17;29006:47;29070:131;29196:4;29070:131;:::i;:::-;29062:139;;28789:419;;;:::o;29214:169::-;29354:21;29350:1;29342:6;29338:14;29331:45;29214:169;:::o;29389:366::-;29531:3;29552:67;29616:2;29611:3;29552:67;:::i;:::-;29545:74;;29628:93;29717:3;29628:93;:::i;:::-;29746:2;29741:3;29737:12;29730:19;;29389:366;;;:::o;29761:419::-;29927:4;29965:2;29954:9;29950:18;29942:26;;30014:9;30008:4;30004:20;30000:1;29989:9;29985:17;29978:47;30042:131;30168:4;30042:131;:::i;:::-;30034:139;;29761:419;;;:::o;30186:348::-;30226:7;30249:20;30267:1;30249:20;:::i;:::-;30244:25;;30283:20;30301:1;30283:20;:::i;:::-;30278:25;;30471:1;30403:66;30399:74;30396:1;30393:81;30388:1;30381:9;30374:17;30370:105;30367:131;;;30478:18;;:::i;:::-;30367:131;30526:1;30523;30519:9;30508:20;;30186:348;;;;:::o;30540:180::-;30588:77;30585:1;30578:88;30685:4;30682:1;30675:15;30709:4;30706:1;30699:15;30726:185;30766:1;30783:20;30801:1;30783:20;:::i;:::-;30778:25;;30817:20;30835:1;30817:20;:::i;:::-;30812:25;;30856:1;30846:35;;30861:18;;:::i;:::-;30846:35;30903:1;30900;30896:9;30891:14;;30726:185;;;;:::o;30917:177::-;31057:29;31053:1;31045:6;31041:14;31034:53;30917:177;:::o;31100:366::-;31242:3;31263:67;31327:2;31322:3;31263:67;:::i;:::-;31256:74;;31339:93;31428:3;31339:93;:::i;:::-;31457:2;31452:3;31448:12;31441:19;;31100:366;;;:::o;31472:419::-;31638:4;31676:2;31665:9;31661:18;31653:26;;31725:9;31719:4;31715:20;31711:1;31700:9;31696:17;31689:47;31753:131;31879:4;31753:131;:::i;:::-;31745:139;;31472:419;;;:::o;31897:236::-;32037:34;32033:1;32025:6;32021:14;32014:58;32106:19;32101:2;32093:6;32089:15;32082:44;31897:236;:::o;32139:366::-;32281:3;32302:67;32366:2;32361:3;32302:67;:::i;:::-;32295:74;;32378:93;32467:3;32378:93;:::i;:::-;32496:2;32491:3;32487:12;32480:19;;32139:366;;;:::o;32511:419::-;32677:4;32715:2;32704:9;32700:18;32692:26;;32764:9;32758:4;32754:20;32750:1;32739:9;32735:17;32728:47;32792:131;32918:4;32792:131;:::i;:::-;32784:139;;32511:419;;;:::o;32936:227::-;33076:34;33072:1;33064:6;33060:14;33053:58;33145:10;33140:2;33132:6;33128:15;33121:35;32936:227;:::o;33169:366::-;33311:3;33332:67;33396:2;33391:3;33332:67;:::i;:::-;33325:74;;33408:93;33497:3;33408:93;:::i;:::-;33526:2;33521:3;33517:12;33510:19;;33169:366;;;:::o;33541:419::-;33707:4;33745:2;33734:9;33730:18;33722:26;;33794:9;33788:4;33784:20;33780:1;33769:9;33765:17;33758:47;33822:131;33948:4;33822:131;:::i;:::-;33814:139;;33541:419;;;:::o;33966:178::-;34106:30;34102:1;34094:6;34090:14;34083:54;33966:178;:::o;34150:366::-;34292:3;34313:67;34377:2;34372:3;34313:67;:::i;:::-;34306:74;;34389:93;34478:3;34389:93;:::i;:::-;34507:2;34502:3;34498:12;34491:19;;34150:366;;;:::o;34522:419::-;34688:4;34726:2;34715:9;34711:18;34703:26;;34775:9;34769:4;34765:20;34761:1;34750:9;34746:17;34739:47;34803:131;34929:4;34803:131;:::i;:::-;34795:139;;34522:419;;;:::o;34947:175::-;35087:27;35083:1;35075:6;35071:14;35064:51;34947:175;:::o;35128:366::-;35270:3;35291:67;35355:2;35350:3;35291:67;:::i;:::-;35284:74;;35367:93;35456:3;35367:93;:::i;:::-;35485:2;35480:3;35476:12;35469:19;;35128:366;;;:::o;35500:419::-;35666:4;35704:2;35693:9;35689:18;35681:26;;35753:9;35747:4;35743:20;35739:1;35728:9;35724:17;35717:47;35781:131;35907:4;35781:131;:::i;:::-;35773:139;;35500:419;;;:::o;35925:332::-;36046:4;36084:2;36073:9;36069:18;36061:26;;36097:71;36165:1;36154:9;36150:17;36141:6;36097:71;:::i;:::-;36178:72;36246:2;36235:9;36231:18;36222:6;36178:72;:::i;:::-;35925:332;;;;;:::o;36263:234::-;36403:34;36399:1;36391:6;36387:14;36380:58;36472:17;36467:2;36459:6;36455:15;36448:42;36263:234;:::o;36503:366::-;36645:3;36666:67;36730:2;36725:3;36666:67;:::i;:::-;36659:74;;36742:93;36831:3;36742:93;:::i;:::-;36860:2;36855:3;36851:12;36844:19;;36503:366;;;:::o;36875:419::-;37041:4;37079:2;37068:9;37064:18;37056:26;;37128:9;37122:4;37118:20;37114:1;37103:9;37099:17;37092:47;37156:131;37282:4;37156:131;:::i;:::-;37148:139;;36875:419;;;:::o;37300:148::-;37402:11;37439:3;37424:18;;37300:148;;;;:::o;37454:377::-;37560:3;37588:39;37621:5;37588:39;:::i;:::-;37643:89;37725:6;37720:3;37643:89;:::i;:::-;37636:96;;37741:52;37786:6;37781:3;37774:4;37767:5;37763:16;37741:52;:::i;:::-;37818:6;37813:3;37809:16;37802:23;;37564:267;37454:377;;;;:::o;37837:141::-;37886:4;37909:3;37901:11;;37932:3;37929:1;37922:14;37966:4;37963:1;37953:18;37945:26;;37837:141;;;:::o;38008:845::-;38111:3;38148:5;38142:12;38177:36;38203:9;38177:36;:::i;:::-;38229:89;38311:6;38306:3;38229:89;:::i;:::-;38222:96;;38349:1;38338:9;38334:17;38365:1;38360:137;;;;38511:1;38506:341;;;;38327:520;;38360:137;38444:4;38440:9;38429;38425:25;38420:3;38413:38;38480:6;38475:3;38471:16;38464:23;;38360:137;;38506:341;38573:38;38605:5;38573:38;:::i;:::-;38633:1;38647:154;38661:6;38658:1;38655:13;38647:154;;;38735:7;38729:14;38725:1;38720:3;38716:11;38709:35;38785:1;38776:7;38772:15;38761:26;;38683:4;38680:1;38676:12;38671:17;;38647:154;;;38830:6;38825:3;38821:16;38814:23;;38513:334;;38327:520;;38115:738;;38008:845;;;;:::o;38859:589::-;39084:3;39106:95;39197:3;39188:6;39106:95;:::i;:::-;39099:102;;39218:95;39309:3;39300:6;39218:95;:::i;:::-;39211:102;;39330:92;39418:3;39409:6;39330:92;:::i;:::-;39323:99;;39439:3;39432:10;;38859:589;;;;;;:::o;39454:225::-;39594:34;39590:1;39582:6;39578:14;39571:58;39663:8;39658:2;39650:6;39646:15;39639:33;39454:225;:::o;39685:366::-;39827:3;39848:67;39912:2;39907:3;39848:67;:::i;:::-;39841:74;;39924:93;40013:3;39924:93;:::i;:::-;40042:2;40037:3;40033:12;40026:19;;39685:366;;;:::o;40057:419::-;40223:4;40261:2;40250:9;40246:18;40238:26;;40310:9;40304:4;40300:20;40296:1;40285:9;40281:17;40274:47;40338:131;40464:4;40338:131;:::i;:::-;40330:139;;40057:419;;;:::o;40482:173::-;40622:25;40618:1;40610:6;40606:14;40599:49;40482:173;:::o;40661:366::-;40803:3;40824:67;40888:2;40883:3;40824:67;:::i;:::-;40817:74;;40900:93;40989:3;40900:93;:::i;:::-;41018:2;41013:3;41009:12;41002:19;;40661:366;;;:::o;41033:419::-;41199:4;41237:2;41226:9;41222:18;41214:26;;41286:9;41280:4;41276:20;41272:1;41261:9;41257:17;41250:47;41314:131;41440:4;41314:131;:::i;:::-;41306:139;;41033:419;;;:::o;41458:223::-;41598:34;41594:1;41586:6;41582:14;41575:58;41667:6;41662:2;41654:6;41650:15;41643:31;41458:223;:::o;41687:366::-;41829:3;41850:67;41914:2;41909:3;41850:67;:::i;:::-;41843:74;;41926:93;42015:3;41926:93;:::i;:::-;42044:2;42039:3;42035:12;42028:19;;41687:366;;;:::o;42059:419::-;42225:4;42263:2;42252:9;42248:18;42240:26;;42312:9;42306:4;42302:20;42298:1;42287:9;42283:17;42276:47;42340:131;42466:4;42340:131;:::i;:::-;42332:139;;42059:419;;;:::o;42484:234::-;42624:34;42620:1;42612:6;42608:14;42601:58;42693:17;42688:2;42680:6;42676:15;42669:42;42484:234;:::o;42724:366::-;42866:3;42887:67;42951:2;42946:3;42887:67;:::i;:::-;42880:74;;42963:93;43052:3;42963:93;:::i;:::-;43081:2;43076:3;43072:12;43065:19;;42724:366;;;:::o;43096:419::-;43262:4;43300:2;43289:9;43285:18;43277:26;;43349:9;43343:4;43339:20;43335:1;43324:9;43320:17;43313:47;43377:131;43503:4;43377:131;:::i;:::-;43369:139;;43096:419;;;:::o;43521:178::-;43661:30;43657:1;43649:6;43645:14;43638:54;43521:178;:::o;43705:366::-;43847:3;43868:67;43932:2;43927:3;43868:67;:::i;:::-;43861:74;;43944:93;44033:3;43944:93;:::i;:::-;44062:2;44057:3;44053:12;44046:19;;43705:366;;;:::o;44077:419::-;44243:4;44281:2;44270:9;44266:18;44258:26;;44330:9;44324:4;44320:20;44316:1;44305:9;44301:17;44294:47;44358:131;44484:4;44358:131;:::i;:::-;44350:139;;44077:419;;;:::o;44502:231::-;44642:34;44638:1;44630:6;44626:14;44619:58;44711:14;44706:2;44698:6;44694:15;44687:39;44502:231;:::o;44739:366::-;44881:3;44902:67;44966:2;44961:3;44902:67;:::i;:::-;44895:74;;44978:93;45067:3;44978:93;:::i;:::-;45096:2;45091:3;45087:12;45080:19;;44739:366;;;:::o;45111:419::-;45277:4;45315:2;45304:9;45300:18;45292:26;;45364:9;45358:4;45354:20;45350:1;45339:9;45335:17;45328:47;45392:131;45518:4;45392:131;:::i;:::-;45384:139;;45111:419;;;:::o;45536:224::-;45676:34;45672:1;45664:6;45660:14;45653:58;45745:7;45740:2;45732:6;45728:15;45721:32;45536:224;:::o;45766:366::-;45908:3;45929:67;45993:2;45988:3;45929:67;:::i;:::-;45922:74;;46005:93;46094:3;46005:93;:::i;:::-;46123:2;46118:3;46114:12;46107:19;;45766:366;;;:::o;46138:419::-;46304:4;46342:2;46331:9;46327:18;46319:26;;46391:9;46385:4;46381:20;46377:1;46366:9;46362:17;46355:47;46419:131;46545:4;46419:131;:::i;:::-;46411:139;;46138:419;;;:::o;46563:223::-;46703:34;46699:1;46691:6;46687:14;46680:58;46772:6;46767:2;46759:6;46755:15;46748:31;46563:223;:::o;46792:366::-;46934:3;46955:67;47019:2;47014:3;46955:67;:::i;:::-;46948:74;;47031:93;47120:3;47031:93;:::i;:::-;47149:2;47144:3;47140:12;47133:19;;46792:366;;;:::o;47164:419::-;47330:4;47368:2;47357:9;47353:18;47345:26;;47417:9;47411:4;47407:20;47403:1;47392:9;47388:17;47381:47;47445:131;47571:4;47445:131;:::i;:::-;47437:139;;47164:419;;;:::o;47589:191::-;47629:4;47649:20;47667:1;47649:20;:::i;:::-;47644:25;;47683:20;47701:1;47683:20;:::i;:::-;47678:25;;47722:1;47719;47716:8;47713:34;;;47727:18;;:::i;:::-;47713:34;47772:1;47769;47765:9;47757:17;;47589:191;;;;:::o;47786:147::-;47887:11;47924:3;47909:18;;47786:147;;;;:::o;47939:114::-;;:::o;48059:398::-;48218:3;48239:83;48320:1;48315:3;48239:83;:::i;:::-;48232:90;;48331:93;48420:3;48331:93;:::i;:::-;48449:1;48444:3;48440:11;48433:18;;48059:398;;;:::o;48463:379::-;48647:3;48669:147;48812:3;48669:147;:::i;:::-;48662:154;;48833:3;48826:10;;48463:379;;;:::o;48848:169::-;48988:21;48984:1;48976:6;48972:14;48965:45;48848:169;:::o;49023:366::-;49165:3;49186:67;49250:2;49245:3;49186:67;:::i;:::-;49179:74;;49262:93;49351:3;49262:93;:::i;:::-;49380:2;49375:3;49371:12;49364:19;;49023:366;;;:::o;49395:419::-;49561:4;49599:2;49588:9;49584:18;49576:26;;49648:9;49642:4;49638:20;49634:1;49623:9;49619:17;49612:47;49676:131;49802:4;49676:131;:::i;:::-;49668:139;;49395:419;;;:::o;49820:175::-;49960:27;49956:1;49948:6;49944:14;49937:51;49820:175;:::o;50001:366::-;50143:3;50164:67;50228:2;50223:3;50164:67;:::i;:::-;50157:74;;50240:93;50329:3;50240:93;:::i;:::-;50358:2;50353:3;50349:12;50342:19;;50001:366;;;:::o;50373:419::-;50539:4;50577:2;50566:9;50562:18;50554:26;;50626:9;50620:4;50616:20;50612:1;50601:9;50597:17;50590:47;50654:131;50780:4;50654:131;:::i;:::-;50646:139;;50373:419;;;:::o;50798:237::-;50938:34;50934:1;50926:6;50922:14;50915:58;51007:20;51002:2;50994:6;50990:15;50983:45;50798:237;:::o;51041:366::-;51183:3;51204:67;51268:2;51263:3;51204:67;:::i;:::-;51197:74;;51280:93;51369:3;51280:93;:::i;:::-;51398:2;51393:3;51389:12;51382:19;;51041:366;;;:::o;51413:419::-;51579:4;51617:2;51606:9;51602:18;51594:26;;51666:9;51660:4;51656:20;51652:1;51641:9;51637:17;51630:47;51694:131;51820:4;51694:131;:::i;:::-;51686:139;;51413:419;;;:::o;51838:176::-;51870:1;51887:20;51905:1;51887:20;:::i;:::-;51882:25;;51921:20;51939:1;51921:20;:::i;:::-;51916:25;;51960:1;51950:35;;51965:18;;:::i;:::-;51950:35;52006:1;52003;51999:9;51994:14;;51838:176;;;;:::o;52020:98::-;52071:6;52105:5;52099:12;52089:22;;52020:98;;;:::o;52124:168::-;52207:11;52241:6;52236:3;52229:19;52281:4;52276:3;52272:14;52257:29;;52124:168;;;;:::o;52298:360::-;52384:3;52412:38;52444:5;52412:38;:::i;:::-;52466:70;52529:6;52524:3;52466:70;:::i;:::-;52459:77;;52545:52;52590:6;52585:3;52578:4;52571:5;52567:16;52545:52;:::i;:::-;52622:29;52644:6;52622:29;:::i;:::-;52617:3;52613:39;52606:46;;52388:270;52298:360;;;;:::o;52664:640::-;52859:4;52897:3;52886:9;52882:19;52874:27;;52911:71;52979:1;52968:9;52964:17;52955:6;52911:71;:::i;:::-;52992:72;53060:2;53049:9;53045:18;53036:6;52992:72;:::i;:::-;53074;53142:2;53131:9;53127:18;53118:6;53074:72;:::i;:::-;53193:9;53187:4;53183:20;53178:2;53167:9;53163:18;53156:48;53221:76;53292:4;53283:6;53221:76;:::i;:::-;53213:84;;52664:640;;;;;;;:::o;53310:141::-;53366:5;53397:6;53391:13;53382:22;;53413:32;53439:5;53413:32;:::i;:::-;53310:141;;;;:::o;53457:349::-;53526:6;53575:2;53563:9;53554:7;53550:23;53546:32;53543:119;;;53581:79;;:::i;:::-;53543:119;53701:1;53726:63;53781:7;53772:6;53761:9;53757:22;53726:63;:::i;:::-;53716:73;;53672:127;53457:349;;;;:::o;53812:182::-;53952:34;53948:1;53940:6;53936:14;53929:58;53812:182;:::o;54000:366::-;54142:3;54163:67;54227:2;54222:3;54163:67;:::i;:::-;54156:74;;54239:93;54328:3;54239:93;:::i;:::-;54357:2;54352:3;54348:12;54341:19;;54000:366;;;:::o;54372:419::-;54538:4;54576:2;54565:9;54561:18;54553:26;;54625:9;54619:4;54615:20;54611:1;54600:9;54596:17;54589:47;54653:131;54779:4;54653:131;:::i;:::-;54645:139;;54372:419;;;:::o;54797:178::-;54937:30;54933:1;54925:6;54921:14;54914:54;54797:178;:::o;54981:366::-;55123:3;55144:67;55208:2;55203:3;55144:67;:::i;:::-;55137:74;;55220:93;55309:3;55220:93;:::i;:::-;55338:2;55333:3;55329:12;55322:19;;54981:366;;;:::o;55353:419::-;55519:4;55557:2;55546:9;55542:18;55534:26;;55606:9;55600:4;55596:20;55592:1;55581:9;55577:17;55570:47;55634:131;55760:4;55634:131;:::i;:::-;55626:139;;55353:419;;;:::o;55778:180::-;55826:77;55823:1;55816:88;55923:4;55920:1;55913:15;55947:4;55944:1;55937:15
Swarm Source
ipfs://7a8d1ce1c00894b3199281c08d6e6f9b89024a2125719b116fb52add9822dd54
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.