Overview
TokenID
849
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Craft
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "./ERC721.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; contract Craft is ERC721, Ownable { using SafeMath for uint256; string public baseURI; bool public setBaseUriKey = true; uint256 public tokenPrice = 150000000000000000 wei; // 0.15 Ether uint256 public remainingPreToken; uint256 public TOTAL_TOKEN = 10000; uint256 public GENERAL_TOKEN_MAX = 6500; uint256 public PRE_TOKEN_MAX = 3000; uint256 public reserve = 500; uint256 public currentSupply; uint256 public generalSupply; uint256 public preSupply; uint256 public airDropSupply; uint256 public generalMintMax = 1; uint256 public preMintMax = 1; uint256 public generalSaleStartTimestamp; uint256 public preSaleStartTimestamp; bool public generalSaleActive = true; bool public preSaleActive = true; uint256 public generalSaleTargetCount; uint256 public preSaleTargetCount; mapping(address => uint256) public generalMintCount; mapping(address => uint256) public preMintCount; mapping(address => bool) public generalSaleTarget; mapping(address => bool) public preSaleTarget; constructor(string memory baseURI_, uint256 _preSaleStartTimestamp, uint256 _generalSaleStartTimestamp) ERC721("Hyundai Metamobility", "HMM") { baseURI = baseURI_; preSaleStartTimestamp = _preSaleStartTimestamp; generalSaleStartTimestamp = _generalSaleStartTimestamp; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseURI(string memory baseURI_) external onlyOwner { require(setBaseUriKey, "Cannot change baseURI."); baseURI = baseURI_; } function setLockBaseUri() external onlyOwner { setBaseUriKey = false; } function airDrop(address[] memory _accounts, uint256 _amount) external onlyOwner { require(getAirDropSupply().add((_accounts.length * _amount)) <= reserve + remainingPreToken, "Can no longer airdrop."); require(totalSupply().add(_accounts.length * _amount) <= TOTAL_TOKEN, "Can no longer airdrop."); for (uint i = 0; i < _accounts.length; i++) { for(uint j = 0; j < _amount; j++) { _safeMint(_accounts[i], currentSupply+1); currentSupply++; airDropSupply++; } } } function generalMint() external payable { require(currentSupply < TOTAL_TOKEN, "sold out."); require(block.timestamp >= generalSaleStartTimestamp, "Sale has not started"); require(generalSaleActive, "Not for General-sale yet."); require(generalSupply < GENERAL_TOKEN_MAX, "General-sale sold out."); require(generalSaleTarget[msg.sender], "It is not a General-sale target."); require(generalMintCount[msg.sender] < generalMintMax, "It is no longer available for purchase."); require(msg.value == tokenPrice, "You entered an incorrect amount."); _safeMint(msg.sender, currentSupply + 1); currentSupply++; generalSupply++; generalMintCount[msg.sender]++; } function preMint() external payable { require(currentSupply < TOTAL_TOKEN, "sold out."); require(block.timestamp >= preSaleStartTimestamp, "Sale has not started"); require(preSaleActive, "Not for pre-sale yet."); require(preSupply < PRE_TOKEN_MAX, "Pre-sale sold out."); require(preSaleTarget[msg.sender], "It is not a pre-sale target."); require(preMintCount[msg.sender] < preMintMax, "It is no longer available for purchase."); require(msg.value == tokenPrice, "You entered an incorrect amount."); _safeMint(msg.sender, currentSupply + 1); currentSupply++; preSupply++; preMintCount[msg.sender]++; } function setGeneralSaleStartTimestamp(uint256 _generalSaleStartTimestamp) external onlyOwner { generalSaleStartTimestamp = _generalSaleStartTimestamp; } function setPreSaleStartTimestamp(uint256 _preSaleStartTimestamp) external onlyOwner { preSaleStartTimestamp = _preSaleStartTimestamp; } function flipGeneralSaleState() external onlyOwner { generalSaleActive = !generalSaleActive; } function flipPreSaleState() external onlyOwner { preSaleActive = !preSaleActive; } function setGeneralMintMax(uint256 _generalMintMax) external onlyOwner { generalMintMax = _generalMintMax; } function setPreMintMax(uint256 _preMintMax) external onlyOwner { preMintMax = _preMintMax; } function setGeneralSaleTarget(address[] memory _account) external onlyOwner { for (uint256 i = 0; i < _account.length; i++) { if (generalSaleTarget[_account[i]] == false) { generalSaleTarget[_account[i]] = true; generalSaleTargetCount++; } } } function setPreSaleTarget(address[] memory _account) external onlyOwner { for (uint256 i = 0; i < _account.length; i++) { if (preSaleTarget[_account[i]] == false) { preSaleTarget[_account[i]] = true; preSaleTargetCount++; } } } function deleteGeneralSaleTarget(address[] memory _account) external onlyOwner { for (uint256 i = 0; i < _account.length; i++) { if (generalSaleTarget[_account[i]] == true) { generalSaleTarget[_account[i]] = false; generalSaleTargetCount--; } } } function deletePreSaleTarget(address[] memory _account) external onlyOwner { for (uint256 i = 0; i < _account.length; i++) { if (preSaleTarget[_account[i]] == true) { preSaleTarget[_account[i]] = false; preSaleTargetCount--; } } } function setRemainingPreToken() external onlyOwner { preSaleActive = false; remainingPreToken = PRE_TOKEN_MAX - preSupply; } function setTokenPrice(uint256 _tokenPrice) external onlyOwner() { tokenPrice = _tokenPrice; } function totalSupply() internal view returns (uint256) { return currentSupply; } function getAirDropSupply() internal view returns (uint256) { return airDropSupply; } function multiWithdraw(address[] memory _accounts, uint256[] memory _amounts) external onlyOwner { for (uint i = 0; i < _accounts.length; i++) { require(payable(_accounts[i]).send(_amounts[i])); } } function withdraw(address _account, uint256 _amount) external onlyOwner { require(payable(_account).send(_amount)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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(), ".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // 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 generally not needed starting with Solidity 0.8, since 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; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"uint256","name":"_preSaleStartTimestamp","type":"uint256"},{"internalType":"uint256","name":"_generalSaleStartTimestamp","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GENERAL_TOKEN_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRE_TOKEN_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airDropSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"deleteGeneralSaleTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"deletePreSaleTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipGeneralSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"generalMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"generalMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalSaleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"generalSaleTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalSaleTargetCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"multiWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preSaleTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleTargetCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingPreToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setBaseUriKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_generalMintMax","type":"uint256"}],"name":"setGeneralMintMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_generalSaleStartTimestamp","type":"uint256"}],"name":"setGeneralSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"setGeneralSaleTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLockBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preMintMax","type":"uint256"}],"name":"setPreMintMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preSaleStartTimestamp","type":"uint256"}],"name":"setPreSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"setPreSaleTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRemainingPreToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600860006101000a81548160ff021916908315150217905550670214e8348c4f0000600955612710600b55611964600c55610bb8600d556101f4600e55600160135560016014556001601760006101000a81548160ff0219169083151502179055506001601760016101000a81548160ff0219169083151502179055503480156200009057600080fd5b5060405162005e2e38038062005e2e8339818101604052810190620000b69190620003b9565b6040518060400160405280601481526020017f4879756e646169204d6574616d6f62696c6974790000000000000000000000008152506040518060400160405280600381526020017f484d4d000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013a92919062000274565b5080600190805190602001906200015392919062000274565b505050620001766200016a620001a660201b60201c565b620001ae60201b60201c565b82600790805190602001906200018e92919062000274565b508160168190555080601581905550505050620005dc565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028290620004d3565b90600052602060002090601f016020900481019282620002a65760008555620002f2565b82601f10620002c157805160ff1916838001178555620002f2565b82800160010185558215620002f2579182015b82811115620002f1578251825591602001919060010190620002d4565b5b50905062000301919062000305565b5090565b5b808211156200032057600081600090555060010162000306565b5090565b60006200033b62000335846200045d565b62000434565b9050828152602081018484840111156200035a5762000359620005a2565b5b620003678482856200049d565b509392505050565b600082601f8301126200038757620003866200059d565b5b81516200039984826020860162000324565b91505092915050565b600081519050620003b381620005c2565b92915050565b600080600060608486031215620003d557620003d4620005ac565b5b600084015167ffffffffffffffff811115620003f657620003f5620005a7565b5b62000404868287016200036f565b93505060206200041786828701620003a2565b92505060406200042a86828701620003a2565b9150509250925092565b60006200044062000453565b90506200044e828262000509565b919050565b6000604051905090565b600067ffffffffffffffff8211156200047b576200047a6200056e565b5b6200048682620005b1565b9050602081019050919050565b6000819050919050565b60005b83811015620004bd578082015181840152602081019050620004a0565b83811115620004cd576000848401525b50505050565b60006002820490506001821680620004ec57607f821691505b602082108114156200050357620005026200053f565b5b50919050565b6200051482620005b1565b810181811067ffffffffffffffff821117156200053657620005356200056e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005cd8162000493565b8114620005d957600080fd5b50565b61584280620005ec6000396000f3fe60806040526004361061038c5760003560e01c80637ff9b596116101dc578063c87b56dd11610102578063e985e9c5116100a0578063f2fde38b1161006f578063f2fde38b14610caa578063f3fef3a314610cd3578063fafe84d214610cfc578063fd1fc4a014610d395761038c565b8063e985e9c514610bee578063efa4168a14610c2b578063f032554914610c56578063f285f87614610c6d5761038c565b8063ce8287f7116100dc578063ce8287f714610b46578063d5599bf314610b71578063dad10fd414610b9c578063e734171d14610bc55761038c565b8063c87b56dd14610aa1578063cab6aac914610ade578063cd3293de14610b1b5761038c565b80639a5a77c11161017a578063ac9dbe2311610149578063ac9dbe2314610a0b578063b88d4fde14610a22578063b8c2a1e714610a4b578063b965f64314610a765761038c565b80639a5a77c1146109825780639e41c64d146109ad578063a22cb465146109b7578063a96d3e59146109e05761038c565b806384494708116101b657806384494708146108d85780638da5cb5b1461090357806395d89b411461092e57806399ab6c51146109595761038c565b80637ff9b5961461085957806380e1d7181461088457806380e94b3b146108ad5761038c565b806342842e0e116102c1578063608946d81161025f57806370a082311161022e57806370a08231146107af578063715018a6146107ec57806376477fc814610803578063771282f61461082e5761038c565b8063608946d8146106f55780636352211e1461071e5780636a61e5fc1461075b5780636c0360eb146107845761038c565b80634b969feb1161029b5780634b969feb1461065f57806355f804b3146106765780635a1efe0c1461069f5780635f28bc16146106ca5761038c565b806342842e0e146105e4578063445acc951461060d57806348d1588f146106365761038c565b806322aee90b1161032e5780633a16b347116103085780633a16b3471461056d5780633bb31d00146105985780633cd29ac8146105af5780633f314924146105b95761038c565b806322aee90b146104f057806323b872dd1461051957806326a460fb146105425761038c565b8063095ea7b31161036a578063095ea7b31461043657806311aceb531461045f5780631c77403a14610488578063218a6d40146104b35761038c565b806301ffc9a71461039157806306fdde03146103ce578063081812fc146103f9575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061420f565b610d62565b6040516103c5919061483c565b60405180910390f35b3480156103da57600080fd5b506103e3610e44565b6040516103f09190614857565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906142b2565b610ed6565b60405161042d91906147d5565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906140b2565b610f5b565b005b34801561046b57600080fd5b50610486600480360381019061048191906140f2565b611073565b005b34801561049457600080fd5b5061049d611210565b6040516104aa919061483c565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613f2f565b611223565b6040516104e7919061483c565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906142b2565b611243565b005b34801561052557600080fd5b50610540600480360381019061053b9190613f9c565b6112c9565b005b34801561054e57600080fd5b50610557611329565b6040516105649190614bf9565b60405180910390f35b34801561057957600080fd5b5061058261132f565b60405161058f9190614bf9565b60405180910390f35b3480156105a457600080fd5b506105ad611335565b005b6105b76113dd565b005b3480156105c557600080fd5b506105ce6116ef565b6040516105db9190614bf9565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613f9c565b6116f5565b005b34801561061957600080fd5b50610634600480360381019061062f91906140f2565b611715565b005b34801561064257600080fd5b5061065d600480360381019061065891906142b2565b6118b2565b005b34801561066b57600080fd5b50610674611938565b005b34801561068257600080fd5b5061069d60048036038101906106989190614269565b6119d1565b005b3480156106ab57600080fd5b506106b4611ab6565b6040516106c19190614bf9565b60405180910390f35b3480156106d657600080fd5b506106df611abc565b6040516106ec9190614bf9565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906140f2565b611ac2565b005b34801561072a57600080fd5b50610745600480360381019061074091906142b2565b611c5f565b60405161075291906147d5565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d91906142b2565b611d11565b005b34801561079057600080fd5b50610799611d97565b6040516107a69190614857565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190613f2f565b611e25565b6040516107e39190614bf9565b60405180910390f35b3480156107f857600080fd5b50610801611edd565b005b34801561080f57600080fd5b50610818611f65565b6040516108259190614bf9565b60405180910390f35b34801561083a57600080fd5b50610843611f6b565b6040516108509190614bf9565b60405180910390f35b34801561086557600080fd5b5061086e611f71565b60405161087b9190614bf9565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061413b565b611f77565b005b3480156108b957600080fd5b506108c2612089565b6040516108cf9190614bf9565b60405180910390f35b3480156108e457600080fd5b506108ed61208f565b6040516108fa919061483c565b60405180910390f35b34801561090f57600080fd5b506109186120a2565b60405161092591906147d5565b60405180910390f35b34801561093a57600080fd5b506109436120cc565b6040516109509190614857565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b91906142b2565b61215e565b005b34801561098e57600080fd5b506109976121e4565b6040516109a49190614bf9565b60405180910390f35b6109b56121ea565b005b3480156109c357600080fd5b506109de60048036038101906109d99190614072565b6124fc565b005b3480156109ec57600080fd5b506109f5612512565b604051610a029190614bf9565b60405180910390f35b348015610a1757600080fd5b50610a20612518565b005b348015610a2e57600080fd5b50610a496004803603810190610a449190613fef565b6125c7565b005b348015610a5757600080fd5b50610a60612629565b604051610a6d919061483c565b60405180910390f35b348015610a8257600080fd5b50610a8b61263c565b604051610a989190614bf9565b60405180910390f35b348015610aad57600080fd5b50610ac86004803603810190610ac391906142b2565b612642565b604051610ad59190614857565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b009190613f2f565b6126e9565b604051610b12919061483c565b60405180910390f35b348015610b2757600080fd5b50610b30612709565b604051610b3d9190614bf9565b60405180910390f35b348015610b5257600080fd5b50610b5b61270f565b604051610b689190614bf9565b60405180910390f35b348015610b7d57600080fd5b50610b86612715565b604051610b939190614bf9565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe91906142b2565b61271b565b005b348015610bd157600080fd5b50610bec6004803603810190610be791906140f2565b6127a1565b005b348015610bfa57600080fd5b50610c156004803603810190610c109190613f5c565b61293e565b604051610c22919061483c565b60405180910390f35b348015610c3757600080fd5b50610c406129d2565b604051610c4d9190614bf9565b60405180910390f35b348015610c6257600080fd5b50610c6b6129d8565b005b348015610c7957600080fd5b50610c946004803603810190610c8f9190613f2f565b612a80565b604051610ca19190614bf9565b60405180910390f35b348015610cb657600080fd5b50610cd16004803603810190610ccc9190613f2f565b612a98565b005b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906140b2565b612b90565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190613f2f565b612c4e565b604051610d309190614bf9565b60405180910390f35b348015610d4557600080fd5b50610d606004803603810190610d5b91906141b3565b612c66565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e2d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e3d5750610e3c82612e68565b5b9050919050565b606060008054610e5390614f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7f90614f2b565b8015610ecc5780601f10610ea157610100808354040283529160200191610ecc565b820191906000526020600020905b815481529060010190602001808311610eaf57829003601f168201915b5050505050905090565b6000610ee182612ed2565b610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790614a79565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f6682611c5f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90614b39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ff6612f3e565b73ffffffffffffffffffffffffffffffffffffffff16148061102557506110248161101f612f3e565b61293e565b5b611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906149d9565b60405180910390fd5b61106e8383612f46565b505050565b61107b612f3e565b73ffffffffffffffffffffffffffffffffffffffff166110996120a2565b73ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614a99565b60405180910390fd5b60005b815181101561120c5760001515601c600084848151811061111657611115615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156111f9576001601c600084848151811061118757611186615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601860008154809291906111f390614f8e565b91905055505b808061120490614f8e565b9150506110f2565b5050565b600860009054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b61124b612f3e565b73ffffffffffffffffffffffffffffffffffffffff166112696120a2565b73ffffffffffffffffffffffffffffffffffffffff16146112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690614a99565b60405180910390fd5b8060168190555050565b6112da6112d4612f3e565b82612fff565b611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614b99565b60405180910390fd5b6113248383836130dd565b505050565b60185481565b60125481565b61133d612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661135b6120a2565b73ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890614a99565b60405180910390fd5b601760009054906101000a900460ff1615601760006101000a81548160ff021916908315150217905550565b600b54600f5410611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90614b19565b60405180910390fd5b601654421015611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90614bd9565b60405180910390fd5b601760019054906101000a900460ff166114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614899565b60405180910390fd5b600d54601154106114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614b59565b60405180910390fd5b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611580906149b9565b60405180910390fd5b601454601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614a39565b60405180910390fd5b6009543414611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790614979565b60405180910390fd5b611668336001600f546116639190614d36565b613344565b600f600081548092919061167b90614f8e565b91905055506011600081548092919061169390614f8e565b9190505550601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906116e890614f8e565b9190505550565b600c5481565b611710838383604051806020016040528060008152506125c7565b505050565b61171d612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661173b6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890614a99565b60405180910390fd5b60005b81518110156118ae5760011515601c60008484815181106117b8576117b7615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561189b576000601c600084848151811061182957611828615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018600081548092919061189590614f01565b91905055505b80806118a690614f8e565b915050611794565b5050565b6118ba612f3e565b73ffffffffffffffffffffffffffffffffffffffff166118d86120a2565b73ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590614a99565b60405180910390fd5b8060148190555050565b611940612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661195e6120a2565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614a99565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6119d9612f3e565b73ffffffffffffffffffffffffffffffffffffffff166119f76120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490614a99565b60405180910390fd5b600860009054906101000a900460ff16611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390614bb9565b60405180910390fd5b8060079080519060200190611ab2929190613c07565b5050565b60105481565b60135481565b611aca612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611ae86120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614a99565b60405180910390fd5b60005b8151811015611c5b5760011515601d6000848481518110611b6557611b64615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611c48576000601d6000848481518110611bd657611bd5615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060196000815480929190611c4290614f01565b91905055505b8080611c5390614f8e565b915050611b41565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90614a19565b60405180910390fd5b80915050919050565b611d19612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611d376120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490614a99565b60405180910390fd5b8060098190555050565b60078054611da490614f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd090614f2b565b8015611e1d5780601f10611df257610100808354040283529160200191611e1d565b820191906000526020600020905b815481529060010190602001808311611e0057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d906149f9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ee5612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611f036120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090614a99565b60405180910390fd5b611f636000613362565b565b60195481565b600f5481565b60095481565b611f7f612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611f9d6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614a99565b60405180910390fd5b60005b82518110156120845782818151811061201257612011615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc83838151811061204657612045615095565b5b60200260200101519081150290604051600060405180830381858888f1935050505061207157600080fd5b808061207c90614f8e565b915050611ff6565b505050565b600d5481565b601760019054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120db90614f2b565b80601f016020809104026020016040519081016040528092919081815260200182805461210790614f2b565b80156121545780601f1061212957610100808354040283529160200191612154565b820191906000526020600020905b81548152906001019060200180831161213757829003601f168201915b5050505050905090565b612166612f3e565b73ffffffffffffffffffffffffffffffffffffffff166121846120a2565b73ffffffffffffffffffffffffffffffffffffffff16146121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614a99565b60405180910390fd5b8060138190555050565b600b5481565b600b54600f5410612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790614b19565b60405180910390fd5b601554421015612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90614bd9565b60405180910390fd5b601760009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614879565b60405180910390fd5b600c546010541061230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190614af9565b60405180910390fd5b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614ad9565b60405180910390fd5b601354601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241090614a39565b60405180910390fd5b600954341461245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245490614979565b60405180910390fd5b612475336001600f546124709190614d36565b613344565b600f600081548092919061248890614f8e565b9190505550601060008154809291906124a090614f8e565b9190505550601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906124f590614f8e565b9190505550565b61250e612507612f3e565b8383613428565b5050565b60165481565b612520612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661253e6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614a99565b60405180910390fd5b6000601760016101000a81548160ff021916908315150217905550601154600d546125bf9190614e17565b600a81905550565b6125d86125d2612f3e565b83612fff565b612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90614b99565b60405180910390fd5b61262384848484613595565b50505050565b601760009054906101000a900460ff1681565b600a5481565b606061264d82612ed2565b61268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614ab9565b60405180910390fd5b60006126966135f1565b905060008151116126b657604051806020016040528060008152506126e1565b806126c084613683565b6040516020016126d19291906147a6565b6040516020818303038152906040525b915050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600e5481565b60155481565b60145481565b612723612f3e565b73ffffffffffffffffffffffffffffffffffffffff166127416120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278e90614a99565b60405180910390fd5b8060158190555050565b6127a9612f3e565b73ffffffffffffffffffffffffffffffffffffffff166127c76120a2565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614a99565b60405180910390fd5b60005b815181101561293a5760001515601d600084848151811061284457612843615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612927576001601d60008484815181106128b5576128b4615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506019600081548092919061292190614f8e565b91905055505b808061293290614f8e565b915050612820565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b6129e0612f3e565b73ffffffffffffffffffffffffffffffffffffffff166129fe6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614a99565b60405180910390fd5b601760019054906101000a900460ff1615601760016101000a81548160ff021916908315150217905550565b601a6020528060005260406000206000915090505481565b612aa0612f3e565b73ffffffffffffffffffffffffffffffffffffffff16612abe6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b906148d9565b60405180910390fd5b612b8d81613362565b50565b612b98612f3e565b73ffffffffffffffffffffffffffffffffffffffff16612bb66120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390614a99565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612c4a57600080fd5b5050565b601b6020528060005260406000206000915090505481565b612c6e612f3e565b73ffffffffffffffffffffffffffffffffffffffff16612c8c6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990614a99565b60405180910390fd5b600a54600e54612cf29190614d36565b612d18828451612d029190614dbd565b612d0a6137e4565b6137ee90919063ffffffff16565b1115612d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5090614b79565b60405180910390fd5b600b54612d82828451612d6c9190614dbd565b612d74613804565b6137ee90919063ffffffff16565b1115612dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dba90614b79565b60405180910390fd5b60005b8251811015612e635760005b82811015612e4f57612e0c848381518110612df057612def615095565b5b60200260200101516001600f54612e079190614d36565b613344565b600f6000815480929190612e1f90614f8e565b919050555060126000815480929190612e3790614f8e565b91905055508080612e4790614f8e565b915050612dd2565b508080612e5b90614f8e565b915050612dc6565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612fb983611c5f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061300a82612ed2565b613049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304090614999565b60405180910390fd5b600061305483611c5f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130965750613095818561293e565b5b806130d457508373ffffffffffffffffffffffffffffffffffffffff166130bc84610ed6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130fd82611c5f565b73ffffffffffffffffffffffffffffffffffffffff1614613153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314a906148f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614939565b60405180910390fd5b6131ce83838361380e565b6131d9600082612f46565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132299190614e17565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132809190614d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461333f838383613813565b505050565b61335e828260405180602001604052806000815250613818565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348e90614959565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613588919061483c565b60405180910390a3505050565b6135a08484846130dd565b6135ac84848484613873565b6135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e2906148b9565b60405180910390fd5b50505050565b60606007805461360090614f2b565b80601f016020809104026020016040519081016040528092919081815260200182805461362c90614f2b565b80156136795780601f1061364e57610100808354040283529160200191613679565b820191906000526020600020905b81548152906001019060200180831161365c57829003601f168201915b5050505050905090565b606060008214156136cb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506137df565b600082905060005b600082146136fd5780806136e690614f8e565b915050600a826136f69190614d8c565b91506136d3565b60008167ffffffffffffffff811115613719576137186150c4565b5b6040519080825280601f01601f19166020018201604052801561374b5781602001600182028036833780820191505090505b5090505b600085146137d8576001826137649190614e17565b9150600a856137739190614fd7565b603061377f9190614d36565b60f81b81838151811061379557613794615095565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137d19190614d8c565b945061374f565b8093505050505b919050565b6000601254905090565b600081836137fc9190614d36565b905092915050565b6000600f54905090565b505050565b505050565b6138228383613a0a565b61382f6000848484613873565b61386e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613865906148b9565b60405180910390fd5b505050565b60006138948473ffffffffffffffffffffffffffffffffffffffff16613be4565b156139fd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138bd612f3e565b8786866040518563ffffffff1660e01b81526004016138df94939291906147f0565b602060405180830381600087803b1580156138f957600080fd5b505af192505050801561392a57506040513d601f19601f82011682018060405250810190613927919061423c565b60015b6139ad573d806000811461395a576040519150601f19603f3d011682016040523d82523d6000602084013e61395f565b606091505b506000815114156139a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399c906148b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a02565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7190614a59565b60405180910390fd5b613a8381612ed2565b15613ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aba90614919565b60405180910390fd5b613acf6000838361380e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b1f9190614d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613be060008383613813565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613c1390614f2b565b90600052602060002090601f016020900481019282613c355760008555613c7c565b82601f10613c4e57805160ff1916838001178555613c7c565b82800160010185558215613c7c579182015b82811115613c7b578251825591602001919060010190613c60565b5b509050613c899190613c8d565b5090565b5b80821115613ca6576000816000905550600101613c8e565b5090565b6000613cbd613cb884614c39565b614c14565b90508083825260208201905082856020860282011115613ce057613cdf6150f8565b5b60005b85811015613d105781613cf68882613e0e565b845260208401935060208301925050600181019050613ce3565b5050509392505050565b6000613d2d613d2884614c65565b614c14565b90508083825260208201905082856020860282011115613d5057613d4f6150f8565b5b60005b85811015613d805781613d668882613f1a565b845260208401935060208301925050600181019050613d53565b5050509392505050565b6000613d9d613d9884614c91565b614c14565b905082815260208101848484011115613db957613db86150fd565b5b613dc4848285614ebf565b509392505050565b6000613ddf613dda84614cc2565b614c14565b905082815260208101848484011115613dfb57613dfa6150fd565b5b613e06848285614ebf565b509392505050565b600081359050613e1d816157b0565b92915050565b600082601f830112613e3857613e376150f3565b5b8135613e48848260208601613caa565b91505092915050565b600082601f830112613e6657613e656150f3565b5b8135613e76848260208601613d1a565b91505092915050565b600081359050613e8e816157c7565b92915050565b600081359050613ea3816157de565b92915050565b600081519050613eb8816157de565b92915050565b600082601f830112613ed357613ed26150f3565b5b8135613ee3848260208601613d8a565b91505092915050565b600082601f830112613f0157613f006150f3565b5b8135613f11848260208601613dcc565b91505092915050565b600081359050613f29816157f5565b92915050565b600060208284031215613f4557613f44615107565b5b6000613f5384828501613e0e565b91505092915050565b60008060408385031215613f7357613f72615107565b5b6000613f8185828601613e0e565b9250506020613f9285828601613e0e565b9150509250929050565b600080600060608486031215613fb557613fb4615107565b5b6000613fc386828701613e0e565b9350506020613fd486828701613e0e565b9250506040613fe586828701613f1a565b9150509250925092565b6000806000806080858703121561400957614008615107565b5b600061401787828801613e0e565b945050602061402887828801613e0e565b935050604061403987828801613f1a565b925050606085013567ffffffffffffffff81111561405a57614059615102565b5b61406687828801613ebe565b91505092959194509250565b6000806040838503121561408957614088615107565b5b600061409785828601613e0e565b92505060206140a885828601613e7f565b9150509250929050565b600080604083850312156140c9576140c8615107565b5b60006140d785828601613e0e565b92505060206140e885828601613f1a565b9150509250929050565b60006020828403121561410857614107615107565b5b600082013567ffffffffffffffff81111561412657614125615102565b5b61413284828501613e23565b91505092915050565b6000806040838503121561415257614151615107565b5b600083013567ffffffffffffffff8111156141705761416f615102565b5b61417c85828601613e23565b925050602083013567ffffffffffffffff81111561419d5761419c615102565b5b6141a985828601613e51565b9150509250929050565b600080604083850312156141ca576141c9615107565b5b600083013567ffffffffffffffff8111156141e8576141e7615102565b5b6141f485828601613e23565b925050602061420585828601613f1a565b9150509250929050565b60006020828403121561422557614224615107565b5b600061423384828501613e94565b91505092915050565b60006020828403121561425257614251615107565b5b600061426084828501613ea9565b91505092915050565b60006020828403121561427f5761427e615107565b5b600082013567ffffffffffffffff81111561429d5761429c615102565b5b6142a984828501613eec565b91505092915050565b6000602082840312156142c8576142c7615107565b5b60006142d684828501613f1a565b91505092915050565b6142e881614e4b565b82525050565b6142f781614e5d565b82525050565b600061430882614cf3565b6143128185614d09565b9350614322818560208601614ece565b61432b8161510c565b840191505092915050565b600061434182614cfe565b61434b8185614d1a565b935061435b818560208601614ece565b6143648161510c565b840191505092915050565b600061437a82614cfe565b6143848185614d2b565b9350614394818560208601614ece565b80840191505092915050565b60006143ad601983614d1a565b91506143b88261511d565b602082019050919050565b60006143d0601583614d1a565b91506143db82615146565b602082019050919050565b60006143f3603283614d1a565b91506143fe8261516f565b604082019050919050565b6000614416602683614d1a565b9150614421826151be565b604082019050919050565b6000614439602583614d1a565b91506144448261520d565b604082019050919050565b600061445c601c83614d1a565b91506144678261525c565b602082019050919050565b600061447f602483614d1a565b915061448a82615285565b604082019050919050565b60006144a2601983614d1a565b91506144ad826152d4565b602082019050919050565b60006144c5602083614d1a565b91506144d0826152fd565b602082019050919050565b60006144e8602c83614d1a565b91506144f382615326565b604082019050919050565b600061450b601c83614d1a565b915061451682615375565b602082019050919050565b600061452e603883614d1a565b91506145398261539e565b604082019050919050565b6000614551602a83614d1a565b915061455c826153ed565b604082019050919050565b6000614574602983614d1a565b915061457f8261543c565b604082019050919050565b6000614597602783614d1a565b91506145a28261548b565b604082019050919050565b60006145ba602083614d1a565b91506145c5826154da565b602082019050919050565b60006145dd602c83614d1a565b91506145e882615503565b604082019050919050565b6000614600600583614d2b565b915061460b82615552565b600582019050919050565b6000614623602083614d1a565b915061462e8261557b565b602082019050919050565b6000614646602f83614d1a565b9150614651826155a4565b604082019050919050565b6000614669602083614d1a565b9150614674826155f3565b602082019050919050565b600061468c601683614d1a565b91506146978261561c565b602082019050919050565b60006146af600983614d1a565b91506146ba82615645565b602082019050919050565b60006146d2602183614d1a565b91506146dd8261566e565b604082019050919050565b60006146f5601283614d1a565b9150614700826156bd565b602082019050919050565b6000614718601683614d1a565b9150614723826156e6565b602082019050919050565b600061473b603183614d1a565b91506147468261570f565b604082019050919050565b600061475e601683614d1a565b91506147698261575e565b602082019050919050565b6000614781601483614d1a565b915061478c82615787565b602082019050919050565b6147a081614eb5565b82525050565b60006147b2828561436f565b91506147be828461436f565b91506147c9826145f3565b91508190509392505050565b60006020820190506147ea60008301846142df565b92915050565b600060808201905061480560008301876142df565b61481260208301866142df565b61481f6040830185614797565b818103606083015261483181846142fd565b905095945050505050565b600060208201905061485160008301846142ee565b92915050565b600060208201905081810360008301526148718184614336565b905092915050565b60006020820190508181036000830152614892816143a0565b9050919050565b600060208201905081810360008301526148b2816143c3565b9050919050565b600060208201905081810360008301526148d2816143e6565b9050919050565b600060208201905081810360008301526148f281614409565b9050919050565b600060208201905081810360008301526149128161442c565b9050919050565b600060208201905081810360008301526149328161444f565b9050919050565b6000602082019050818103600083015261495281614472565b9050919050565b6000602082019050818103600083015261497281614495565b9050919050565b60006020820190508181036000830152614992816144b8565b9050919050565b600060208201905081810360008301526149b2816144db565b9050919050565b600060208201905081810360008301526149d2816144fe565b9050919050565b600060208201905081810360008301526149f281614521565b9050919050565b60006020820190508181036000830152614a1281614544565b9050919050565b60006020820190508181036000830152614a3281614567565b9050919050565b60006020820190508181036000830152614a528161458a565b9050919050565b60006020820190508181036000830152614a72816145ad565b9050919050565b60006020820190508181036000830152614a92816145d0565b9050919050565b60006020820190508181036000830152614ab281614616565b9050919050565b60006020820190508181036000830152614ad281614639565b9050919050565b60006020820190508181036000830152614af28161465c565b9050919050565b60006020820190508181036000830152614b128161467f565b9050919050565b60006020820190508181036000830152614b32816146a2565b9050919050565b60006020820190508181036000830152614b52816146c5565b9050919050565b60006020820190508181036000830152614b72816146e8565b9050919050565b60006020820190508181036000830152614b928161470b565b9050919050565b60006020820190508181036000830152614bb28161472e565b9050919050565b60006020820190508181036000830152614bd281614751565b9050919050565b60006020820190508181036000830152614bf281614774565b9050919050565b6000602082019050614c0e6000830184614797565b92915050565b6000614c1e614c2f565b9050614c2a8282614f5d565b919050565b6000604051905090565b600067ffffffffffffffff821115614c5457614c536150c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c8057614c7f6150c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cac57614cab6150c4565b5b614cb58261510c565b9050602081019050919050565b600067ffffffffffffffff821115614cdd57614cdc6150c4565b5b614ce68261510c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d4182614eb5565b9150614d4c83614eb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d8157614d80615008565b5b828201905092915050565b6000614d9782614eb5565b9150614da283614eb5565b925082614db257614db1615037565b5b828204905092915050565b6000614dc882614eb5565b9150614dd383614eb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e0c57614e0b615008565b5b828202905092915050565b6000614e2282614eb5565b9150614e2d83614eb5565b925082821015614e4057614e3f615008565b5b828203905092915050565b6000614e5682614e95565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614eec578082015181840152602081019050614ed1565b83811115614efb576000848401525b50505050565b6000614f0c82614eb5565b91506000821415614f2057614f1f615008565b5b600182039050919050565b60006002820490506001821680614f4357607f821691505b60208210811415614f5757614f56615066565b5b50919050565b614f668261510c565b810181811067ffffffffffffffff82111715614f8557614f846150c4565b5b80604052505050565b6000614f9982614eb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fcc57614fcb615008565b5b600182019050919050565b6000614fe282614eb5565b9150614fed83614eb5565b925082614ffd57614ffc615037565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420666f722047656e6572616c2d73616c65207965742e00000000000000600082015250565b7f4e6f7420666f72207072652d73616c65207965742e0000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f7520656e746572656420616e20696e636f727265637420616d6f756e742e600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4974206973206e6f742061207072652d73616c65207461726765742e00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4974206973206e6f206c6f6e67657220617661696c61626c6520666f7220707560008201527f7263686173652e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4974206973206e6f7420612047656e6572616c2d73616c65207461726765742e600082015250565b7f47656e6572616c2d73616c6520736f6c64206f75742e00000000000000000000600082015250565b7f736f6c64206f75742e0000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652d73616c6520736f6c64206f75742e0000000000000000000000000000600082015250565b7f43616e206e6f206c6f6e6765722061697264726f702e00000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206368616e676520626173655552492e00000000000000000000600082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b6157b981614e4b565b81146157c457600080fd5b50565b6157d081614e5d565b81146157db57600080fd5b50565b6157e781614e69565b81146157f257600080fd5b50565b6157fe81614eb5565b811461580957600080fd5b5056fea264697066735822122046714f7ee5f7f7847b1ce521fe758bac9fb4aad2013bb8092c6ac1f3e8b637b764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000627875a0000000000000000000000000000000000000000000000000000000006279c7200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d58636676567079376857707354324a574d7772346670393533374c6b4e70325444527777686b5971364779382f00000000000000000000
Deployed Bytecode
0x60806040526004361061038c5760003560e01c80637ff9b596116101dc578063c87b56dd11610102578063e985e9c5116100a0578063f2fde38b1161006f578063f2fde38b14610caa578063f3fef3a314610cd3578063fafe84d214610cfc578063fd1fc4a014610d395761038c565b8063e985e9c514610bee578063efa4168a14610c2b578063f032554914610c56578063f285f87614610c6d5761038c565b8063ce8287f7116100dc578063ce8287f714610b46578063d5599bf314610b71578063dad10fd414610b9c578063e734171d14610bc55761038c565b8063c87b56dd14610aa1578063cab6aac914610ade578063cd3293de14610b1b5761038c565b80639a5a77c11161017a578063ac9dbe2311610149578063ac9dbe2314610a0b578063b88d4fde14610a22578063b8c2a1e714610a4b578063b965f64314610a765761038c565b80639a5a77c1146109825780639e41c64d146109ad578063a22cb465146109b7578063a96d3e59146109e05761038c565b806384494708116101b657806384494708146108d85780638da5cb5b1461090357806395d89b411461092e57806399ab6c51146109595761038c565b80637ff9b5961461085957806380e1d7181461088457806380e94b3b146108ad5761038c565b806342842e0e116102c1578063608946d81161025f57806370a082311161022e57806370a08231146107af578063715018a6146107ec57806376477fc814610803578063771282f61461082e5761038c565b8063608946d8146106f55780636352211e1461071e5780636a61e5fc1461075b5780636c0360eb146107845761038c565b80634b969feb1161029b5780634b969feb1461065f57806355f804b3146106765780635a1efe0c1461069f5780635f28bc16146106ca5761038c565b806342842e0e146105e4578063445acc951461060d57806348d1588f146106365761038c565b806322aee90b1161032e5780633a16b347116103085780633a16b3471461056d5780633bb31d00146105985780633cd29ac8146105af5780633f314924146105b95761038c565b806322aee90b146104f057806323b872dd1461051957806326a460fb146105425761038c565b8063095ea7b31161036a578063095ea7b31461043657806311aceb531461045f5780631c77403a14610488578063218a6d40146104b35761038c565b806301ffc9a71461039157806306fdde03146103ce578063081812fc146103f9575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061420f565b610d62565b6040516103c5919061483c565b60405180910390f35b3480156103da57600080fd5b506103e3610e44565b6040516103f09190614857565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906142b2565b610ed6565b60405161042d91906147d5565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906140b2565b610f5b565b005b34801561046b57600080fd5b50610486600480360381019061048191906140f2565b611073565b005b34801561049457600080fd5b5061049d611210565b6040516104aa919061483c565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613f2f565b611223565b6040516104e7919061483c565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906142b2565b611243565b005b34801561052557600080fd5b50610540600480360381019061053b9190613f9c565b6112c9565b005b34801561054e57600080fd5b50610557611329565b6040516105649190614bf9565b60405180910390f35b34801561057957600080fd5b5061058261132f565b60405161058f9190614bf9565b60405180910390f35b3480156105a457600080fd5b506105ad611335565b005b6105b76113dd565b005b3480156105c557600080fd5b506105ce6116ef565b6040516105db9190614bf9565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613f9c565b6116f5565b005b34801561061957600080fd5b50610634600480360381019061062f91906140f2565b611715565b005b34801561064257600080fd5b5061065d600480360381019061065891906142b2565b6118b2565b005b34801561066b57600080fd5b50610674611938565b005b34801561068257600080fd5b5061069d60048036038101906106989190614269565b6119d1565b005b3480156106ab57600080fd5b506106b4611ab6565b6040516106c19190614bf9565b60405180910390f35b3480156106d657600080fd5b506106df611abc565b6040516106ec9190614bf9565b60405180910390f35b34801561070157600080fd5b5061071c600480360381019061071791906140f2565b611ac2565b005b34801561072a57600080fd5b50610745600480360381019061074091906142b2565b611c5f565b60405161075291906147d5565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d91906142b2565b611d11565b005b34801561079057600080fd5b50610799611d97565b6040516107a69190614857565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190613f2f565b611e25565b6040516107e39190614bf9565b60405180910390f35b3480156107f857600080fd5b50610801611edd565b005b34801561080f57600080fd5b50610818611f65565b6040516108259190614bf9565b60405180910390f35b34801561083a57600080fd5b50610843611f6b565b6040516108509190614bf9565b60405180910390f35b34801561086557600080fd5b5061086e611f71565b60405161087b9190614bf9565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061413b565b611f77565b005b3480156108b957600080fd5b506108c2612089565b6040516108cf9190614bf9565b60405180910390f35b3480156108e457600080fd5b506108ed61208f565b6040516108fa919061483c565b60405180910390f35b34801561090f57600080fd5b506109186120a2565b60405161092591906147d5565b60405180910390f35b34801561093a57600080fd5b506109436120cc565b6040516109509190614857565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b91906142b2565b61215e565b005b34801561098e57600080fd5b506109976121e4565b6040516109a49190614bf9565b60405180910390f35b6109b56121ea565b005b3480156109c357600080fd5b506109de60048036038101906109d99190614072565b6124fc565b005b3480156109ec57600080fd5b506109f5612512565b604051610a029190614bf9565b60405180910390f35b348015610a1757600080fd5b50610a20612518565b005b348015610a2e57600080fd5b50610a496004803603810190610a449190613fef565b6125c7565b005b348015610a5757600080fd5b50610a60612629565b604051610a6d919061483c565b60405180910390f35b348015610a8257600080fd5b50610a8b61263c565b604051610a989190614bf9565b60405180910390f35b348015610aad57600080fd5b50610ac86004803603810190610ac391906142b2565b612642565b604051610ad59190614857565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b009190613f2f565b6126e9565b604051610b12919061483c565b60405180910390f35b348015610b2757600080fd5b50610b30612709565b604051610b3d9190614bf9565b60405180910390f35b348015610b5257600080fd5b50610b5b61270f565b604051610b689190614bf9565b60405180910390f35b348015610b7d57600080fd5b50610b86612715565b604051610b939190614bf9565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe91906142b2565b61271b565b005b348015610bd157600080fd5b50610bec6004803603810190610be791906140f2565b6127a1565b005b348015610bfa57600080fd5b50610c156004803603810190610c109190613f5c565b61293e565b604051610c22919061483c565b60405180910390f35b348015610c3757600080fd5b50610c406129d2565b604051610c4d9190614bf9565b60405180910390f35b348015610c6257600080fd5b50610c6b6129d8565b005b348015610c7957600080fd5b50610c946004803603810190610c8f9190613f2f565b612a80565b604051610ca19190614bf9565b60405180910390f35b348015610cb657600080fd5b50610cd16004803603810190610ccc9190613f2f565b612a98565b005b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906140b2565b612b90565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190613f2f565b612c4e565b604051610d309190614bf9565b60405180910390f35b348015610d4557600080fd5b50610d606004803603810190610d5b91906141b3565b612c66565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e2d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e3d5750610e3c82612e68565b5b9050919050565b606060008054610e5390614f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7f90614f2b565b8015610ecc5780601f10610ea157610100808354040283529160200191610ecc565b820191906000526020600020905b815481529060010190602001808311610eaf57829003601f168201915b5050505050905090565b6000610ee182612ed2565b610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790614a79565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f6682611c5f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90614b39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ff6612f3e565b73ffffffffffffffffffffffffffffffffffffffff16148061102557506110248161101f612f3e565b61293e565b5b611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906149d9565b60405180910390fd5b61106e8383612f46565b505050565b61107b612f3e565b73ffffffffffffffffffffffffffffffffffffffff166110996120a2565b73ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614a99565b60405180910390fd5b60005b815181101561120c5760001515601c600084848151811061111657611115615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156111f9576001601c600084848151811061118757611186615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601860008154809291906111f390614f8e565b91905055505b808061120490614f8e565b9150506110f2565b5050565b600860009054906101000a900460ff1681565b601d6020528060005260406000206000915054906101000a900460ff1681565b61124b612f3e565b73ffffffffffffffffffffffffffffffffffffffff166112696120a2565b73ffffffffffffffffffffffffffffffffffffffff16146112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690614a99565b60405180910390fd5b8060168190555050565b6112da6112d4612f3e565b82612fff565b611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614b99565b60405180910390fd5b6113248383836130dd565b505050565b60185481565b60125481565b61133d612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661135b6120a2565b73ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890614a99565b60405180910390fd5b601760009054906101000a900460ff1615601760006101000a81548160ff021916908315150217905550565b600b54600f5410611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90614b19565b60405180910390fd5b601654421015611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90614bd9565b60405180910390fd5b601760019054906101000a900460ff166114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614899565b60405180910390fd5b600d54601154106114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614b59565b60405180910390fd5b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611580906149b9565b60405180910390fd5b601454601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614a39565b60405180910390fd5b6009543414611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790614979565b60405180910390fd5b611668336001600f546116639190614d36565b613344565b600f600081548092919061167b90614f8e565b91905055506011600081548092919061169390614f8e565b9190505550601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906116e890614f8e565b9190505550565b600c5481565b611710838383604051806020016040528060008152506125c7565b505050565b61171d612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661173b6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890614a99565b60405180910390fd5b60005b81518110156118ae5760011515601c60008484815181106117b8576117b7615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561189b576000601c600084848151811061182957611828615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018600081548092919061189590614f01565b91905055505b80806118a690614f8e565b915050611794565b5050565b6118ba612f3e565b73ffffffffffffffffffffffffffffffffffffffff166118d86120a2565b73ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590614a99565b60405180910390fd5b8060148190555050565b611940612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661195e6120a2565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614a99565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b6119d9612f3e565b73ffffffffffffffffffffffffffffffffffffffff166119f76120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490614a99565b60405180910390fd5b600860009054906101000a900460ff16611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390614bb9565b60405180910390fd5b8060079080519060200190611ab2929190613c07565b5050565b60105481565b60135481565b611aca612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611ae86120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3590614a99565b60405180910390fd5b60005b8151811015611c5b5760011515601d6000848481518110611b6557611b64615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611c48576000601d6000848481518110611bd657611bd5615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060196000815480929190611c4290614f01565b91905055505b8080611c5390614f8e565b915050611b41565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90614a19565b60405180910390fd5b80915050919050565b611d19612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611d376120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490614a99565b60405180910390fd5b8060098190555050565b60078054611da490614f2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd090614f2b565b8015611e1d5780601f10611df257610100808354040283529160200191611e1d565b820191906000526020600020905b815481529060010190602001808311611e0057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d906149f9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ee5612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611f036120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611f59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5090614a99565b60405180910390fd5b611f636000613362565b565b60195481565b600f5481565b60095481565b611f7f612f3e565b73ffffffffffffffffffffffffffffffffffffffff16611f9d6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614a99565b60405180910390fd5b60005b82518110156120845782818151811061201257612011615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc83838151811061204657612045615095565b5b60200260200101519081150290604051600060405180830381858888f1935050505061207157600080fd5b808061207c90614f8e565b915050611ff6565b505050565b600d5481565b601760019054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546120db90614f2b565b80601f016020809104026020016040519081016040528092919081815260200182805461210790614f2b565b80156121545780601f1061212957610100808354040283529160200191612154565b820191906000526020600020905b81548152906001019060200180831161213757829003601f168201915b5050505050905090565b612166612f3e565b73ffffffffffffffffffffffffffffffffffffffff166121846120a2565b73ffffffffffffffffffffffffffffffffffffffff16146121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190614a99565b60405180910390fd5b8060138190555050565b600b5481565b600b54600f5410612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790614b19565b60405180910390fd5b601554421015612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c90614bd9565b60405180910390fd5b601760009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90614879565b60405180910390fd5b600c546010541061230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190614af9565b60405180910390fd5b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614ad9565b60405180910390fd5b601354601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241090614a39565b60405180910390fd5b600954341461245d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245490614979565b60405180910390fd5b612475336001600f546124709190614d36565b613344565b600f600081548092919061248890614f8e565b9190505550601060008154809291906124a090614f8e565b9190505550601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906124f590614f8e565b9190505550565b61250e612507612f3e565b8383613428565b5050565b60165481565b612520612f3e565b73ffffffffffffffffffffffffffffffffffffffff1661253e6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614a99565b60405180910390fd5b6000601760016101000a81548160ff021916908315150217905550601154600d546125bf9190614e17565b600a81905550565b6125d86125d2612f3e565b83612fff565b612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90614b99565b60405180910390fd5b61262384848484613595565b50505050565b601760009054906101000a900460ff1681565b600a5481565b606061264d82612ed2565b61268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614ab9565b60405180910390fd5b60006126966135f1565b905060008151116126b657604051806020016040528060008152506126e1565b806126c084613683565b6040516020016126d19291906147a6565b6040516020818303038152906040525b915050919050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600e5481565b60155481565b60145481565b612723612f3e565b73ffffffffffffffffffffffffffffffffffffffff166127416120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278e90614a99565b60405180910390fd5b8060158190555050565b6127a9612f3e565b73ffffffffffffffffffffffffffffffffffffffff166127c76120a2565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614a99565b60405180910390fd5b60005b815181101561293a5760001515601d600084848151811061284457612843615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612927576001601d60008484815181106128b5576128b4615095565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506019600081548092919061292190614f8e565b91905055505b808061293290614f8e565b915050612820565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60115481565b6129e0612f3e565b73ffffffffffffffffffffffffffffffffffffffff166129fe6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614a99565b60405180910390fd5b601760019054906101000a900460ff1615601760016101000a81548160ff021916908315150217905550565b601a6020528060005260406000206000915090505481565b612aa0612f3e565b73ffffffffffffffffffffffffffffffffffffffff16612abe6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0b90614a99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7b906148d9565b60405180910390fd5b612b8d81613362565b50565b612b98612f3e565b73ffffffffffffffffffffffffffffffffffffffff16612bb66120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390614a99565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050612c4a57600080fd5b5050565b601b6020528060005260406000206000915090505481565b612c6e612f3e565b73ffffffffffffffffffffffffffffffffffffffff16612c8c6120a2565b73ffffffffffffffffffffffffffffffffffffffff1614612ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd990614a99565b60405180910390fd5b600a54600e54612cf29190614d36565b612d18828451612d029190614dbd565b612d0a6137e4565b6137ee90919063ffffffff16565b1115612d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5090614b79565b60405180910390fd5b600b54612d82828451612d6c9190614dbd565b612d74613804565b6137ee90919063ffffffff16565b1115612dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dba90614b79565b60405180910390fd5b60005b8251811015612e635760005b82811015612e4f57612e0c848381518110612df057612def615095565b5b60200260200101516001600f54612e079190614d36565b613344565b600f6000815480929190612e1f90614f8e565b919050555060126000815480929190612e3790614f8e565b91905055508080612e4790614f8e565b915050612dd2565b508080612e5b90614f8e565b915050612dc6565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612fb983611c5f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061300a82612ed2565b613049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304090614999565b60405180910390fd5b600061305483611c5f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806130965750613095818561293e565b5b806130d457508373ffffffffffffffffffffffffffffffffffffffff166130bc84610ed6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130fd82611c5f565b73ffffffffffffffffffffffffffffffffffffffff1614613153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314a906148f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614939565b60405180910390fd5b6131ce83838361380e565b6131d9600082612f46565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132299190614e17565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132809190614d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461333f838383613813565b505050565b61335e828260405180602001604052806000815250613818565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348e90614959565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613588919061483c565b60405180910390a3505050565b6135a08484846130dd565b6135ac84848484613873565b6135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e2906148b9565b60405180910390fd5b50505050565b60606007805461360090614f2b565b80601f016020809104026020016040519081016040528092919081815260200182805461362c90614f2b565b80156136795780601f1061364e57610100808354040283529160200191613679565b820191906000526020600020905b81548152906001019060200180831161365c57829003601f168201915b5050505050905090565b606060008214156136cb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506137df565b600082905060005b600082146136fd5780806136e690614f8e565b915050600a826136f69190614d8c565b91506136d3565b60008167ffffffffffffffff811115613719576137186150c4565b5b6040519080825280601f01601f19166020018201604052801561374b5781602001600182028036833780820191505090505b5090505b600085146137d8576001826137649190614e17565b9150600a856137739190614fd7565b603061377f9190614d36565b60f81b81838151811061379557613794615095565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137d19190614d8c565b945061374f565b8093505050505b919050565b6000601254905090565b600081836137fc9190614d36565b905092915050565b6000600f54905090565b505050565b505050565b6138228383613a0a565b61382f6000848484613873565b61386e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613865906148b9565b60405180910390fd5b505050565b60006138948473ffffffffffffffffffffffffffffffffffffffff16613be4565b156139fd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138bd612f3e565b8786866040518563ffffffff1660e01b81526004016138df94939291906147f0565b602060405180830381600087803b1580156138f957600080fd5b505af192505050801561392a57506040513d601f19601f82011682018060405250810190613927919061423c565b60015b6139ad573d806000811461395a576040519150601f19603f3d011682016040523d82523d6000602084013e61395f565b606091505b506000815114156139a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399c906148b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a02565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7190614a59565b60405180910390fd5b613a8381612ed2565b15613ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aba90614919565b60405180910390fd5b613acf6000838361380e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b1f9190614d36565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613be060008383613813565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613c1390614f2b565b90600052602060002090601f016020900481019282613c355760008555613c7c565b82601f10613c4e57805160ff1916838001178555613c7c565b82800160010185558215613c7c579182015b82811115613c7b578251825591602001919060010190613c60565b5b509050613c899190613c8d565b5090565b5b80821115613ca6576000816000905550600101613c8e565b5090565b6000613cbd613cb884614c39565b614c14565b90508083825260208201905082856020860282011115613ce057613cdf6150f8565b5b60005b85811015613d105781613cf68882613e0e565b845260208401935060208301925050600181019050613ce3565b5050509392505050565b6000613d2d613d2884614c65565b614c14565b90508083825260208201905082856020860282011115613d5057613d4f6150f8565b5b60005b85811015613d805781613d668882613f1a565b845260208401935060208301925050600181019050613d53565b5050509392505050565b6000613d9d613d9884614c91565b614c14565b905082815260208101848484011115613db957613db86150fd565b5b613dc4848285614ebf565b509392505050565b6000613ddf613dda84614cc2565b614c14565b905082815260208101848484011115613dfb57613dfa6150fd565b5b613e06848285614ebf565b509392505050565b600081359050613e1d816157b0565b92915050565b600082601f830112613e3857613e376150f3565b5b8135613e48848260208601613caa565b91505092915050565b600082601f830112613e6657613e656150f3565b5b8135613e76848260208601613d1a565b91505092915050565b600081359050613e8e816157c7565b92915050565b600081359050613ea3816157de565b92915050565b600081519050613eb8816157de565b92915050565b600082601f830112613ed357613ed26150f3565b5b8135613ee3848260208601613d8a565b91505092915050565b600082601f830112613f0157613f006150f3565b5b8135613f11848260208601613dcc565b91505092915050565b600081359050613f29816157f5565b92915050565b600060208284031215613f4557613f44615107565b5b6000613f5384828501613e0e565b91505092915050565b60008060408385031215613f7357613f72615107565b5b6000613f8185828601613e0e565b9250506020613f9285828601613e0e565b9150509250929050565b600080600060608486031215613fb557613fb4615107565b5b6000613fc386828701613e0e565b9350506020613fd486828701613e0e565b9250506040613fe586828701613f1a565b9150509250925092565b6000806000806080858703121561400957614008615107565b5b600061401787828801613e0e565b945050602061402887828801613e0e565b935050604061403987828801613f1a565b925050606085013567ffffffffffffffff81111561405a57614059615102565b5b61406687828801613ebe565b91505092959194509250565b6000806040838503121561408957614088615107565b5b600061409785828601613e0e565b92505060206140a885828601613e7f565b9150509250929050565b600080604083850312156140c9576140c8615107565b5b60006140d785828601613e0e565b92505060206140e885828601613f1a565b9150509250929050565b60006020828403121561410857614107615107565b5b600082013567ffffffffffffffff81111561412657614125615102565b5b61413284828501613e23565b91505092915050565b6000806040838503121561415257614151615107565b5b600083013567ffffffffffffffff8111156141705761416f615102565b5b61417c85828601613e23565b925050602083013567ffffffffffffffff81111561419d5761419c615102565b5b6141a985828601613e51565b9150509250929050565b600080604083850312156141ca576141c9615107565b5b600083013567ffffffffffffffff8111156141e8576141e7615102565b5b6141f485828601613e23565b925050602061420585828601613f1a565b9150509250929050565b60006020828403121561422557614224615107565b5b600061423384828501613e94565b91505092915050565b60006020828403121561425257614251615107565b5b600061426084828501613ea9565b91505092915050565b60006020828403121561427f5761427e615107565b5b600082013567ffffffffffffffff81111561429d5761429c615102565b5b6142a984828501613eec565b91505092915050565b6000602082840312156142c8576142c7615107565b5b60006142d684828501613f1a565b91505092915050565b6142e881614e4b565b82525050565b6142f781614e5d565b82525050565b600061430882614cf3565b6143128185614d09565b9350614322818560208601614ece565b61432b8161510c565b840191505092915050565b600061434182614cfe565b61434b8185614d1a565b935061435b818560208601614ece565b6143648161510c565b840191505092915050565b600061437a82614cfe565b6143848185614d2b565b9350614394818560208601614ece565b80840191505092915050565b60006143ad601983614d1a565b91506143b88261511d565b602082019050919050565b60006143d0601583614d1a565b91506143db82615146565b602082019050919050565b60006143f3603283614d1a565b91506143fe8261516f565b604082019050919050565b6000614416602683614d1a565b9150614421826151be565b604082019050919050565b6000614439602583614d1a565b91506144448261520d565b604082019050919050565b600061445c601c83614d1a565b91506144678261525c565b602082019050919050565b600061447f602483614d1a565b915061448a82615285565b604082019050919050565b60006144a2601983614d1a565b91506144ad826152d4565b602082019050919050565b60006144c5602083614d1a565b91506144d0826152fd565b602082019050919050565b60006144e8602c83614d1a565b91506144f382615326565b604082019050919050565b600061450b601c83614d1a565b915061451682615375565b602082019050919050565b600061452e603883614d1a565b91506145398261539e565b604082019050919050565b6000614551602a83614d1a565b915061455c826153ed565b604082019050919050565b6000614574602983614d1a565b915061457f8261543c565b604082019050919050565b6000614597602783614d1a565b91506145a28261548b565b604082019050919050565b60006145ba602083614d1a565b91506145c5826154da565b602082019050919050565b60006145dd602c83614d1a565b91506145e882615503565b604082019050919050565b6000614600600583614d2b565b915061460b82615552565b600582019050919050565b6000614623602083614d1a565b915061462e8261557b565b602082019050919050565b6000614646602f83614d1a565b9150614651826155a4565b604082019050919050565b6000614669602083614d1a565b9150614674826155f3565b602082019050919050565b600061468c601683614d1a565b91506146978261561c565b602082019050919050565b60006146af600983614d1a565b91506146ba82615645565b602082019050919050565b60006146d2602183614d1a565b91506146dd8261566e565b604082019050919050565b60006146f5601283614d1a565b9150614700826156bd565b602082019050919050565b6000614718601683614d1a565b9150614723826156e6565b602082019050919050565b600061473b603183614d1a565b91506147468261570f565b604082019050919050565b600061475e601683614d1a565b91506147698261575e565b602082019050919050565b6000614781601483614d1a565b915061478c82615787565b602082019050919050565b6147a081614eb5565b82525050565b60006147b2828561436f565b91506147be828461436f565b91506147c9826145f3565b91508190509392505050565b60006020820190506147ea60008301846142df565b92915050565b600060808201905061480560008301876142df565b61481260208301866142df565b61481f6040830185614797565b818103606083015261483181846142fd565b905095945050505050565b600060208201905061485160008301846142ee565b92915050565b600060208201905081810360008301526148718184614336565b905092915050565b60006020820190508181036000830152614892816143a0565b9050919050565b600060208201905081810360008301526148b2816143c3565b9050919050565b600060208201905081810360008301526148d2816143e6565b9050919050565b600060208201905081810360008301526148f281614409565b9050919050565b600060208201905081810360008301526149128161442c565b9050919050565b600060208201905081810360008301526149328161444f565b9050919050565b6000602082019050818103600083015261495281614472565b9050919050565b6000602082019050818103600083015261497281614495565b9050919050565b60006020820190508181036000830152614992816144b8565b9050919050565b600060208201905081810360008301526149b2816144db565b9050919050565b600060208201905081810360008301526149d2816144fe565b9050919050565b600060208201905081810360008301526149f281614521565b9050919050565b60006020820190508181036000830152614a1281614544565b9050919050565b60006020820190508181036000830152614a3281614567565b9050919050565b60006020820190508181036000830152614a528161458a565b9050919050565b60006020820190508181036000830152614a72816145ad565b9050919050565b60006020820190508181036000830152614a92816145d0565b9050919050565b60006020820190508181036000830152614ab281614616565b9050919050565b60006020820190508181036000830152614ad281614639565b9050919050565b60006020820190508181036000830152614af28161465c565b9050919050565b60006020820190508181036000830152614b128161467f565b9050919050565b60006020820190508181036000830152614b32816146a2565b9050919050565b60006020820190508181036000830152614b52816146c5565b9050919050565b60006020820190508181036000830152614b72816146e8565b9050919050565b60006020820190508181036000830152614b928161470b565b9050919050565b60006020820190508181036000830152614bb28161472e565b9050919050565b60006020820190508181036000830152614bd281614751565b9050919050565b60006020820190508181036000830152614bf281614774565b9050919050565b6000602082019050614c0e6000830184614797565b92915050565b6000614c1e614c2f565b9050614c2a8282614f5d565b919050565b6000604051905090565b600067ffffffffffffffff821115614c5457614c536150c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c8057614c7f6150c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614cac57614cab6150c4565b5b614cb58261510c565b9050602081019050919050565b600067ffffffffffffffff821115614cdd57614cdc6150c4565b5b614ce68261510c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d4182614eb5565b9150614d4c83614eb5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d8157614d80615008565b5b828201905092915050565b6000614d9782614eb5565b9150614da283614eb5565b925082614db257614db1615037565b5b828204905092915050565b6000614dc882614eb5565b9150614dd383614eb5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e0c57614e0b615008565b5b828202905092915050565b6000614e2282614eb5565b9150614e2d83614eb5565b925082821015614e4057614e3f615008565b5b828203905092915050565b6000614e5682614e95565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614eec578082015181840152602081019050614ed1565b83811115614efb576000848401525b50505050565b6000614f0c82614eb5565b91506000821415614f2057614f1f615008565b5b600182039050919050565b60006002820490506001821680614f4357607f821691505b60208210811415614f5757614f56615066565b5b50919050565b614f668261510c565b810181811067ffffffffffffffff82111715614f8557614f846150c4565b5b80604052505050565b6000614f9982614eb5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614fcc57614fcb615008565b5b600182019050919050565b6000614fe282614eb5565b9150614fed83614eb5565b925082614ffd57614ffc615037565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420666f722047656e6572616c2d73616c65207965742e00000000000000600082015250565b7f4e6f7420666f72207072652d73616c65207965742e0000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f7520656e746572656420616e20696e636f727265637420616d6f756e742e600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4974206973206e6f742061207072652d73616c65207461726765742e00000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4974206973206e6f206c6f6e67657220617661696c61626c6520666f7220707560008201527f7263686173652e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4974206973206e6f7420612047656e6572616c2d73616c65207461726765742e600082015250565b7f47656e6572616c2d73616c6520736f6c64206f75742e00000000000000000000600082015250565b7f736f6c64206f75742e0000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652d73616c6520736f6c64206f75742e0000000000000000000000000000600082015250565b7f43616e206e6f206c6f6e6765722061697264726f702e00000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206368616e676520626173655552492e00000000000000000000600082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b6157b981614e4b565b81146157c457600080fd5b50565b6157d081614e5d565b81146157db57600080fd5b50565b6157e781614e69565b81146157f257600080fd5b50565b6157fe81614eb5565b811461580957600080fd5b5056fea264697066735822122046714f7ee5f7f7847b1ce521fe758bac9fb4aad2013bb8092c6ac1f3e8b637b764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000627875a0000000000000000000000000000000000000000000000000000000006279c7200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d58636676567079376857707354324a574d7772346670393533374c6b4e70325444527777686b5971364779382f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://QmXcfvVpy7hWpsT2JWMwr4fp9537LkNp2TDRwwhkYq6Gy8/
Arg [1] : _preSaleStartTimestamp (uint256): 1652061600
Arg [2] : _generalSaleStartTimestamp (uint256): 1652148000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000627875a0
Arg [2] : 000000000000000000000000000000000000000000000000000000006279c720
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d58636676567079376857707354324a574d777234667039
Arg [5] : 3533374c6b4e70325444527777686b5971364779382f00000000000000000000
Deployed Bytecode Sourcemap
129:6656:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:288:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2411:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3932:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3470:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4678:319:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;229:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1156:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4076:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4659:330:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;909:37:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;633:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4230:106;;;;;;;;;;;;;:::i;:::-;;3207:693;;;:::i;:::-;;415:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5055:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5315:322:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4568:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1785:83;;;;;;;;;;;;;:::i;:::-;;1623:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;569:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;667:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5643:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2114:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6105:106:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;202:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1852:205:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;952:33:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;535:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;267:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6418:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;460:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;871:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2573:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4442:120:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;375:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2456:745;;;:::i;:::-;;4216:153:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;787:36:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5955:144;;;;;;;;;;;;;:::i;:::-;;5300:320:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;829:36:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;337:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2741:338:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1101:49:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;501:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;741:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;706:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3906:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5003:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4435:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;603:24:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4342:94;;;;;;;;;;;;;:::i;:::-;;991:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6654:129:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1048:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1878:572;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1505:288:3;1607:4;1653:25;1638:40;;;:11;:40;;;;:100;;;;1705:33;1690:48;;;:11;:48;;;;1638:100;:148;;;;1750:36;1774:11;1750:23;:36::i;:::-;1638:148;1623:163;;1505:288;;;:::o;2411:98::-;2465:13;2497:5;2490:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2411:98;:::o;3932:217::-;4008:7;4035:16;4043:7;4035;:16::i;:::-;4027:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4118:15;:24;4134:7;4118:24;;;;;;;;;;;;;;;;;;;;;4111:31;;3932:217;;;:::o;3470:401::-;3550:13;3566:23;3581:7;3566:14;:23::i;:::-;3550:39;;3613:5;3607:11;;:2;:11;;;;3599:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3704:5;3688:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3713:37;3730:5;3737:12;:10;:12::i;:::-;3713:16;:37::i;:::-;3688:62;3667:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3843:21;3852:2;3856:7;3843:8;:21::i;:::-;3540:331;3470:401;;:::o;4678:319:4:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4769:9:4::1;4764:227;4788:8;:15;4784:1;:19;4764:227;;;4862:5;4828:39;;:17;:30;4846:8;4855:1;4846:11;;;;;;;;:::i;:::-;;;;;;;;4828:30;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;4824:157;;;4920:4;4887:17;:30;4905:8;4914:1;4905:11;;;;;;;;:::i;:::-;;;;;;;;4887:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;4942:22;;:24;;;;;;;;;:::i;:::-;;;;;;4824:157;4805:3;;;;;:::i;:::-;;;;4764:227;;;;4678:319:::0;:::o;229:32::-;;;;;;;;;;;;;:::o;1156:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;4076:148::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4195:22:4::1;4171:21;:46;;;;4076:148:::0;:::o;4659:330:3:-;4848:41;4867:12;:10;:12::i;:::-;4881:7;4848:18;:41::i;:::-;4840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4954:28;4964:4;4970:2;4974:7;4954:9;:28::i;:::-;4659:330;;;:::o;909:37:4:-;;;;:::o;633:28::-;;;;:::o;4230:106::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4312:17:4::1;;;;;;;;;;;4311:18;4291:17;;:38;;;;;;;;;;;;;;;;;;4230:106::o:0;3207:693::-;3277:11;;3261:13;;:27;3253:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3339:21;;3320:15;:40;;3312:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3403:13;;;;;;;;;;;3395:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;3472:13;;3460:9;;:25;3452:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3526:13;:25;3540:10;3526:25;;;;;;;;;;;;;;;;;;;;;;;;;3518:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3629:10;;3602:12;:24;3615:10;3602:24;;;;;;;;;;;;;;;;:37;3594:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;3714:10;;3701:9;:23;3693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:40;3781:10;3809:1;3793:13;;:17;;;;:::i;:::-;3771:9;:40::i;:::-;3821:13;;:15;;;;;;;;;:::i;:::-;;;;;;3846:9;;:11;;;;;;;;;:::i;:::-;;;;;;3867:12;:24;3880:10;3867:24;;;;;;;;;;;;;;;;:26;;;;;;;;;:::i;:::-;;;;;;3207:693::o;415:39::-;;;;:::o;5055:179:3:-;5188:39;5205:4;5211:2;5215:7;5188:39;;;;;;;;;;;;:16;:39::i;:::-;5055:179;;;:::o;5315:322:4:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5409:9:4::1;5404:227;5428:8;:15;5424:1;:19;5404:227;;;5502:4;5468:38;;:17;:30;5486:8;5495:1;5486:11;;;;;;;;:::i;:::-;;;;;;;;5468:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;5464:157;;;5559:5;5526:17;:30;5544:8;5553:1;5544:11;;;;;;;;:::i;:::-;;;;;;;;5526:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5582:22;;:24;;;;;;;;;:::i;:::-;;;;;;5464:157;5445:3;;;;;:::i;:::-;;;;5404:227;;;;5315:322:::0;:::o;4568:104::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4654:11:4::1;4641:10;:24;;;;4568:104:::0;:::o;1785:83::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1856:5:4::1;1840:13;;:21;;;;;;;;;;;;;;;;;;1785:83::o:0;1623:156::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1704:13:4::1;;;;;;;;;;;1696:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;1764:8;1754:7;:18;;;;;;;;;;;;:::i;:::-;;1623:156:::0;:::o;569:28::-;;;;:::o;667:33::-;;;;:::o;5643:306::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5733:9:4::1;5728:215;5752:8;:15;5748:1;:19;5728:215;;;5822:4;5792:34;;:13;:26;5806:8;5815:1;5806:11;;;;;;;;:::i;:::-;;;;;;;;5792:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;5788:145;;;5875:5;5846:13;:26;5860:8;5869:1;5860:11;;;;;;;;:::i;:::-;;;;;;;;5846:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;5898:18;;:20;;;;;;;;;:::i;:::-;;;;;;5788:145;5769:3;;;;;:::i;:::-;;;;5728:215;;;;5643:306:::0;:::o;2114:235:3:-;2186:7;2205:13;2221:7;:16;2229:7;2221:16;;;;;;;;;;;;;;;;;;;;;2205:32;;2272:1;2255:19;;:5;:19;;;;2247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2337:5;2330:12;;;2114:235;;;:::o;6105:106:4:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6193:11:4::1;6180:10;:24;;;;6105:106:::0;:::o;202:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1852:205:3:-;1924:7;1968:1;1951:19;;:5;:19;;;;1943:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:9;:16;2044:5;2034:16;;;;;;;;;;;;;;;;2027:23;;1852:205;;;:::o;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;952:33:4:-;;;;:::o;535:28::-;;;;:::o;267:50::-;;;;:::o;6418:230::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6530:6:4::1;6525:117;6546:9;:16;6542:1;:20;6525:117;;;6599:9;6609:1;6599:12;;;;;;;;:::i;:::-;;;;;;;;6591:26;;:39;6618:8;6627:1;6618:11;;;;;;;;:::i;:::-;;;;;;;;6591:39;;;;;;;;;;;;;;;;;;;;;;;6583:48;;;::::0;::::1;;6564:3;;;;;:::i;:::-;;;;6525:117;;;;6418:230:::0;;:::o;460:35::-;;;;:::o;871:32::-;;;;;;;;;;;;;:::o;1029:85:9:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2573:102:3:-;2629:13;2661:7;2654:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2573:102;:::o;4442:120:4:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4540:15:4::1;4523:14;:32;;;;4442:120:::0;:::o;375:34::-;;;;:::o;2456:745::-;2530:11;;2514:13;;:27;2506:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2592:25;;2573:15;:44;;2565:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2660:17;;;;;;;;;;;2652:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2741:17;;2725:13;;:33;2717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2803:17;:29;2821:10;2803:29;;;;;;;;;;;;;;;;;;;;;;;;;2795:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2918:14;;2887:16;:28;2904:10;2887:28;;;;;;;;;;;;;;;;:45;2879:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;3007:10;;2994:9;:23;2986:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3064:40;3074:10;3102:1;3086:13;;:17;;;;:::i;:::-;3064:9;:40::i;:::-;3114:13;;:15;;;;;;;;;:::i;:::-;;;;;;3139:13;;:15;;;;;;;;;:::i;:::-;;;;;;3164:16;:28;3181:10;3164:28;;;;;;;;;;;;;;;;:30;;;;;;;;;:::i;:::-;;;;;;2456:745::o;4216:153:3:-;4310:52;4329:12;:10;:12::i;:::-;4343:8;4353;4310:18;:52::i;:::-;4216:153;;:::o;787:36:4:-;;;;:::o;5955:144::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6032:5:4::1;6016:13;;:21;;;;;;;;;;;;;;;;;;6083:9;;6067:13;;:25;;;;:::i;:::-;6047:17;:45;;;;5955:144::o:0;5300:320:3:-;5469:41;5488:12;:10;:12::i;:::-;5502:7;5469:18;:41::i;:::-;5461:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5574:39;5588:4;5594:2;5598:7;5607:5;5574:13;:39::i;:::-;5300:320;;;;:::o;829:36:4:-;;;;;;;;;;;;;:::o;337:32::-;;;;:::o;2741:338:3:-;2814:13;2847:16;2855:7;2847;:16::i;:::-;2839:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2926:21;2950:10;:8;:10::i;:::-;2926:34;;3001:1;2983:7;2977:21;:25;:95;;;;;;;;;;;;;;;;;3029:7;3038:18;:7;:16;:18::i;:::-;3012:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2977:95;2970:102;;;2741:338;;;:::o;1101:49:4:-;;;;;;;;;;;;;;;;;;;;;;:::o;501:28::-;;;;:::o;741:40::-;;;;:::o;706:29::-;;;;:::o;3906:164::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4037:26:4::1;4009:25;:54;;;;3906:164:::0;:::o;5003:306::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5090:9:4::1;5085:218;5109:8;:15;5105:1;:19;5085:218;;;5179:5;5149:35;;:13;:26;5163:8;5172:1;5163:11;;;;;;;;:::i;:::-;;;;;;;;5149:26;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;5145:145;;;5233:4;5204:13;:26;5218:8;5227:1;5218:11;;;;;;;;:::i;:::-;;;;;;;;5204:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;5255:18;;:20;;;;;;;;;:::i;:::-;;;;;;5145:145;5126:3;;;;;:::i;:::-;;;;5085:218;;;;5003:306:::0;:::o;4435:162:3:-;4532:4;4555:18;:25;4574:5;4555:25;;;;;;;;;;;;;;;:35;4581:8;4555:35;;;;;;;;;;;;;;;;;;;;;;;;;4548:42;;4435:162;;;;:::o;603:24:4:-;;;;:::o;4342:94::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4416:13:4::1;;;;;;;;;;;4415:14;4399:13;;:30;;;;;;;;;;;;;;;;;;4342:94::o:0;991:51::-;;;;;;;;;;;;;;;;;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;6654:129:4:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6752:8:4::1;6744:22;;:31;6767:7;6744:31;;;;;;;;;;;;;;;;;;;;;;;6736:40;;;::::0;::::1;;6654:129:::0;;:::o;1048:47::-;;;;;;;;;;;;;;;;;:::o;1878:572::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2043:17:4::1;;2033:7;;:27;;;;:::i;:::-;1977:52;2020:7;2001:9;:16;:26;;;;:::i;:::-;1977:18;:16;:18::i;:::-;:22;;:52;;;;:::i;:::-;:83;;1969:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;2154:11;;2105:45;2142:7;2123:9;:16;:26;;;;:::i;:::-;2105:13;:11;:13::i;:::-;:17;;:45;;;;:::i;:::-;:60;;2097:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2208:6;2203:241;2224:9;:16;2220:1;:20;2203:241;;;2265:6;2261:173;2281:7;2277:1;:11;2261:173;;;2313:40;2323:9;2333:1;2323:12;;;;;;;;:::i;:::-;;;;;;;;2351:1;2337:13;;:15;;;;:::i;:::-;2313:9;:40::i;:::-;2371:13;;:15;;;;;;;;;:::i;:::-;;;;;;2404:13;;:15;;;;;;;;;:::i;:::-;;;;;;2290:3;;;;;:::i;:::-;;;;2261:173;;;;2242:3;;;;;:::i;:::-;;;;2203:241;;;;1878:572:::0;;:::o;829:155:2:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7092:125:3:-;7157:4;7208:1;7180:30;;:7;:16;7188:7;7180:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7173:37;;7092:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;11101:171:3:-;11202:2;11175:15;:24;11191:7;11175:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11257:7;11253:2;11219:46;;11228:23;11243:7;11228:14;:23::i;:::-;11219:46;;;;;;;;;;;;11101:171;;:::o;7375:344::-;7468:4;7492:16;7500:7;7492;:16::i;:::-;7484:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7567:13;7583:23;7598:7;7583:14;:23::i;:::-;7567:39;;7635:5;7624:16;;:7;:16;;;:52;;;;7644:32;7661:5;7668:7;7644:16;:32::i;:::-;7624:52;:87;;;;7704:7;7680:31;;:20;7692:7;7680:11;:20::i;:::-;:31;;;7624:87;7616:96;;;7375:344;;;;:::o;10385:605::-;10539:4;10512:31;;:23;10527:7;10512:14;:23::i;:::-;:31;;;10504:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10617:1;10603:16;;:2;:16;;;;10595:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10671:39;10692:4;10698:2;10702:7;10671:20;:39::i;:::-;10772:29;10789:1;10793:7;10772:8;:29::i;:::-;10831:1;10812:9;:15;10822:4;10812:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10859:1;10842:9;:13;10852:2;10842:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10889:2;10870:7;:16;10878:7;10870:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10926:7;10922:2;10907:27;;10916:4;10907:27;;;;;;;;;;;;10945:38;10965:4;10971:2;10975:7;10945:19;:38::i;:::-;10385:605;;;:::o;8049:108::-;8124:26;8134:2;8138:7;8124:26;;;;;;;;;;;;:9;:26::i;:::-;8049:108;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;11407:307:3:-;11557:8;11548:17;;:5;:17;;;;11540:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11643:8;11605:18;:25;11624:5;11605:25;;;;;;;;;;;;;;;:35;11631:8;11605:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11688:8;11666:41;;11681:5;11666:41;;;11698:8;11666:41;;;;;;:::i;:::-;;;;;;;;11407:307;;;:::o;6482:::-;6633:28;6643:4;6649:2;6653:7;6633:9;:28::i;:::-;6679:48;6702:4;6708:2;6712:7;6721:5;6679:22;:48::i;:::-;6671:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6482:307;;;;:::o;1511:106:4:-;1571:13;1603:7;1596:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1511:106;:::o;328:703:11:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;6315:97:4:-;6366:7;6392:13;;6385:20;;6315:97;:::o;2741:96:10:-;2799:7;2829:1;2825;:5;;;;:::i;:::-;2818:12;;2741:96;;;;:::o;6217:92:4:-;6263:7;6289:13;;6282:20;;6217:92;:::o;13601:122:3:-;;;;:::o;14095:121::-;;;;:::o;8378:311::-;8503:18;8509:2;8513:7;8503:5;:18::i;:::-;8552:54;8583:1;8587:2;8591:7;8600:5;8552:22;:54::i;:::-;8531:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8378:311;;;:::o;12267:778::-;12417:4;12437:15;:2;:13;;;:15::i;:::-;12433:606;;;12488:2;12472:36;;;12509:12;:10;:12::i;:::-;12523:4;12529:7;12538:5;12472:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12468:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12728:1;12711:6;:13;:18;12707:266;;;12753:60;;;;;;;;;;:::i;:::-;;;;;;;;12707:266;12925:6;12919:13;12910:6;12906:2;12902:15;12895:38;12468:519;12604:41;;;12594:51;;;:6;:51;;;;12587:58;;;;;12433:606;13024:4;13017:11;;12267:778;;;;;;;:::o;9011:427::-;9104:1;9090:16;;:2;:16;;;;9082:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9162:16;9170:7;9162;:16::i;:::-;9161:17;9153:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9222:45;9251:1;9255:2;9259:7;9222:20;:45::i;:::-;9295:1;9278:9;:13;9288:2;9278:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9325:2;9306:7;:16;9314:7;9306:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9368:7;9364:2;9343:33;;9360:1;9343:33;;;;;;;;;;;;9387:44;9415:1;9419:2;9423:7;9387:19;:44::i;:::-;9011:427;;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:12:-;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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:619::-;5445:6;5453;5461;5510:2;5498:9;5489:7;5485:23;5481:32;5478:119;;;5516:79;;:::i;:::-;5478:119;5636:1;5661:53;5706:7;5697:6;5686:9;5682:22;5661:53;:::i;:::-;5651:63;;5607:117;5763:2;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5734:118;5891:2;5917:53;5962:7;5953:6;5942:9;5938:22;5917:53;:::i;:::-;5907:63;;5862:118;5368:619;;;;;:::o;5993:943::-;6088:6;6096;6104;6112;6161:3;6149:9;6140:7;6136:23;6132:33;6129:120;;;6168:79;;:::i;:::-;6129:120;6288:1;6313:53;6358:7;6349:6;6338:9;6334:22;6313:53;:::i;:::-;6303:63;;6259:117;6415:2;6441:53;6486:7;6477:6;6466:9;6462:22;6441:53;:::i;:::-;6431:63;;6386:118;6543:2;6569:53;6614:7;6605:6;6594:9;6590:22;6569:53;:::i;:::-;6559:63;;6514:118;6699:2;6688:9;6684:18;6671:32;6730:18;6722:6;6719:30;6716:117;;;6752:79;;:::i;:::-;6716:117;6857:62;6911:7;6902:6;6891:9;6887:22;6857:62;:::i;:::-;6847:72;;6642:287;5993:943;;;;;;;:::o;6942:468::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:50;7385:7;7376:6;7365:9;7361:22;7343:50;:::i;:::-;7333:60;;7288:115;6942:468;;;;;:::o;7416:474::-;7484:6;7492;7541:2;7529:9;7520:7;7516:23;7512:32;7509:119;;;7547:79;;:::i;:::-;7509:119;7667:1;7692:53;7737:7;7728:6;7717:9;7713:22;7692:53;:::i;:::-;7682:63;;7638:117;7794:2;7820:53;7865:7;7856:6;7845:9;7841:22;7820:53;:::i;:::-;7810:63;;7765:118;7416:474;;;;;:::o;7896:539::-;7980:6;8029:2;8017:9;8008:7;8004:23;8000:32;7997:119;;;8035:79;;:::i;:::-;7997:119;8183:1;8172:9;8168:17;8155:31;8213:18;8205:6;8202:30;8199:117;;;8235:79;;:::i;:::-;8199:117;8340:78;8410:7;8401:6;8390:9;8386:22;8340:78;:::i;:::-;8330:88;;8126:302;7896:539;;;;:::o;8441:894::-;8559:6;8567;8616:2;8604:9;8595:7;8591:23;8587:32;8584:119;;;8622:79;;:::i;:::-;8584:119;8770:1;8759:9;8755:17;8742:31;8800:18;8792:6;8789:30;8786:117;;;8822:79;;:::i;:::-;8786:117;8927:78;8997:7;8988:6;8977:9;8973:22;8927:78;:::i;:::-;8917:88;;8713:302;9082:2;9071:9;9067:18;9054:32;9113:18;9105:6;9102:30;9099:117;;;9135:79;;:::i;:::-;9099:117;9240:78;9310:7;9301:6;9290:9;9286:22;9240:78;:::i;:::-;9230:88;;9025:303;8441:894;;;;;:::o;9341:684::-;9434:6;9442;9491:2;9479:9;9470:7;9466:23;9462:32;9459:119;;;9497:79;;:::i;:::-;9459:119;9645:1;9634:9;9630:17;9617:31;9675:18;9667:6;9664:30;9661:117;;;9697:79;;:::i;:::-;9661:117;9802:78;9872:7;9863:6;9852:9;9848:22;9802:78;:::i;:::-;9792:88;;9588:302;9929:2;9955:53;10000:7;9991:6;9980:9;9976:22;9955:53;:::i;:::-;9945:63;;9900:118;9341:684;;;;;:::o;10031:327::-;10089:6;10138:2;10126:9;10117:7;10113:23;10109:32;10106:119;;;10144:79;;:::i;:::-;10106:119;10264:1;10289:52;10333:7;10324:6;10313:9;10309:22;10289:52;:::i;:::-;10279:62;;10235:116;10031:327;;;;:::o;10364:349::-;10433:6;10482:2;10470:9;10461:7;10457:23;10453:32;10450:119;;;10488:79;;:::i;:::-;10450:119;10608:1;10633:63;10688:7;10679:6;10668:9;10664:22;10633:63;:::i;:::-;10623:73;;10579:127;10364:349;;;;:::o;10719:509::-;10788:6;10837:2;10825:9;10816:7;10812:23;10808:32;10805:119;;;10843:79;;:::i;:::-;10805:119;10991:1;10980:9;10976:17;10963:31;11021:18;11013:6;11010:30;11007:117;;;11043:79;;:::i;:::-;11007:117;11148:63;11203:7;11194:6;11183:9;11179:22;11148:63;:::i;:::-;11138:73;;10934:287;10719:509;;;;:::o;11234:329::-;11293:6;11342:2;11330:9;11321:7;11317:23;11313:32;11310:119;;;11348:79;;:::i;:::-;11310:119;11468:1;11493:53;11538:7;11529:6;11518:9;11514:22;11493:53;:::i;:::-;11483:63;;11439:117;11234:329;;;;:::o;11569:118::-;11656:24;11674:5;11656:24;:::i;:::-;11651:3;11644:37;11569:118;;:::o;11693:109::-;11774:21;11789:5;11774:21;:::i;:::-;11769:3;11762:34;11693:109;;:::o;11808:360::-;11894:3;11922:38;11954:5;11922:38;:::i;:::-;11976:70;12039:6;12034:3;11976:70;:::i;:::-;11969:77;;12055:52;12100:6;12095:3;12088:4;12081:5;12077:16;12055:52;:::i;:::-;12132:29;12154:6;12132:29;:::i;:::-;12127:3;12123:39;12116:46;;11898:270;11808:360;;;;:::o;12174:364::-;12262:3;12290:39;12323:5;12290:39;:::i;:::-;12345:71;12409:6;12404:3;12345:71;:::i;:::-;12338:78;;12425:52;12470:6;12465:3;12458:4;12451:5;12447:16;12425:52;:::i;:::-;12502:29;12524:6;12502:29;:::i;:::-;12497:3;12493:39;12486:46;;12266:272;12174:364;;;;:::o;12544:377::-;12650:3;12678:39;12711:5;12678:39;:::i;:::-;12733:89;12815:6;12810:3;12733:89;:::i;:::-;12726:96;;12831:52;12876:6;12871:3;12864:4;12857:5;12853:16;12831:52;:::i;:::-;12908:6;12903:3;12899:16;12892:23;;12654:267;12544:377;;;;:::o;12927:366::-;13069:3;13090:67;13154:2;13149:3;13090:67;:::i;:::-;13083:74;;13166:93;13255:3;13166:93;:::i;:::-;13284:2;13279:3;13275:12;13268:19;;12927:366;;;:::o;13299:::-;13441:3;13462:67;13526:2;13521:3;13462:67;:::i;:::-;13455:74;;13538:93;13627:3;13538:93;:::i;:::-;13656:2;13651:3;13647:12;13640:19;;13299:366;;;:::o;13671:::-;13813:3;13834:67;13898:2;13893:3;13834:67;:::i;:::-;13827:74;;13910:93;13999:3;13910:93;:::i;:::-;14028:2;14023:3;14019:12;14012:19;;13671:366;;;:::o;14043:::-;14185:3;14206:67;14270:2;14265:3;14206:67;:::i;:::-;14199:74;;14282:93;14371:3;14282:93;:::i;:::-;14400:2;14395:3;14391:12;14384:19;;14043:366;;;:::o;14415:::-;14557:3;14578:67;14642:2;14637:3;14578:67;:::i;:::-;14571:74;;14654:93;14743:3;14654:93;:::i;:::-;14772:2;14767:3;14763:12;14756:19;;14415:366;;;:::o;14787:::-;14929:3;14950:67;15014:2;15009:3;14950:67;:::i;:::-;14943:74;;15026:93;15115:3;15026:93;:::i;:::-;15144:2;15139:3;15135:12;15128:19;;14787:366;;;:::o;15159:::-;15301:3;15322:67;15386:2;15381:3;15322:67;:::i;:::-;15315:74;;15398:93;15487:3;15398:93;:::i;:::-;15516:2;15511:3;15507:12;15500:19;;15159:366;;;:::o;15531:::-;15673:3;15694:67;15758:2;15753:3;15694:67;:::i;:::-;15687:74;;15770:93;15859:3;15770:93;:::i;:::-;15888:2;15883:3;15879:12;15872:19;;15531:366;;;:::o;15903:::-;16045:3;16066:67;16130:2;16125:3;16066:67;:::i;:::-;16059:74;;16142:93;16231:3;16142:93;:::i;:::-;16260:2;16255:3;16251:12;16244:19;;15903:366;;;:::o;16275:::-;16417:3;16438:67;16502:2;16497:3;16438:67;:::i;:::-;16431:74;;16514:93;16603:3;16514:93;:::i;:::-;16632:2;16627:3;16623:12;16616:19;;16275:366;;;:::o;16647:::-;16789:3;16810:67;16874:2;16869:3;16810:67;:::i;:::-;16803:74;;16886:93;16975:3;16886:93;:::i;:::-;17004:2;16999:3;16995:12;16988:19;;16647:366;;;:::o;17019:::-;17161:3;17182:67;17246:2;17241:3;17182:67;:::i;:::-;17175:74;;17258:93;17347:3;17258:93;:::i;:::-;17376:2;17371:3;17367:12;17360:19;;17019:366;;;:::o;17391:::-;17533:3;17554:67;17618:2;17613:3;17554:67;:::i;:::-;17547:74;;17630:93;17719:3;17630:93;:::i;:::-;17748:2;17743:3;17739:12;17732:19;;17391:366;;;:::o;17763:::-;17905:3;17926:67;17990:2;17985:3;17926:67;:::i;:::-;17919:74;;18002:93;18091:3;18002:93;:::i;:::-;18120:2;18115:3;18111:12;18104:19;;17763:366;;;:::o;18135:::-;18277:3;18298:67;18362:2;18357:3;18298:67;:::i;:::-;18291:74;;18374:93;18463:3;18374:93;:::i;:::-;18492:2;18487:3;18483:12;18476:19;;18135:366;;;:::o;18507:::-;18649:3;18670:67;18734:2;18729:3;18670:67;:::i;:::-;18663:74;;18746:93;18835:3;18746:93;:::i;:::-;18864:2;18859:3;18855:12;18848:19;;18507:366;;;:::o;18879:::-;19021:3;19042:67;19106:2;19101:3;19042:67;:::i;:::-;19035:74;;19118:93;19207:3;19118:93;:::i;:::-;19236:2;19231:3;19227:12;19220:19;;18879:366;;;:::o;19251:400::-;19411:3;19432:84;19514:1;19509:3;19432:84;:::i;:::-;19425:91;;19525:93;19614:3;19525:93;:::i;:::-;19643:1;19638:3;19634:11;19627:18;;19251:400;;;:::o;19657:366::-;19799:3;19820:67;19884:2;19879:3;19820:67;:::i;:::-;19813:74;;19896:93;19985:3;19896:93;:::i;:::-;20014:2;20009:3;20005:12;19998:19;;19657:366;;;:::o;20029:::-;20171:3;20192:67;20256:2;20251:3;20192:67;:::i;:::-;20185:74;;20268:93;20357:3;20268:93;:::i;:::-;20386:2;20381:3;20377:12;20370:19;;20029:366;;;:::o;20401:::-;20543:3;20564:67;20628:2;20623:3;20564:67;:::i;:::-;20557:74;;20640:93;20729:3;20640:93;:::i;:::-;20758:2;20753:3;20749:12;20742:19;;20401:366;;;:::o;20773:::-;20915:3;20936:67;21000:2;20995:3;20936:67;:::i;:::-;20929:74;;21012:93;21101:3;21012:93;:::i;:::-;21130:2;21125:3;21121:12;21114:19;;20773:366;;;:::o;21145:365::-;21287:3;21308:66;21372:1;21367:3;21308:66;:::i;:::-;21301:73;;21383:93;21472:3;21383:93;:::i;:::-;21501:2;21496:3;21492:12;21485:19;;21145:365;;;:::o;21516:366::-;21658:3;21679:67;21743:2;21738:3;21679:67;:::i;:::-;21672:74;;21755:93;21844:3;21755:93;:::i;:::-;21873:2;21868:3;21864:12;21857:19;;21516:366;;;:::o;21888:::-;22030:3;22051:67;22115:2;22110:3;22051:67;:::i;:::-;22044:74;;22127:93;22216:3;22127:93;:::i;:::-;22245:2;22240:3;22236:12;22229:19;;21888:366;;;:::o;22260:::-;22402:3;22423:67;22487:2;22482:3;22423:67;:::i;:::-;22416:74;;22499:93;22588:3;22499:93;:::i;:::-;22617:2;22612:3;22608:12;22601:19;;22260:366;;;:::o;22632:::-;22774:3;22795:67;22859:2;22854:3;22795:67;:::i;:::-;22788:74;;22871:93;22960:3;22871:93;:::i;:::-;22989:2;22984:3;22980:12;22973:19;;22632:366;;;:::o;23004:::-;23146:3;23167:67;23231:2;23226:3;23167:67;:::i;:::-;23160:74;;23243:93;23332:3;23243:93;:::i;:::-;23361:2;23356:3;23352:12;23345:19;;23004:366;;;:::o;23376:::-;23518:3;23539:67;23603:2;23598:3;23539:67;:::i;:::-;23532:74;;23615:93;23704:3;23615:93;:::i;:::-;23733:2;23728:3;23724:12;23717:19;;23376:366;;;:::o;23748:118::-;23835:24;23853:5;23835:24;:::i;:::-;23830:3;23823:37;23748:118;;:::o;23872:701::-;24153:3;24175:95;24266:3;24257:6;24175:95;:::i;:::-;24168:102;;24287:95;24378:3;24369:6;24287:95;:::i;:::-;24280:102;;24399:148;24543:3;24399:148;:::i;:::-;24392:155;;24564:3;24557:10;;23872:701;;;;;:::o;24579:222::-;24672:4;24710:2;24699:9;24695:18;24687:26;;24723:71;24791:1;24780:9;24776:17;24767:6;24723:71;:::i;:::-;24579:222;;;;:::o;24807:640::-;25002:4;25040:3;25029:9;25025:19;25017:27;;25054:71;25122:1;25111:9;25107:17;25098:6;25054:71;:::i;:::-;25135:72;25203:2;25192:9;25188:18;25179:6;25135:72;:::i;:::-;25217;25285:2;25274:9;25270:18;25261:6;25217:72;:::i;:::-;25336:9;25330:4;25326:20;25321:2;25310:9;25306:18;25299:48;25364:76;25435:4;25426:6;25364:76;:::i;:::-;25356:84;;24807:640;;;;;;;:::o;25453:210::-;25540:4;25578:2;25567:9;25563:18;25555:26;;25591:65;25653:1;25642:9;25638:17;25629:6;25591:65;:::i;:::-;25453:210;;;;:::o;25669:313::-;25782:4;25820:2;25809:9;25805:18;25797:26;;25869:9;25863:4;25859:20;25855:1;25844:9;25840:17;25833:47;25897:78;25970:4;25961:6;25897:78;:::i;:::-;25889:86;;25669:313;;;;:::o;25988:419::-;26154:4;26192:2;26181:9;26177:18;26169:26;;26241:9;26235:4;26231:20;26227:1;26216:9;26212:17;26205:47;26269:131;26395:4;26269:131;:::i;:::-;26261:139;;25988:419;;;:::o;26413:::-;26579:4;26617:2;26606:9;26602:18;26594:26;;26666:9;26660:4;26656:20;26652:1;26641:9;26637:17;26630:47;26694:131;26820:4;26694:131;:::i;:::-;26686:139;;26413:419;;;:::o;26838:::-;27004:4;27042:2;27031:9;27027:18;27019:26;;27091:9;27085:4;27081:20;27077:1;27066:9;27062:17;27055:47;27119:131;27245:4;27119:131;:::i;:::-;27111:139;;26838:419;;;:::o;27263:::-;27429:4;27467:2;27456:9;27452:18;27444:26;;27516:9;27510:4;27506:20;27502:1;27491:9;27487:17;27480:47;27544:131;27670:4;27544:131;:::i;:::-;27536:139;;27263:419;;;:::o;27688:::-;27854:4;27892:2;27881:9;27877:18;27869:26;;27941:9;27935:4;27931:20;27927:1;27916:9;27912:17;27905:47;27969:131;28095:4;27969:131;:::i;:::-;27961:139;;27688:419;;;:::o;28113:::-;28279:4;28317:2;28306:9;28302:18;28294:26;;28366:9;28360:4;28356:20;28352:1;28341:9;28337:17;28330:47;28394:131;28520:4;28394:131;:::i;:::-;28386:139;;28113:419;;;:::o;28538:::-;28704:4;28742:2;28731:9;28727:18;28719:26;;28791:9;28785:4;28781:20;28777:1;28766:9;28762:17;28755:47;28819:131;28945:4;28819:131;:::i;:::-;28811:139;;28538:419;;;:::o;28963:::-;29129:4;29167:2;29156:9;29152:18;29144:26;;29216:9;29210:4;29206:20;29202:1;29191:9;29187:17;29180:47;29244:131;29370:4;29244:131;:::i;:::-;29236:139;;28963:419;;;:::o;29388:::-;29554:4;29592:2;29581:9;29577:18;29569:26;;29641:9;29635:4;29631:20;29627:1;29616:9;29612:17;29605:47;29669:131;29795:4;29669:131;:::i;:::-;29661:139;;29388:419;;;:::o;29813:::-;29979:4;30017:2;30006:9;30002:18;29994:26;;30066:9;30060:4;30056:20;30052:1;30041:9;30037:17;30030:47;30094:131;30220:4;30094:131;:::i;:::-;30086:139;;29813:419;;;:::o;30238:::-;30404:4;30442:2;30431:9;30427:18;30419:26;;30491:9;30485:4;30481:20;30477:1;30466:9;30462:17;30455:47;30519:131;30645:4;30519:131;:::i;:::-;30511:139;;30238:419;;;:::o;30663:::-;30829:4;30867:2;30856:9;30852:18;30844:26;;30916:9;30910:4;30906:20;30902:1;30891:9;30887:17;30880:47;30944:131;31070:4;30944:131;:::i;:::-;30936:139;;30663:419;;;:::o;31088:::-;31254:4;31292:2;31281:9;31277:18;31269:26;;31341:9;31335:4;31331:20;31327:1;31316:9;31312:17;31305:47;31369:131;31495:4;31369:131;:::i;:::-;31361:139;;31088:419;;;:::o;31513:::-;31679:4;31717:2;31706:9;31702:18;31694:26;;31766:9;31760:4;31756:20;31752:1;31741:9;31737:17;31730:47;31794:131;31920:4;31794:131;:::i;:::-;31786:139;;31513:419;;;:::o;31938:::-;32104:4;32142:2;32131:9;32127:18;32119:26;;32191:9;32185:4;32181:20;32177:1;32166:9;32162:17;32155:47;32219:131;32345:4;32219:131;:::i;:::-;32211:139;;31938:419;;;:::o;32363:::-;32529:4;32567:2;32556:9;32552:18;32544:26;;32616:9;32610:4;32606:20;32602:1;32591:9;32587:17;32580:47;32644:131;32770:4;32644:131;:::i;:::-;32636:139;;32363:419;;;:::o;32788:::-;32954:4;32992:2;32981:9;32977:18;32969:26;;33041:9;33035:4;33031:20;33027:1;33016:9;33012:17;33005:47;33069:131;33195:4;33069:131;:::i;:::-;33061:139;;32788:419;;;:::o;33213:::-;33379:4;33417:2;33406:9;33402:18;33394:26;;33466:9;33460:4;33456:20;33452:1;33441:9;33437:17;33430:47;33494:131;33620:4;33494:131;:::i;:::-;33486:139;;33213:419;;;:::o;33638:::-;33804:4;33842:2;33831:9;33827:18;33819:26;;33891:9;33885:4;33881:20;33877:1;33866:9;33862:17;33855:47;33919:131;34045:4;33919:131;:::i;:::-;33911:139;;33638:419;;;:::o;34063:::-;34229:4;34267:2;34256:9;34252:18;34244:26;;34316:9;34310:4;34306:20;34302:1;34291:9;34287:17;34280:47;34344:131;34470:4;34344:131;:::i;:::-;34336:139;;34063:419;;;:::o;34488:::-;34654:4;34692:2;34681:9;34677:18;34669:26;;34741:9;34735:4;34731:20;34727:1;34716:9;34712:17;34705:47;34769:131;34895:4;34769:131;:::i;:::-;34761:139;;34488:419;;;:::o;34913:::-;35079:4;35117:2;35106:9;35102:18;35094:26;;35166:9;35160:4;35156:20;35152:1;35141:9;35137:17;35130:47;35194:131;35320:4;35194:131;:::i;:::-;35186:139;;34913:419;;;:::o;35338:::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:131;35745:4;35619:131;:::i;:::-;35611:139;;35338:419;;;:::o;35763:::-;35929:4;35967:2;35956:9;35952:18;35944:26;;36016:9;36010:4;36006:20;36002:1;35991:9;35987:17;35980:47;36044:131;36170:4;36044:131;:::i;:::-;36036:139;;35763:419;;;:::o;36188:::-;36354:4;36392:2;36381:9;36377:18;36369:26;;36441:9;36435:4;36431:20;36427:1;36416:9;36412:17;36405:47;36469:131;36595:4;36469:131;:::i;:::-;36461:139;;36188:419;;;:::o;36613:::-;36779:4;36817:2;36806:9;36802:18;36794:26;;36866:9;36860:4;36856:20;36852:1;36841:9;36837:17;36830:47;36894:131;37020:4;36894:131;:::i;:::-;36886:139;;36613:419;;;:::o;37038:::-;37204:4;37242:2;37231:9;37227:18;37219:26;;37291:9;37285:4;37281:20;37277:1;37266:9;37262:17;37255:47;37319:131;37445:4;37319:131;:::i;:::-;37311:139;;37038:419;;;:::o;37463:::-;37629:4;37667:2;37656:9;37652:18;37644:26;;37716:9;37710:4;37706:20;37702:1;37691:9;37687:17;37680:47;37744:131;37870:4;37744:131;:::i;:::-;37736:139;;37463:419;;;:::o;37888:222::-;37981:4;38019:2;38008:9;38004:18;37996:26;;38032:71;38100:1;38089:9;38085:17;38076:6;38032:71;:::i;:::-;37888:222;;;;:::o;38116:129::-;38150:6;38177:20;;:::i;:::-;38167:30;;38206:33;38234:4;38226:6;38206:33;:::i;:::-;38116:129;;;:::o;38251:75::-;38284:6;38317:2;38311:9;38301:19;;38251:75;:::o;38332:311::-;38409:4;38499:18;38491:6;38488:30;38485:56;;;38521:18;;:::i;:::-;38485:56;38571:4;38563:6;38559:17;38551:25;;38631:4;38625;38621:15;38613:23;;38332:311;;;:::o;38649:::-;38726:4;38816:18;38808:6;38805:30;38802:56;;;38838:18;;:::i;:::-;38802:56;38888:4;38880:6;38876:17;38868:25;;38948:4;38942;38938:15;38930:23;;38649:311;;;:::o;38966:307::-;39027:4;39117:18;39109:6;39106:30;39103:56;;;39139:18;;:::i;:::-;39103:56;39177:29;39199:6;39177:29;:::i;:::-;39169:37;;39261:4;39255;39251:15;39243:23;;38966:307;;;:::o;39279:308::-;39341:4;39431:18;39423:6;39420:30;39417:56;;;39453:18;;:::i;:::-;39417:56;39491:29;39513:6;39491:29;:::i;:::-;39483:37;;39575:4;39569;39565:15;39557:23;;39279:308;;;:::o;39593:98::-;39644:6;39678:5;39672:12;39662:22;;39593:98;;;:::o;39697:99::-;39749:6;39783:5;39777:12;39767:22;;39697:99;;;:::o;39802:168::-;39885:11;39919:6;39914:3;39907:19;39959:4;39954:3;39950:14;39935:29;;39802:168;;;;:::o;39976:169::-;40060:11;40094:6;40089:3;40082:19;40134:4;40129:3;40125:14;40110:29;;39976:169;;;;:::o;40151:148::-;40253:11;40290:3;40275:18;;40151:148;;;;:::o;40305:305::-;40345:3;40364:20;40382:1;40364:20;:::i;:::-;40359:25;;40398:20;40416:1;40398:20;:::i;:::-;40393:25;;40552:1;40484:66;40480:74;40477:1;40474:81;40471:107;;;40558:18;;:::i;:::-;40471:107;40602:1;40599;40595:9;40588:16;;40305:305;;;;:::o;40616:185::-;40656:1;40673:20;40691:1;40673:20;:::i;:::-;40668:25;;40707:20;40725:1;40707:20;:::i;:::-;40702:25;;40746:1;40736:35;;40751:18;;:::i;:::-;40736:35;40793:1;40790;40786:9;40781:14;;40616:185;;;;:::o;40807:348::-;40847:7;40870:20;40888:1;40870:20;:::i;:::-;40865:25;;40904:20;40922:1;40904:20;:::i;:::-;40899:25;;41092:1;41024:66;41020:74;41017:1;41014:81;41009:1;41002:9;40995:17;40991:105;40988:131;;;41099:18;;:::i;:::-;40988:131;41147:1;41144;41140:9;41129:20;;40807:348;;;;:::o;41161:191::-;41201:4;41221:20;41239:1;41221:20;:::i;:::-;41216:25;;41255:20;41273:1;41255:20;:::i;:::-;41250:25;;41294:1;41291;41288:8;41285:34;;;41299:18;;:::i;:::-;41285:34;41344:1;41341;41337:9;41329:17;;41161:191;;;;:::o;41358:96::-;41395:7;41424:24;41442:5;41424:24;:::i;:::-;41413:35;;41358:96;;;:::o;41460:90::-;41494:7;41537:5;41530:13;41523:21;41512:32;;41460:90;;;:::o;41556:149::-;41592:7;41632:66;41625:5;41621:78;41610:89;;41556:149;;;:::o;41711:126::-;41748:7;41788:42;41781:5;41777:54;41766:65;;41711:126;;;:::o;41843:77::-;41880:7;41909:5;41898:16;;41843:77;;;:::o;41926:154::-;42010:6;42005:3;42000;41987:30;42072:1;42063:6;42058:3;42054:16;42047:27;41926:154;;;:::o;42086:307::-;42154:1;42164:113;42178:6;42175:1;42172:13;42164:113;;;42263:1;42258:3;42254:11;42248:18;42244:1;42239:3;42235:11;42228:39;42200:2;42197:1;42193:10;42188:15;;42164:113;;;42295:6;42292:1;42289:13;42286:101;;;42375:1;42366:6;42361:3;42357:16;42350:27;42286:101;42135:258;42086:307;;;:::o;42399:171::-;42438:3;42461:24;42479:5;42461:24;:::i;:::-;42452:33;;42507:4;42500:5;42497:15;42494:41;;;42515:18;;:::i;:::-;42494:41;42562:1;42555:5;42551:13;42544:20;;42399:171;;;:::o;42576:320::-;42620:6;42657:1;42651:4;42647:12;42637:22;;42704:1;42698:4;42694:12;42725:18;42715:81;;42781:4;42773:6;42769:17;42759:27;;42715:81;42843:2;42835:6;42832:14;42812:18;42809:38;42806:84;;;42862:18;;:::i;:::-;42806:84;42627:269;42576:320;;;:::o;42902:281::-;42985:27;43007:4;42985:27;:::i;:::-;42977:6;42973:40;43115:6;43103:10;43100:22;43079:18;43067:10;43064:34;43061:62;43058:88;;;43126:18;;:::i;:::-;43058:88;43166:10;43162:2;43155:22;42945:238;42902:281;;:::o;43189:233::-;43228:3;43251:24;43269:5;43251:24;:::i;:::-;43242:33;;43297:66;43290:5;43287:77;43284:103;;;43367:18;;:::i;:::-;43284:103;43414:1;43407:5;43403:13;43396:20;;43189:233;;;:::o;43428:176::-;43460:1;43477:20;43495:1;43477:20;:::i;:::-;43472:25;;43511:20;43529:1;43511:20;:::i;:::-;43506:25;;43550:1;43540:35;;43555:18;;:::i;:::-;43540:35;43596:1;43593;43589:9;43584:14;;43428:176;;;;:::o;43610:180::-;43658:77;43655:1;43648:88;43755:4;43752:1;43745:15;43779:4;43776:1;43769:15;43796:180;43844:77;43841:1;43834:88;43941:4;43938:1;43931:15;43965:4;43962:1;43955:15;43982:180;44030:77;44027:1;44020:88;44127:4;44124:1;44117:15;44151:4;44148:1;44141:15;44168:180;44216:77;44213:1;44206:88;44313:4;44310:1;44303:15;44337:4;44334:1;44327:15;44354:180;44402:77;44399:1;44392:88;44499:4;44496:1;44489:15;44523:4;44520:1;44513:15;44540:117;44649:1;44646;44639:12;44663:117;44772:1;44769;44762:12;44786:117;44895:1;44892;44885:12;44909:117;45018:1;45015;45008:12;45032:117;45141:1;45138;45131:12;45155:102;45196:6;45247:2;45243:7;45238:2;45231:5;45227:14;45223:28;45213:38;;45155:102;;;:::o;45263:175::-;45403:27;45399:1;45391:6;45387:14;45380:51;45263:175;:::o;45444:171::-;45584:23;45580:1;45572:6;45568:14;45561:47;45444:171;:::o;45621:237::-;45761:34;45757:1;45749:6;45745:14;45738:58;45830:20;45825:2;45817:6;45813:15;45806:45;45621:237;:::o;45864:225::-;46004:34;46000:1;45992:6;45988:14;45981:58;46073:8;46068:2;46060:6;46056:15;46049:33;45864:225;:::o;46095:224::-;46235:34;46231:1;46223:6;46219:14;46212:58;46304:7;46299:2;46291:6;46287:15;46280:32;46095:224;:::o;46325:178::-;46465:30;46461:1;46453:6;46449:14;46442:54;46325:178;:::o;46509:223::-;46649:34;46645:1;46637:6;46633:14;46626:58;46718:6;46713:2;46705:6;46701:15;46694:31;46509:223;:::o;46738:175::-;46878:27;46874:1;46866:6;46862:14;46855:51;46738:175;:::o;46919:182::-;47059:34;47055:1;47047:6;47043:14;47036:58;46919:182;:::o;47107:231::-;47247:34;47243:1;47235:6;47231:14;47224:58;47316:14;47311:2;47303:6;47299:15;47292:39;47107:231;:::o;47344:178::-;47484:30;47480:1;47472:6;47468:14;47461:54;47344:178;:::o;47528:243::-;47668:34;47664:1;47656:6;47652:14;47645:58;47737:26;47732:2;47724:6;47720:15;47713:51;47528:243;:::o;47777:229::-;47917:34;47913:1;47905:6;47901:14;47894:58;47986:12;47981:2;47973:6;47969:15;47962:37;47777:229;:::o;48012:228::-;48152:34;48148:1;48140:6;48136:14;48129:58;48221:11;48216:2;48208:6;48204:15;48197:36;48012:228;:::o;48246:226::-;48386:34;48382:1;48374:6;48370:14;48363:58;48455:9;48450:2;48442:6;48438:15;48431:34;48246:226;:::o;48478:182::-;48618:34;48614:1;48606:6;48602:14;48595:58;48478:182;:::o;48666:231::-;48806:34;48802:1;48794:6;48790:14;48783:58;48875:14;48870:2;48862:6;48858:15;48851:39;48666:231;:::o;48903:155::-;49043:7;49039:1;49031:6;49027:14;49020:31;48903:155;:::o;49064:182::-;49204:34;49200:1;49192:6;49188:14;49181:58;49064:182;:::o;49252:234::-;49392:34;49388:1;49380:6;49376:14;49369:58;49461:17;49456:2;49448:6;49444:15;49437:42;49252:234;:::o;49492:182::-;49632:34;49628:1;49620:6;49616:14;49609:58;49492:182;:::o;49680:172::-;49820:24;49816:1;49808:6;49804:14;49797:48;49680:172;:::o;49858:159::-;49998:11;49994:1;49986:6;49982:14;49975:35;49858:159;:::o;50023:220::-;50163:34;50159:1;50151:6;50147:14;50140:58;50232:3;50227:2;50219:6;50215:15;50208:28;50023:220;:::o;50249:168::-;50389:20;50385:1;50377:6;50373:14;50366:44;50249:168;:::o;50423:172::-;50563:24;50559:1;50551:6;50547:14;50540:48;50423:172;:::o;50601:236::-;50741:34;50737:1;50729:6;50725:14;50718:58;50810:19;50805:2;50797:6;50793:15;50786:44;50601:236;:::o;50843:172::-;50983:24;50979:1;50971:6;50967:14;50960:48;50843:172;:::o;51021:170::-;51161:22;51157:1;51149:6;51145:14;51138:46;51021:170;:::o;51197:122::-;51270:24;51288:5;51270:24;:::i;:::-;51263:5;51260:35;51250:63;;51309:1;51306;51299:12;51250:63;51197:122;:::o;51325:116::-;51395:21;51410:5;51395:21;:::i;:::-;51388:5;51385:32;51375:60;;51431:1;51428;51421:12;51375:60;51325:116;:::o;51447:120::-;51519:23;51536:5;51519:23;:::i;:::-;51512:5;51509:34;51499:62;;51557:1;51554;51547:12;51499:62;51447:120;:::o;51573:122::-;51646:24;51664:5;51646:24;:::i;:::-;51639:5;51636:35;51626:63;;51685:1;51682;51675:12;51626:63;51573:122;:::o
Swarm Source
ipfs://46714f7ee5f7f7847b1ce521fe758bac9fb4aad2013bb8092c6ac1f3e8b637b7
Loading...
Loading
Loading...
Loading
[ 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.