ERC-721
Overview
Max Total Supply
123 Metarobotica
Holders
98
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MetaroboticaLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Contract
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-22 */ /** *Submitted for verification at Etherscan.io on 2022-01-06 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.4; // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @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/token/ERC721/[email protected] /** * @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 whiteed 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 whiteed 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/[email protected] /** * @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/token/ERC721/extensions/[email protected] /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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/utils/[email protected] /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] /** * @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/introspection/[email protected] /** * @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/[email protected] /** * @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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //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 whiteed 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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @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 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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @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 tokenId); /** * @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/[email protected] /** * @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 whites 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 @openzeppelin/contracts/utils/math/[email protected] // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/access/[email protected] /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } contract Contract is ERC721("Metarobotica", "Metarobotica"), ERC721Enumerable, Ownable { using SafeMath for uint256; using Strings for uint256; /* * Currently Assuming there will be one baseURI. * If it fails to upload all NFTs data under one baseURI, * we will divide baseURI and tokenURI function will be changed accordingly. */ string private baseURI; string private blindURI; uint256 private constant PHASE_1_LIMIT = 2222; uint256 private constant PHASE_2_3_LIMIT = 3333; uint256 private constant MAX_FREE_LIMIT = 100; uint256 public NFT1Price = 120000000000000000; // 0.12 ETH uint256 public NFT2Price = 160000000000000000; // 0.16 ETH uint256 public NFT3Price = 200000000000000000; // 0.2 ETH bool public revealPhase1; bool public revealPhase2; bool public revealPhase3; bool public isActive; bool public isPublicSaleActive; bytes32 public ogRoot; bytes32 public freeRoot; bytes32 public wlRoot; uint256 public constant OG_MAX_MINT = 4; uint256 public constant FREE_MAX_MINT = 1; uint256 public constant WHITELIST_MAX_MINT = 2; uint256 public constant PUBLIC_MAX_MINT = 4; uint256 private freeClaimed; mapping(uint256 => mapping(address => uint256)) private claimed; mapping(uint256 => uint256) public phaseClaimed; uint256 private phase = 1; /* * Function to reveal NFTs */ function setRevealPhase1( bool _reveal ) external onlyOwner { revealPhase1 = _reveal; } /* * Function to reveal NFTs */ function setRevealPhase2( bool _reveal ) external onlyOwner { revealPhase2 = _reveal; } /* * Function to reveal NFTs */ function setRevealPhase3( bool _reveal ) external onlyOwner { revealPhase3 = _reveal; } /* * Function setIsActive to activate/desactivate the smart contract */ function setIsActive( bool _isActive ) external onlyOwner { isActive = _isActive; } /* * Function setIsPublicSaleActive to activate/desactivate public sale */ function setIsPublicSaleActive( bool _isActive ) external onlyOwner { isPublicSaleActive = _isActive; } function setRoot(uint256 _ogRoot, uint256 _freeRoot, uint256 _wlRoot) external onlyOwner() { ogRoot = bytes32(_ogRoot); freeRoot = bytes32(_freeRoot); wlRoot = bytes32(_wlRoot); } function setPhase(uint256 _phase) external onlyOwner() { require(_phase >= 1 && _phase <= 3, 'Wrong phase'); phase = _phase; } /* * Function to set Base and Blind URI */ function setURIs( string memory _blindURI, string memory _URI ) external onlyOwner { blindURI = _blindURI; baseURI = _URI; } /* * Function to withdraw collected amount during minting by the owner */ function withdraw( ) public onlyOwner { address ownerAddress = 0x74B6EE60C68E5AeB3aba65F99EE6112707866e96; payable(ownerAddress).transfer(address(this).balance); } /* * Function to mint new NFTs during the public sale * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens)) */ function mintNFT( uint256 _numOfTokens ) public payable { require(isActive, 'Contract is not active'); require(isPublicSaleActive, 'Public is not active'); require(phaseClaimed[phase].add(_numOfTokens) <= _getPhaseLimit(), 'Tokens number to mint cannot exceed number of MAX tokens per phase'); require(_numOfTokens <= PUBLIC_MAX_MINT, 'Cannot purchase this many tokens'); require(claimed[phase][msg.sender].add(_numOfTokens) <= PUBLIC_MAX_MINT, 'Purchase exceeds max whiteed'); require(_getPhasePrice().mul(_numOfTokens) == msg.value, "Ether value sent is not correct"); for(uint i = 0; i < _numOfTokens; i++) { claimed[phase][msg.sender] += _numOfTokens; phaseClaimed[phase]+=1; _safeMint(msg.sender, totalSupply()); } } /* * Function to mint new NFTs * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens)) */ function mintNFTOg( uint256 _numOfTokens, bytes32[] memory _proof ) public payable { require(isActive, 'Sale is not active'); require(MerkleProof.verify(_proof, ogRoot, keccak256(abi.encodePacked(msg.sender))), "Not whitelisted"); require(phaseClaimed[phase].add(_numOfTokens) <= _getPhaseLimit(), 'Tokens number to mint cannot exceed number of MAX tokens per phase'); require(_numOfTokens <= OG_MAX_MINT, 'Cannot purchase this many tokens'); require(claimed[phase][msg.sender].add(_numOfTokens) <= OG_MAX_MINT, 'Purchase exceeds max whiteed'); require(_getPhasePrice().mul(_numOfTokens) == msg.value, "Ether value sent is not correct"); for (uint256 i = 0; i < _numOfTokens; i++) { claimed[phase][msg.sender] += _numOfTokens; phaseClaimed[phase]+=1; _safeMint(msg.sender, totalSupply()); } } /* * Function to mint new NFTs * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens)) */ function mintNFTWhitelist( uint256 _numOfTokens, bytes32[] memory _proof ) public payable { require(isActive, 'Sale is not active'); require(MerkleProof.verify(_proof, wlRoot, keccak256(abi.encodePacked(msg.sender))), "Not whitelisted"); require(phaseClaimed[phase].add(_numOfTokens) <= _getPhaseLimit(), 'Tokens number to mint cannot exceed number of MAX tokens per phase'); require(_numOfTokens <= WHITELIST_MAX_MINT, 'Cannot purchase this many tokens'); require(claimed[phase][msg.sender].add(_numOfTokens) <= WHITELIST_MAX_MINT, 'Purchase exceeds max whiteed'); require(_getPhasePrice().mul(_numOfTokens) == msg.value, "Ether value sent is not correct"); for (uint256 i = 0; i < _numOfTokens; i++) { claimed[phase][msg.sender] += _numOfTokens; phaseClaimed[phase]+=1; _safeMint(msg.sender, totalSupply()); } } /* * Function to mint new NFTs * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens)) */ function mintNFTFree( uint256 _numOfTokens, bytes32[] memory _proof ) public payable { require(isActive, 'Sale is not active'); require(MerkleProof.verify(_proof, freeRoot, keccak256(abi.encodePacked(msg.sender))), "Not whitelisted"); require(freeClaimed < MAX_FREE_LIMIT, 'All free tokens have been minted'); require(phaseClaimed[phase].add(_numOfTokens) <= _getPhaseLimit(), 'Tokens number to mint cannot exceed number of MAX tokens per phase'); require(_numOfTokens <= FREE_MAX_MINT, 'Cannot purchase this many tokens'); require(claimed[phase][msg.sender].add(_numOfTokens) <= FREE_MAX_MINT, 'Purchase exceeds max whiteed'); for (uint256 i = 0; i < _numOfTokens; i++) { claimed[phase][msg.sender] += _numOfTokens; phaseClaimed[phase]+=1; freeClaimed+=1; _safeMint(msg.sender, totalSupply()); } } /* * Function to mint any NFTs */ function mintMultipleByOwner( address _to, uint256 _numOfTokens ) public onlyOwner { require(phaseClaimed[phase].add(_numOfTokens) <= _getPhaseLimit(), "Tokens number to mint cannot exceed number of MAX tokens per phase"); for(uint256 i = 0; i < _numOfTokens; i++){ claimed[phase][_to] += 1; phaseClaimed[phase]+=1; _safeMint(_to, totalSupply()); } } /* * Function to get token URI of given token ID */ function tokenURI( uint256 _tokenId ) public view virtual override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); if ( (_tokenId < PHASE_1_LIMIT && revealPhase1) || (_tokenId < (PHASE_1_LIMIT + PHASE_2_3_LIMIT) && revealPhase2) || revealPhase3 ) { return string(abi.encodePacked(baseURI, _tokenId.toString())); } else { return string(abi.encodePacked(blindURI)); } } function supportsInterface( bytes4 _interfaceId ) public view override (ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(_interfaceId); } // Standard functions to be overridden function _beforeTokenTransfer( address _from, address _to, uint256 _tokenId ) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(_from, _to, _tokenId); } function _getPhaseLimit() view private returns (uint256) { if (phase == 1) { return PHASE_1_LIMIT; } else if (phase == 2) { return PHASE_2_3_LIMIT; } else if (phase == 3) { return PHASE_2_3_LIMIT; } else { return 0; } } function _getPhasePrice() view private returns (uint256) { if (phase == 1) { return NFT1Price; } else if (phase == 2) { return NFT2Price; } else if (phase == 3) { return NFT3Price; } else { return 1; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FREE_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT1Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT2Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT3Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OG_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_numOfTokens","type":"uint256"}],"name":"mintMultipleByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numOfTokens","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numOfTokens","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintNFTFree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numOfTokens","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintNFTOg","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numOfTokens","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintNFTWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"uint256","name":"","type":"uint256"}],"name":"phaseClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealPhase1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealPhase2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealPhase3","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":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setIsPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phase","type":"uint256"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"}],"name":"setRevealPhase1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"}],"name":"setRevealPhase2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"}],"name":"setRevealPhase3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ogRoot","type":"uint256"},{"internalType":"uint256","name":"_freeRoot","type":"uint256"},{"internalType":"uint256","name":"_wlRoot","type":"uint256"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_blindURI","type":"string"},{"internalType":"string","name":"_URI","type":"string"}],"name":"setURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526701aa535d3d0c0000600d556702386f26fc100000600e556702c68af0bb140000600f5560016017553480156200003a57600080fd5b506040518060400160405280600c81526020017f4d657461726f626f7469636100000000000000000000000000000000000000008152506040518060400160405280600c81526020017f4d657461726f626f7469636100000000000000000000000000000000000000008152508160009080519060200190620000bf929190620001cf565b508060019080519060200190620000d8929190620001cf565b505050620000fb620000ef6200010160201b60201c565b6200010960201b60201c565b620002e4565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001dd906200027f565b90600052602060002090601f0160209004810192826200020157600085556200024d565b82601f106200021c57805160ff19168380011785556200024d565b828001600101855582156200024d579182015b828111156200024c5782518255916020019190600101906200022f565b5b5090506200025c919062000260565b5090565b5b808211156200027b57600081600090555060010162000261565b5090565b600060028204905060018216806200029857607f821691505b60208210811415620002af57620002ae620002b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615ac680620002f46000396000f3fe6080604052600436106102ae5760003560e01c806370a0823111610175578063aeb16768116100dc578063dbea564711610095578063ea068e461161006f578063ea068e4614610a68578063f2fde38b14610a91578063f4f4d10714610aba578063fdfc12e214610ae5576102ae565b8063dbea5647146109d9578063e825417414610a02578063e985e9c514610a2b576102ae565b8063aeb16768146108b5578063b231d37f146108e0578063b88d4fde1461090b578063c87b56dd14610934578063d391947214610971578063d42e04b7146109ae576102ae565b8063903afdc01161012e578063903afdc0146107d357806392642744146107fe57806395d89b411461081a578063a22cb46514610845578063a73467801461086e578063ada8afe114610899576102ae565b806370a08231146106d5578063715018a61461071257806381f962191461072957806382c30987146107525780638712a3561461077d5780638da5cb5b146107a8576102ae565b806328cad13d11610219578063444ed7af116101d2578063444ed7af146105b15780634df34e78146105dc5780634f6ccce7146106075780635301ceb6146106445780636352211e1461066f5780636d84a6f8146106ac576102ae565b806328cad13d146104b75780632cc82655146104e05780632f745c591461050957806332b3cd1a146105465780633ccfd60b1461057157806342842e0e14610588576102ae565b80631e84c4131161026b5780631e84c413146103c857806322c849cd146103f357806322f3e2d41461040f57806323592c3c1461043a57806323b872dd146104655780632750fc781461048e576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095ea7b31461035857806318160ddd146103815780631e69d225146103ac575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190614303565b610b0e565b6040516102e79190614a93565b60405180910390f35b3480156102fc57600080fd5b50610305610b20565b6040516103129190614ac9565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906143c1565b610bb2565b60405161034f9190614a2c565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061429e565b610c37565b005b34801561038d57600080fd5b50610396610d4f565b6040516103a39190614e6b565b60405180910390f35b6103c660048036038101906103c191906143ea565b610d5c565b005b3480156103d457600080fd5b506103dd61109f565b6040516103ea9190614a93565b60405180910390f35b61040d600480360381019061040891906143ea565b6110b2565b005b34801561041b57600080fd5b506104246113f5565b6040516104319190614a93565b60405180910390f35b34801561044657600080fd5b5061044f611408565b60405161045c9190614a93565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190614198565b61141b565b005b34801561049a57600080fd5b506104b560048036038101906104b091906142da565b61147b565b005b3480156104c357600080fd5b506104de60048036038101906104d991906142da565b611514565b005b3480156104ec57600080fd5b50610507600480360381019061050291906143c1565b6115ad565b005b34801561051557600080fd5b50610530600480360381019061052b919061429e565b611684565b60405161053d9190614e6b565b60405180910390f35b34801561055257600080fd5b5061055b611729565b6040516105689190614a93565b60405180910390f35b34801561057d57600080fd5b5061058661173c565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614198565b61181b565b005b3480156105bd57600080fd5b506105c661183b565b6040516105d39190614e6b565b60405180910390f35b3480156105e857600080fd5b506105f1611841565b6040516105fe9190614aae565b60405180910390f35b34801561061357600080fd5b5061062e600480360381019061062991906143c1565b611847565b60405161063b9190614e6b565b60405180910390f35b34801561065057600080fd5b506106596118de565b6040516106669190614e6b565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906143c1565b6118e4565b6040516106a39190614a2c565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce91906142da565b611996565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190614133565b611a2f565b6040516107099190614e6b565b60405180910390f35b34801561071e57600080fd5b50610727611ae7565b005b34801561073557600080fd5b50610750600480360381019061074b91906142da565b611b6f565b005b34801561075e57600080fd5b50610767611c08565b6040516107749190614aae565b60405180910390f35b34801561078957600080fd5b50610792611c0e565b60405161079f9190614e6b565b60405180910390f35b3480156107b457600080fd5b506107bd611c13565b6040516107ca9190614a2c565b60405180910390f35b3480156107df57600080fd5b506107e8611c3d565b6040516107f59190614aae565b60405180910390f35b610818600480360381019061081391906143c1565b611c43565b005b34801561082657600080fd5b5061082f611f62565b60405161083c9190614ac9565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614262565b611ff4565b005b34801561087a57600080fd5b50610883612175565b6040516108909190614e6b565b60405180910390f35b6108b360048036038101906108ae91906143ea565b61217a565b005b3480156108c157600080fd5b506108ca6124c1565b6040516108d79190614e6b565b60405180910390f35b3480156108ec57600080fd5b506108f56124c6565b6040516109029190614a93565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d91906141e7565b6124d9565b005b34801561094057600080fd5b5061095b600480360381019061095691906143c1565b61253b565b6040516109689190614ac9565b60405180910390f35b34801561097d57600080fd5b50610998600480360381019061099391906143c1565b61264a565b6040516109a59190614e6b565b60405180910390f35b3480156109ba57600080fd5b506109c3612662565b6040516109d09190614e6b565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb91906142da565b612668565b005b348015610a0e57600080fd5b50610a296004803603810190610a249190614355565b612701565b005b348015610a3757600080fd5b50610a526004803603810190610a4d919061415c565b6127af565b604051610a5f9190614a93565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a919061443e565b612843565b005b348015610a9d57600080fd5b50610ab86004803603810190610ab39190614133565b6128e2565b005b348015610ac657600080fd5b50610acf6129da565b604051610adc9190614e6b565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b07919061429e565b6129df565b005b6000610b1982612b97565b9050919050565b606060008054610b2f90615166565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90615166565b8015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b5050505050905090565b6000610bbd82612c11565b610bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf390614d2b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c42826118e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90614dab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd2612c7d565b73ffffffffffffffffffffffffffffffffffffffff161480610d015750610d0081610cfb612c7d565b6127af565b5b610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790614c6b565b60405180910390fd5b610d4a8383612c85565b505050565b6000600880549050905090565b601060039054906101000a900460ff16610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290614c0b565b60405180910390fd5b610dde8160135433604051602001610dc391906149d6565b60405160208183030381529060405280519060200120612d3e565b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614c8b565b60405180910390fd5b610e25612d55565b610e4d8360166000601754815260200190815260200160002054612d9e90919063ffffffff16565b1115610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590614e4b565b60405180910390fd5b6002821115610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990614e2b565b60405180910390fd5b6002610f398360156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b1115610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190614b4b565b60405180910390fd5b34610f9583610f87612db4565b612dfd90919063ffffffff16565b14610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90614c2b565b60405180910390fd5b60005b8281101561109a578260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110429190614f91565b925050819055506001601660006017548152602001908152602001600020600082825461106f9190614f91565b9250508190555061108733611082610d4f565b612e13565b8080611092906151c9565b915050610fd8565b505050565b601060049054906101000a900460ff1681565b601060039054906101000a900460ff16611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890614c0b565b60405180910390fd5b611134816011543360405160200161111991906149d6565b60405160208183030381529060405280519060200120612d3e565b611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90614c8b565b60405180910390fd5b61117b612d55565b6111a38360166000601754815260200190815260200160002054612d9e90919063ffffffff16565b11156111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90614e4b565b60405180910390fd5b6004821115611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614e2b565b60405180910390fd5b600461128f8360156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b11156112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b4b565b60405180910390fd5b346112eb836112dd612db4565b612dfd90919063ffffffff16565b1461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614c2b565b60405180910390fd5b60005b828110156113f0578260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113989190614f91565b92505081905550600160166000601754815260200190815260200160002060008282546113c59190614f91565b925050819055506113dd336113d8610d4f565b612e13565b80806113e8906151c9565b91505061132e565b505050565b601060039054906101000a900460ff1681565b601060019054906101000a900460ff1681565b61142c611426612c7d565b82612e31565b61146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290614dcb565b60405180910390fd5b611476838383612f0f565b505050565b611483612c7d565b73ffffffffffffffffffffffffffffffffffffffff166114a1611c13565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614d4b565b60405180910390fd5b80601060036101000a81548160ff02191690831515021790555050565b61151c612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661153a611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790614d4b565b60405180910390fd5b80601060046101000a81548160ff02191690831515021790555050565b6115b5612c7d565b73ffffffffffffffffffffffffffffffffffffffff166115d3611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614d4b565b60405180910390fd5b6001811015801561163b575060038111155b61167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190614aeb565b60405180910390fd5b8060178190555050565b600061168f83611a2f565b82106116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790614b0b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601060009054906101000a900460ff1681565b611744612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611762611c13565b73ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90614d4b565b60405180910390fd5b60007374b6ee60c68e5aeb3aba65f99ee6112707866e9690508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611817573d6000803e3d6000fd5b5050565b611836838383604051806020016040528060008152506124d9565b505050565b600e5481565b60125481565b6000611851610d4f565b8210611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990614deb565b60405180910390fd5b600882815481106118cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490614ccb565b60405180910390fd5b80915050919050565b61199e612c7d565b73ffffffffffffffffffffffffffffffffffffffff166119bc611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990614d4b565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614cab565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aef612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611b0d611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90614d4b565b60405180910390fd5b611b6d600061316b565b565b611b77612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611b95611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290614d4b565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60135481565b600481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b601060039054906101000a900460ff16611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990614d0b565b60405180910390fd5b601060049054906101000a900460ff16611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614e0b565b60405180910390fd5b611ce9612d55565b611d118260166000601754815260200190815260200160002054612d9e90919063ffffffff16565b1115611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4990614e4b565b60405180910390fd5b6004811115611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90614e2b565b60405180910390fd5b6004611dfd8260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b1115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590614b4b565b60405180910390fd5b34611e5982611e4b612db4565b612dfd90919063ffffffff16565b14611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090614c2b565b60405180910390fd5b60005b81811015611f5e578160156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f069190614f91565b9250508190555060016016600060175481526020019081526020016000206000828254611f339190614f91565b92505081905550611f4b33611f46610d4f565b612e13565b8080611f56906151c9565b915050611e9c565b5050565b606060018054611f7190615166565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9d90615166565b8015611fea5780601f10611fbf57610100808354040283529160200191611fea565b820191906000526020600020905b815481529060010190602001808311611fcd57829003601f168201915b5050505050905090565b611ffc612c7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614beb565b60405180910390fd5b8060056000612077612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612124612c7d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121699190614a93565b60405180910390a35050565b600481565b601060039054906101000a900460ff166121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614c0b565b60405180910390fd5b6121fc81601254336040516020016121e191906149d6565b60405160208183030381529060405280519060200120612d3e565b61223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290614c8b565b60405180910390fd5b606460145410612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790614bab565b60405180910390fd5b612288612d55565b6122b08360166000601754815260200190815260200160002054612d9e90919063ffffffff16565b11156122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890614e4b565b60405180910390fd5b6001821115612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614e2b565b60405180910390fd5b600161239c8360156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b11156123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490614b4b565b60405180910390fd5b60005b828110156124bc578260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461244a9190614f91565b92505081905550600160166000601754815260200190815260200160002060008282546124779190614f91565b925050819055506001601460008282546124919190614f91565b925050819055506124a9336124a4610d4f565b612e13565b80806124b4906151c9565b9150506123e0565b505050565b600281565b601060029054906101000a900460ff1681565b6124ea6124e4612c7d565b83612e31565b612529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252090614dcb565b60405180910390fd5b61253584848484613231565b50505050565b606061254682612c11565b612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90614d8b565b60405180910390fd5b6108ae821080156125a25750601060009054906101000a900460ff165b806125d35750610d056108ae6125b89190614f91565b821080156125d25750601060019054906101000a900460ff165b5b806125ea5750601060029054906101000a900460ff165b1561262157600b6125fa8361328d565b60405160200161260b929190614a08565b6040516020818303038152906040529050612645565b600c60405160200161263391906149f1565b60405160208183030381529060405290505b919050565b60166020528060005260406000206000915090505481565b600d5481565b612670612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661268e611c13565b73ffffffffffffffffffffffffffffffffffffffff16146126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614d4b565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b612709612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612727611c13565b73ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277490614d4b565b60405180910390fd5b81600c9080519060200190612793929190613eac565b5080600b90805190602001906127aa929190613eac565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61284b612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612869611c13565b73ffffffffffffffffffffffffffffffffffffffff16146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614d4b565b60405180910390fd5b8260001b6011819055508160001b6012819055508060001b601381905550505050565b6128ea612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612908611c13565b73ffffffffffffffffffffffffffffffffffffffff161461295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590614d4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c590614b6b565b60405180910390fd5b6129d78161316b565b50565b600181565b6129e7612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612a05611c13565b73ffffffffffffffffffffffffffffffffffffffff1614612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5290614d4b565b60405180910390fd5b612a63612d55565b612a8b8260166000601754815260200190815260200160002054612d9e90919063ffffffff16565b1115612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390614e4b565b60405180910390fd5b60005b81811015612b9257600160156000601754815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b3a9190614f91565b9250508190555060016016600060175481526020019081526020016000206000828254612b679190614f91565b92505081905550612b7f83612b7a610d4f565b612e13565b8080612b8a906151c9565b915050612acf565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c0a5750612c098261343a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cf8836118e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600082612d4b858461351c565b1490509392505050565b600060016017541415612d6c576108ae9050612d9b565b60026017541415612d8157610d059050612d9b565b60036017541415612d9657610d059050612d9b565b600090505b90565b60008183612dac9190614f91565b905092915050565b600060016017541415612dcb57600d549050612dfa565b60026017541415612de057600e549050612dfa565b60036017541415612df557600f549050612dfa565b600190505b90565b60008183612e0b9190615018565b905092915050565b612e2d8282604051806020016040528060008152506135b7565b5050565b6000612e3c82612c11565b612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614c4b565b60405180910390fd5b6000612e86836118e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ef557508373ffffffffffffffffffffffffffffffffffffffff16612edd84610bb2565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f065750612f0581856127af565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f2f826118e4565b73ffffffffffffffffffffffffffffffffffffffff1614612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c90614d6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614bcb565b60405180910390fd5b613000838383613612565b61300b600082612c85565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305b9190615072565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130b29190614f91565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61323c848484612f0f565b61324884848484613622565b613287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327e90614b2b565b60405180910390fd5b50505050565b606060008214156132d5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613435565b600082905060005b600082146133075780806132f0906151c9565b915050600a826133009190614fe7565b91506132dd565b60008167ffffffffffffffff811115613349577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561337b5781602001600182028036833780820191505090505b5090505b6000851461342e576001826133949190615072565b9150600a856133a39190615236565b60306133af9190614f91565b60f81b8183815181106133eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134279190614fe7565b945061337f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061350557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806135155750613514826137b9565b5b9050919050565b60008082905060005b84518110156135ac576000858281518110613569577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161358b576135848382613823565b9250613598565b6135958184613823565b92505b5080806135a4906151c9565b915050613525565b508091505092915050565b6135c1838361383a565b6135ce6000848484613622565b61360d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360490614b2b565b60405180910390fd5b505050565b61361d838383613a08565b505050565b60006136438473ffffffffffffffffffffffffffffffffffffffff16613b1c565b156137ac578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261366c612c7d565b8786866040518563ffffffff1660e01b815260040161368e9493929190614a47565b602060405180830381600087803b1580156136a857600080fd5b505af19250505080156136d957506040513d601f19601f820116820180604052508101906136d6919061432c565b60015b61375c573d8060008114613709576040519150601f19603f3d011682016040523d82523d6000602084013e61370e565b606091505b50600081511415613754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374b90614b2b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137b1565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a190614ceb565b60405180910390fd5b6138b381612c11565b156138f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ea90614b8b565b60405180910390fd5b6138ff60008383613612565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461394f9190614f91565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613a13838383613b2f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a5657613a5181613b34565b613a95565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a9457613a938382613b7d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ad857613ad381613cea565b613b17565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613b1657613b158282613e2d565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b8a84611a2f565b613b949190615072565b9050600060076000848152602001908152602001600020549050818114613c79576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613cfe9190615072565b9050600060096000848152602001908152602001600020549050600060088381548110613d54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613d9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e3883611a2f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613eb890615166565b90600052602060002090601f016020900481019282613eda5760008555613f21565b82601f10613ef357805160ff1916838001178555613f21565b82800160010185558215613f21579182015b82811115613f20578251825591602001919060010190613f05565b5b509050613f2e9190613f32565b5090565b5b80821115613f4b576000816000905550600101613f33565b5090565b6000613f62613f5d84614eab565b614e86565b90508083825260208201905082856020860282011115613f8157600080fd5b60005b85811015613fb15781613f97888261408b565b845260208401935060208301925050600181019050613f84565b5050509392505050565b6000613fce613fc984614ed7565b614e86565b905082815260208101848484011115613fe657600080fd5b613ff1848285615124565b509392505050565b600061400c61400784614f08565b614e86565b90508281526020810184848401111561402457600080fd5b61402f848285615124565b509392505050565b60008135905061404681615a1d565b92915050565b600082601f83011261405d57600080fd5b813561406d848260208601613f4f565b91505092915050565b60008135905061408581615a34565b92915050565b60008135905061409a81615a4b565b92915050565b6000813590506140af81615a62565b92915050565b6000815190506140c481615a62565b92915050565b600082601f8301126140db57600080fd5b81356140eb848260208601613fbb565b91505092915050565b600082601f83011261410557600080fd5b8135614115848260208601613ff9565b91505092915050565b60008135905061412d81615a79565b92915050565b60006020828403121561414557600080fd5b600061415384828501614037565b91505092915050565b6000806040838503121561416f57600080fd5b600061417d85828601614037565b925050602061418e85828601614037565b9150509250929050565b6000806000606084860312156141ad57600080fd5b60006141bb86828701614037565b93505060206141cc86828701614037565b92505060406141dd8682870161411e565b9150509250925092565b600080600080608085870312156141fd57600080fd5b600061420b87828801614037565b945050602061421c87828801614037565b935050604061422d8782880161411e565b925050606085013567ffffffffffffffff81111561424a57600080fd5b614256878288016140ca565b91505092959194509250565b6000806040838503121561427557600080fd5b600061428385828601614037565b925050602061429485828601614076565b9150509250929050565b600080604083850312156142b157600080fd5b60006142bf85828601614037565b92505060206142d08582860161411e565b9150509250929050565b6000602082840312156142ec57600080fd5b60006142fa84828501614076565b91505092915050565b60006020828403121561431557600080fd5b6000614323848285016140a0565b91505092915050565b60006020828403121561433e57600080fd5b600061434c848285016140b5565b91505092915050565b6000806040838503121561436857600080fd5b600083013567ffffffffffffffff81111561438257600080fd5b61438e858286016140f4565b925050602083013567ffffffffffffffff8111156143ab57600080fd5b6143b7858286016140f4565b9150509250929050565b6000602082840312156143d357600080fd5b60006143e18482850161411e565b91505092915050565b600080604083850312156143fd57600080fd5b600061440b8582860161411e565b925050602083013567ffffffffffffffff81111561442857600080fd5b6144348582860161404c565b9150509250929050565b60008060006060848603121561445357600080fd5b60006144618682870161411e565b93505060206144728682870161411e565b92505060406144838682870161411e565b9150509250925092565b614496816150a6565b82525050565b6144ad6144a8826150a6565b615212565b82525050565b6144bc816150b8565b82525050565b6144cb816150c4565b82525050565b60006144dc82614f4e565b6144e68185614f64565b93506144f6818560208601615133565b6144ff81615323565b840191505092915050565b600061451582614f59565b61451f8185614f75565b935061452f818560208601615133565b61453881615323565b840191505092915050565b600061454e82614f59565b6145588185614f86565b9350614568818560208601615133565b80840191505092915050565b6000815461458181615166565b61458b8186614f86565b945060018216600081146145a657600181146145b7576145ea565b60ff198316865281860193506145ea565b6145c085614f39565b60005b838110156145e2578154818901526001820191506020810190506145c3565b838801955050505b50505092915050565b6000614600600b83614f75565b915061460b82615341565b602082019050919050565b6000614623602b83614f75565b915061462e8261536a565b604082019050919050565b6000614646603283614f75565b9150614651826153b9565b604082019050919050565b6000614669601c83614f75565b915061467482615408565b602082019050919050565b600061468c602683614f75565b915061469782615431565b604082019050919050565b60006146af601c83614f75565b91506146ba82615480565b602082019050919050565b60006146d2602083614f75565b91506146dd826154a9565b602082019050919050565b60006146f5602483614f75565b9150614700826154d2565b604082019050919050565b6000614718601983614f75565b915061472382615521565b602082019050919050565b600061473b601283614f75565b91506147468261554a565b602082019050919050565b600061475e601f83614f75565b915061476982615573565b602082019050919050565b6000614781602c83614f75565b915061478c8261559c565b604082019050919050565b60006147a4603883614f75565b91506147af826155eb565b604082019050919050565b60006147c7600f83614f75565b91506147d28261563a565b602082019050919050565b60006147ea602a83614f75565b91506147f582615663565b604082019050919050565b600061480d602983614f75565b9150614818826156b2565b604082019050919050565b6000614830602083614f75565b915061483b82615701565b602082019050919050565b6000614853601683614f75565b915061485e8261572a565b602082019050919050565b6000614876602c83614f75565b915061488182615753565b604082019050919050565b6000614899602083614f75565b91506148a4826157a2565b602082019050919050565b60006148bc602983614f75565b91506148c7826157cb565b604082019050919050565b60006148df602f83614f75565b91506148ea8261581a565b604082019050919050565b6000614902602183614f75565b915061490d82615869565b604082019050919050565b6000614925603183614f75565b9150614930826158b8565b604082019050919050565b6000614948602c83614f75565b915061495382615907565b604082019050919050565b600061496b601483614f75565b915061497682615956565b602082019050919050565b600061498e602083614f75565b91506149998261597f565b602082019050919050565b60006149b1604283614f75565b91506149bc826159a8565b606082019050919050565b6149d08161511a565b82525050565b60006149e2828461449c565b60148201915081905092915050565b60006149fd8284614574565b915081905092915050565b6000614a148285614574565b9150614a208284614543565b91508190509392505050565b6000602082019050614a41600083018461448d565b92915050565b6000608082019050614a5c600083018761448d565b614a69602083018661448d565b614a7660408301856149c7565b8181036060830152614a8881846144d1565b905095945050505050565b6000602082019050614aa860008301846144b3565b92915050565b6000602082019050614ac360008301846144c2565b92915050565b60006020820190508181036000830152614ae3818461450a565b905092915050565b60006020820190508181036000830152614b04816145f3565b9050919050565b60006020820190508181036000830152614b2481614616565b9050919050565b60006020820190508181036000830152614b4481614639565b9050919050565b60006020820190508181036000830152614b648161465c565b9050919050565b60006020820190508181036000830152614b848161467f565b9050919050565b60006020820190508181036000830152614ba4816146a2565b9050919050565b60006020820190508181036000830152614bc4816146c5565b9050919050565b60006020820190508181036000830152614be4816146e8565b9050919050565b60006020820190508181036000830152614c048161470b565b9050919050565b60006020820190508181036000830152614c248161472e565b9050919050565b60006020820190508181036000830152614c4481614751565b9050919050565b60006020820190508181036000830152614c6481614774565b9050919050565b60006020820190508181036000830152614c8481614797565b9050919050565b60006020820190508181036000830152614ca4816147ba565b9050919050565b60006020820190508181036000830152614cc4816147dd565b9050919050565b60006020820190508181036000830152614ce481614800565b9050919050565b60006020820190508181036000830152614d0481614823565b9050919050565b60006020820190508181036000830152614d2481614846565b9050919050565b60006020820190508181036000830152614d4481614869565b9050919050565b60006020820190508181036000830152614d648161488c565b9050919050565b60006020820190508181036000830152614d84816148af565b9050919050565b60006020820190508181036000830152614da4816148d2565b9050919050565b60006020820190508181036000830152614dc4816148f5565b9050919050565b60006020820190508181036000830152614de481614918565b9050919050565b60006020820190508181036000830152614e048161493b565b9050919050565b60006020820190508181036000830152614e248161495e565b9050919050565b60006020820190508181036000830152614e4481614981565b9050919050565b60006020820190508181036000830152614e64816149a4565b9050919050565b6000602082019050614e8060008301846149c7565b92915050565b6000614e90614ea1565b9050614e9c8282615198565b919050565b6000604051905090565b600067ffffffffffffffff821115614ec657614ec56152f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ef257614ef16152f4565b5b614efb82615323565b9050602081019050919050565b600067ffffffffffffffff821115614f2357614f226152f4565b5b614f2c82615323565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f9c8261511a565b9150614fa78361511a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fdc57614fdb615267565b5b828201905092915050565b6000614ff28261511a565b9150614ffd8361511a565b92508261500d5761500c615296565b5b828204905092915050565b60006150238261511a565b915061502e8361511a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561506757615066615267565b5b828202905092915050565b600061507d8261511a565b91506150888361511a565b92508282101561509b5761509a615267565b5b828203905092915050565b60006150b1826150fa565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615151578082015181840152602081019050615136565b83811115615160576000848401525b50505050565b6000600282049050600182168061517e57607f821691505b60208210811415615192576151916152c5565b5b50919050565b6151a182615323565b810181811067ffffffffffffffff821117156151c0576151bf6152f4565b5b80604052505050565b60006151d48261511a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561520757615206615267565b5b600182019050919050565b600061521d82615224565b9050919050565b600061522f82615334565b9050919050565b60006152418261511a565b915061524c8361511a565b92508261525c5761525b615296565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57726f6e67207068617365000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d6178207768697465656400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c6c206672656520746f6b656e732068617665206265656e206d696e746564600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5075626c6963206973206e6f7420616374697665000000000000000000000000600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e73600082015250565b7f546f6b656e73206e756d62657220746f206d696e742063616e6e6f742065786360008201527f656564206e756d626572206f66204d415820746f6b656e73207065722070686160208201527f7365000000000000000000000000000000000000000000000000000000000000604082015250565b615a26816150a6565b8114615a3157600080fd5b50565b615a3d816150b8565b8114615a4857600080fd5b50565b615a54816150c4565b8114615a5f57600080fd5b50565b615a6b816150ce565b8114615a7657600080fd5b50565b615a828161511a565b8114615a8d57600080fd5b5056fea26469706673582212209b6bf839f0d2f65c6dfb6e822ff01c3ad853afc3d969241bcd899f45edc6505264736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c806370a0823111610175578063aeb16768116100dc578063dbea564711610095578063ea068e461161006f578063ea068e4614610a68578063f2fde38b14610a91578063f4f4d10714610aba578063fdfc12e214610ae5576102ae565b8063dbea5647146109d9578063e825417414610a02578063e985e9c514610a2b576102ae565b8063aeb16768146108b5578063b231d37f146108e0578063b88d4fde1461090b578063c87b56dd14610934578063d391947214610971578063d42e04b7146109ae576102ae565b8063903afdc01161012e578063903afdc0146107d357806392642744146107fe57806395d89b411461081a578063a22cb46514610845578063a73467801461086e578063ada8afe114610899576102ae565b806370a08231146106d5578063715018a61461071257806381f962191461072957806382c30987146107525780638712a3561461077d5780638da5cb5b146107a8576102ae565b806328cad13d11610219578063444ed7af116101d2578063444ed7af146105b15780634df34e78146105dc5780634f6ccce7146106075780635301ceb6146106445780636352211e1461066f5780636d84a6f8146106ac576102ae565b806328cad13d146104b75780632cc82655146104e05780632f745c591461050957806332b3cd1a146105465780633ccfd60b1461057157806342842e0e14610588576102ae565b80631e84c4131161026b5780631e84c413146103c857806322c849cd146103f357806322f3e2d41461040f57806323592c3c1461043a57806323b872dd146104655780632750fc781461048e576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095ea7b31461035857806318160ddd146103815780631e69d225146103ac575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190614303565b610b0e565b6040516102e79190614a93565b60405180910390f35b3480156102fc57600080fd5b50610305610b20565b6040516103129190614ac9565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906143c1565b610bb2565b60405161034f9190614a2c565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061429e565b610c37565b005b34801561038d57600080fd5b50610396610d4f565b6040516103a39190614e6b565b60405180910390f35b6103c660048036038101906103c191906143ea565b610d5c565b005b3480156103d457600080fd5b506103dd61109f565b6040516103ea9190614a93565b60405180910390f35b61040d600480360381019061040891906143ea565b6110b2565b005b34801561041b57600080fd5b506104246113f5565b6040516104319190614a93565b60405180910390f35b34801561044657600080fd5b5061044f611408565b60405161045c9190614a93565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190614198565b61141b565b005b34801561049a57600080fd5b506104b560048036038101906104b091906142da565b61147b565b005b3480156104c357600080fd5b506104de60048036038101906104d991906142da565b611514565b005b3480156104ec57600080fd5b50610507600480360381019061050291906143c1565b6115ad565b005b34801561051557600080fd5b50610530600480360381019061052b919061429e565b611684565b60405161053d9190614e6b565b60405180910390f35b34801561055257600080fd5b5061055b611729565b6040516105689190614a93565b60405180910390f35b34801561057d57600080fd5b5061058661173c565b005b34801561059457600080fd5b506105af60048036038101906105aa9190614198565b61181b565b005b3480156105bd57600080fd5b506105c661183b565b6040516105d39190614e6b565b60405180910390f35b3480156105e857600080fd5b506105f1611841565b6040516105fe9190614aae565b60405180910390f35b34801561061357600080fd5b5061062e600480360381019061062991906143c1565b611847565b60405161063b9190614e6b565b60405180910390f35b34801561065057600080fd5b506106596118de565b6040516106669190614e6b565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906143c1565b6118e4565b6040516106a39190614a2c565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce91906142da565b611996565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190614133565b611a2f565b6040516107099190614e6b565b60405180910390f35b34801561071e57600080fd5b50610727611ae7565b005b34801561073557600080fd5b50610750600480360381019061074b91906142da565b611b6f565b005b34801561075e57600080fd5b50610767611c08565b6040516107749190614aae565b60405180910390f35b34801561078957600080fd5b50610792611c0e565b60405161079f9190614e6b565b60405180910390f35b3480156107b457600080fd5b506107bd611c13565b6040516107ca9190614a2c565b60405180910390f35b3480156107df57600080fd5b506107e8611c3d565b6040516107f59190614aae565b60405180910390f35b610818600480360381019061081391906143c1565b611c43565b005b34801561082657600080fd5b5061082f611f62565b60405161083c9190614ac9565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614262565b611ff4565b005b34801561087a57600080fd5b50610883612175565b6040516108909190614e6b565b60405180910390f35b6108b360048036038101906108ae91906143ea565b61217a565b005b3480156108c157600080fd5b506108ca6124c1565b6040516108d79190614e6b565b60405180910390f35b3480156108ec57600080fd5b506108f56124c6565b6040516109029190614a93565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d91906141e7565b6124d9565b005b34801561094057600080fd5b5061095b600480360381019061095691906143c1565b61253b565b6040516109689190614ac9565b60405180910390f35b34801561097d57600080fd5b50610998600480360381019061099391906143c1565b61264a565b6040516109a59190614e6b565b60405180910390f35b3480156109ba57600080fd5b506109c3612662565b6040516109d09190614e6b565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb91906142da565b612668565b005b348015610a0e57600080fd5b50610a296004803603810190610a249190614355565b612701565b005b348015610a3757600080fd5b50610a526004803603810190610a4d919061415c565b6127af565b604051610a5f9190614a93565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a919061443e565b612843565b005b348015610a9d57600080fd5b50610ab86004803603810190610ab39190614133565b6128e2565b005b348015610ac657600080fd5b50610acf6129da565b604051610adc9190614e6b565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b07919061429e565b6129df565b005b6000610b1982612b97565b9050919050565b606060008054610b2f90615166565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90615166565b8015610ba85780601f10610b7d57610100808354040283529160200191610ba8565b820191906000526020600020905b815481529060010190602001808311610b8b57829003601f168201915b5050505050905090565b6000610bbd82612c11565b610bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf390614d2b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c42826118e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90614dab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd2612c7d565b73ffffffffffffffffffffffffffffffffffffffff161480610d015750610d0081610cfb612c7d565b6127af565b5b610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790614c6b565b60405180910390fd5b610d4a8383612c85565b505050565b6000600880549050905090565b601060039054906101000a900460ff16610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290614c0b565b60405180910390fd5b610dde8160135433604051602001610dc391906149d6565b60405160208183030381529060405280519060200120612d3e565b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490614c8b565b60405180910390fd5b610e25612d55565b610e4d8360166000601754815260200190815260200160002054612d9e90919063ffffffff16565b1115610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590614e4b565b60405180910390fd5b6002821115610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990614e2b565b60405180910390fd5b6002610f398360156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b1115610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190614b4b565b60405180910390fd5b34610f9583610f87612db4565b612dfd90919063ffffffff16565b14610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90614c2b565b60405180910390fd5b60005b8281101561109a578260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110429190614f91565b925050819055506001601660006017548152602001908152602001600020600082825461106f9190614f91565b9250508190555061108733611082610d4f565b612e13565b8080611092906151c9565b915050610fd8565b505050565b601060049054906101000a900460ff1681565b601060039054906101000a900460ff16611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890614c0b565b60405180910390fd5b611134816011543360405160200161111991906149d6565b60405160208183030381529060405280519060200120612d3e565b611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90614c8b565b60405180910390fd5b61117b612d55565b6111a38360166000601754815260200190815260200160002054612d9e90919063ffffffff16565b11156111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db90614e4b565b60405180910390fd5b6004821115611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614e2b565b60405180910390fd5b600461128f8360156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b11156112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790614b4b565b60405180910390fd5b346112eb836112dd612db4565b612dfd90919063ffffffff16565b1461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614c2b565b60405180910390fd5b60005b828110156113f0578260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113989190614f91565b92505081905550600160166000601754815260200190815260200160002060008282546113c59190614f91565b925050819055506113dd336113d8610d4f565b612e13565b80806113e8906151c9565b91505061132e565b505050565b601060039054906101000a900460ff1681565b601060019054906101000a900460ff1681565b61142c611426612c7d565b82612e31565b61146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290614dcb565b60405180910390fd5b611476838383612f0f565b505050565b611483612c7d565b73ffffffffffffffffffffffffffffffffffffffff166114a1611c13565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614d4b565b60405180910390fd5b80601060036101000a81548160ff02191690831515021790555050565b61151c612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661153a611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790614d4b565b60405180910390fd5b80601060046101000a81548160ff02191690831515021790555050565b6115b5612c7d565b73ffffffffffffffffffffffffffffffffffffffff166115d3611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090614d4b565b60405180910390fd5b6001811015801561163b575060038111155b61167a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167190614aeb565b60405180910390fd5b8060178190555050565b600061168f83611a2f565b82106116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790614b0b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601060009054906101000a900460ff1681565b611744612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611762611c13565b73ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af90614d4b565b60405180910390fd5b60007374b6ee60c68e5aeb3aba65f99ee6112707866e9690508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611817573d6000803e3d6000fd5b5050565b611836838383604051806020016040528060008152506124d9565b505050565b600e5481565b60125481565b6000611851610d4f565b8210611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188990614deb565b60405180910390fd5b600882815481106118cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561198d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198490614ccb565b60405180910390fd5b80915050919050565b61199e612c7d565b73ffffffffffffffffffffffffffffffffffffffff166119bc611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990614d4b565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614cab565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aef612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611b0d611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5a90614d4b565b60405180910390fd5b611b6d600061316b565b565b611b77612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611b95611c13565b73ffffffffffffffffffffffffffffffffffffffff1614611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290614d4b565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60135481565b600481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b601060039054906101000a900460ff16611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990614d0b565b60405180910390fd5b601060049054906101000a900460ff16611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890614e0b565b60405180910390fd5b611ce9612d55565b611d118260166000601754815260200190815260200160002054612d9e90919063ffffffff16565b1115611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4990614e4b565b60405180910390fd5b6004811115611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90614e2b565b60405180910390fd5b6004611dfd8260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b1115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590614b4b565b60405180910390fd5b34611e5982611e4b612db4565b612dfd90919063ffffffff16565b14611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090614c2b565b60405180910390fd5b60005b81811015611f5e578160156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f069190614f91565b9250508190555060016016600060175481526020019081526020016000206000828254611f339190614f91565b92505081905550611f4b33611f46610d4f565b612e13565b8080611f56906151c9565b915050611e9c565b5050565b606060018054611f7190615166565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9d90615166565b8015611fea5780601f10611fbf57610100808354040283529160200191611fea565b820191906000526020600020905b815481529060010190602001808311611fcd57829003601f168201915b5050505050905090565b611ffc612c7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614beb565b60405180910390fd5b8060056000612077612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612124612c7d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121699190614a93565b60405180910390a35050565b600481565b601060039054906101000a900460ff166121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090614c0b565b60405180910390fd5b6121fc81601254336040516020016121e191906149d6565b60405160208183030381529060405280519060200120612d3e565b61223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290614c8b565b60405180910390fd5b606460145410612280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227790614bab565b60405180910390fd5b612288612d55565b6122b08360166000601754815260200190815260200160002054612d9e90919063ffffffff16565b11156122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890614e4b565b60405180910390fd5b6001821115612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614e2b565b60405180910390fd5b600161239c8360156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d9e90919063ffffffff16565b11156123dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d490614b4b565b60405180910390fd5b60005b828110156124bc578260156000601754815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461244a9190614f91565b92505081905550600160166000601754815260200190815260200160002060008282546124779190614f91565b925050819055506001601460008282546124919190614f91565b925050819055506124a9336124a4610d4f565b612e13565b80806124b4906151c9565b9150506123e0565b505050565b600281565b601060029054906101000a900460ff1681565b6124ea6124e4612c7d565b83612e31565b612529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252090614dcb565b60405180910390fd5b61253584848484613231565b50505050565b606061254682612c11565b612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90614d8b565b60405180910390fd5b6108ae821080156125a25750601060009054906101000a900460ff165b806125d35750610d056108ae6125b89190614f91565b821080156125d25750601060019054906101000a900460ff165b5b806125ea5750601060029054906101000a900460ff165b1561262157600b6125fa8361328d565b60405160200161260b929190614a08565b6040516020818303038152906040529050612645565b600c60405160200161263391906149f1565b60405160208183030381529060405290505b919050565b60166020528060005260406000206000915090505481565b600d5481565b612670612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661268e611c13565b73ffffffffffffffffffffffffffffffffffffffff16146126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614d4b565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b612709612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612727611c13565b73ffffffffffffffffffffffffffffffffffffffff161461277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277490614d4b565b60405180910390fd5b81600c9080519060200190612793929190613eac565b5080600b90805190602001906127aa929190613eac565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61284b612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612869611c13565b73ffffffffffffffffffffffffffffffffffffffff16146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614d4b565b60405180910390fd5b8260001b6011819055508160001b6012819055508060001b601381905550505050565b6128ea612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612908611c13565b73ffffffffffffffffffffffffffffffffffffffff161461295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295590614d4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c590614b6b565b60405180910390fd5b6129d78161316b565b50565b600181565b6129e7612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612a05611c13565b73ffffffffffffffffffffffffffffffffffffffff1614612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5290614d4b565b60405180910390fd5b612a63612d55565b612a8b8260166000601754815260200190815260200160002054612d9e90919063ffffffff16565b1115612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390614e4b565b60405180910390fd5b60005b81811015612b9257600160156000601754815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b3a9190614f91565b9250508190555060016016600060175481526020019081526020016000206000828254612b679190614f91565b92505081905550612b7f83612b7a610d4f565b612e13565b8080612b8a906151c9565b915050612acf565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c0a5750612c098261343a565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cf8836118e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600082612d4b858461351c565b1490509392505050565b600060016017541415612d6c576108ae9050612d9b565b60026017541415612d8157610d059050612d9b565b60036017541415612d9657610d059050612d9b565b600090505b90565b60008183612dac9190614f91565b905092915050565b600060016017541415612dcb57600d549050612dfa565b60026017541415612de057600e549050612dfa565b60036017541415612df557600f549050612dfa565b600190505b90565b60008183612e0b9190615018565b905092915050565b612e2d8282604051806020016040528060008152506135b7565b5050565b6000612e3c82612c11565b612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614c4b565b60405180910390fd5b6000612e86836118e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ef557508373ffffffffffffffffffffffffffffffffffffffff16612edd84610bb2565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f065750612f0581856127af565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f2f826118e4565b73ffffffffffffffffffffffffffffffffffffffff1614612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c90614d6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec90614bcb565b60405180910390fd5b613000838383613612565b61300b600082612c85565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305b9190615072565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130b29190614f91565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61323c848484612f0f565b61324884848484613622565b613287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327e90614b2b565b60405180910390fd5b50505050565b606060008214156132d5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613435565b600082905060005b600082146133075780806132f0906151c9565b915050600a826133009190614fe7565b91506132dd565b60008167ffffffffffffffff811115613349577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561337b5781602001600182028036833780820191505090505b5090505b6000851461342e576001826133949190615072565b9150600a856133a39190615236565b60306133af9190614f91565b60f81b8183815181106133eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134279190614fe7565b945061337f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061350557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806135155750613514826137b9565b5b9050919050565b60008082905060005b84518110156135ac576000858281518110613569577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161358b576135848382613823565b9250613598565b6135958184613823565b92505b5080806135a4906151c9565b915050613525565b508091505092915050565b6135c1838361383a565b6135ce6000848484613622565b61360d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360490614b2b565b60405180910390fd5b505050565b61361d838383613a08565b505050565b60006136438473ffffffffffffffffffffffffffffffffffffffff16613b1c565b156137ac578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261366c612c7d565b8786866040518563ffffffff1660e01b815260040161368e9493929190614a47565b602060405180830381600087803b1580156136a857600080fd5b505af19250505080156136d957506040513d601f19601f820116820180604052508101906136d6919061432c565b60015b61375c573d8060008114613709576040519150601f19603f3d011682016040523d82523d6000602084013e61370e565b606091505b50600081511415613754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374b90614b2b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137b1565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a190614ceb565b60405180910390fd5b6138b381612c11565b156138f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ea90614b8b565b60405180910390fd5b6138ff60008383613612565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461394f9190614f91565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613a13838383613b2f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a5657613a5181613b34565b613a95565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613a9457613a938382613b7d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ad857613ad381613cea565b613b17565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613b1657613b158282613e2d565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b8a84611a2f565b613b949190615072565b9050600060076000848152602001908152602001600020549050818114613c79576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613cfe9190615072565b9050600060096000848152602001908152602001600020549050600060088381548110613d54577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613d9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e3883611a2f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613eb890615166565b90600052602060002090601f016020900481019282613eda5760008555613f21565b82601f10613ef357805160ff1916838001178555613f21565b82800160010185558215613f21579182015b82811115613f20578251825591602001919060010190613f05565b5b509050613f2e9190613f32565b5090565b5b80821115613f4b576000816000905550600101613f33565b5090565b6000613f62613f5d84614eab565b614e86565b90508083825260208201905082856020860282011115613f8157600080fd5b60005b85811015613fb15781613f97888261408b565b845260208401935060208301925050600181019050613f84565b5050509392505050565b6000613fce613fc984614ed7565b614e86565b905082815260208101848484011115613fe657600080fd5b613ff1848285615124565b509392505050565b600061400c61400784614f08565b614e86565b90508281526020810184848401111561402457600080fd5b61402f848285615124565b509392505050565b60008135905061404681615a1d565b92915050565b600082601f83011261405d57600080fd5b813561406d848260208601613f4f565b91505092915050565b60008135905061408581615a34565b92915050565b60008135905061409a81615a4b565b92915050565b6000813590506140af81615a62565b92915050565b6000815190506140c481615a62565b92915050565b600082601f8301126140db57600080fd5b81356140eb848260208601613fbb565b91505092915050565b600082601f83011261410557600080fd5b8135614115848260208601613ff9565b91505092915050565b60008135905061412d81615a79565b92915050565b60006020828403121561414557600080fd5b600061415384828501614037565b91505092915050565b6000806040838503121561416f57600080fd5b600061417d85828601614037565b925050602061418e85828601614037565b9150509250929050565b6000806000606084860312156141ad57600080fd5b60006141bb86828701614037565b93505060206141cc86828701614037565b92505060406141dd8682870161411e565b9150509250925092565b600080600080608085870312156141fd57600080fd5b600061420b87828801614037565b945050602061421c87828801614037565b935050604061422d8782880161411e565b925050606085013567ffffffffffffffff81111561424a57600080fd5b614256878288016140ca565b91505092959194509250565b6000806040838503121561427557600080fd5b600061428385828601614037565b925050602061429485828601614076565b9150509250929050565b600080604083850312156142b157600080fd5b60006142bf85828601614037565b92505060206142d08582860161411e565b9150509250929050565b6000602082840312156142ec57600080fd5b60006142fa84828501614076565b91505092915050565b60006020828403121561431557600080fd5b6000614323848285016140a0565b91505092915050565b60006020828403121561433e57600080fd5b600061434c848285016140b5565b91505092915050565b6000806040838503121561436857600080fd5b600083013567ffffffffffffffff81111561438257600080fd5b61438e858286016140f4565b925050602083013567ffffffffffffffff8111156143ab57600080fd5b6143b7858286016140f4565b9150509250929050565b6000602082840312156143d357600080fd5b60006143e18482850161411e565b91505092915050565b600080604083850312156143fd57600080fd5b600061440b8582860161411e565b925050602083013567ffffffffffffffff81111561442857600080fd5b6144348582860161404c565b9150509250929050565b60008060006060848603121561445357600080fd5b60006144618682870161411e565b93505060206144728682870161411e565b92505060406144838682870161411e565b9150509250925092565b614496816150a6565b82525050565b6144ad6144a8826150a6565b615212565b82525050565b6144bc816150b8565b82525050565b6144cb816150c4565b82525050565b60006144dc82614f4e565b6144e68185614f64565b93506144f6818560208601615133565b6144ff81615323565b840191505092915050565b600061451582614f59565b61451f8185614f75565b935061452f818560208601615133565b61453881615323565b840191505092915050565b600061454e82614f59565b6145588185614f86565b9350614568818560208601615133565b80840191505092915050565b6000815461458181615166565b61458b8186614f86565b945060018216600081146145a657600181146145b7576145ea565b60ff198316865281860193506145ea565b6145c085614f39565b60005b838110156145e2578154818901526001820191506020810190506145c3565b838801955050505b50505092915050565b6000614600600b83614f75565b915061460b82615341565b602082019050919050565b6000614623602b83614f75565b915061462e8261536a565b604082019050919050565b6000614646603283614f75565b9150614651826153b9565b604082019050919050565b6000614669601c83614f75565b915061467482615408565b602082019050919050565b600061468c602683614f75565b915061469782615431565b604082019050919050565b60006146af601c83614f75565b91506146ba82615480565b602082019050919050565b60006146d2602083614f75565b91506146dd826154a9565b602082019050919050565b60006146f5602483614f75565b9150614700826154d2565b604082019050919050565b6000614718601983614f75565b915061472382615521565b602082019050919050565b600061473b601283614f75565b91506147468261554a565b602082019050919050565b600061475e601f83614f75565b915061476982615573565b602082019050919050565b6000614781602c83614f75565b915061478c8261559c565b604082019050919050565b60006147a4603883614f75565b91506147af826155eb565b604082019050919050565b60006147c7600f83614f75565b91506147d28261563a565b602082019050919050565b60006147ea602a83614f75565b91506147f582615663565b604082019050919050565b600061480d602983614f75565b9150614818826156b2565b604082019050919050565b6000614830602083614f75565b915061483b82615701565b602082019050919050565b6000614853601683614f75565b915061485e8261572a565b602082019050919050565b6000614876602c83614f75565b915061488182615753565b604082019050919050565b6000614899602083614f75565b91506148a4826157a2565b602082019050919050565b60006148bc602983614f75565b91506148c7826157cb565b604082019050919050565b60006148df602f83614f75565b91506148ea8261581a565b604082019050919050565b6000614902602183614f75565b915061490d82615869565b604082019050919050565b6000614925603183614f75565b9150614930826158b8565b604082019050919050565b6000614948602c83614f75565b915061495382615907565b604082019050919050565b600061496b601483614f75565b915061497682615956565b602082019050919050565b600061498e602083614f75565b91506149998261597f565b602082019050919050565b60006149b1604283614f75565b91506149bc826159a8565b606082019050919050565b6149d08161511a565b82525050565b60006149e2828461449c565b60148201915081905092915050565b60006149fd8284614574565b915081905092915050565b6000614a148285614574565b9150614a208284614543565b91508190509392505050565b6000602082019050614a41600083018461448d565b92915050565b6000608082019050614a5c600083018761448d565b614a69602083018661448d565b614a7660408301856149c7565b8181036060830152614a8881846144d1565b905095945050505050565b6000602082019050614aa860008301846144b3565b92915050565b6000602082019050614ac360008301846144c2565b92915050565b60006020820190508181036000830152614ae3818461450a565b905092915050565b60006020820190508181036000830152614b04816145f3565b9050919050565b60006020820190508181036000830152614b2481614616565b9050919050565b60006020820190508181036000830152614b4481614639565b9050919050565b60006020820190508181036000830152614b648161465c565b9050919050565b60006020820190508181036000830152614b848161467f565b9050919050565b60006020820190508181036000830152614ba4816146a2565b9050919050565b60006020820190508181036000830152614bc4816146c5565b9050919050565b60006020820190508181036000830152614be4816146e8565b9050919050565b60006020820190508181036000830152614c048161470b565b9050919050565b60006020820190508181036000830152614c248161472e565b9050919050565b60006020820190508181036000830152614c4481614751565b9050919050565b60006020820190508181036000830152614c6481614774565b9050919050565b60006020820190508181036000830152614c8481614797565b9050919050565b60006020820190508181036000830152614ca4816147ba565b9050919050565b60006020820190508181036000830152614cc4816147dd565b9050919050565b60006020820190508181036000830152614ce481614800565b9050919050565b60006020820190508181036000830152614d0481614823565b9050919050565b60006020820190508181036000830152614d2481614846565b9050919050565b60006020820190508181036000830152614d4481614869565b9050919050565b60006020820190508181036000830152614d648161488c565b9050919050565b60006020820190508181036000830152614d84816148af565b9050919050565b60006020820190508181036000830152614da4816148d2565b9050919050565b60006020820190508181036000830152614dc4816148f5565b9050919050565b60006020820190508181036000830152614de481614918565b9050919050565b60006020820190508181036000830152614e048161493b565b9050919050565b60006020820190508181036000830152614e248161495e565b9050919050565b60006020820190508181036000830152614e4481614981565b9050919050565b60006020820190508181036000830152614e64816149a4565b9050919050565b6000602082019050614e8060008301846149c7565b92915050565b6000614e90614ea1565b9050614e9c8282615198565b919050565b6000604051905090565b600067ffffffffffffffff821115614ec657614ec56152f4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ef257614ef16152f4565b5b614efb82615323565b9050602081019050919050565b600067ffffffffffffffff821115614f2357614f226152f4565b5b614f2c82615323565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f9c8261511a565b9150614fa78361511a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fdc57614fdb615267565b5b828201905092915050565b6000614ff28261511a565b9150614ffd8361511a565b92508261500d5761500c615296565b5b828204905092915050565b60006150238261511a565b915061502e8361511a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561506757615066615267565b5b828202905092915050565b600061507d8261511a565b91506150888361511a565b92508282101561509b5761509a615267565b5b828203905092915050565b60006150b1826150fa565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615151578082015181840152602081019050615136565b83811115615160576000848401525b50505050565b6000600282049050600182168061517e57607f821691505b60208210811415615192576151916152c5565b5b50919050565b6151a182615323565b810181811067ffffffffffffffff821117156151c0576151bf6152f4565b5b80604052505050565b60006151d48261511a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561520757615206615267565b5b600182019050919050565b600061521d82615224565b9050919050565b600061522f82615334565b9050919050565b60006152418261511a565b915061524c8361511a565b92508261525c5761525b615296565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57726f6e67207068617365000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f50757263686173652065786365656473206d6178207768697465656400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416c6c206672656520746f6b656e732068617665206265656e206d696e746564600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5075626c6963206973206e6f7420616374697665000000000000000000000000600082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e73600082015250565b7f546f6b656e73206e756d62657220746f206d696e742063616e6e6f742065786360008201527f656564206e756d626572206f66204d415820746f6b656e73207065722070686160208201527f7365000000000000000000000000000000000000000000000000000000000000604082015250565b615a26816150a6565b8114615a3157600080fd5b50565b615a3d816150b8565b8114615a4857600080fd5b50565b615a54816150c4565b8114615a5f57600080fd5b50565b615a6b816150ce565b8114615a7657600080fd5b50565b615a828161511a565b8114615a8d57600080fd5b5056fea26469706673582212209b6bf839f0d2f65c6dfb6e822ff01c3ad853afc3d969241bcd899f45edc6505264736f6c63430008040033
Deployed Bytecode Sourcemap
52080:10298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61194:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21493:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23052:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22575:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35182:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57849:989;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52985:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56742:968;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52958:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52896:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23942:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54180:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54416:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54800:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34850:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52865:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55317:217;;;;;;;;;;;;;:::i;:::-;;24352:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52736:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53050:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35372:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52801:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21187:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53939:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20917:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49250:94;;;;;;;;;;;;;:::i;:::-;;53545:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53080:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53108:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48599:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53022:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55698:901;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21662:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23345:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53255:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58977:991;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53202:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52927:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24608:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60570:612;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53409:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52671:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53742:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55018:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23711:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54581:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49499:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53154:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60026:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61194:235;61354:4;61384:37;61408:12;61384:23;:37::i;:::-;61377:44;;61194:235;;;:::o;21493:100::-;21547:13;21580:5;21573:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21493:100;:::o;23052:221::-;23128:7;23156:16;23164:7;23156;:16::i;:::-;23148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23241:15;:24;23257:7;23241:24;;;;;;;;;;;;;;;;;;;;;23234:31;;23052:221;;;:::o;22575:411::-;22656:13;22672:23;22687:7;22672:14;:23::i;:::-;22656:39;;22720:5;22714:11;;:2;:11;;;;22706:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22814:5;22798:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22823:37;22840:5;22847:12;:10;:12::i;:::-;22823:16;:37::i;:::-;22798:62;22776:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22957:21;22966:2;22970:7;22957:8;:21::i;:::-;22575:411;;;:::o;35182:113::-;35243:7;35270:10;:17;;;;35263:24;;35182:113;:::o;57849:989::-;58006:8;;;;;;;;;;;57998:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;58056:75;58075:6;58083;;58118:10;58101:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;58091:39;;;;;;58056:18;:75::i;:::-;58048:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;58211:16;:14;:16::i;:::-;58170:37;58194:12;58170;:19;58183:5;;58170:19;;;;;;;;;;;;:23;;:37;;;;:::i;:::-;:57;;58162:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;53247:1;58317:12;:34;;58309:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;53247:1;58407:44;58438:12;58407:7;:14;58415:5;;58407:14;;;;;;;;;;;:26;58422:10;58407:26;;;;;;;;;;;;;;;;:30;;:44;;;;:::i;:::-;:66;;58399:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;58563:9;58525:34;58546:12;58525:16;:14;:16::i;:::-;:20;;:34;;;;:::i;:::-;:47;58517:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;58624:9;58619:212;58643:12;58639:1;:16;58619:212;;;58711:12;58681:7;:14;58689:5;;58681:14;;;;;;;;;;;:26;58696:10;58681:26;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;58763:1;58742:12;:19;58755:5;;58742:19;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;58783:36;58793:10;58805:13;:11;:13::i;:::-;58783:9;:36::i;:::-;58657:3;;;;;:::i;:::-;;;;58619:212;;;;57849:989;;:::o;52985:30::-;;;;;;;;;;;;;:::o;56742:968::-;56892:8;;;;;;;;;;;56884:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;56942:75;56961:6;56969;;57004:10;56987:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;56977:39;;;;;;56942:18;:75::i;:::-;56934:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;57097:16;:14;:16::i;:::-;57056:37;57080:12;57056;:19;57069:5;;57056:19;;;;;;;;;;;;:23;;:37;;;;:::i;:::-;:57;;57048:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;53146:1;57203:12;:27;;57195:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;53146:1;57286:44;57317:12;57286:7;:14;57294:5;;57286:14;;;;;;;;;;;:26;57301:10;57286:26;;;;;;;;;;;;;;;;:30;;:44;;;;:::i;:::-;:59;;57278:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;57435:9;57397:34;57418:12;57397:16;:14;:16::i;:::-;:20;;:34;;;;:::i;:::-;:47;57389:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;57496:9;57491:212;57515:12;57511:1;:16;57491:212;;;57583:12;57553:7;:14;57561:5;;57553:14;;;;;;;;;;;:26;57568:10;57553:26;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;57635:1;57614:12;:19;57627:5;;57614:19;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;57655:36;57665:10;57677:13;:11;:13::i;:::-;57655:9;:36::i;:::-;57529:3;;;;;:::i;:::-;;;;57491:212;;;;56742:968;;:::o;52958:20::-;;;;;;;;;;;;;:::o;52896:24::-;;;;;;;;;;;;;:::o;23942:339::-;24137:41;24156:12;:10;:12::i;:::-;24170:7;24137:18;:41::i;:::-;24129:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24245:28;24255:4;24261:2;24265:7;24245:9;:28::i;:::-;23942:339;;;:::o;54180:137::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54300:9:::1;54289:8;;:20;;;;;;;;;;;;;;;;;;54180:137:::0;:::o;54416:157::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54556:9:::1;54535:18;;:30;;;;;;;;;;;;;;;;;;54416:157:::0;:::o;54800:150::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54885:1:::1;54875:6;:11;;:26;;;;;54900:1;54890:6;:11;;54875:26;54867:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;54936:6;54928:5;:14;;;;54800:150:::0;:::o;34850:256::-;34947:7;34983:23;35000:5;34983:16;:23::i;:::-;34975:5;:31;34967:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35072:12;:19;35085:5;35072:19;;;;;;;;;;;;;;;:26;35092:5;35072:26;;;;;;;;;;;;35065:33;;34850:256;;;;:::o;52865:24::-;;;;;;;;;;;;;:::o;55317:217::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55397:20:::1;55420:42;55397:65;;55481:12;55473:30;;:53;55504:21;55473:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48890:1;55317:217::o:0;24352:185::-;24490:39;24507:4;24513:2;24517:7;24490:39;;;;;;;;;;;;:16;:39::i;:::-;24352:185;;;:::o;52736:45::-;;;;:::o;53050:23::-;;;;:::o;35372:233::-;35447:7;35483:30;:28;:30::i;:::-;35475:5;:38;35467:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35580:10;35591:5;35580:17;;;;;;;;;;;;;;;;;;;;;;;;35573:24;;35372:233;;;:::o;52801:45::-;;;;:::o;21187:239::-;21259:7;21279:13;21295:7;:16;21303:7;21295:16;;;;;;;;;;;;;;;;;;;;;21279:32;;21347:1;21330:19;;:5;:19;;;;21322:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21413:5;21406:12;;;21187:239;;;:::o;53939:141::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54065:7:::1;54050:12;;:22;;;;;;;;;;;;;;;;;;53939:141:::0;:::o;20917:208::-;20989:7;21034:1;21017:19;;:5;:19;;;;21009:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21101:9;:16;21111:5;21101:16;;;;;;;;;;;;;;;;21094:23;;20917:208;;;:::o;49250:94::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49315:21:::1;49333:1;49315:9;:21::i;:::-;49250:94::o:0;53545:141::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53671:7:::1;53656:12;;:22;;;;;;;;;;;;;;;;;;53545:141:::0;:::o;53080:21::-;;;;:::o;53108:39::-;53146:1;53108:39;:::o;48599:87::-;48645:7;48672:6;;;;;;;;;;;48665:13;;48599:87;:::o;53022:21::-;;;;:::o;55698:901::-;55819:8;;;;;;;;;;;55811:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;55873:18;;;;;;;;;;;55865:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;55976:16;:14;:16::i;:::-;55935:37;55959:12;55935;:19;55948:5;;55935:19;;;;;;;;;;;;:23;;:37;;;;:::i;:::-;:57;;55927:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;53297:1;56082:12;:31;;56074:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53297:1;56169:44;56200:12;56169:7;:14;56177:5;;56169:14;;;;;;;;;;;:26;56184:10;56169:26;;;;;;;;;;;;;;;;:30;;:44;;;;:::i;:::-;:63;;56161:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;56322:9;56284:34;56305:12;56284:16;:14;:16::i;:::-;:20;;:34;;;;:::i;:::-;:47;56276:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;56392:6;56388:204;56408:12;56404:1;:16;56388:204;;;56476:12;56446:7;:14;56454:5;;56446:14;;;;;;;;;;;:26;56461:10;56446:26;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;56528:1;56507:12;:19;56520:5;;56507:19;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;56544:36;56554:10;56566:13;:11;:13::i;:::-;56544:9;:36::i;:::-;56422:3;;;;;:::i;:::-;;;;56388:204;;;;55698:901;:::o;21662:104::-;21718:13;21751:7;21744:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21662:104;:::o;23345:295::-;23460:12;:10;:12::i;:::-;23448:24;;:8;:24;;;;23440:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23560:8;23515:18;:32;23534:12;:10;:12::i;:::-;23515:32;;;;;;;;;;;;;;;:42;23548:8;23515:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23613:8;23584:48;;23599:12;:10;:12::i;:::-;23584:48;;;23623:8;23584:48;;;;;;:::i;:::-;;;;;;;;23345:295;;:::o;53255:43::-;53297:1;53255:43;:::o;58977:991::-;59129:8;;;;;;;;;;;59121:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;59179:77;59198:6;59206:8;;59243:10;59226:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;59216:39;;;;;;59179:18;:77::i;:::-;59171:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;52661:3;59295:11;;:28;59287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;59420:16;:14;:16::i;:::-;59379:37;59403:12;59379;:19;59392:5;;59379:19;;;;;;;;;;;;:23;;:37;;;;:::i;:::-;:57;;59371:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;53194:1;59526:12;:29;;59518:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;53194:1;59611:44;59642:12;59611:7;:14;59619:5;;59611:14;;;;;;;;;;;:26;59626:10;59611:26;;;;;;;;;;;;;;;;:30;;:44;;;;:::i;:::-;:61;;59603:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;59721:9;59716:245;59740:12;59736:1;:16;59716:245;;;59808:12;59778:7;:14;59786:5;;59778:14;;;;;;;;;;;:26;59793:10;59778:26;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;59860:1;59839:12;:19;59852:5;;59839:19;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;59893:1;59880:11;;:14;;;;;;;:::i;:::-;;;;;;;;59913:36;59923:10;59935:13;:11;:13::i;:::-;59913:9;:36::i;:::-;59754:3;;;;;:::i;:::-;;;;59716:245;;;;58977:991;;:::o;53202:46::-;53247:1;53202:46;:::o;52927:24::-;;;;;;;;;;;;;:::o;24608:328::-;24783:41;24802:12;:10;:12::i;:::-;24816:7;24783:18;:41::i;:::-;24775:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24889:39;24903:4;24909:2;24913:7;24922:5;24889:13;:39::i;:::-;24608:328;;;;:::o;60570:612::-;60709:13;60749:17;60757:8;60749:7;:17::i;:::-;60741:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;52554:4;60848:8;:24;:40;;;;;60876:12;;;;;;;;;;;60848:40;60847:121;;;;52608:4;52554;60919:31;;;;:::i;:::-;60907:8;:44;:60;;;;;60955:12;;;;;;;;;;;60907:60;60847:121;:150;;;;60985:12;;;;;;;;;;;60847:150;60829:346;;;61059:7;61068:19;:8;:17;:19::i;:::-;61042:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;61028:61;;;;60829:346;61153:8;61136:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;61122:41;;60570:612;;;;:::o;53409:47::-;;;;;;;;;;;;;;;;;:::o;52671:45::-;;;;:::o;53742:141::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53868:7:::1;53853:12;;:22;;;;;;;;;;;;;;;;;;53742:141:::0;:::o;55018:197::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55173:9:::1;55162:8;:20;;;;;;;;;;;;:::i;:::-;;55203:4;55193:7;:14;;;;;;;;;;;;:::i;:::-;;55018:197:::0;;:::o;23711:164::-;23808:4;23832:18;:25;23851:5;23832:25;;;;;;;;;;;;;;;:35;23858:8;23832:35;;;;;;;;;;;;;;;;;;;;;;;;;23825:42;;23711:164;;;;:::o;54581:211::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54700:7:::1;54692:16;;54683:6;:25;;;;54738:9;54730:18;;54719:8;:29;;;;54776:7;54768:16;;54759:6;:25;;;;54581:211:::0;;;:::o;49499:192::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49608:1:::1;49588:22;;:8;:22;;;;49580:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49664:19;49674:8;49664:9;:19::i;:::-;49499:192:::0;:::o;53154:41::-;53194:1;53154:41;:::o;60026:468::-;48830:12;:10;:12::i;:::-;48819:23;;:7;:5;:7::i;:::-;:23;;;48811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60216:16:::1;:14;:16::i;:::-;60175:37;60199:12;60175;:19;60188:5;;60175:19;;;;;;;;;;;;:23;;:37;;;;:::i;:::-;:57;;60167:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;60318:9;60314:173;60337:12;60333:1;:16;60314:173;;;60393:1;60370:7;:14;60378:5;;60370:14;;;;;;;;;;;:19;60385:3;60370:19;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;60430:1;60409:12;:19;60422:5;;60409:19;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;60446:29;60456:3;60461:13;:11;:13::i;:::-;60446:9;:29::i;:::-;60351:3;;;;;:::i;:::-;;;;60314:173;;;;60026:468:::0;;:::o;34542:224::-;34644:4;34683:35;34668:50;;;:11;:50;;;;:90;;;;34722:36;34746:11;34722:23;:36::i;:::-;34668:90;34661:97;;34542:224;;;:::o;26446:127::-;26511:4;26563:1;26535:30;;:7;:16;26543:7;26535:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26528:37;;26446:127;;;:::o;16055:98::-;16108:7;16135:10;16128:17;;16055:98;:::o;30428:174::-;30530:2;30503:15;:24;30519:7;30503:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30586:7;30582:2;30548:46;;30557:23;30572:7;30557:14;:23::i;:::-;30548:46;;;;;;;;;;;;30428:174;;:::o;50614:190::-;50739:4;50792;50763:25;50776:5;50783:4;50763:12;:25::i;:::-;:33;50756:40;;50614:190;;;;;:::o;61739:322::-;61787:7;61820:1;61811:5;;:10;61807:247;;;52554:4;61838:20;;;;61807:247;61889:1;61880:5;;:10;61876:178;;;52608:4;61908:22;;;;61876:178;61961:1;61952:5;;:10;61948:106;;;52608:4;61979:22;;;;61948:106;62041:1;62034:8;;61739:322;;:::o;43461:98::-;43519:7;43550:1;43546;:5;;;;:::i;:::-;43539:12;;43461:98;;;;:::o;62069:306::-;62117:7;62150:1;62141:5;;:10;62137:231;;;62175:9;;62168:16;;;;62137:231;62215:1;62206:5;;:10;62202:166;;;62241:9;;62234:16;;;;62202:166;62281:1;62272:5;;:10;62268:100;;;62306:9;;62299:16;;;;62268:100;62355:1;62348:8;;62069:306;;:::o;44199:98::-;44257:7;44288:1;44284;:5;;;;:::i;:::-;44277:12;;44199:98;;;;:::o;27430:110::-;27506:26;27516:2;27520:7;27506:26;;;;;;;;;;;;:9;:26::i;:::-;27430:110;;:::o;26740:348::-;26833:4;26858:16;26866:7;26858;:16::i;:::-;26850:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26934:13;26950:23;26965:7;26950:14;:23::i;:::-;26934:39;;27003:5;26992:16;;:7;:16;;;:51;;;;27036:7;27012:31;;:20;27024:7;27012:11;:20::i;:::-;:31;;;26992:51;:87;;;;27047:32;27064:5;27071:7;27047:16;:32::i;:::-;26992:87;26984:96;;;26740:348;;;;:::o;29732:578::-;29891:4;29864:31;;:23;29879:7;29864:14;:23::i;:::-;:31;;;29856:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29974:1;29960:16;;:2;:16;;;;29952:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30030:39;30051:4;30057:2;30061:7;30030:20;:39::i;:::-;30134:29;30151:1;30155:7;30134:8;:29::i;:::-;30195:1;30176:9;:15;30186:4;30176:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30224:1;30207:9;:13;30217:2;30207:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30255:2;30236:7;:16;30244:7;30236:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30294:7;30290:2;30275:27;;30284:4;30275:27;;;;;;;;;;;;29732:578;;;:::o;49699:173::-;49755:16;49774:6;;;;;;;;;;;49755:25;;49800:8;49791:6;;:17;;;;;;;;;;;;;;;;;;49855:8;49824:40;;49845:8;49824:40;;;;;;;;;;;;49699:173;;:::o;25818:315::-;25975:28;25985:4;25991:2;25995:7;25975:9;:28::i;:::-;26022:48;26045:4;26051:2;26055:7;26064:5;26022:22;:48::i;:::-;26014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25818:315;;;;:::o;16557:723::-;16613:13;16843:1;16834:5;:10;16830:53;;;16861:10;;;;;;;;;;;;;;;;;;;;;16830:53;16893:12;16908:5;16893:20;;16924:14;16949:78;16964:1;16956:4;:9;16949:78;;16982:8;;;;;:::i;:::-;;;;17013:2;17005:10;;;;;:::i;:::-;;;16949:78;;;17037:19;17069:6;17059:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17037:39;;17087:154;17103:1;17094:5;:10;17087:154;;17131:1;17121:11;;;;;:::i;:::-;;;17198:2;17190:5;:10;;;;:::i;:::-;17177:2;:24;;;;:::i;:::-;17164:39;;17147:6;17154;17147:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17227:2;17218:11;;;;;:::i;:::-;;;17087:154;;;17265:6;17251:21;;;;;16557:723;;;;:::o;20548:305::-;20650:4;20702:25;20687:40;;;:11;:40;;;;:105;;;;20759:33;20744:48;;;:11;:48;;;;20687:105;:158;;;;20809:36;20833:11;20809:23;:36::i;:::-;20687:158;20667:178;;20548:305;;;:::o;51166:675::-;51249:7;51269:20;51292:4;51269:27;;51312:9;51307:497;51331:5;:12;51327:1;:16;51307:497;;;51365:20;51388:5;51394:1;51388:8;;;;;;;;;;;;;;;;;;;;;;51365:31;;51431:12;51415;:28;51411:382;;51558:42;51573:12;51587;51558:14;:42::i;:::-;51543:57;;51411:382;;;51735:42;51750:12;51764;51735:14;:42::i;:::-;51720:57;;51411:382;51307:497;51345:3;;;;;:::i;:::-;;;;51307:497;;;;51821:12;51814:19;;;51166:675;;;;:::o;27767:321::-;27897:18;27903:2;27907:7;27897:5;:18::i;:::-;27948:54;27979:1;27983:2;27987:7;27996:5;27948:22;:54::i;:::-;27926:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27767:321;;;:::o;61482:249::-;61675:48;61702:5;61709:3;61714:8;61675:26;:48::i;:::-;61482:249;;;:::o;31167:799::-;31322:4;31343:15;:2;:13;;;:15::i;:::-;31339:620;;;31395:2;31379:36;;;31416:12;:10;:12::i;:::-;31430:4;31436:7;31445:5;31379:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31375:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31638:1;31621:6;:13;:18;31617:272;;;31664:60;;;;;;;;;;:::i;:::-;;;;;;;;31617:272;31839:6;31833:13;31824:6;31820:2;31816:15;31809:38;31375:529;31512:41;;;31502:51;;;:6;:51;;;;31495:58;;;;;31339:620;31943:4;31936:11;;31167:799;;;;;;;:::o;19089:157::-;19174:4;19213:25;19198:40;;;:11;:40;;;;19191:47;;19089:157;;;:::o;51849:224::-;51917:13;51980:1;51974:4;51967:15;52009:1;52003:4;51996:15;52050:4;52044;52034:21;52025:30;;51952:114;;;;:::o;28424:382::-;28518:1;28504:16;;:2;:16;;;;28496:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28577:16;28585:7;28577;:16::i;:::-;28576:17;28568:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28639:45;28668:1;28672:2;28676:7;28639:20;:45::i;:::-;28714:1;28697:9;:13;28707:2;28697:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28745:2;28726:7;:16;28734:7;28726:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28790:7;28786:2;28765:33;;28782:1;28765:33;;;;;;;;;;;;28424:382;;:::o;36218:589::-;36362:45;36389:4;36395:2;36399:7;36362:26;:45::i;:::-;36440:1;36424:18;;:4;:18;;;36420:187;;;36459:40;36491:7;36459:31;:40::i;:::-;36420:187;;;36529:2;36521:10;;:4;:10;;;36517:90;;36548:47;36581:4;36587:7;36548:32;:47::i;:::-;36517:90;36420:187;36635:1;36621:16;;:2;:16;;;36617:183;;;36654:45;36691:7;36654:36;:45::i;:::-;36617:183;;;36727:4;36721:10;;:2;:10;;;36717:83;;36748:40;36776:2;36780:7;36748:27;:40::i;:::-;36717:83;36617:183;36218:589;;;:::o;8122:387::-;8182:4;8390:12;8457:7;8445:20;8437:28;;8500:1;8493:4;:8;8486:15;;;8122:387;;;:::o;32538:126::-;;;;:::o;37530:164::-;37634:10;:17;;;;37607:15;:24;37623:7;37607:24;;;;;;;;;;;:44;;;;37662:10;37678:7;37662:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37530:164;:::o;38321:988::-;38587:22;38637:1;38612:22;38629:4;38612:16;:22::i;:::-;:26;;;;:::i;:::-;38587:51;;38649:18;38670:17;:26;38688:7;38670:26;;;;;;;;;;;;38649:47;;38817:14;38803:10;:28;38799:328;;38848:19;38870:12;:18;38883:4;38870:18;;;;;;;;;;;;;;;:34;38889:14;38870:34;;;;;;;;;;;;38848:56;;38954:11;38921:12;:18;38934:4;38921:18;;;;;;;;;;;;;;;:30;38940:10;38921:30;;;;;;;;;;;:44;;;;39071:10;39038:17;:30;39056:11;39038:30;;;;;;;;;;;:43;;;;38799:328;;39223:17;:26;39241:7;39223:26;;;;;;;;;;;39216:33;;;39267:12;:18;39280:4;39267:18;;;;;;;;;;;;;;;:34;39286:14;39267:34;;;;;;;;;;;39260:41;;;38321:988;;;;:::o;39604:1079::-;39857:22;39902:1;39882:10;:17;;;;:21;;;;:::i;:::-;39857:46;;39914:18;39935:15;:24;39951:7;39935:24;;;;;;;;;;;;39914:45;;40286:19;40308:10;40319:14;40308:26;;;;;;;;;;;;;;;;;;;;;;;;40286:48;;40372:11;40347:10;40358;40347:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40483:10;40452:15;:28;40468:11;40452:28;;;;;;;;;;;:41;;;;40624:15;:24;40640:7;40624:24;;;;;;;;;;;40617:31;;;40659:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39604:1079;;;;:::o;37108:221::-;37193:14;37210:20;37227:2;37210:16;:20::i;:::-;37193:37;;37268:7;37241:12;:16;37254:2;37241:16;;;;;;;;;;;;;;;:24;37258:6;37241:24;;;;;;;;;;;:34;;;;37315:6;37286:17;:26;37304:7;37286:26;;;;;;;;;;;:35;;;;37108:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:139::-;2041:5;2079:6;2066:20;2057:29;;2095:33;2122:5;2095:33;:::i;:::-;2047:87;;;;:::o;2140:137::-;2185:5;2223:6;2210:20;2201:29;;2239:32;2265:5;2239:32;:::i;:::-;2191:86;;;;:::o;2283:141::-;2339:5;2370:6;2364:13;2355:22;;2386:32;2412:5;2386:32;:::i;:::-;2345:79;;;;:::o;2443:271::-;2498:5;2547:3;2540:4;2532:6;2528:17;2524:27;2514:2;;2565:1;2562;2555:12;2514:2;2605:6;2592:20;2630:78;2704:3;2696:6;2689:4;2681:6;2677:17;2630:78;:::i;:::-;2621:87;;2504:210;;;;;:::o;2734:273::-;2790:5;2839:3;2832:4;2824:6;2820:17;2816:27;2806:2;;2857:1;2854;2847:12;2806:2;2897:6;2884:20;2922:79;2997:3;2989:6;2982:4;2974:6;2970:17;2922:79;:::i;:::-;2913:88;;2796:211;;;;;:::o;3013:139::-;3059:5;3097:6;3084:20;3075:29;;3113:33;3140:5;3113:33;:::i;:::-;3065:87;;;;:::o;3158:262::-;3217:6;3266:2;3254:9;3245:7;3241:23;3237:32;3234:2;;;3282:1;3279;3272:12;3234:2;3325:1;3350:53;3395:7;3386:6;3375:9;3371:22;3350:53;:::i;:::-;3340:63;;3296:117;3224:196;;;;:::o;3426:407::-;3494:6;3502;3551:2;3539:9;3530:7;3526:23;3522:32;3519:2;;;3567:1;3564;3557:12;3519:2;3610:1;3635:53;3680:7;3671:6;3660:9;3656:22;3635:53;:::i;:::-;3625:63;;3581:117;3737:2;3763:53;3808:7;3799:6;3788:9;3784:22;3763:53;:::i;:::-;3753:63;;3708:118;3509:324;;;;;:::o;3839:552::-;3916:6;3924;3932;3981:2;3969:9;3960:7;3956:23;3952:32;3949:2;;;3997:1;3994;3987:12;3949:2;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;4167:2;4193:53;4238:7;4229:6;4218:9;4214:22;4193:53;:::i;:::-;4183:63;;4138:118;4295:2;4321:53;4366:7;4357:6;4346:9;4342:22;4321:53;:::i;:::-;4311:63;;4266:118;3939:452;;;;;:::o;4397:809::-;4492:6;4500;4508;4516;4565:3;4553:9;4544:7;4540:23;4536:33;4533:2;;;4582:1;4579;4572:12;4533:2;4625:1;4650:53;4695:7;4686:6;4675:9;4671:22;4650:53;:::i;:::-;4640:63;;4596:117;4752:2;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4723:118;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5036:2;5025:9;5021:18;5008:32;5067:18;5059:6;5056:30;5053:2;;;5099:1;5096;5089:12;5053:2;5127:62;5181:7;5172:6;5161:9;5157:22;5127:62;:::i;:::-;5117:72;;4979:220;4523:683;;;;;;;:::o;5212:401::-;5277:6;5285;5334:2;5322:9;5313:7;5309:23;5305:32;5302:2;;;5350:1;5347;5340:12;5302:2;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5520:2;5546:50;5588:7;5579:6;5568:9;5564:22;5546:50;:::i;:::-;5536:60;;5491:115;5292:321;;;;;:::o;5619:407::-;5687:6;5695;5744:2;5732:9;5723:7;5719:23;5715:32;5712:2;;;5760:1;5757;5750:12;5712:2;5803:1;5828:53;5873:7;5864:6;5853:9;5849:22;5828:53;:::i;:::-;5818:63;;5774:117;5930:2;5956:53;6001:7;5992:6;5981:9;5977:22;5956:53;:::i;:::-;5946:63;;5901:118;5702:324;;;;;:::o;6032:256::-;6088:6;6137:2;6125:9;6116:7;6112:23;6108:32;6105:2;;;6153:1;6150;6143:12;6105:2;6196:1;6221:50;6263:7;6254:6;6243:9;6239:22;6221:50;:::i;:::-;6211:60;;6167:114;6095:193;;;;:::o;6294:260::-;6352:6;6401:2;6389:9;6380:7;6376:23;6372:32;6369:2;;;6417:1;6414;6407:12;6369:2;6460:1;6485:52;6529:7;6520:6;6509:9;6505:22;6485:52;:::i;:::-;6475:62;;6431:116;6359:195;;;;:::o;6560:282::-;6629:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:2;;;6694:1;6691;6684:12;6646:2;6737:1;6762:63;6817:7;6808:6;6797:9;6793:22;6762:63;:::i;:::-;6752:73;;6708:127;6636:206;;;;:::o;6848:633::-;6936:6;6944;6993:2;6981:9;6972:7;6968:23;6964:32;6961:2;;;7009:1;7006;6999:12;6961:2;7080:1;7069:9;7065:17;7052:31;7110:18;7102:6;7099:30;7096:2;;;7142:1;7139;7132:12;7096:2;7170:63;7225:7;7216:6;7205:9;7201:22;7170:63;:::i;:::-;7160:73;;7023:220;7310:2;7299:9;7295:18;7282:32;7341:18;7333:6;7330:30;7327:2;;;7373:1;7370;7363:12;7327:2;7401:63;7456:7;7447:6;7436:9;7432:22;7401:63;:::i;:::-;7391:73;;7253:221;6951:530;;;;;:::o;7487:262::-;7546:6;7595:2;7583:9;7574:7;7570:23;7566:32;7563:2;;;7611:1;7608;7601:12;7563:2;7654:1;7679:53;7724:7;7715:6;7704:9;7700:22;7679:53;:::i;:::-;7669:63;;7625:117;7553:196;;;;:::o;7755:550::-;7848:6;7856;7905:2;7893:9;7884:7;7880:23;7876:32;7873:2;;;7921:1;7918;7911:12;7873:2;7964:1;7989:53;8034:7;8025:6;8014:9;8010:22;7989:53;:::i;:::-;7979:63;;7935:117;8119:2;8108:9;8104:18;8091:32;8150:18;8142:6;8139:30;8136:2;;;8182:1;8179;8172:12;8136:2;8210:78;8280:7;8271:6;8260:9;8256:22;8210:78;:::i;:::-;8200:88;;8062:236;7863:442;;;;;:::o;8311:552::-;8388:6;8396;8404;8453:2;8441:9;8432:7;8428:23;8424:32;8421:2;;;8469:1;8466;8459:12;8421:2;8512:1;8537:53;8582:7;8573:6;8562:9;8558:22;8537:53;:::i;:::-;8527:63;;8483:117;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8767:2;8793:53;8838:7;8829:6;8818:9;8814:22;8793:53;:::i;:::-;8783:63;;8738:118;8411:452;;;;;:::o;8869:118::-;8956:24;8974:5;8956:24;:::i;:::-;8951:3;8944:37;8934:53;;:::o;8993:157::-;9098:45;9118:24;9136:5;9118:24;:::i;:::-;9098:45;:::i;:::-;9093:3;9086:58;9076:74;;:::o;9156:109::-;9237:21;9252:5;9237:21;:::i;:::-;9232:3;9225:34;9215:50;;:::o;9271:118::-;9358:24;9376:5;9358:24;:::i;:::-;9353:3;9346:37;9336:53;;:::o;9395:360::-;9481:3;9509:38;9541:5;9509:38;:::i;:::-;9563:70;9626:6;9621:3;9563:70;:::i;:::-;9556:77;;9642:52;9687:6;9682:3;9675:4;9668:5;9664:16;9642:52;:::i;:::-;9719:29;9741:6;9719:29;:::i;:::-;9714:3;9710:39;9703:46;;9485:270;;;;;:::o;9761:364::-;9849:3;9877:39;9910:5;9877:39;:::i;:::-;9932:71;9996:6;9991:3;9932:71;:::i;:::-;9925:78;;10012:52;10057:6;10052:3;10045:4;10038:5;10034:16;10012:52;:::i;:::-;10089:29;10111:6;10089:29;:::i;:::-;10084:3;10080:39;10073:46;;9853:272;;;;;:::o;10131:377::-;10237:3;10265:39;10298:5;10265:39;:::i;:::-;10320:89;10402:6;10397:3;10320:89;:::i;:::-;10313:96;;10418:52;10463:6;10458:3;10451:4;10444:5;10440:16;10418:52;:::i;:::-;10495:6;10490:3;10486:16;10479:23;;10241:267;;;;;:::o;10538:845::-;10641:3;10678:5;10672:12;10707:36;10733:9;10707:36;:::i;:::-;10759:89;10841:6;10836:3;10759:89;:::i;:::-;10752:96;;10879:1;10868:9;10864:17;10895:1;10890:137;;;;11041:1;11036:341;;;;10857:520;;10890:137;10974:4;10970:9;10959;10955:25;10950:3;10943:38;11010:6;11005:3;11001:16;10994:23;;10890:137;;11036:341;11103:38;11135:5;11103:38;:::i;:::-;11163:1;11177:154;11191:6;11188:1;11185:13;11177:154;;;11265:7;11259:14;11255:1;11250:3;11246:11;11239:35;11315:1;11306:7;11302:15;11291:26;;11213:4;11210:1;11206:12;11201:17;;11177:154;;;11360:6;11355:3;11351:16;11344:23;;11043:334;;10857:520;;10645:738;;;;;;:::o;11389:366::-;11531:3;11552:67;11616:2;11611:3;11552:67;:::i;:::-;11545:74;;11628:93;11717:3;11628:93;:::i;:::-;11746:2;11741:3;11737:12;11730:19;;11535:220;;;:::o;11761:366::-;11903:3;11924:67;11988:2;11983:3;11924:67;:::i;:::-;11917:74;;12000:93;12089:3;12000:93;:::i;:::-;12118:2;12113:3;12109:12;12102:19;;11907:220;;;:::o;12133:366::-;12275:3;12296:67;12360:2;12355:3;12296:67;:::i;:::-;12289:74;;12372:93;12461:3;12372:93;:::i;:::-;12490:2;12485:3;12481:12;12474:19;;12279:220;;;:::o;12505:366::-;12647:3;12668:67;12732:2;12727:3;12668:67;:::i;:::-;12661:74;;12744:93;12833:3;12744:93;:::i;:::-;12862:2;12857:3;12853:12;12846:19;;12651:220;;;:::o;12877:366::-;13019:3;13040:67;13104:2;13099:3;13040:67;:::i;:::-;13033:74;;13116:93;13205:3;13116:93;:::i;:::-;13234:2;13229:3;13225:12;13218:19;;13023:220;;;:::o;13249:366::-;13391:3;13412:67;13476:2;13471:3;13412:67;:::i;:::-;13405:74;;13488:93;13577:3;13488:93;:::i;:::-;13606:2;13601:3;13597:12;13590:19;;13395:220;;;:::o;13621:366::-;13763:3;13784:67;13848:2;13843:3;13784:67;:::i;:::-;13777:74;;13860:93;13949:3;13860:93;:::i;:::-;13978:2;13973:3;13969:12;13962:19;;13767:220;;;:::o;13993:366::-;14135:3;14156:67;14220:2;14215:3;14156:67;:::i;:::-;14149:74;;14232:93;14321:3;14232:93;:::i;:::-;14350:2;14345:3;14341:12;14334:19;;14139:220;;;:::o;14365:366::-;14507:3;14528:67;14592:2;14587:3;14528:67;:::i;:::-;14521:74;;14604:93;14693:3;14604:93;:::i;:::-;14722:2;14717:3;14713:12;14706:19;;14511:220;;;:::o;14737:366::-;14879:3;14900:67;14964:2;14959:3;14900:67;:::i;:::-;14893:74;;14976:93;15065:3;14976:93;:::i;:::-;15094:2;15089:3;15085:12;15078:19;;14883:220;;;:::o;15109:366::-;15251:3;15272:67;15336:2;15331:3;15272:67;:::i;:::-;15265:74;;15348:93;15437:3;15348:93;:::i;:::-;15466:2;15461:3;15457:12;15450:19;;15255:220;;;:::o;15481:366::-;15623:3;15644:67;15708:2;15703:3;15644:67;:::i;:::-;15637:74;;15720:93;15809:3;15720:93;:::i;:::-;15838:2;15833:3;15829:12;15822:19;;15627:220;;;:::o;15853:366::-;15995:3;16016:67;16080:2;16075:3;16016:67;:::i;:::-;16009:74;;16092:93;16181:3;16092:93;:::i;:::-;16210:2;16205:3;16201:12;16194:19;;15999:220;;;:::o;16225:366::-;16367:3;16388:67;16452:2;16447:3;16388:67;:::i;:::-;16381:74;;16464:93;16553:3;16464:93;:::i;:::-;16582:2;16577:3;16573:12;16566:19;;16371:220;;;:::o;16597:366::-;16739:3;16760:67;16824:2;16819:3;16760:67;:::i;:::-;16753:74;;16836:93;16925:3;16836:93;:::i;:::-;16954:2;16949:3;16945:12;16938:19;;16743:220;;;:::o;16969:366::-;17111:3;17132:67;17196:2;17191:3;17132:67;:::i;:::-;17125:74;;17208:93;17297:3;17208:93;:::i;:::-;17326:2;17321:3;17317:12;17310:19;;17115:220;;;:::o;17341:366::-;17483:3;17504:67;17568:2;17563:3;17504:67;:::i;:::-;17497:74;;17580:93;17669:3;17580:93;:::i;:::-;17698:2;17693:3;17689:12;17682:19;;17487:220;;;:::o;17713:366::-;17855:3;17876:67;17940:2;17935:3;17876:67;:::i;:::-;17869:74;;17952:93;18041:3;17952:93;:::i;:::-;18070:2;18065:3;18061:12;18054:19;;17859:220;;;:::o;18085:366::-;18227:3;18248:67;18312:2;18307:3;18248:67;:::i;:::-;18241:74;;18324:93;18413:3;18324:93;:::i;:::-;18442:2;18437:3;18433:12;18426:19;;18231:220;;;:::o;18457:366::-;18599:3;18620:67;18684:2;18679:3;18620:67;:::i;:::-;18613:74;;18696:93;18785:3;18696:93;:::i;:::-;18814:2;18809:3;18805:12;18798:19;;18603:220;;;:::o;18829:366::-;18971:3;18992:67;19056:2;19051:3;18992:67;:::i;:::-;18985:74;;19068:93;19157:3;19068:93;:::i;:::-;19186:2;19181:3;19177:12;19170:19;;18975:220;;;:::o;19201:366::-;19343:3;19364:67;19428:2;19423:3;19364:67;:::i;:::-;19357:74;;19440:93;19529:3;19440:93;:::i;:::-;19558:2;19553:3;19549:12;19542:19;;19347:220;;;:::o;19573:366::-;19715:3;19736:67;19800:2;19795:3;19736:67;:::i;:::-;19729:74;;19812:93;19901:3;19812:93;:::i;:::-;19930:2;19925:3;19921:12;19914:19;;19719:220;;;:::o;19945:366::-;20087:3;20108:67;20172:2;20167:3;20108:67;:::i;:::-;20101:74;;20184:93;20273:3;20184:93;:::i;:::-;20302:2;20297:3;20293:12;20286:19;;20091:220;;;:::o;20317:366::-;20459:3;20480:67;20544:2;20539:3;20480:67;:::i;:::-;20473:74;;20556:93;20645:3;20556:93;:::i;:::-;20674:2;20669:3;20665:12;20658:19;;20463:220;;;:::o;20689:366::-;20831:3;20852:67;20916:2;20911:3;20852:67;:::i;:::-;20845:74;;20928:93;21017:3;20928:93;:::i;:::-;21046:2;21041:3;21037:12;21030:19;;20835:220;;;:::o;21061:366::-;21203:3;21224:67;21288:2;21283:3;21224:67;:::i;:::-;21217:74;;21300:93;21389:3;21300:93;:::i;:::-;21418:2;21413:3;21409:12;21402:19;;21207:220;;;:::o;21433:366::-;21575:3;21596:67;21660:2;21655:3;21596:67;:::i;:::-;21589:74;;21672:93;21761:3;21672:93;:::i;:::-;21790:2;21785:3;21781:12;21774:19;;21579:220;;;:::o;21805:118::-;21892:24;21910:5;21892:24;:::i;:::-;21887:3;21880:37;21870:53;;:::o;21929:256::-;22041:3;22056:75;22127:3;22118:6;22056:75;:::i;:::-;22156:2;22151:3;22147:12;22140:19;;22176:3;22169:10;;22045:140;;;;:::o;22191:269::-;22320:3;22342:92;22430:3;22421:6;22342:92;:::i;:::-;22335:99;;22451:3;22444:10;;22324:136;;;;:::o;22466:429::-;22643:3;22665:92;22753:3;22744:6;22665:92;:::i;:::-;22658:99;;22774:95;22865:3;22856:6;22774:95;:::i;:::-;22767:102;;22886:3;22879:10;;22647:248;;;;;:::o;22901:222::-;22994:4;23032:2;23021:9;23017:18;23009:26;;23045:71;23113:1;23102:9;23098:17;23089:6;23045:71;:::i;:::-;22999:124;;;;:::o;23129:640::-;23324:4;23362:3;23351:9;23347:19;23339:27;;23376:71;23444:1;23433:9;23429:17;23420:6;23376:71;:::i;:::-;23457:72;23525:2;23514:9;23510:18;23501:6;23457:72;:::i;:::-;23539;23607:2;23596:9;23592:18;23583:6;23539:72;:::i;:::-;23658:9;23652:4;23648:20;23643:2;23632:9;23628:18;23621:48;23686:76;23757:4;23748:6;23686:76;:::i;:::-;23678:84;;23329:440;;;;;;;:::o;23775:210::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23913:65;23975:1;23964:9;23960:17;23951:6;23913:65;:::i;:::-;23867:118;;;;:::o;23991:222::-;24084:4;24122:2;24111:9;24107:18;24099:26;;24135:71;24203:1;24192:9;24188:17;24179:6;24135:71;:::i;:::-;24089:124;;;;:::o;24219:313::-;24332:4;24370:2;24359:9;24355:18;24347:26;;24419:9;24413:4;24409:20;24405:1;24394:9;24390:17;24383:47;24447:78;24520:4;24511:6;24447:78;:::i;:::-;24439:86;;24337:195;;;;:::o;24538:419::-;24704:4;24742:2;24731:9;24727:18;24719:26;;24791:9;24785:4;24781:20;24777:1;24766:9;24762:17;24755:47;24819:131;24945:4;24819:131;:::i;:::-;24811:139;;24709:248;;;:::o;24963:419::-;25129:4;25167:2;25156:9;25152:18;25144:26;;25216:9;25210:4;25206:20;25202:1;25191:9;25187:17;25180:47;25244:131;25370:4;25244:131;:::i;:::-;25236:139;;25134:248;;;:::o;25388:419::-;25554:4;25592:2;25581:9;25577:18;25569:26;;25641:9;25635:4;25631:20;25627:1;25616:9;25612:17;25605:47;25669:131;25795:4;25669:131;:::i;:::-;25661:139;;25559:248;;;:::o;25813:419::-;25979:4;26017:2;26006:9;26002:18;25994:26;;26066:9;26060:4;26056:20;26052:1;26041:9;26037:17;26030:47;26094:131;26220:4;26094:131;:::i;:::-;26086:139;;25984:248;;;:::o;26238:419::-;26404:4;26442:2;26431:9;26427:18;26419:26;;26491:9;26485:4;26481:20;26477:1;26466:9;26462:17;26455:47;26519:131;26645:4;26519:131;:::i;:::-;26511:139;;26409:248;;;:::o;26663:419::-;26829:4;26867:2;26856:9;26852:18;26844:26;;26916:9;26910:4;26906:20;26902:1;26891:9;26887:17;26880:47;26944:131;27070:4;26944:131;:::i;:::-;26936:139;;26834:248;;;:::o;27088:419::-;27254:4;27292:2;27281:9;27277:18;27269:26;;27341:9;27335:4;27331:20;27327:1;27316:9;27312:17;27305:47;27369:131;27495:4;27369:131;:::i;:::-;27361:139;;27259:248;;;:::o;27513:419::-;27679:4;27717:2;27706:9;27702:18;27694:26;;27766:9;27760:4;27756:20;27752:1;27741:9;27737:17;27730:47;27794:131;27920:4;27794:131;:::i;:::-;27786:139;;27684:248;;;:::o;27938:419::-;28104:4;28142:2;28131:9;28127:18;28119:26;;28191:9;28185:4;28181:20;28177:1;28166:9;28162:17;28155:47;28219:131;28345:4;28219:131;:::i;:::-;28211:139;;28109:248;;;:::o;28363:419::-;28529:4;28567:2;28556:9;28552:18;28544:26;;28616:9;28610:4;28606:20;28602:1;28591:9;28587:17;28580:47;28644:131;28770:4;28644:131;:::i;:::-;28636:139;;28534:248;;;:::o;28788:419::-;28954:4;28992:2;28981:9;28977:18;28969:26;;29041:9;29035:4;29031:20;29027:1;29016:9;29012:17;29005:47;29069:131;29195:4;29069:131;:::i;:::-;29061:139;;28959:248;;;:::o;29213:419::-;29379:4;29417:2;29406:9;29402:18;29394:26;;29466:9;29460:4;29456:20;29452:1;29441:9;29437:17;29430:47;29494:131;29620:4;29494:131;:::i;:::-;29486:139;;29384:248;;;:::o;29638:419::-;29804:4;29842:2;29831:9;29827:18;29819:26;;29891:9;29885:4;29881:20;29877:1;29866:9;29862:17;29855:47;29919:131;30045:4;29919:131;:::i;:::-;29911:139;;29809:248;;;:::o;30063:419::-;30229:4;30267:2;30256:9;30252:18;30244:26;;30316:9;30310:4;30306:20;30302:1;30291:9;30287:17;30280:47;30344:131;30470:4;30344:131;:::i;:::-;30336:139;;30234:248;;;:::o;30488:419::-;30654:4;30692:2;30681:9;30677:18;30669:26;;30741:9;30735:4;30731:20;30727:1;30716:9;30712:17;30705:47;30769:131;30895:4;30769:131;:::i;:::-;30761:139;;30659:248;;;:::o;30913:419::-;31079:4;31117:2;31106:9;31102:18;31094:26;;31166:9;31160:4;31156:20;31152:1;31141:9;31137:17;31130:47;31194:131;31320:4;31194:131;:::i;:::-;31186:139;;31084:248;;;:::o;31338:419::-;31504:4;31542:2;31531:9;31527:18;31519:26;;31591:9;31585:4;31581:20;31577:1;31566:9;31562:17;31555:47;31619:131;31745:4;31619:131;:::i;:::-;31611:139;;31509:248;;;:::o;31763:419::-;31929:4;31967:2;31956:9;31952:18;31944:26;;32016:9;32010:4;32006:20;32002:1;31991:9;31987:17;31980:47;32044:131;32170:4;32044:131;:::i;:::-;32036:139;;31934:248;;;:::o;32188:419::-;32354:4;32392:2;32381:9;32377:18;32369:26;;32441:9;32435:4;32431:20;32427:1;32416:9;32412:17;32405:47;32469:131;32595:4;32469:131;:::i;:::-;32461:139;;32359:248;;;:::o;32613:419::-;32779:4;32817:2;32806:9;32802:18;32794:26;;32866:9;32860:4;32856:20;32852:1;32841:9;32837:17;32830:47;32894:131;33020:4;32894:131;:::i;:::-;32886:139;;32784:248;;;:::o;33038:419::-;33204:4;33242:2;33231:9;33227:18;33219:26;;33291:9;33285:4;33281:20;33277:1;33266:9;33262:17;33255:47;33319:131;33445:4;33319:131;:::i;:::-;33311:139;;33209:248;;;:::o;33463:419::-;33629:4;33667:2;33656:9;33652:18;33644:26;;33716:9;33710:4;33706:20;33702:1;33691:9;33687:17;33680:47;33744:131;33870:4;33744:131;:::i;:::-;33736:139;;33634:248;;;:::o;33888:419::-;34054:4;34092:2;34081:9;34077:18;34069:26;;34141:9;34135:4;34131:20;34127:1;34116:9;34112:17;34105:47;34169:131;34295:4;34169:131;:::i;:::-;34161:139;;34059:248;;;:::o;34313:419::-;34479:4;34517:2;34506:9;34502:18;34494:26;;34566:9;34560:4;34556:20;34552:1;34541:9;34537:17;34530:47;34594:131;34720:4;34594:131;:::i;:::-;34586:139;;34484:248;;;:::o;34738:419::-;34904:4;34942:2;34931:9;34927:18;34919:26;;34991:9;34985:4;34981:20;34977:1;34966:9;34962:17;34955:47;35019:131;35145:4;35019:131;:::i;:::-;35011:139;;34909:248;;;:::o;35163:419::-;35329:4;35367:2;35356:9;35352:18;35344:26;;35416:9;35410:4;35406:20;35402:1;35391:9;35387:17;35380:47;35444:131;35570:4;35444:131;:::i;:::-;35436:139;;35334:248;;;:::o;35588:419::-;35754:4;35792:2;35781:9;35777:18;35769:26;;35841:9;35835:4;35831:20;35827:1;35816:9;35812:17;35805:47;35869:131;35995:4;35869:131;:::i;:::-;35861:139;;35759:248;;;:::o;36013:419::-;36179:4;36217:2;36206:9;36202:18;36194:26;;36266:9;36260:4;36256:20;36252:1;36241:9;36237:17;36230:47;36294:131;36420:4;36294:131;:::i;:::-;36286:139;;36184:248;;;:::o;36438:222::-;36531:4;36569:2;36558:9;36554:18;36546:26;;36582:71;36650:1;36639:9;36635:17;36626:6;36582:71;:::i;:::-;36536:124;;;;:::o;36666:129::-;36700:6;36727:20;;:::i;:::-;36717:30;;36756:33;36784:4;36776:6;36756:33;:::i;:::-;36707:88;;;:::o;36801:75::-;36834:6;36867:2;36861:9;36851:19;;36841:35;:::o;36882:311::-;36959:4;37049:18;37041:6;37038:30;37035:2;;;37071:18;;:::i;:::-;37035:2;37121:4;37113:6;37109:17;37101:25;;37181:4;37175;37171:15;37163:23;;36964:229;;;:::o;37199:307::-;37260:4;37350:18;37342:6;37339:30;37336:2;;;37372:18;;:::i;:::-;37336:2;37410:29;37432:6;37410:29;:::i;:::-;37402:37;;37494:4;37488;37484:15;37476:23;;37265:241;;;:::o;37512:308::-;37574:4;37664:18;37656:6;37653:30;37650:2;;;37686:18;;:::i;:::-;37650:2;37724:29;37746:6;37724:29;:::i;:::-;37716:37;;37808:4;37802;37798:15;37790:23;;37579:241;;;:::o;37826:141::-;37875:4;37898:3;37890:11;;37921:3;37918:1;37911:14;37955:4;37952:1;37942:18;37934:26;;37880:87;;;:::o;37973:98::-;38024:6;38058:5;38052:12;38042:22;;38031:40;;;:::o;38077:99::-;38129:6;38163:5;38157:12;38147:22;;38136:40;;;:::o;38182:168::-;38265:11;38299:6;38294:3;38287:19;38339:4;38334:3;38330:14;38315:29;;38277:73;;;;:::o;38356:169::-;38440:11;38474:6;38469:3;38462:19;38514:4;38509:3;38505:14;38490:29;;38452:73;;;;:::o;38531:148::-;38633:11;38670:3;38655:18;;38645:34;;;;:::o;38685:305::-;38725:3;38744:20;38762:1;38744:20;:::i;:::-;38739:25;;38778:20;38796:1;38778:20;:::i;:::-;38773:25;;38932:1;38864:66;38860:74;38857:1;38854:81;38851:2;;;38938:18;;:::i;:::-;38851:2;38982:1;38979;38975:9;38968:16;;38729:261;;;;:::o;38996:185::-;39036:1;39053:20;39071:1;39053:20;:::i;:::-;39048:25;;39087:20;39105:1;39087:20;:::i;:::-;39082:25;;39126:1;39116:2;;39131:18;;:::i;:::-;39116:2;39173:1;39170;39166:9;39161:14;;39038:143;;;;:::o;39187:348::-;39227:7;39250:20;39268:1;39250:20;:::i;:::-;39245:25;;39284:20;39302:1;39284:20;:::i;:::-;39279:25;;39472:1;39404:66;39400:74;39397:1;39394:81;39389:1;39382:9;39375:17;39371:105;39368:2;;;39479:18;;:::i;:::-;39368:2;39527:1;39524;39520:9;39509:20;;39235:300;;;;:::o;39541:191::-;39581:4;39601:20;39619:1;39601:20;:::i;:::-;39596:25;;39635:20;39653:1;39635:20;:::i;:::-;39630:25;;39674:1;39671;39668:8;39665:2;;;39679:18;;:::i;:::-;39665:2;39724:1;39721;39717:9;39709:17;;39586:146;;;;:::o;39738:96::-;39775:7;39804:24;39822:5;39804:24;:::i;:::-;39793:35;;39783:51;;;:::o;39840:90::-;39874:7;39917:5;39910:13;39903:21;39892:32;;39882:48;;;:::o;39936:77::-;39973:7;40002:5;39991:16;;39981:32;;;:::o;40019:149::-;40055:7;40095:66;40088:5;40084:78;40073:89;;40063:105;;;:::o;40174:126::-;40211:7;40251:42;40244:5;40240:54;40229:65;;40219:81;;;:::o;40306:77::-;40343:7;40372:5;40361:16;;40351:32;;;:::o;40389:154::-;40473:6;40468:3;40463;40450:30;40535:1;40526:6;40521:3;40517:16;40510:27;40440:103;;;:::o;40549:307::-;40617:1;40627:113;40641:6;40638:1;40635:13;40627:113;;;40726:1;40721:3;40717:11;40711:18;40707:1;40702:3;40698:11;40691:39;40663:2;40660:1;40656:10;40651:15;;40627:113;;;40758:6;40755:1;40752:13;40749:2;;;40838:1;40829:6;40824:3;40820:16;40813:27;40749:2;40598:258;;;;:::o;40862:320::-;40906:6;40943:1;40937:4;40933:12;40923:22;;40990:1;40984:4;40980:12;41011:18;41001:2;;41067:4;41059:6;41055:17;41045:27;;41001:2;41129;41121:6;41118:14;41098:18;41095:38;41092:2;;;41148:18;;:::i;:::-;41092:2;40913:269;;;;:::o;41188:281::-;41271:27;41293:4;41271:27;:::i;:::-;41263:6;41259:40;41401:6;41389:10;41386:22;41365:18;41353:10;41350:34;41347:62;41344:2;;;41412:18;;:::i;:::-;41344:2;41452:10;41448:2;41441:22;41231:238;;;:::o;41475:233::-;41514:3;41537:24;41555:5;41537:24;:::i;:::-;41528:33;;41583:66;41576:5;41573:77;41570:2;;;41653:18;;:::i;:::-;41570:2;41700:1;41693:5;41689:13;41682:20;;41518:190;;;:::o;41714:100::-;41753:7;41782:26;41802:5;41782:26;:::i;:::-;41771:37;;41761:53;;;:::o;41820:94::-;41859:7;41888:20;41902:5;41888:20;:::i;:::-;41877:31;;41867:47;;;:::o;41920:176::-;41952:1;41969:20;41987:1;41969:20;:::i;:::-;41964:25;;42003:20;42021:1;42003:20;:::i;:::-;41998:25;;42042:1;42032:2;;42047:18;;:::i;:::-;42032:2;42088:1;42085;42081:9;42076:14;;41954:142;;;;:::o;42102:180::-;42150:77;42147:1;42140:88;42247:4;42244:1;42237:15;42271:4;42268:1;42261:15;42288:180;42336:77;42333:1;42326:88;42433:4;42430:1;42423:15;42457:4;42454:1;42447:15;42474:180;42522:77;42519:1;42512:88;42619:4;42616:1;42609:15;42643:4;42640:1;42633:15;42660:180;42708:77;42705:1;42698:88;42805:4;42802:1;42795:15;42829:4;42826:1;42819:15;42846:102;42887:6;42938:2;42934:7;42929:2;42922:5;42918:14;42914:28;42904:38;;42894:54;;;:::o;42954:94::-;42987:8;43035:5;43031:2;43027:14;43006:35;;42996:52;;;:::o;43054:161::-;43194:13;43190:1;43182:6;43178:14;43171:37;43160:55;:::o;43221:230::-;43361:34;43357:1;43349:6;43345:14;43338:58;43430:13;43425:2;43417:6;43413:15;43406:38;43327:124;:::o;43457:237::-;43597:34;43593:1;43585:6;43581:14;43574:58;43666:20;43661:2;43653:6;43649:15;43642:45;43563:131;:::o;43700:178::-;43840:30;43836:1;43828:6;43824:14;43817:54;43806:72;:::o;43884:225::-;44024:34;44020:1;44012:6;44008:14;44001:58;44093:8;44088:2;44080:6;44076:15;44069:33;43990:119;:::o;44115:178::-;44255:30;44251:1;44243:6;44239:14;44232:54;44221:72;:::o;44299:182::-;44439:34;44435:1;44427:6;44423:14;44416:58;44405:76;:::o;44487:223::-;44627:34;44623:1;44615:6;44611:14;44604:58;44696:6;44691:2;44683:6;44679:15;44672:31;44593:117;:::o;44716:175::-;44856:27;44852:1;44844:6;44840:14;44833:51;44822:69;:::o;44897:168::-;45037:20;45033:1;45025:6;45021:14;45014:44;45003:62;:::o;45071:181::-;45211:33;45207:1;45199:6;45195:14;45188:57;45177:75;:::o;45258:231::-;45398:34;45394:1;45386:6;45382:14;45375:58;45467:14;45462:2;45454:6;45450:15;45443:39;45364:125;:::o;45495:243::-;45635:34;45631:1;45623:6;45619:14;45612:58;45704:26;45699:2;45691:6;45687:15;45680:51;45601:137;:::o;45744:165::-;45884:17;45880:1;45872:6;45868:14;45861:41;45850:59;:::o;45915:229::-;46055:34;46051:1;46043:6;46039:14;46032:58;46124:12;46119:2;46111:6;46107:15;46100:37;46021:123;:::o;46150:228::-;46290:34;46286:1;46278:6;46274:14;46267:58;46359:11;46354:2;46346:6;46342:15;46335:36;46256:122;:::o;46384:182::-;46524:34;46520:1;46512:6;46508:14;46501:58;46490:76;:::o;46572:172::-;46712:24;46708:1;46700:6;46696:14;46689:48;46678:66;:::o;46750:231::-;46890:34;46886:1;46878:6;46874:14;46867:58;46959:14;46954:2;46946:6;46942:15;46935:39;46856:125;:::o;46987:182::-;47127:34;47123:1;47115:6;47111:14;47104:58;47093:76;:::o;47175:228::-;47315:34;47311:1;47303:6;47299:14;47292:58;47384:11;47379:2;47371:6;47367:15;47360:36;47281:122;:::o;47409:234::-;47549:34;47545:1;47537:6;47533:14;47526:58;47618:17;47613:2;47605:6;47601:15;47594:42;47515:128;:::o;47649:220::-;47789:34;47785:1;47777:6;47773:14;47766:58;47858:3;47853:2;47845:6;47841:15;47834:28;47755:114;:::o;47875:236::-;48015:34;48011:1;48003:6;47999:14;47992:58;48084:19;48079:2;48071:6;48067:15;48060:44;47981:130;:::o;48117:231::-;48257:34;48253:1;48245:6;48241:14;48234:58;48326:14;48321:2;48313:6;48309:15;48302:39;48223:125;:::o;48354:170::-;48494:22;48490:1;48482:6;48478:14;48471:46;48460:64;:::o;48530:182::-;48670:34;48666:1;48658:6;48654:14;48647:58;48636:76;:::o;48718:290::-;48858:34;48854:1;48846:6;48842:14;48835:58;48927:34;48922:2;48914:6;48910:15;48903:59;48996:4;48991:2;48983:6;48979:15;48972:29;48824:184;:::o;49014:122::-;49087:24;49105:5;49087:24;:::i;:::-;49080:5;49077:35;49067:2;;49126:1;49123;49116:12;49067:2;49057:79;:::o;49142:116::-;49212:21;49227:5;49212:21;:::i;:::-;49205:5;49202:32;49192:2;;49248:1;49245;49238:12;49192:2;49182:76;:::o;49264:122::-;49337:24;49355:5;49337:24;:::i;:::-;49330:5;49327:35;49317:2;;49376:1;49373;49366:12;49317:2;49307:79;:::o;49392:120::-;49464:23;49481:5;49464:23;:::i;:::-;49457:5;49454:34;49444:2;;49502:1;49499;49492:12;49444:2;49434:78;:::o;49518:122::-;49591:24;49609:5;49591:24;:::i;:::-;49584:5;49581:35;49571:2;;49630:1;49627;49620:12;49571:2;49561:79;:::o
Swarm Source
ipfs://9b6bf839f0d2f65c6dfb6e822ff01c3ad853afc3d969241bcd899f45edc65052
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.