Token Inter
Polygon Sponsored slots available. Book your slot here!
Overview ERC-721
Total Supply:
4 ITWM
Holders:
2 addresses
Contract:
Balance
3 ITWM
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Inter
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-01 */ // 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/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/Inter.sol pragma solidity >=0.7.0 <0.9.0; contract Inter is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 5 ether; uint256 public maxSupply = 90; uint256 public maxMintAmount = 5; bool public paused = false; bool public revealed = false; string public notRevealedUri; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } 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)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function Airdrop(address _user, uint256 _mintAmount) public onlyOwner { require(totalSupply()+_mintAmount <= maxSupply, "Exceeds supply"); _safeMint(_user, _mintAmount); } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a9190620005f8565b50674563918244f40000600d55605a600e556005600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000a457600080fd5b5060405162005100380380620051008339818101604052810190620000ca91906200084d565b83838160009081620000dd9190620005f8565b508060019081620000ef9190620005f8565b50505062000112620001066200013e60201b60201c565b6200014660201b60201c565b62000123826200020c60201b60201c565b6200013481620002b060201b60201c565b50505050620009be565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021c6200013e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002426200035460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000292906200099c565b60405180910390fd5b80600b9081620002ac9190620005f8565b5050565b620002c06200013e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e66200035460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200033f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000336906200099c565b60405180910390fd5b8060119081620003509190620005f8565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040057607f821691505b602082108103620004165762000415620003b8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000441565b6200048c868362000441565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004d9620004d3620004cd84620004a4565b620004ae565b620004a4565b9050919050565b6000819050919050565b620004f583620004b8565b6200050d6200050482620004e0565b8484546200044e565b825550505050565b600090565b6200052462000515565b62000531818484620004ea565b505050565b5b8181101562000559576200054d6000826200051a565b60018101905062000537565b5050565b601f821115620005a85762000572816200041c565b6200057d8462000431565b810160208510156200058d578190505b620005a56200059c8562000431565b83018262000536565b50505b505050565b600082821c905092915050565b6000620005cd60001984600802620005ad565b1980831691505092915050565b6000620005e88383620005ba565b9150826002028217905092915050565b62000603826200037e565b67ffffffffffffffff8111156200061f576200061e62000389565b5b6200062b8254620003e7565b620006388282856200055d565b600060209050601f8311600181146200067057600084156200065b578287015190505b620006678582620005da565b865550620006d7565b601f19841662000680866200041c565b60005b82811015620006aa5784890151825560018201915060208501945060208101905062000683565b86831015620006ca5784890151620006c6601f891682620005ba565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200071982620006fd565b810181811067ffffffffffffffff821117156200073b576200073a62000389565b5b80604052505050565b600062000750620006df565b90506200075e82826200070e565b919050565b600067ffffffffffffffff82111562000781576200078062000389565b5b6200078c82620006fd565b9050602081019050919050565b60005b83811015620007b95780820151818401526020810190506200079c565b83811115620007c9576000848401525b50505050565b6000620007e6620007e08462000763565b62000744565b905082815260208101848484011115620008055762000804620006f8565b5b6200081284828562000799565b509392505050565b600082601f830112620008325762000831620006f3565b5b815162000844848260208601620007cf565b91505092915050565b600080600080608085870312156200086a5762000869620006e9565b5b600085015167ffffffffffffffff8111156200088b576200088a620006ee565b5b62000899878288016200081a565b945050602085015167ffffffffffffffff811115620008bd57620008bc620006ee565b5b620008cb878288016200081a565b935050604085015167ffffffffffffffff811115620008ef57620008ee620006ee565b5b620008fd878288016200081a565b925050606085015167ffffffffffffffff811115620009215762000920620006ee565b5b6200092f878288016200081a565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620009846020836200093b565b915062000991826200094c565b602082019050919050565b60006020820190508181036000830152620009b78162000975565b9050919050565b61473280620009ce6000396000f3fe60806040526004361061021a5760003560e01c80635c975abb11610123578063a22cb465116100ab578063d5abeb011161006f578063d5abeb01146107a3578063da3ef23f146107ce578063e985e9c5146107f7578063f2c4ce1e14610834578063f2fde38b1461085d5761021a565b8063a22cb465146106d2578063a475b5dd146106fb578063b88d4fde14610712578063c66828621461073b578063c87b56dd146107665761021a565b80637f00c7a6116100f25780637f00c7a61461060e5780638c32c568146106375780638da5cb5b1461066057806395d89b411461068b578063a0712d68146106b65761021a565b80635c975abb146105525780636352211e1461057d57806370a08231146105ba578063715018a6146105f75761021a565b806323b872dd116101a6578063438b630011610175578063438b63001461045b57806344a0d68a146104985780634f6ccce7146104c157806351830227146104fe57806355f804b3146105295761021a565b806323b872dd146103c25780632f745c59146103eb5780633ccfd60b1461042857806342842e0e146104325761021a565b8063081c8c44116101ed578063081c8c44146102ed578063095ea7b31461031857806313faede61461034157806318160ddd1461036c578063239c70ae146103975761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612e55565b610886565b6040516102539190612e9d565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190612ee4565b610900565b005b34801561029157600080fd5b5061029a610999565b6040516102a79190612faa565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613002565b610a2b565b6040516102e49190613070565b60405180910390f35b3480156102f957600080fd5b50610302610ab0565b60405161030f9190612faa565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906130b7565b610b3e565b005b34801561034d57600080fd5b50610356610c55565b6040516103639190613106565b60405180910390f35b34801561037857600080fd5b50610381610c5b565b60405161038e9190613106565b60405180910390f35b3480156103a357600080fd5b506103ac610c68565b6040516103b99190613106565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613121565b610c6e565b005b3480156103f757600080fd5b50610412600480360381019061040d91906130b7565b610cce565b60405161041f9190613106565b60405180910390f35b610430610d73565b005b34801561043e57600080fd5b5061045960048036038101906104549190613121565b610e6f565b005b34801561046757600080fd5b50610482600480360381019061047d9190613174565b610e8f565b60405161048f919061325f565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613002565b610f3d565b005b3480156104cd57600080fd5b506104e860048036038101906104e39190613002565b610fc3565b6040516104f59190613106565b60405180910390f35b34801561050a57600080fd5b50610513611034565b6040516105209190612e9d565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906133b6565b611047565b005b34801561055e57600080fd5b506105676110d6565b6040516105749190612e9d565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190613002565b6110e9565b6040516105b19190613070565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613174565b61119a565b6040516105ee9190613106565b60405180910390f35b34801561060357600080fd5b5061060c611251565b005b34801561061a57600080fd5b5061063560048036038101906106309190613002565b6112d9565b005b34801561064357600080fd5b5061065e600480360381019061065991906130b7565b61135f565b005b34801561066c57600080fd5b50610675611440565b6040516106829190613070565b60405180910390f35b34801561069757600080fd5b506106a061146a565b6040516106ad9190612faa565b60405180910390f35b6106d060048036038101906106cb9190613002565b6114fc565b005b3480156106de57600080fd5b506106f960048036038101906106f491906133ff565b6115e8565b005b34801561070757600080fd5b506107106115fe565b005b34801561071e57600080fd5b50610739600480360381019061073491906134e0565b611697565b005b34801561074757600080fd5b506107506116f9565b60405161075d9190612faa565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613002565b611787565b60405161079a9190612faa565b60405180910390f35b3480156107af57600080fd5b506107b86118df565b6040516107c59190613106565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f091906133b6565b6118e5565b005b34801561080357600080fd5b5061081e60048036038101906108199190613563565b611974565b60405161082b9190612e9d565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906133b6565b611a08565b005b34801561086957600080fd5b50610884600480360381019061087f9190613174565b611a97565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f957506108f882611b8e565b5b9050919050565b610908611c70565b73ffffffffffffffffffffffffffffffffffffffff16610926611440565b73ffffffffffffffffffffffffffffffffffffffff161461097c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610973906135ef565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109a89061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d49061363e565b8015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b5050505050905090565b6000610a3682611c78565b610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c906136e1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610abd9061363e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae99061363e565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b505050505081565b6000610b49826110e9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb090613773565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd8611c70565b73ffffffffffffffffffffffffffffffffffffffff161480610c075750610c0681610c01611c70565b611974565b5b610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613805565b60405180910390fd5b610c508383611ce4565b505050565b600d5481565b6000600880549050905090565b600f5481565b610c7f610c79611c70565b82611d9d565b610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590613897565b60405180910390fd5b610cc9838383611e7b565b505050565b6000610cd98361119a565b8210610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1190613929565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d7b611c70565b73ffffffffffffffffffffffffffffffffffffffff16610d99611440565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de6906135ef565b60405180910390fd5b6000610df9611440565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1c9061397a565b60006040518083038185875af1925050503d8060008114610e59576040519150601f19603f3d011682016040523d82523d6000602084013e610e5e565b606091505b5050905080610e6c57600080fd5b50565b610e8a83838360405180602001604052806000815250611697565b505050565b60606000610e9c8361119a565b905060008167ffffffffffffffff811115610eba57610eb961328b565b5b604051908082528060200260200182016040528015610ee85781602001602082028036833780820191505090505b50905060005b82811015610f3257610f008582610cce565b828281518110610f1357610f1261398f565b5b6020026020010181815250508080610f2a906139ed565b915050610eee565b508092505050919050565b610f45611c70565b73ffffffffffffffffffffffffffffffffffffffff16610f63611440565b73ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906135ef565b60405180910390fd5b80600d8190555050565b6000610fcd610c5b565b821061100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590613aa7565b60405180910390fd5b600882815481106110225761102161398f565b5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b61104f611c70565b73ffffffffffffffffffffffffffffffffffffffff1661106d611440565b73ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba906135ef565b60405180910390fd5b80600b90816110d29190613c73565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613db7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613e49565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611259611c70565b73ffffffffffffffffffffffffffffffffffffffff16611277611440565b73ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906135ef565b60405180910390fd5b6112d760006120e1565b565b6112e1611c70565b73ffffffffffffffffffffffffffffffffffffffff166112ff611440565b73ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c906135ef565b60405180910390fd5b80600f8190555050565b611367611c70565b73ffffffffffffffffffffffffffffffffffffffff16611385611440565b73ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906135ef565b60405180910390fd5b600e54816113e7610c5b565b6113f19190613e69565b1115611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613f0b565b60405180910390fd5b61143c82826121a7565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546114799061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546114a59061363e565b80156114f25780601f106114c7576101008083540402835291602001916114f2565b820191906000526020600020905b8154815290600101906020018083116114d557829003601f168201915b5050505050905090565b6000611506610c5b565b9050601060009054906101000a900460ff161561152257600080fd5b6000821161152f57600080fd5b600f5482111561153e57600080fd5b600e54828261154d9190613e69565b111561155857600080fd5b611560611440565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115ad5781600d546115a09190613f2b565b3410156115ac57600080fd5b5b6000600190505b8281116115e3576115d03382846115cb9190613e69565b6121a7565b80806115db906139ed565b9150506115b4565b505050565b6115fa6115f3611c70565b83836121c5565b5050565b611606611c70565b73ffffffffffffffffffffffffffffffffffffffff16611624611440565b73ffffffffffffffffffffffffffffffffffffffff161461167a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611671906135ef565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b6116a86116a2611c70565b83611d9d565b6116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de90613897565b60405180910390fd5b6116f384848484612331565b50505050565b600c80546117069061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546117329061363e565b801561177f5780601f106117545761010080835404028352916020019161177f565b820191906000526020600020905b81548152906001019060200180831161176257829003601f168201915b505050505081565b606061179282611c78565b6117d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c890613ff7565b60405180910390fd5b60001515601060019054906101000a900460ff1615150361187e57601180546117f99061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546118259061363e565b80156118725780601f1061184757610100808354040283529160200191611872565b820191906000526020600020905b81548152906001019060200180831161185557829003601f168201915b505050505090506118da565b600061188861238d565b905060008151116118a857604051806020016040528060008152506118d6565b806118b28461241f565b600c6040516020016118c6939291906140d6565b6040516020818303038152906040525b9150505b919050565b600e5481565b6118ed611c70565b73ffffffffffffffffffffffffffffffffffffffff1661190b611440565b73ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611958906135ef565b60405180910390fd5b80600c90816119709190613c73565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a10611c70565b73ffffffffffffffffffffffffffffffffffffffff16611a2e611440565b73ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b906135ef565b60405180910390fd5b8060119081611a939190613c73565b5050565b611a9f611c70565b73ffffffffffffffffffffffffffffffffffffffff16611abd611440565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a906135ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614179565b60405180910390fd5b611b8b816120e1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c695750611c688261257f565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d57836110e9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611da882611c78565b611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061420b565b60405180910390fd5b6000611df2836110e9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e6157508373ffffffffffffffffffffffffffffffffffffffff16611e4984610a2b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e725750611e718185611974565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e9b826110e9565b73ffffffffffffffffffffffffffffffffffffffff1614611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee89061429d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f579061432f565b60405180910390fd5b611f6b8383836125e9565b611f76600082611ce4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fc6919061434f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461201d9190613e69565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120dc8383836126fb565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121c1828260405180602001604052806000815250612700565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a906143cf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123249190612e9d565b60405180910390a3505050565b61233c848484611e7b565b6123488484848461275b565b612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90614461565b60405180910390fd5b50505050565b6060600b805461239c9061363e565b80601f01602080910402602001604051908101604052809291908181526020018280546123c89061363e565b80156124155780601f106123ea57610100808354040283529160200191612415565b820191906000526020600020905b8154815290600101906020018083116123f857829003601f168201915b5050505050905090565b606060008203612466576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061257a565b600082905060005b60008214612498578080612481906139ed565b915050600a8261249191906144b0565b915061246e565b60008167ffffffffffffffff8111156124b4576124b361328b565b5b6040519080825280601f01601f1916602001820160405280156124e65781602001600182028036833780820191505090505b5090505b60008514612573576001826124ff919061434f565b9150600a8561250e91906144e1565b603061251a9190613e69565b60f81b8183815181106125305761252f61398f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561256c91906144b0565b94506124ea565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125f48383836128e2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361263657612631816128e7565b612675565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612674576126738382612930565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b7576126b281612a9d565b6126f6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126f5576126f48282612b6e565b5b5b505050565b505050565b61270a8383612bed565b612717600084848461275b565b612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d90614461565b60405180910390fd5b505050565b600061277c8473ffffffffffffffffffffffffffffffffffffffff16612dc6565b156128d5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a5611c70565b8786866040518563ffffffff1660e01b81526004016127c79493929190614567565b6020604051808303816000875af192505050801561280357506040513d601f19601f8201168201806040525081019061280091906145c8565b60015b612885573d8060008114612833576040519150601f19603f3d011682016040523d82523d6000602084013e612838565b606091505b50600081510361287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490614461565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128da565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161293d8461119a565b612947919061434f565b9050600060076000848152602001908152602001600020549050818114612a2c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ab1919061434f565b9050600060096000848152602001908152602001600020549050600060088381548110612ae157612ae061398f565b5b906000526020600020015490508060088381548110612b0357612b0261398f565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b5257612b516145f5565b5b6001900381819060005260206000200160009055905550505050565b6000612b798361119a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5390614670565b60405180910390fd5b612c6581611c78565b15612ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9c906146dc565b60405180910390fd5b612cb1600083836125e9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d019190613e69565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612dc2600083836126fb565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e3281612dfd565b8114612e3d57600080fd5b50565b600081359050612e4f81612e29565b92915050565b600060208284031215612e6b57612e6a612df3565b5b6000612e7984828501612e40565b91505092915050565b60008115159050919050565b612e9781612e82565b82525050565b6000602082019050612eb26000830184612e8e565b92915050565b612ec181612e82565b8114612ecc57600080fd5b50565b600081359050612ede81612eb8565b92915050565b600060208284031215612efa57612ef9612df3565b5b6000612f0884828501612ecf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f4b578082015181840152602081019050612f30565b83811115612f5a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f7c82612f11565b612f868185612f1c565b9350612f96818560208601612f2d565b612f9f81612f60565b840191505092915050565b60006020820190508181036000830152612fc48184612f71565b905092915050565b6000819050919050565b612fdf81612fcc565b8114612fea57600080fd5b50565b600081359050612ffc81612fd6565b92915050565b60006020828403121561301857613017612df3565b5b600061302684828501612fed565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061305a8261302f565b9050919050565b61306a8161304f565b82525050565b60006020820190506130856000830184613061565b92915050565b6130948161304f565b811461309f57600080fd5b50565b6000813590506130b18161308b565b92915050565b600080604083850312156130ce576130cd612df3565b5b60006130dc858286016130a2565b92505060206130ed85828601612fed565b9150509250929050565b61310081612fcc565b82525050565b600060208201905061311b60008301846130f7565b92915050565b60008060006060848603121561313a57613139612df3565b5b6000613148868287016130a2565b9350506020613159868287016130a2565b925050604061316a86828701612fed565b9150509250925092565b60006020828403121561318a57613189612df3565b5b6000613198848285016130a2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131d681612fcc565b82525050565b60006131e883836131cd565b60208301905092915050565b6000602082019050919050565b600061320c826131a1565b61321681856131ac565b9350613221836131bd565b8060005b8381101561325257815161323988826131dc565b9750613244836131f4565b925050600181019050613225565b5085935050505092915050565b600060208201905081810360008301526132798184613201565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132c382612f60565b810181811067ffffffffffffffff821117156132e2576132e161328b565b5b80604052505050565b60006132f5612de9565b905061330182826132ba565b919050565b600067ffffffffffffffff8211156133215761332061328b565b5b61332a82612f60565b9050602081019050919050565b82818337600083830152505050565b600061335961335484613306565b6132eb565b90508281526020810184848401111561337557613374613286565b5b613380848285613337565b509392505050565b600082601f83011261339d5761339c613281565b5b81356133ad848260208601613346565b91505092915050565b6000602082840312156133cc576133cb612df3565b5b600082013567ffffffffffffffff8111156133ea576133e9612df8565b5b6133f684828501613388565b91505092915050565b6000806040838503121561341657613415612df3565b5b6000613424858286016130a2565b925050602061343585828601612ecf565b9150509250929050565b600067ffffffffffffffff82111561345a5761345961328b565b5b61346382612f60565b9050602081019050919050565b600061348361347e8461343f565b6132eb565b90508281526020810184848401111561349f5761349e613286565b5b6134aa848285613337565b509392505050565b600082601f8301126134c7576134c6613281565b5b81356134d7848260208601613470565b91505092915050565b600080600080608085870312156134fa576134f9612df3565b5b6000613508878288016130a2565b9450506020613519878288016130a2565b935050604061352a87828801612fed565b925050606085013567ffffffffffffffff81111561354b5761354a612df8565b5b613557878288016134b2565b91505092959194509250565b6000806040838503121561357a57613579612df3565b5b6000613588858286016130a2565b9250506020613599858286016130a2565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135d9602083612f1c565b91506135e4826135a3565b602082019050919050565b60006020820190508181036000830152613608816135cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061365657607f821691505b6020821081036136695761366861360f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006136cb602c83612f1c565b91506136d68261366f565b604082019050919050565b600060208201905081810360008301526136fa816136be565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061375d602183612f1c565b915061376882613701565b604082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006137ef603883612f1c565b91506137fa82613793565b604082019050919050565b6000602082019050818103600083015261381e816137e2565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613881603183612f1c565b915061388c82613825565b604082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613913602b83612f1c565b915061391e826138b7565b604082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b600081905092915050565b50565b6000613964600083613949565b915061396f82613954565b600082019050919050565b600061398582613957565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139f882612fcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a2a57613a296139be565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613a91602c83612f1c565b9150613a9c82613a35565b604082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613aec565b613b338683613aec565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b70613b6b613b6684612fcc565b613b4b565b612fcc565b9050919050565b6000819050919050565b613b8a83613b55565b613b9e613b9682613b77565b848454613af9565b825550505050565b600090565b613bb3613ba6565b613bbe818484613b81565b505050565b5b81811015613be257613bd7600082613bab565b600181019050613bc4565b5050565b601f821115613c2757613bf881613ac7565b613c0184613adc565b81016020851015613c10578190505b613c24613c1c85613adc565b830182613bc3565b50505b505050565b600082821c905092915050565b6000613c4a60001984600802613c2c565b1980831691505092915050565b6000613c638383613c39565b9150826002028217905092915050565b613c7c82612f11565b67ffffffffffffffff811115613c9557613c9461328b565b5b613c9f825461363e565b613caa828285613be6565b600060209050601f831160018114613cdd5760008415613ccb578287015190505b613cd58582613c57565b865550613d3d565b601f198416613ceb86613ac7565b60005b82811015613d1357848901518255600182019150602085019450602081019050613cee565b86831015613d305784890151613d2c601f891682613c39565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613da1602983612f1c565b9150613dac82613d45565b604082019050919050565b60006020820190508181036000830152613dd081613d94565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e33602a83612f1c565b9150613e3e82613dd7565b604082019050919050565b60006020820190508181036000830152613e6281613e26565b9050919050565b6000613e7482612fcc565b9150613e7f83612fcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eb457613eb36139be565b5b828201905092915050565b7f4578636565647320737570706c79000000000000000000000000000000000000600082015250565b6000613ef5600e83612f1c565b9150613f0082613ebf565b602082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b6000613f3682612fcc565b9150613f4183612fcc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f7a57613f796139be565b5b828202905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613fe1602f83612f1c565b9150613fec82613f85565b604082019050919050565b6000602082019050818103600083015261401081613fd4565b9050919050565b600081905092915050565b600061402d82612f11565b6140378185614017565b9350614047818560208601612f2d565b80840191505092915050565b600081546140608161363e565b61406a8186614017565b94506001821660008114614085576001811461409a576140cd565b60ff19831686528115158202860193506140cd565b6140a385613ac7565b60005b838110156140c5578154818901526001820191506020810190506140a6565b838801955050505b50505092915050565b60006140e28286614022565b91506140ee8285614022565b91506140fa8284614053565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614163602683612f1c565b915061416e82614107565b604082019050919050565b6000602082019050818103600083015261419281614156565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006141f5602c83612f1c565b915061420082614199565b604082019050919050565b60006020820190508181036000830152614224816141e8565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614287602583612f1c565b91506142928261422b565b604082019050919050565b600060208201905081810360008301526142b68161427a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614319602483612f1c565b9150614324826142bd565b604082019050919050565b600060208201905081810360008301526143488161430c565b9050919050565b600061435a82612fcc565b915061436583612fcc565b925082821015614378576143776139be565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006143b9601983612f1c565b91506143c482614383565b602082019050919050565b600060208201905081810360008301526143e8816143ac565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061444b603283612f1c565b9150614456826143ef565b604082019050919050565b6000602082019050818103600083015261447a8161443e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144bb82612fcc565b91506144c683612fcc565b9250826144d6576144d5614481565b5b828204905092915050565b60006144ec82612fcc565b91506144f783612fcc565b92508261450757614506614481565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061453982614512565b614543818561451d565b9350614553818560208601612f2d565b61455c81612f60565b840191505092915050565b600060808201905061457c6000830187613061565b6145896020830186613061565b61459660408301856130f7565b81810360608301526145a8818461452e565b905095945050505050565b6000815190506145c281612e29565b92915050565b6000602082840312156145de576145dd612df3565b5b60006145ec848285016145b3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061465a602083612f1c565b915061466582614624565b602082019050919050565b600060208201905081810360008301526146898161464d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006146c6601c83612f1c565b91506146d182614690565b602082019050919050565b600060208201905081810360008301526146f5816146b9565b905091905056fea2646970667358221220a924c24e3388017bde3cbc33f457dd3554b98cadcad572799295f29b0379884e64736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000005496e74657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044954574d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006617364736461000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086173646461647361000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000005496e74657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044954574d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006617364736461000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086173646461647361000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Inter
Arg [1] : _symbol (string): ITWM
Arg [2] : _initBaseURI (string): asdsda
Arg [3] : _initNotRevealedUri (string): asddadsa
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 496e746572000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4954574d00000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [9] : 6173647364610000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [11] : 6173646461647361000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
45570:3114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39347:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48260:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26167:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27726:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45881:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27249:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45712:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39987:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45780:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28476:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39655:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48536:145;;;:::i;:::-;;28886:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46746:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47692:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40177:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45848:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48028:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45817:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25861:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25591:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4763:103;;;;;;;;;;;;;:::i;:::-;;47778:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48339:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26336:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46307:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28019:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47619:65;;;;;;;;;;;;;:::i;:::-;;29142:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45670:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47100:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45746:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48132:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28245:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47902:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5021:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39347:224;39449:4;39488:35;39473:50;;;:11;:50;;;;:90;;;;39527:36;39551:11;39527:23;:36::i;:::-;39473:90;39466:97;;39347:224;;;:::o;48260:73::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48321:6:::1;48312;;:15;;;;;;;;;;;;;;;;;;48260:73:::0;:::o;26167:100::-;26221:13;26254:5;26247:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26167:100;:::o;27726:221::-;27802:7;27830:16;27838:7;27830;:16::i;:::-;27822:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27915:15;:24;27931:7;27915:24;;;;;;;;;;;;;;;;;;;;;27908:31;;27726:221;;;:::o;45881:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27249:411::-;27330:13;27346:23;27361:7;27346:14;:23::i;:::-;27330:39;;27394:5;27388:11;;:2;:11;;;27380:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27488:5;27472:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27497:37;27514:5;27521:12;:10;:12::i;:::-;27497:16;:37::i;:::-;27472:62;27450:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27631:21;27640:2;27644:7;27631:8;:21::i;:::-;27319:341;27249:411;;:::o;45712:29::-;;;;:::o;39987:113::-;40048:7;40075:10;:17;;;;40068:24;;39987:113;:::o;45780:32::-;;;;:::o;28476:339::-;28671:41;28690:12;:10;:12::i;:::-;28704:7;28671:18;:41::i;:::-;28663:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28779:28;28789:4;28795:2;28799:7;28779:9;:28::i;:::-;28476:339;;;:::o;39655:256::-;39752:7;39788:23;39805:5;39788:16;:23::i;:::-;39780:5;:31;39772:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39877:12;:19;39890:5;39877:19;;;;;;;;;;;;;;;:26;39897:5;39877:26;;;;;;;;;;;;39870:33;;39655:256;;;;:::o;48536:145::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48589:7:::1;48610;:5;:7::i;:::-;48602:21;;48631;48602:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48588:69;;;48672:2;48664:11;;;::::0;::::1;;48581:100;48536:145::o:0;28886:185::-;29024:39;29041:4;29047:2;29051:7;29024:39;;;;;;;;;;;;:16;:39::i;:::-;28886:185;;;:::o;46746:348::-;46821:16;46849:23;46875:17;46885:6;46875:9;:17::i;:::-;46849:43;;46899:25;46941:15;46927:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46899:58;;46969:9;46964:103;46984:15;46980:1;:19;46964:103;;;47029:30;47049:6;47057:1;47029:19;:30::i;:::-;47015:8;47024:1;47015:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47001:3;;;;;:::i;:::-;;;;46964:103;;;;47080:8;47073:15;;;;46746:348;;;:::o;47692:80::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47758:8:::1;47751:4;:15;;;;47692:80:::0;:::o;40177:233::-;40252:7;40288:30;:28;:30::i;:::-;40280:5;:38;40272:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40385:10;40396:5;40385:17;;;;;;;;:::i;:::-;;;;;;;;;;40378:24;;40177:233;;;:::o;45848:28::-;;;;;;;;;;;;;:::o;48028:98::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48109:11:::1;48099:7;:21;;;;;;:::i;:::-;;48028:98:::0;:::o;45817:26::-;;;;;;;;;;;;;:::o;25861:239::-;25933:7;25953:13;25969:7;:16;25977:7;25969:16;;;;;;;;;;;;;;;;;;;;;25953:32;;26021:1;26004:19;;:5;:19;;;25996:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26087:5;26080:12;;;25861:239;;;:::o;25591:208::-;25663:7;25708:1;25691:19;;:5;:19;;;25683:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25775:9;:16;25785:5;25775:16;;;;;;;;;;;;;;;;25768:23;;25591:208;;;:::o;4763:103::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;47778:116::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47871:17:::1;47855:13;:33;;;;47778:116:::0;:::o;48339:190::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48457:9:::1;;48442:11;48428:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;48420:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48496:29;48506:5;48513:11;48496:9;:29::i;:::-;48339:190:::0;;:::o;4112:87::-;4158:7;4185:6;;;;;;;;;;;4178:13;;4112:87;:::o;26336:104::-;26392:13;26425:7;26418:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26336:104;:::o;46307:433::-;46364:14;46381:13;:11;:13::i;:::-;46364:30;;46410:6;;;;;;;;;;;46409:7;46401:16;;;;;;46446:1;46432:11;:15;46424:24;;;;;;46478:13;;46463:11;:28;;46455:37;;;;;;46531:9;;46516:11;46507:6;:20;;;;:::i;:::-;:33;;46499:42;;;;;;46568:7;:5;:7::i;:::-;46554:21;;:10;:21;;;46550:84;;46614:11;46607:4;;:18;;;;:::i;:::-;46594:9;:31;;46586:40;;;;;;46550:84;46647:9;46659:1;46647:13;;46642:93;46667:11;46662:1;:16;46642:93;;46694:33;46704:10;46725:1;46716:6;:10;;;;:::i;:::-;46694:9;:33::i;:::-;46680:3;;;;;:::i;:::-;;;;46642:93;;;;46357:383;46307:433;:::o;28019:155::-;28114:52;28133:12;:10;:12::i;:::-;28147:8;28157;28114:18;:52::i;:::-;28019:155;;:::o;47619:65::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47674:4:::1;47663:8;;:15;;;;;;;;;;;;;;;;;;47619:65::o:0;29142:328::-;29317:41;29336:12;:10;:12::i;:::-;29350:7;29317:18;:41::i;:::-;29309:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29423:39;29437:4;29443:2;29447:7;29456:5;29423:13;:39::i;:::-;29142:328;;;;:::o;45670:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47100:497::-;47198:13;47239:16;47247:7;47239;:16::i;:::-;47223:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47348:5;47336:17;;:8;;;;;;;;;;;:17;;;47333:62;;47373:14;47366:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47333:62;47403:28;47434:10;:8;:10::i;:::-;47403:41;;47489:1;47464:14;47458:28;:32;:133;;;;;;;;;;;;;;;;;47526:14;47542:18;:7;:16;:18::i;:::-;47562:13;47509:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47458:133;47451:140;;;47100:497;;;;:::o;45746:29::-;;;;:::o;48132:122::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48231:17:::1;48215:13;:33;;;;;;:::i;:::-;;48132:122:::0;:::o;28245:164::-;28342:4;28366:18;:25;28385:5;28366:25;;;;;;;;;;;;;;;:35;28392:8;28366:35;;;;;;;;;;;;;;;;;;;;;;;;;28359:42;;28245:164;;;;:::o;47902:120::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48001:15:::1;47984:14;:32;;;;;;:::i;:::-;;47902:120:::0;:::o;5021:201::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5130:1:::1;5110:22;;:8;:22;;::::0;5102:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:28;5205:8;5186:18;:28::i;:::-;5021:201:::0;:::o;25222:305::-;25324:4;25376:25;25361:40;;;:11;:40;;;;:105;;;;25433:33;25418:48;;;:11;:48;;;;25361:105;:158;;;;25483:36;25507:11;25483:23;:36::i;:::-;25361:158;25341:178;;25222:305;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;30980:127::-;31045:4;31097:1;31069:30;;:7;:16;31077:7;31069:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31062:37;;30980:127;;;:::o;35126:174::-;35228:2;35201:15;:24;35217:7;35201:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35284:7;35280:2;35246:46;;35255:23;35270:7;35255:14;:23::i;:::-;35246:46;;;;;;;;;;;;35126:174;;:::o;31274:348::-;31367:4;31392:16;31400:7;31392;:16::i;:::-;31384:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31468:13;31484:23;31499:7;31484:14;:23::i;:::-;31468:39;;31537:5;31526:16;;:7;:16;;;:51;;;;31570:7;31546:31;;:20;31558:7;31546:11;:20::i;:::-;:31;;;31526:51;:87;;;;31581:32;31598:5;31605:7;31581:16;:32::i;:::-;31526:87;31518:96;;;31274:348;;;;:::o;34383:625::-;34542:4;34515:31;;:23;34530:7;34515:14;:23::i;:::-;:31;;;34507:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34621:1;34607:16;;:2;:16;;;34599:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34677:39;34698:4;34704:2;34708:7;34677:20;:39::i;:::-;34781:29;34798:1;34802:7;34781:8;:29::i;:::-;34842:1;34823:9;:15;34833:4;34823:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34871:1;34854:9;:13;34864:2;34854:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34902:2;34883:7;:16;34891:7;34883:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34941:7;34937:2;34922:27;;34931:4;34922:27;;;;;;;;;;;;34962:38;34982:4;34988:2;34992:7;34962:19;:38::i;:::-;34383:625;;;:::o;5382:191::-;5456:16;5475:6;;;;;;;;;;;5456:25;;5501:8;5492:6;;:17;;;;;;;;;;;;;;;;;;5556:8;5525:40;;5546:8;5525:40;;;;;;;;;;;;5445:128;5382:191;:::o;31964:110::-;32040:26;32050:2;32054:7;32040:26;;;;;;;;;;;;:9;:26::i;:::-;31964:110;;:::o;35442:315::-;35597:8;35588:17;;:5;:17;;;35580:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35684:8;35646:18;:25;35665:5;35646:25;;;;;;;;;;;;;;;:35;35672:8;35646:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35730:8;35708:41;;35723:5;35708:41;;;35740:8;35708:41;;;;;;:::i;:::-;;;;;;;;35442:315;;;:::o;30352:::-;30509:28;30519:4;30525:2;30529:7;30509:9;:28::i;:::-;30556:48;30579:4;30585:2;30589:7;30598:5;30556:22;:48::i;:::-;30548:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30352:315;;;;:::o;46186:102::-;46246:13;46275:7;46268:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46186:102;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;16896:157::-;16981:4;17020:25;17005:40;;;:11;:40;;;;16998:47;;16896:157;;;:::o;41023:589::-;41167:45;41194:4;41200:2;41204:7;41167:26;:45::i;:::-;41245:1;41229:18;;:4;:18;;;41225:187;;41264:40;41296:7;41264:31;:40::i;:::-;41225:187;;;41334:2;41326:10;;:4;:10;;;41322:90;;41353:47;41386:4;41392:7;41353:32;:47::i;:::-;41322:90;41225:187;41440:1;41426:16;;:2;:16;;;41422:183;;41459:45;41496:7;41459:36;:45::i;:::-;41422:183;;;41532:4;41526:10;;:2;:10;;;41522:83;;41553:40;41581:2;41585:7;41553:27;:40::i;:::-;41522:83;41422:183;41023:589;;;:::o;38204:125::-;;;;:::o;32301:321::-;32431:18;32437:2;32441:7;32431:5;:18::i;:::-;32482:54;32513:1;32517:2;32521:7;32530:5;32482:22;:54::i;:::-;32460:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32301:321;;;:::o;36322:799::-;36477:4;36498:15;:2;:13;;;:15::i;:::-;36494:620;;;36550:2;36534:36;;;36571:12;:10;:12::i;:::-;36585:4;36591:7;36600:5;36534:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36530:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36793:1;36776:6;:13;:18;36772:272;;36819:60;;;;;;;;;;:::i;:::-;;;;;;;;36772:272;36994:6;36988:13;36979:6;36975:2;36971:15;36964:38;36530:529;36667:41;;;36657:51;;;:6;:51;;;;36650:58;;;;;36494:620;37098:4;37091:11;;36322:799;;;;;;;:::o;37693:126::-;;;;:::o;42335:164::-;42439:10;:17;;;;42412:15;:24;42428:7;42412:24;;;;;;;;;;;:44;;;;42467:10;42483:7;42467:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42335:164;:::o;43126:988::-;43392:22;43442:1;43417:22;43434:4;43417:16;:22::i;:::-;:26;;;;:::i;:::-;43392:51;;43454:18;43475:17;:26;43493:7;43475:26;;;;;;;;;;;;43454:47;;43622:14;43608:10;:28;43604:328;;43653:19;43675:12;:18;43688:4;43675:18;;;;;;;;;;;;;;;:34;43694:14;43675:34;;;;;;;;;;;;43653:56;;43759:11;43726:12;:18;43739:4;43726:18;;;;;;;;;;;;;;;:30;43745:10;43726:30;;;;;;;;;;;:44;;;;43876:10;43843:17;:30;43861:11;43843:30;;;;;;;;;;;:43;;;;43638:294;43604:328;44028:17;:26;44046:7;44028:26;;;;;;;;;;;44021:33;;;44072:12;:18;44085:4;44072:18;;;;;;;;;;;;;;;:34;44091:14;44072:34;;;;;;;;;;;44065:41;;;43207:907;;43126:988;;:::o;44409:1079::-;44662:22;44707:1;44687:10;:17;;;;:21;;;;:::i;:::-;44662:46;;44719:18;44740:15;:24;44756:7;44740:24;;;;;;;;;;;;44719:45;;45091:19;45113:10;45124:14;45113:26;;;;;;;;:::i;:::-;;;;;;;;;;45091:48;;45177:11;45152:10;45163;45152:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45288:10;45257:15;:28;45273:11;45257:28;;;;;;;;;;;:41;;;;45429:15;:24;45445:7;45429:24;;;;;;;;;;;45422:31;;;45464:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44480:1008;;;44409:1079;:::o;41913:221::-;41998:14;42015:20;42032:2;42015:16;:20::i;:::-;41998:37;;42073:7;42046:12;:16;42059:2;42046:16;;;;;;;;;;;;;;;:24;42063:6;42046:24;;;;;;;;;;;:34;;;;42120:6;42091:17;:26;42109:7;42091:26;;;;;;;;;;;:35;;;;41987:147;41913:221;;:::o;32958:439::-;33052:1;33038:16;;:2;:16;;;33030:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33111:16;33119:7;33111;:16::i;:::-;33110:17;33102:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33173:45;33202:1;33206:2;33210:7;33173:20;:45::i;:::-;33248:1;33231:9;:13;33241:2;33231:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33279:2;33260:7;:16;33268:7;33260:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33324:7;33320:2;33299:33;;33316:1;33299:33;;;;;;;;;;;;33345:44;33373:1;33377:2;33381:7;33345:19;:44::i;:::-;32958:439;;:::o;6813:326::-;6873:4;7130:1;7108:7;:19;;;:23;7101:30;;6813:326;;;:::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:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:236::-;19203:34;19199:1;19191:6;19187:14;19180:58;19272:19;19267:2;19259:6;19255:15;19248:44;19063:236;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:230::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:13;20306:2;20298:6;20294:15;20287:38;20102:230;:::o;20338:366::-;20480:3;20501:67;20565:2;20560:3;20501:67;:::i;:::-;20494:74;;20577:93;20666:3;20577:93;:::i;:::-;20695:2;20690:3;20686:12;20679:19;;20338:366;;;:::o;20710:419::-;20876:4;20914:2;20903:9;20899:18;20891:26;;20963:9;20957:4;20953:20;20949:1;20938:9;20934:17;20927:47;20991:131;21117:4;20991:131;:::i;:::-;20983:139;;20710:419;;;:::o;21135:147::-;21236:11;21273:3;21258:18;;21135:147;;;;:::o;21288:114::-;;:::o;21408:398::-;21567:3;21588:83;21669:1;21664:3;21588:83;:::i;:::-;21581:90;;21680:93;21769:3;21680:93;:::i;:::-;21798:1;21793:3;21789:11;21782:18;;21408:398;;;:::o;21812:379::-;21996:3;22018:147;22161:3;22018:147;:::i;:::-;22011:154;;22182:3;22175:10;;21812:379;;;:::o;22197:180::-;22245:77;22242:1;22235:88;22342:4;22339:1;22332:15;22366:4;22363:1;22356:15;22383:180;22431:77;22428:1;22421:88;22528:4;22525:1;22518:15;22552:4;22549:1;22542:15;22569:233;22608:3;22631:24;22649:5;22631:24;:::i;:::-;22622:33;;22677:66;22670:5;22667:77;22664:103;;22747:18;;:::i;:::-;22664:103;22794:1;22787:5;22783:13;22776:20;;22569:233;;;:::o;22808:231::-;22948:34;22944:1;22936:6;22932:14;22925:58;23017:14;23012:2;23004:6;23000:15;22993:39;22808:231;:::o;23045:366::-;23187:3;23208:67;23272:2;23267:3;23208:67;:::i;:::-;23201:74;;23284:93;23373:3;23284:93;:::i;:::-;23402:2;23397:3;23393:12;23386:19;;23045:366;;;:::o;23417:419::-;23583:4;23621:2;23610:9;23606:18;23598:26;;23670:9;23664:4;23660:20;23656:1;23645:9;23641:17;23634:47;23698:131;23824:4;23698:131;:::i;:::-;23690:139;;23417:419;;;:::o;23842:141::-;23891:4;23914:3;23906:11;;23937:3;23934:1;23927:14;23971:4;23968:1;23958:18;23950:26;;23842:141;;;:::o;23989:93::-;24026:6;24073:2;24068;24061:5;24057:14;24053:23;24043:33;;23989:93;;;:::o;24088:107::-;24132:8;24182:5;24176:4;24172:16;24151:37;;24088:107;;;;:::o;24201:393::-;24270:6;24320:1;24308:10;24304:18;24343:97;24373:66;24362:9;24343:97;:::i;:::-;24461:39;24491:8;24480:9;24461:39;:::i;:::-;24449:51;;24533:4;24529:9;24522:5;24518:21;24509:30;;24582:4;24572:8;24568:19;24561:5;24558:30;24548:40;;24277:317;;24201:393;;;;;:::o;24600:60::-;24628:3;24649:5;24642:12;;24600:60;;;:::o;24666:142::-;24716:9;24749:53;24767:34;24776:24;24794:5;24776:24;:::i;:::-;24767:34;:::i;:::-;24749:53;:::i;:::-;24736:66;;24666:142;;;:::o;24814:75::-;24857:3;24878:5;24871:12;;24814:75;;;:::o;24895:269::-;25005:39;25036:7;25005:39;:::i;:::-;25066:91;25115:41;25139:16;25115:41;:::i;:::-;25107:6;25100:4;25094:11;25066:91;:::i;:::-;25060:4;25053:105;24971:193;24895:269;;;:::o;25170:73::-;25215:3;25170:73;:::o;25249:189::-;25326:32;;:::i;:::-;25367:65;25425:6;25417;25411:4;25367:65;:::i;:::-;25302:136;25249:189;;:::o;25444:186::-;25504:120;25521:3;25514:5;25511:14;25504:120;;;25575:39;25612:1;25605:5;25575:39;:::i;:::-;25548:1;25541:5;25537:13;25528:22;;25504:120;;;25444:186;;:::o;25636:543::-;25737:2;25732:3;25729:11;25726:446;;;25771:38;25803:5;25771:38;:::i;:::-;25855:29;25873:10;25855:29;:::i;:::-;25845:8;25841:44;26038:2;26026:10;26023:18;26020:49;;;26059:8;26044:23;;26020:49;26082:80;26138:22;26156:3;26138:22;:::i;:::-;26128:8;26124:37;26111:11;26082:80;:::i;:::-;25741:431;;25726:446;25636:543;;;:::o;26185:117::-;26239:8;26289:5;26283:4;26279:16;26258:37;;26185:117;;;;:::o;26308:169::-;26352:6;26385:51;26433:1;26429:6;26421:5;26418:1;26414:13;26385:51;:::i;:::-;26381:56;26466:4;26460;26456:15;26446:25;;26359:118;26308:169;;;;:::o;26482:295::-;26558:4;26704:29;26729:3;26723:4;26704:29;:::i;:::-;26696:37;;26766:3;26763:1;26759:11;26753:4;26750:21;26742:29;;26482:295;;;;:::o;26782:1395::-;26899:37;26932:3;26899:37;:::i;:::-;27001:18;26993:6;26990:30;26987:56;;;27023:18;;:::i;:::-;26987:56;27067:38;27099:4;27093:11;27067:38;:::i;:::-;27152:67;27212:6;27204;27198:4;27152:67;:::i;:::-;27246:1;27270:4;27257:17;;27302:2;27294:6;27291:14;27319:1;27314:618;;;;27976:1;27993:6;27990:77;;;28042:9;28037:3;28033:19;28027:26;28018:35;;27990:77;28093:67;28153:6;28146:5;28093:67;:::i;:::-;28087:4;28080:81;27949:222;27284:887;;27314:618;27366:4;27362:9;27354:6;27350:22;27400:37;27432:4;27400:37;:::i;:::-;27459:1;27473:208;27487:7;27484:1;27481:14;27473:208;;;27566:9;27561:3;27557:19;27551:26;27543:6;27536:42;27617:1;27609:6;27605:14;27595:24;;27664:2;27653:9;27649:18;27636:31;;27510:4;27507:1;27503:12;27498:17;;27473:208;;;27709:6;27700:7;27697:19;27694:179;;;27767:9;27762:3;27758:19;27752:26;27810:48;27852:4;27844:6;27840:17;27829:9;27810:48;:::i;:::-;27802:6;27795:64;27717:156;27694:179;27919:1;27915;27907:6;27903:14;27899:22;27893:4;27886:36;27321:611;;;27284:887;;26874:1303;;;26782:1395;;:::o;28183:228::-;28323:34;28319:1;28311:6;28307:14;28300:58;28392:11;28387:2;28379:6;28375:15;28368:36;28183:228;:::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:229::-;29354:34;29350:1;29342:6;29338:14;29331:58;29423:12;29418:2;29410:6;29406:15;29399:37;29214:229;:::o;29449:366::-;29591:3;29612:67;29676:2;29671:3;29612:67;:::i;:::-;29605:74;;29688:93;29777:3;29688:93;:::i;:::-;29806:2;29801:3;29797:12;29790:19;;29449:366;;;:::o;29821:419::-;29987:4;30025:2;30014:9;30010:18;30002:26;;30074:9;30068:4;30064:20;30060:1;30049:9;30045:17;30038:47;30102:131;30228:4;30102:131;:::i;:::-;30094:139;;29821:419;;;:::o;30246:305::-;30286:3;30305:20;30323:1;30305:20;:::i;:::-;30300:25;;30339:20;30357:1;30339:20;:::i;:::-;30334:25;;30493:1;30425:66;30421:74;30418:1;30415:81;30412:107;;;30499:18;;:::i;:::-;30412:107;30543:1;30540;30536:9;30529:16;;30246:305;;;;:::o;30557:164::-;30697:16;30693:1;30685:6;30681:14;30674:40;30557:164;:::o;30727:366::-;30869:3;30890:67;30954:2;30949:3;30890:67;:::i;:::-;30883:74;;30966:93;31055:3;30966:93;:::i;:::-;31084:2;31079:3;31075:12;31068:19;;30727:366;;;:::o;31099:419::-;31265:4;31303:2;31292:9;31288:18;31280:26;;31352:9;31346:4;31342:20;31338:1;31327:9;31323:17;31316:47;31380:131;31506:4;31380:131;:::i;:::-;31372:139;;31099:419;;;:::o;31524:348::-;31564:7;31587:20;31605:1;31587:20;:::i;:::-;31582:25;;31621:20;31639:1;31621:20;:::i;:::-;31616:25;;31809:1;31741:66;31737:74;31734:1;31731:81;31726:1;31719:9;31712:17;31708:105;31705:131;;;31816:18;;:::i;:::-;31705:131;31864:1;31861;31857:9;31846:20;;31524:348;;;;:::o;31878:234::-;32018:34;32014:1;32006:6;32002:14;31995:58;32087:17;32082:2;32074:6;32070:15;32063:42;31878:234;:::o;32118:366::-;32260:3;32281:67;32345:2;32340:3;32281:67;:::i;:::-;32274:74;;32357:93;32446:3;32357:93;:::i;:::-;32475:2;32470:3;32466:12;32459:19;;32118:366;;;:::o;32490:419::-;32656:4;32694:2;32683:9;32679:18;32671:26;;32743:9;32737:4;32733:20;32729:1;32718:9;32714:17;32707:47;32771:131;32897:4;32771:131;:::i;:::-;32763:139;;32490:419;;;:::o;32915:148::-;33017:11;33054:3;33039:18;;32915:148;;;;:::o;33069:377::-;33175:3;33203:39;33236:5;33203:39;:::i;:::-;33258:89;33340:6;33335:3;33258:89;:::i;:::-;33251:96;;33356:52;33401:6;33396:3;33389:4;33382:5;33378:16;33356:52;:::i;:::-;33433:6;33428:3;33424:16;33417:23;;33179:267;33069:377;;;;:::o;33476:874::-;33579:3;33616:5;33610:12;33645:36;33671:9;33645:36;:::i;:::-;33697:89;33779:6;33774:3;33697:89;:::i;:::-;33690:96;;33817:1;33806:9;33802:17;33833:1;33828:166;;;;34008:1;34003:341;;;;33795:549;;33828:166;33912:4;33908:9;33897;33893:25;33888:3;33881:38;33974:6;33967:14;33960:22;33952:6;33948:35;33943:3;33939:45;33932:52;;33828:166;;34003:341;34070:38;34102:5;34070:38;:::i;:::-;34130:1;34144:154;34158:6;34155:1;34152:13;34144:154;;;34232:7;34226:14;34222:1;34217:3;34213:11;34206:35;34282:1;34273:7;34269:15;34258:26;;34180:4;34177:1;34173:12;34168:17;;34144:154;;;34327:6;34322:3;34318:16;34311:23;;34010:334;;33795:549;;33583:767;;33476:874;;;;:::o;34356:589::-;34581:3;34603:95;34694:3;34685:6;34603:95;:::i;:::-;34596:102;;34715:95;34806:3;34797:6;34715:95;:::i;:::-;34708:102;;34827:92;34915:3;34906:6;34827:92;:::i;:::-;34820:99;;34936:3;34929:10;;34356:589;;;;;;:::o;34951:225::-;35091:34;35087:1;35079:6;35075:14;35068:58;35160:8;35155:2;35147:6;35143:15;35136:33;34951:225;:::o;35182:366::-;35324:3;35345:67;35409:2;35404:3;35345:67;:::i;:::-;35338:74;;35421:93;35510:3;35421:93;:::i;:::-;35539:2;35534:3;35530:12;35523:19;;35182:366;;;:::o;35554:419::-;35720:4;35758:2;35747:9;35743:18;35735:26;;35807:9;35801:4;35797:20;35793:1;35782:9;35778:17;35771:47;35835:131;35961:4;35835:131;:::i;:::-;35827:139;;35554:419;;;:::o;35979:231::-;36119:34;36115:1;36107:6;36103:14;36096:58;36188:14;36183:2;36175:6;36171:15;36164:39;35979:231;:::o;36216:366::-;36358:3;36379:67;36443:2;36438:3;36379:67;:::i;:::-;36372:74;;36455:93;36544:3;36455:93;:::i;:::-;36573:2;36568:3;36564:12;36557:19;;36216:366;;;:::o;36588:419::-;36754:4;36792:2;36781:9;36777:18;36769:26;;36841:9;36835:4;36831:20;36827:1;36816:9;36812:17;36805:47;36869:131;36995:4;36869:131;:::i;:::-;36861:139;;36588:419;;;:::o;37013:224::-;37153:34;37149:1;37141:6;37137:14;37130:58;37222:7;37217:2;37209:6;37205:15;37198:32;37013:224;:::o;37243:366::-;37385:3;37406:67;37470:2;37465:3;37406:67;:::i;:::-;37399:74;;37482:93;37571:3;37482:93;:::i;:::-;37600:2;37595:3;37591:12;37584:19;;37243:366;;;:::o;37615:419::-;37781:4;37819:2;37808:9;37804:18;37796:26;;37868:9;37862:4;37858:20;37854:1;37843:9;37839:17;37832:47;37896:131;38022:4;37896:131;:::i;:::-;37888:139;;37615:419;;;:::o;38040:223::-;38180:34;38176:1;38168:6;38164:14;38157:58;38249:6;38244:2;38236:6;38232:15;38225:31;38040:223;:::o;38269:366::-;38411:3;38432:67;38496:2;38491:3;38432:67;:::i;:::-;38425:74;;38508:93;38597:3;38508:93;:::i;:::-;38626:2;38621:3;38617:12;38610:19;;38269:366;;;:::o;38641:419::-;38807:4;38845:2;38834:9;38830:18;38822:26;;38894:9;38888:4;38884:20;38880:1;38869:9;38865:17;38858:47;38922:131;39048:4;38922:131;:::i;:::-;38914:139;;38641:419;;;:::o;39066:191::-;39106:4;39126:20;39144:1;39126:20;:::i;:::-;39121:25;;39160:20;39178:1;39160:20;:::i;:::-;39155:25;;39199:1;39196;39193:8;39190:34;;;39204:18;;:::i;:::-;39190:34;39249:1;39246;39242:9;39234:17;;39066:191;;;;:::o;39263:175::-;39403:27;39399:1;39391:6;39387:14;39380:51;39263:175;:::o;39444:366::-;39586:3;39607:67;39671:2;39666:3;39607:67;:::i;:::-;39600:74;;39683:93;39772:3;39683:93;:::i;:::-;39801:2;39796:3;39792:12;39785:19;;39444:366;;;:::o;39816:419::-;39982:4;40020:2;40009:9;40005:18;39997:26;;40069:9;40063:4;40059:20;40055:1;40044:9;40040:17;40033:47;40097:131;40223:4;40097:131;:::i;:::-;40089:139;;39816:419;;;:::o;40241:237::-;40381:34;40377:1;40369:6;40365:14;40358:58;40450:20;40445:2;40437:6;40433:15;40426:45;40241:237;:::o;40484:366::-;40626:3;40647:67;40711:2;40706:3;40647:67;:::i;:::-;40640:74;;40723:93;40812:3;40723:93;:::i;:::-;40841:2;40836:3;40832:12;40825:19;;40484:366;;;:::o;40856:419::-;41022:4;41060:2;41049:9;41045:18;41037:26;;41109:9;41103:4;41099:20;41095:1;41084:9;41080:17;41073:47;41137:131;41263:4;41137:131;:::i;:::-;41129:139;;40856:419;;;:::o;41281:180::-;41329:77;41326:1;41319:88;41426:4;41423:1;41416:15;41450:4;41447:1;41440:15;41467:185;41507:1;41524:20;41542:1;41524:20;:::i;:::-;41519:25;;41558:20;41576:1;41558:20;:::i;:::-;41553:25;;41597:1;41587:35;;41602:18;;:::i;:::-;41587:35;41644:1;41641;41637:9;41632:14;;41467:185;;;;:::o;41658:176::-;41690:1;41707:20;41725:1;41707:20;:::i;:::-;41702:25;;41741:20;41759:1;41741:20;:::i;:::-;41736:25;;41780:1;41770:35;;41785:18;;:::i;:::-;41770:35;41826:1;41823;41819:9;41814:14;;41658:176;;;;:::o;41840:98::-;41891:6;41925:5;41919:12;41909:22;;41840:98;;;:::o;41944:168::-;42027:11;42061:6;42056:3;42049:19;42101:4;42096:3;42092:14;42077:29;;41944:168;;;;:::o;42118:360::-;42204:3;42232:38;42264:5;42232:38;:::i;:::-;42286:70;42349:6;42344:3;42286:70;:::i;:::-;42279:77;;42365:52;42410:6;42405:3;42398:4;42391:5;42387:16;42365:52;:::i;:::-;42442:29;42464:6;42442:29;:::i;:::-;42437:3;42433:39;42426:46;;42208:270;42118:360;;;;:::o;42484:640::-;42679:4;42717:3;42706:9;42702:19;42694:27;;42731:71;42799:1;42788:9;42784:17;42775:6;42731:71;:::i;:::-;42812:72;42880:2;42869:9;42865:18;42856:6;42812:72;:::i;:::-;42894;42962:2;42951:9;42947:18;42938:6;42894:72;:::i;:::-;43013:9;43007:4;43003:20;42998:2;42987:9;42983:18;42976:48;43041:76;43112:4;43103:6;43041:76;:::i;:::-;43033:84;;42484:640;;;;;;;:::o;43130:141::-;43186:5;43217:6;43211:13;43202:22;;43233:32;43259:5;43233:32;:::i;:::-;43130:141;;;;:::o;43277:349::-;43346:6;43395:2;43383:9;43374:7;43370:23;43366:32;43363:119;;;43401:79;;:::i;:::-;43363:119;43521:1;43546:63;43601:7;43592:6;43581:9;43577:22;43546:63;:::i;:::-;43536:73;;43492:127;43277:349;;;;:::o;43632:180::-;43680:77;43677:1;43670:88;43777:4;43774:1;43767:15;43801:4;43798:1;43791:15;43818:182;43958:34;43954:1;43946:6;43942:14;43935:58;43818:182;:::o;44006:366::-;44148:3;44169:67;44233:2;44228:3;44169:67;:::i;:::-;44162:74;;44245:93;44334:3;44245:93;:::i;:::-;44363:2;44358:3;44354:12;44347:19;;44006:366;;;:::o;44378:419::-;44544:4;44582:2;44571:9;44567:18;44559:26;;44631:9;44625:4;44621:20;44617:1;44606:9;44602:17;44595:47;44659:131;44785:4;44659:131;:::i;:::-;44651:139;;44378:419;;;:::o;44803:178::-;44943:30;44939:1;44931:6;44927:14;44920:54;44803:178;:::o;44987:366::-;45129:3;45150:67;45214:2;45209:3;45150:67;:::i;:::-;45143:74;;45226:93;45315:3;45226:93;:::i;:::-;45344:2;45339:3;45335:12;45328:19;;44987:366;;;:::o;45359:419::-;45525:4;45563:2;45552:9;45548:18;45540:26;;45612:9;45606:4;45602:20;45598:1;45587:9;45583:17;45576:47;45640:131;45766:4;45640:131;:::i;:::-;45632:139;;45359:419;;;:::o
Swarm Source
ipfs://a924c24e3388017bde3cbc33f457dd3554b98cadcad572799295f29b0379884e