Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 90 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw All | 20742337 | 4 days ago | IN | 0 ETH | 0.00013515 | ||||
Mint | 20742258 | 4 days ago | IN | 0.05 ETH | 0.00108901 | ||||
Set Approval For... | 20544712 | 31 days ago | IN | 0 ETH | 0.00004118 | ||||
Set Approval For... | 17092514 | 515 days ago | IN | 0 ETH | 0.00181548 | ||||
Set Approval For... | 16247804 | 634 days ago | IN | 0 ETH | 0.00053146 | ||||
Mint | 16104154 | 654 days ago | IN | 0.025 ETH | 0.00175884 | ||||
Gift | 16076727 | 658 days ago | IN | 0 ETH | 0.00504322 | ||||
Withdraw All | 16041174 | 663 days ago | IN | 0 ETH | 0.00036064 | ||||
Mint | 16002329 | 668 days ago | IN | 0.025 ETH | 0.00195587 | ||||
Set Price | 15997123 | 669 days ago | IN | 0 ETH | 0.00038062 | ||||
Update Main Sale... | 15988773 | 670 days ago | IN | 0 ETH | 0.00063343 | ||||
Pre Mint | 15984198 | 671 days ago | IN | 0.025 ETH | 0.00060811 | ||||
Pre Mint | 15983708 | 671 days ago | IN | 0.025 ETH | 0.00062162 | ||||
Pre Mint | 15976636 | 672 days ago | IN | 0.075 ETH | 0.00858932 | ||||
Pre Mint | 15976554 | 672 days ago | IN | 0.05 ETH | 0.0050407 | ||||
Pre Mint | 15976545 | 672 days ago | IN | 0.025 ETH | 0.00316495 | ||||
Pre Mint | 15976516 | 672 days ago | IN | 0.1 ETH | 0.01110988 | ||||
Pre Mint | 15976465 | 672 days ago | IN | 0.025 ETH | 0.00309489 | ||||
Pre Mint | 15976431 | 672 days ago | IN | 0.025 ETH | 0.00365743 | ||||
Pre Mint | 15976420 | 672 days ago | IN | 0.025 ETH | 0.00356441 | ||||
Pre Mint | 15976373 | 672 days ago | IN | 0.05 ETH | 0.00629846 | ||||
Pre Mint | 15976344 | 672 days ago | IN | 0.05 ETH | 0.00408573 | ||||
Pre Mint | 15976335 | 672 days ago | IN | 0.125 ETH | 0.00959399 | ||||
Pre Mint | 15976259 | 672 days ago | IN | 0.01 ETH | 0.0006043 | ||||
Pre Mint | 15976253 | 672 days ago | IN | 0.01 ETH | 0.00059008 |
Loading...
Loading
Contract Name:
CosmicMetaWarChicks
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // Author: https://twitter.com/cosmicmetanft // ERC-721 Smart Contract for the Cosmic Meta War Chicks NFT Collection - https://cosmicmeta.io pragma solidity ^0.8.9; import "./ERC721.sol"; import "./ERC721Enumerable.sol"; import "./Pausable.sol"; import "./Ownable.sol"; contract CosmicMetaWarChicks is ERC721, ERC721Enumerable, Pausable, Ownable { using Strings for uint256; string public baseTokenURI; string public contractURI; uint256 public constant MAX_TOKENS = 2222; // 2222 War Chicks uint256 public maxMint = 10; // Max 10 War Chicks per transaction uint256 public price = 0.025 ether; // Each War Chicks cost 0.025 ETH to mint uint256 public preMintPrice = 0.01 ether; // Lower price for pre-sale bool public mainSale = false; // Main Sale is disabled by default mapping(address => bool) public presaleAccessList; // Whitelist for pre-sale constructor(string memory _baseTokenURI, string memory _contractURI) ERC721("Cosmic Meta War Chicks", "CMWC") { setBaseURI(_baseTokenURI); setContractURI(_contractURI); // The first 50 War Chicks are minted for the team, giveaways and our community mint(msg.sender, 50); } function preMint(address _to, uint256 _quantity) public payable { uint256 supply = totalSupply(); require(hasPresaleAccess(_to), "You are not whitelisted for the War Chicks pre-sale!"); require(!mainSale, "You can't pre-mint War Chicks at the moment!"); require(_quantity > 0 && _quantity <= maxMint, "You can only mint 1 to 10 War Chicks!"); require(msg.value >= preMintPrice * _quantity, "Ether sent is not correct!"); require(supply + _quantity <= MAX_TOKENS, "Exceeds maximum supply!"); for (uint256 i = 1; i <= _quantity; i++) { _safeMint(_to, supply + i); } } function mint(address _to, uint256 _quantity) public payable { uint256 supply = totalSupply(); if (msg.sender != owner()) { require(mainSale, "The War Chicks main sale is not open!"); require(_quantity > 0 && _quantity <= maxMint, "You can only mint 1 to 20 War Chicks!"); require(msg.value >= price * _quantity, "Ether sent is not correct!"); } require(supply + _quantity <= MAX_TOKENS, "Exceeds maximum supply!"); for (uint256 i = 1; i <= _quantity; i++) { _safeMint(_to, supply + i); } } function gift(address[] calldata receivers) external onlyOwner { uint256 supply = totalSupply(); require(supply + receivers.length <= MAX_TOKENS, "Exceeds maximum supply!"); for (uint256 i = 1; i <= receivers.length; i++) { _safeMint(receivers[i-1], supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function setPresaleAccessList(address[] memory _addressList) public onlyOwner { for (uint256 i; i < _addressList.length; i++) { presaleAccessList[_addressList[i]] = true; } } function hasPresaleAccess(address wallet) public view returns (bool) { return presaleAccessList[wallet]; } function setBaseURI(string memory _baseTokenURI) public onlyOwner { baseTokenURI = _baseTokenURI; } function setContractURI(string memory _contractURI) public onlyOwner { contractURI = _contractURI; } function setPrice(uint256 _price) public onlyOwner() { price = _price; } function setPreMintPrice(uint256 _price) public onlyOwner() { preMintPrice = _price; } function setMaxMint(uint256 _maxMint) public onlyOwner() { maxMint = _maxMint; } function updateMainSaleStatus(bool _mainSale) public onlyOwner { mainSale = _mainSale; } function pause() public onlyOwner { _pause(); } function start() public onlyOwner { _unpause(); } function withdraw(uint256 _amount) public payable onlyOwner { require(payable(msg.sender).send(_amount)); } function withdrawAll() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// 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 v4.4.1 (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())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// 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/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// 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 `IERC721.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 (security/Pausable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// 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":"_baseTokenURI","type":"string"},{"internalType":"string","name":"_contractURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_TOKENS","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"receivers","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"hasPresaleAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAccessList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPreMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"}],"name":"setPresaleAccessList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mainSale","type":"bool"}],"name":"updateMainSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052600a600d556658d15e17628000600e55662386f26fc10000600f556000601060006101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040516200719f3803806200719f83398181016040528101906200006d9190620011a4565b6040518060400160405280601681526020017f436f736d6963204d6574612057617220436869636b73000000000000000000008152506040518060400160405280600481526020017f434d5743000000000000000000000000000000000000000000000000000000008152508160009081620000ea919062001474565b508060019081620000fc919062001474565b5050506000600a60006101000a81548160ff0219169083151502179055506200013a6200012e6200017760201b60201c565b6200017f60201b60201c565b6200014b826200024560201b60201c565b6200015c81620002e960201b60201c565b6200016f3360326200038d60201b60201c565b505062001dbf565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002556200017760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200027b6200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002cb90620015bc565b60405180910390fd5b80600b9081620002e5919062001474565b5050565b620002f96200017760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031f6200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036f90620015bc565b60405180910390fd5b80600c908162000389919062001474565b5050565b60006200039f620005aa60201b60201c565b9050620003b16200058060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004e157601060009054906101000a900460ff1662000436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042d9062001654565b60405180910390fd5b600082118015620004495750600d548211155b6200048b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048290620016ec565b60405180910390fd5b81600e546200049b91906200173d565b341015620004e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d790620017ee565b60405180910390fd5b5b6108ae8282620004f2919062001810565b111562000536576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052d906200189b565b60405180910390fd5b6000600190505b8281116200057a576200056484828462000558919062001810565b620005b760201b60201c565b80806200057190620018bd565b9150506200053d565b50505050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620005d9828260405180602001604052806000815250620005dd60201b60201c565b5050565b620005ef83836200064b60201b60201c565b6200060460008484846200083060201b60201c565b62000646576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063d9062001980565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b490620019f2565b60405180910390fd5b620006ce81620009d960201b60201c565b1562000711576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007089062001a64565b60405180910390fd5b620007256000838362000a4560201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000777919062001810565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200085e8473ffffffffffffffffffffffffffffffffffffffff1662000ab560201b6200216b1760201c565b15620009cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008906200017760201b60201c565b8786866040518563ffffffff1660e01b8152600401620008b4949392919062001b39565b6020604051808303816000875af1925050508015620008f357506040513d601f19601f82011682018060405250810190620008f0919062001bea565b60015b6200097b573d806000811462000926576040519150601f19603f3d011682016040523d82523d6000602084013e6200092b565b606091505b50600081510362000973576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096a9062001980565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620009d1565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000a5562000ac860201b60201c565b1562000a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8f9062001c6c565b60405180910390fd5b62000ab083838362000adf60201b6200217e1760201c565b505050565b600080823b905060008111915050919050565b6000600a60009054906101000a900460ff16905090565b62000af783838362000c2460201b620022901760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b435762000b3d8162000c2960201b60201c565b62000b8b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b8a5762000b89838262000c7260201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bd75762000bd18162000def60201b60201c565b62000c1f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c1e5762000c1d828262000ecb60201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000c8c8462000f5760201b620017961760201c565b62000c98919062001c8e565b905060006007600084815260200190815260200160002054905081811462000d7e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e05919062001c8e565b905060006009600084815260200190815260200160002054905060006008838154811062000e385762000e3762001cc9565b5b90600052602060002001549050806008838154811062000e5d5762000e5c62001cc9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000eaf5762000eae62001cf8565b5b6001900381819060005260206000200160009055905550505050565b600062000ee38362000f5760201b620017961760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000fca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fc19062001d9d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200107a826200102f565b810181811067ffffffffffffffff821117156200109c576200109b62001040565b5b80604052505050565b6000620010b162001011565b9050620010bf82826200106f565b919050565b600067ffffffffffffffff821115620010e257620010e162001040565b5b620010ed826200102f565b9050602081019050919050565b60005b838110156200111a578082015181840152602081019050620010fd565b60008484015250505050565b60006200113d6200113784620010c4565b620010a5565b9050828152602081018484840111156200115c576200115b6200102a565b5b62001169848285620010fa565b509392505050565b600082601f83011262001189576200118862001025565b5b81516200119b84826020860162001126565b91505092915050565b60008060408385031215620011be57620011bd6200101b565b5b600083015167ffffffffffffffff811115620011df57620011de62001020565b5b620011ed8582860162001171565b925050602083015167ffffffffffffffff81111562001211576200121062001020565b5b6200121f8582860162001171565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200127c57607f821691505b60208210810362001292576200129162001234565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012fc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620012bd565b620013088683620012bd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620013556200134f620013498462001320565b6200132a565b62001320565b9050919050565b6000819050919050565b620013718362001334565b6200138962001380826200135c565b848454620012ca565b825550505050565b600090565b620013a062001391565b620013ad81848462001366565b505050565b5b81811015620013d557620013c960008262001396565b600181019050620013b3565b5050565b601f8211156200142457620013ee8162001298565b620013f984620012ad565b8101602085101562001409578190505b620014216200141885620012ad565b830182620013b2565b50505b505050565b600082821c905092915050565b6000620014496000198460080262001429565b1980831691505092915050565b600062001464838362001436565b9150826002028217905092915050565b6200147f8262001229565b67ffffffffffffffff8111156200149b576200149a62001040565b5b620014a7825462001263565b620014b4828285620013d9565b600060209050601f831160018114620014ec5760008415620014d7578287015190505b620014e3858262001456565b86555062001553565b601f198416620014fc8662001298565b60005b828110156200152657848901518255600182019150602085019450602081019050620014ff565b8683101562001546578489015162001542601f89168262001436565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620015a46020836200155b565b9150620015b1826200156c565b602082019050919050565b60006020820190508181036000830152620015d78162001595565b9050919050565b7f5468652057617220436869636b73206d61696e2073616c65206973206e6f742060008201527f6f70656e21000000000000000000000000000000000000000000000000000000602082015250565b60006200163c6025836200155b565b91506200164982620015de565b604082019050919050565b600060208201905081810360008301526200166f816200162d565b9050919050565b7f596f752063616e206f6e6c79206d696e74203120746f2032302057617220436860008201527f69636b7321000000000000000000000000000000000000000000000000000000602082015250565b6000620016d46025836200155b565b9150620016e18262001676565b604082019050919050565b600060208201905081810360008301526200170781620016c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200174a8262001320565b9150620017578362001320565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200179357620017926200170e565b5b828202905092915050565b7f45746865722073656e74206973206e6f7420636f727265637421000000000000600082015250565b6000620017d6601a836200155b565b9150620017e3826200179e565b602082019050919050565b600060208201905081810360008301526200180981620017c7565b9050919050565b60006200181d8262001320565b91506200182a8362001320565b92508282019050808211156200184557620018446200170e565b5b92915050565b7f45786365656473206d6178696d756d20737570706c7921000000000000000000600082015250565b6000620018836017836200155b565b915062001890826200184b565b602082019050919050565b60006020820190508181036000830152620018b68162001874565b9050919050565b6000620018ca8262001320565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620018ff57620018fe6200170e565b5b600182019050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000620019686032836200155b565b915062001975826200190a565b604082019050919050565b600060208201905081810360008301526200199b8162001959565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620019da6020836200155b565b9150620019e782620019a2565b602082019050919050565b6000602082019050818103600083015262001a0d81620019cb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001a4c601c836200155b565b915062001a598262001a14565b602082019050919050565b6000602082019050818103600083015262001a7f8162001a3d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001ab38262001a86565b9050919050565b62001ac58162001aa6565b82525050565b62001ad68162001320565b82525050565b600081519050919050565b600082825260208201905092915050565b600062001b058262001adc565b62001b11818562001ae7565b935062001b23818560208601620010fa565b62001b2e816200102f565b840191505092915050565b600060808201905062001b50600083018762001aba565b62001b5f602083018662001aba565b62001b6e604083018562001acb565b818103606083015262001b82818462001af8565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001bc48162001b8d565b811462001bd057600080fd5b50565b60008151905062001be48162001bb9565b92915050565b60006020828403121562001c035762001c026200101b565b5b600062001c138482850162001bd3565b91505092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600062001c546010836200155b565b915062001c618262001c1c565b602082019050919050565b6000602082019050818103600083015262001c878162001c45565b9050919050565b600062001c9b8262001320565b915062001ca88362001320565b925082820390508181111562001cc35762001cc26200170e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600062001d85602a836200155b565b915062001d928262001d27565b604082019050919050565b6000602082019050818103600083015262001db88162001d76565b9050919050565b6153d08062001dcf6000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063a22cb465116100b6578063d547cfb71161007a578063d547cfb7146108e0578063da6405e11461090b578063e8a3d48514610934578063e985e9c51461095f578063f2fde38b1461099c578063f47c84c5146109c557610267565b8063a22cb46514610811578063b88d4fde1461083a578063be9a655514610863578063c1d7ae311461087a578063c87b56dd146108a357610267565b80638da5cb5b116101085780638da5cb5b1461071357806391b7f5ed1461073e578063938e3d7b1461076757806395d89b4114610790578063a035b1fe146107bb578063a187c89b146107e657610267565b806370a0823114610673578063715018a6146106b05780637501f741146106c75780638456cb59146106f2578063853828b61461070957610267565b80632f994122116101dd5780634f6ccce7116101a15780634f6ccce714610551578063547520fe1461058e57806355f804b3146105b75780635c975abb146105e057806360cfd3591461060b5780636352211e1461063657610267565b80632f9941221461046957806334131cd3146104a657806340c10f19146104cf57806342842e0e146104eb578063438b63001461051457610267565b8063163e1e611161022f578063163e1e611461037757806318160ddd146103a057806323b872dd146103cb578063290c292d146103f45780632e1a7d4d146104105780632f745c591461042c57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b3146103115780630f2091861461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061361d565b6109f0565b6040516102a09190613665565b60405180910390f35b3480156102b557600080fd5b506102be610a02565b6040516102cb9190613710565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613768565b610a94565b60405161030891906137d6565b60405180910390f35b34801561031d57600080fd5b506103386004803603810190610333919061381d565b610b19565b005b34801561034657600080fd5b50610361600480360381019061035c919061385d565b610c30565b60405161036e9190613665565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906138ef565b610c86565b005b3480156103ac57600080fd5b506103b5610dd3565b6040516103c2919061394b565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613966565b610de0565b005b61040e6004803603810190610409919061381d565b610e40565b005b61042a60048036038101906104259190613768565b611011565b005b34801561043857600080fd5b50610453600480360381019061044e919061381d565b6110ce565b604051610460919061394b565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b919061385d565b611173565b60405161049d9190613665565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613af7565b611193565b005b6104e960048036038101906104e4919061381d565b6112a4565b005b3480156104f757600080fd5b50610512600480360381019061050d9190613966565b611467565b005b34801561052057600080fd5b5061053b6004803603810190610536919061385d565b611487565b6040516105489190613bfe565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613768565b611535565b604051610585919061394b565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613768565b6115a6565b005b3480156105c357600080fd5b506105de60048036038101906105d99190613cd5565b61162c565b005b3480156105ec57600080fd5b506105f56116bb565b6040516106029190613665565b60405180910390f35b34801561061757600080fd5b506106206116d2565b60405161062d9190613665565b60405180910390f35b34801561064257600080fd5b5061065d60048036038101906106589190613768565b6116e5565b60405161066a91906137d6565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061385d565b611796565b6040516106a7919061394b565b60405180910390f35b3480156106bc57600080fd5b506106c561184d565b005b3480156106d357600080fd5b506106dc6118d5565b6040516106e9919061394b565b60405180910390f35b3480156106fe57600080fd5b506107076118db565b005b610711611961565b005b34801561071f57600080fd5b50610728611a1d565b60405161073591906137d6565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190613768565b611a47565b005b34801561077357600080fd5b5061078e60048036038101906107899190613cd5565b611acd565b005b34801561079c57600080fd5b506107a5611b5c565b6040516107b29190613710565b60405180910390f35b3480156107c757600080fd5b506107d0611bee565b6040516107dd919061394b565b60405180910390f35b3480156107f257600080fd5b506107fb611bf4565b604051610808919061394b565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613d4a565b611bfa565b005b34801561084657600080fd5b50610861600480360381019061085c9190613e2b565b611c10565b005b34801561086f57600080fd5b50610878611c72565b005b34801561088657600080fd5b506108a1600480360381019061089c9190613eae565b611cf8565b005b3480156108af57600080fd5b506108ca60048036038101906108c59190613768565b611d91565b6040516108d79190613710565b60405180910390f35b3480156108ec57600080fd5b506108f5611e38565b6040516109029190613710565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190613768565b611ec6565b005b34801561094057600080fd5b50610949611f4c565b6040516109569190613710565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613edb565b611fda565b6040516109939190613665565b60405180910390f35b3480156109a857600080fd5b506109c360048036038101906109be919061385d565b61206e565b005b3480156109d157600080fd5b506109da612165565b6040516109e7919061394b565b60405180910390f35b60006109fb82612295565b9050919050565b606060008054610a1190613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3d90613f4a565b8015610a8a5780601f10610a5f57610100808354040283529160200191610a8a565b820191906000526020600020905b815481529060010190602001808311610a6d57829003601f168201915b5050505050905090565b6000610a9f8261230f565b610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613fed565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b24826116e5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061407f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb361237b565b73ffffffffffffffffffffffffffffffffffffffff161480610be25750610be181610bdc61237b565b611fda565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890614111565b60405180910390fd5b610c2b8383612383565b505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c8e61237b565b73ffffffffffffffffffffffffffffffffffffffff16610cac611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061417d565b60405180910390fd5b6000610d0c610dd3565b90506108ae8383905082610d2091906141cc565b1115610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d589061424c565b60405180910390fd5b6000600190505b838390508111610dcd57610dba8484600184610d84919061426c565b818110610d9457610d936142a0565b5b9050602002016020810190610da9919061385d565b8284610db591906141cc565b61243c565b8080610dc5906142cf565b915050610d68565b50505050565b6000600880549050905090565b610df1610deb61237b565b8261245a565b610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614389565b60405180910390fd5b610e3b838383612538565b505050565b6000610e4a610dd3565b9050610e5583610c30565b610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061441b565b60405180910390fd5b601060009054906101000a900460ff1615610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb906144ad565b60405180910390fd5b600082118015610ef65750600d548211155b610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c9061453f565b60405180910390fd5b81600f54610f43919061455f565b341015610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90614605565b60405180910390fd5b6108ae8282610f9491906141cc565b1115610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc9061424c565b60405180910390fd5b6000600190505b82811161100b57610ff8848284610ff391906141cc565b61243c565b8080611003906142cf565b915050610fdc565b50505050565b61101961237b565b73ffffffffffffffffffffffffffffffffffffffff16611037611a1d565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110849061417d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110cb57600080fd5b50565b60006110d983611796565b821061111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190614697565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b61119b61237b565b73ffffffffffffffffffffffffffffffffffffffff166111b9611a1d565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112069061417d565b60405180910390fd5b60005b81518110156112a057600160116000848481518110611234576112336142a0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611298906142cf565b915050611212565b5050565b60006112ae610dd3565b90506112b8611a1d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113db57601060009054906101000a900460ff16611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614729565b60405180910390fd5b60008211801561134b5750600d548211155b61138a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611381906147bb565b60405180910390fd5b81600e54611398919061455f565b3410156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614605565b60405180910390fd5b5b6108ae82826113ea91906141cc565b111561142b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114229061424c565b60405180910390fd5b6000600190505b8281116114615761144e84828461144991906141cc565b61243c565b8080611459906142cf565b915050611432565b50505050565b61148283838360405180602001604052806000815250611c10565b505050565b6060600061149483611796565b905060008167ffffffffffffffff8111156114b2576114b16139b9565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060005b8281101561152a576114f885826110ce565b82828151811061150b5761150a6142a0565b5b6020026020010181815250508080611522906142cf565b9150506114e6565b508092505050919050565b600061153f610dd3565b8210611580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115779061484d565b60405180910390fd5b60088281548110611594576115936142a0565b5b90600052602060002001549050919050565b6115ae61237b565b73ffffffffffffffffffffffffffffffffffffffff166115cc611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061417d565b60405180910390fd5b80600d8190555050565b61163461237b565b73ffffffffffffffffffffffffffffffffffffffff16611652611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f9061417d565b60405180910390fd5b80600b90816116b79190614a19565b5050565b6000600a60009054906101000a900460ff16905090565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614b5d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90614bef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61185561237b565b73ffffffffffffffffffffffffffffffffffffffff16611873611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c09061417d565b60405180910390fd5b6118d36000612793565b565b600d5481565b6118e361237b565b73ffffffffffffffffffffffffffffffffffffffff16611901611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e9061417d565b60405180910390fd5b61195f612859565b565b61196961237b565b73ffffffffffffffffffffffffffffffffffffffff16611987611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d49061417d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611a1b57600080fd5b565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a4f61237b565b73ffffffffffffffffffffffffffffffffffffffff16611a6d611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba9061417d565b60405180910390fd5b80600e8190555050565b611ad561237b565b73ffffffffffffffffffffffffffffffffffffffff16611af3611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b409061417d565b60405180910390fd5b80600c9081611b589190614a19565b5050565b606060018054611b6b90613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9790613f4a565b8015611be45780601f10611bb957610100808354040283529160200191611be4565b820191906000526020600020905b815481529060010190602001808311611bc757829003601f168201915b5050505050905090565b600e5481565b600f5481565b611c0c611c0561237b565b83836128fc565b5050565b611c21611c1b61237b565b8361245a565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790614389565b60405180910390fd5b611c6c84848484612a68565b50505050565b611c7a61237b565b73ffffffffffffffffffffffffffffffffffffffff16611c98611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce59061417d565b60405180910390fd5b611cf6612ac4565b565b611d0061237b565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b9061417d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060611d9c8261230f565b611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290614c81565b60405180910390fd5b6000611de5612b66565b90506000815111611e055760405180602001604052806000815250611e30565b80611e0f84612bf8565b604051602001611e20929190614cdd565b6040516020818303038152906040525b915050919050565b600b8054611e4590613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7190613f4a565b8015611ebe5780601f10611e9357610100808354040283529160200191611ebe565b820191906000526020600020905b815481529060010190602001808311611ea157829003601f168201915b505050505081565b611ece61237b565b73ffffffffffffffffffffffffffffffffffffffff16611eec611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f399061417d565b60405180910390fd5b80600f8190555050565b600c8054611f5990613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8590613f4a565b8015611fd25780601f10611fa757610100808354040283529160200191611fd2565b820191906000526020600020905b815481529060010190602001808311611fb557829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61207661237b565b73ffffffffffffffffffffffffffffffffffffffff16612094611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e19061417d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215090614d73565b60405180910390fd5b61216281612793565b50565b6108ae81565b600080823b905060008111915050919050565b612189838383612290565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121cb576121c681612d58565b61220a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612209576122088382612da1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361224c5761224781612f0e565b61228b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461228a576122898282612fdf565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061230857506123078261305e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123f6836116e5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612456828260405180602001604052806000815250613140565b5050565b60006124658261230f565b6124a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249b90614e05565b60405180910390fd5b60006124af836116e5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061251e57508373ffffffffffffffffffffffffffffffffffffffff1661250684610a94565b73ffffffffffffffffffffffffffffffffffffffff16145b8061252f575061252e8185611fda565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612558826116e5565b73ffffffffffffffffffffffffffffffffffffffff16146125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614e97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490614f29565b60405180910390fd5b61262883838361319b565b612633600082612383565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612683919061426c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126da91906141cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128616116bb565b156128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614f95565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128e561237b565b6040516128f291906137d6565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190615001565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a5b9190613665565b60405180910390a3505050565b612a73848484612538565b612a7f848484846131f3565b612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615093565b60405180910390fd5b50505050565b612acc6116bb565b612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906150ff565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b4f61237b565b604051612b5c91906137d6565b60405180910390a1565b6060600b8054612b7590613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba190613f4a565b8015612bee5780601f10612bc357610100808354040283529160200191612bee565b820191906000526020600020905b815481529060010190602001808311612bd157829003601f168201915b5050505050905090565b606060008203612c3f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d53565b600082905060005b60008214612c71578080612c5a906142cf565b915050600a82612c6a919061514e565b9150612c47565b60008167ffffffffffffffff811115612c8d57612c8c6139b9565b5b6040519080825280601f01601f191660200182016040528015612cbf5781602001600182028036833780820191505090505b5090505b60008514612d4c57600182612cd8919061426c565b9150600a85612ce7919061517f565b6030612cf391906141cc565b60f81b818381518110612d0957612d086142a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d45919061514e565b9450612cc3565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dae84611796565b612db8919061426c565b9050600060076000848152602001908152602001600020549050818114612e9d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f22919061426c565b9050600060096000848152602001908152602001600020549050600060088381548110612f5257612f516142a0565b5b906000526020600020015490508060088381548110612f7457612f736142a0565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fc357612fc26151b0565b5b6001900381819060005260206000200160009055905550505050565b6000612fea83611796565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061312957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061313957506131388261337a565b5b9050919050565b61314a83836133e4565b61315760008484846131f3565b613196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318d90615093565b60405180910390fd5b505050565b6131a36116bb565b156131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131da90614f95565b60405180910390fd5b6131ee83838361217e565b505050565b60006132148473ffffffffffffffffffffffffffffffffffffffff1661216b565b1561336d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261323d61237b565b8786866040518563ffffffff1660e01b815260040161325f9493929190615234565b6020604051808303816000875af192505050801561329b57506040513d601f19601f820116820180604052508101906132989190615295565b60015b61331d573d80600081146132cb576040519150601f19603f3d011682016040523d82523d6000602084013e6132d0565b606091505b506000815103613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c90615093565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613372565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344a9061530e565b60405180910390fd5b61345c8161230f565b1561349c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134939061537a565b60405180910390fd5b6134a86000838361319b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134f891906141cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135fa816135c5565b811461360557600080fd5b50565b600081359050613617816135f1565b92915050565b600060208284031215613633576136326135bb565b5b600061364184828501613608565b91505092915050565b60008115159050919050565b61365f8161364a565b82525050565b600060208201905061367a6000830184613656565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136ba57808201518184015260208101905061369f565b60008484015250505050565b6000601f19601f8301169050919050565b60006136e282613680565b6136ec818561368b565b93506136fc81856020860161369c565b613705816136c6565b840191505092915050565b6000602082019050818103600083015261372a81846136d7565b905092915050565b6000819050919050565b61374581613732565b811461375057600080fd5b50565b6000813590506137628161373c565b92915050565b60006020828403121561377e5761377d6135bb565b5b600061378c84828501613753565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137c082613795565b9050919050565b6137d0816137b5565b82525050565b60006020820190506137eb60008301846137c7565b92915050565b6137fa816137b5565b811461380557600080fd5b50565b600081359050613817816137f1565b92915050565b60008060408385031215613834576138336135bb565b5b600061384285828601613808565b925050602061385385828601613753565b9150509250929050565b600060208284031215613873576138726135bb565b5b600061388184828501613808565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126138af576138ae61388a565b5b8235905067ffffffffffffffff8111156138cc576138cb61388f565b5b6020830191508360208202830111156138e8576138e7613894565b5b9250929050565b60008060208385031215613906576139056135bb565b5b600083013567ffffffffffffffff811115613924576139236135c0565b5b61393085828601613899565b92509250509250929050565b61394581613732565b82525050565b6000602082019050613960600083018461393c565b92915050565b60008060006060848603121561397f5761397e6135bb565b5b600061398d86828701613808565b935050602061399e86828701613808565b92505060406139af86828701613753565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139f1826136c6565b810181811067ffffffffffffffff82111715613a1057613a0f6139b9565b5b80604052505050565b6000613a236135b1565b9050613a2f82826139e8565b919050565b600067ffffffffffffffff821115613a4f57613a4e6139b9565b5b602082029050602081019050919050565b6000613a73613a6e84613a34565b613a19565b90508083825260208201905060208402830185811115613a9657613a95613894565b5b835b81811015613abf5780613aab8882613808565b845260208401935050602081019050613a98565b5050509392505050565b600082601f830112613ade57613add61388a565b5b8135613aee848260208601613a60565b91505092915050565b600060208284031215613b0d57613b0c6135bb565b5b600082013567ffffffffffffffff811115613b2b57613b2a6135c0565b5b613b3784828501613ac9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b7581613732565b82525050565b6000613b878383613b6c565b60208301905092915050565b6000602082019050919050565b6000613bab82613b40565b613bb58185613b4b565b9350613bc083613b5c565b8060005b83811015613bf1578151613bd88882613b7b565b9750613be383613b93565b925050600181019050613bc4565b5085935050505092915050565b60006020820190508181036000830152613c188184613ba0565b905092915050565b600080fd5b600067ffffffffffffffff821115613c4057613c3f6139b9565b5b613c49826136c6565b9050602081019050919050565b82818337600083830152505050565b6000613c78613c7384613c25565b613a19565b905082815260208101848484011115613c9457613c93613c20565b5b613c9f848285613c56565b509392505050565b600082601f830112613cbc57613cbb61388a565b5b8135613ccc848260208601613c65565b91505092915050565b600060208284031215613ceb57613cea6135bb565b5b600082013567ffffffffffffffff811115613d0957613d086135c0565b5b613d1584828501613ca7565b91505092915050565b613d278161364a565b8114613d3257600080fd5b50565b600081359050613d4481613d1e565b92915050565b60008060408385031215613d6157613d606135bb565b5b6000613d6f85828601613808565b9250506020613d8085828601613d35565b9150509250929050565b600067ffffffffffffffff821115613da557613da46139b9565b5b613dae826136c6565b9050602081019050919050565b6000613dce613dc984613d8a565b613a19565b905082815260208101848484011115613dea57613de9613c20565b5b613df5848285613c56565b509392505050565b600082601f830112613e1257613e1161388a565b5b8135613e22848260208601613dbb565b91505092915050565b60008060008060808587031215613e4557613e446135bb565b5b6000613e5387828801613808565b9450506020613e6487828801613808565b9350506040613e7587828801613753565b925050606085013567ffffffffffffffff811115613e9657613e956135c0565b5b613ea287828801613dfd565b91505092959194509250565b600060208284031215613ec457613ec36135bb565b5b6000613ed284828501613d35565b91505092915050565b60008060408385031215613ef257613ef16135bb565b5b6000613f0085828601613808565b9250506020613f1185828601613808565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f6257607f821691505b602082108103613f7557613f74613f1b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613fd7602c8361368b565b9150613fe282613f7b565b604082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061406960218361368b565b91506140748261400d565b604082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006140fb60388361368b565b91506141068261409f565b604082019050919050565b6000602082019050818103600083015261412a816140ee565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061416760208361368b565b915061417282614131565b602082019050919050565b600060208201905081810360008301526141968161415a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141d782613732565b91506141e283613732565b92508282019050808211156141fa576141f961419d565b5b92915050565b7f45786365656473206d6178696d756d20737570706c7921000000000000000000600082015250565b600061423660178361368b565b915061424182614200565b602082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b600061427782613732565b915061428283613732565b925082820390508181111561429a5761429961419d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006142da82613732565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361430c5761430b61419d565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061437360318361368b565b915061437e82614317565b604082019050919050565b600060208201905081810360008301526143a281614366565b9050919050565b7f596f7520617265206e6f742077686974656c697374656420666f72207468652060008201527f57617220436869636b73207072652d73616c6521000000000000000000000000602082015250565b600061440560348361368b565b9150614410826143a9565b604082019050919050565b60006020820190508181036000830152614434816143f8565b9050919050565b7f596f752063616e2774207072652d6d696e742057617220436869636b7320617460008201527f20746865206d6f6d656e74210000000000000000000000000000000000000000602082015250565b6000614497602c8361368b565b91506144a28261443b565b604082019050919050565b600060208201905081810360008301526144c68161448a565b9050919050565b7f596f752063616e206f6e6c79206d696e74203120746f2031302057617220436860008201527f69636b7321000000000000000000000000000000000000000000000000000000602082015250565b600061452960258361368b565b9150614534826144cd565b604082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b600061456a82613732565b915061457583613732565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145ae576145ad61419d565b5b828202905092915050565b7f45746865722073656e74206973206e6f7420636f727265637421000000000000600082015250565b60006145ef601a8361368b565b91506145fa826145b9565b602082019050919050565b6000602082019050818103600083015261461e816145e2565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614681602b8361368b565b915061468c82614625565b604082019050919050565b600060208201905081810360008301526146b081614674565b9050919050565b7f5468652057617220436869636b73206d61696e2073616c65206973206e6f742060008201527f6f70656e21000000000000000000000000000000000000000000000000000000602082015250565b600061471360258361368b565b915061471e826146b7565b604082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f596f752063616e206f6e6c79206d696e74203120746f2032302057617220436860008201527f69636b7321000000000000000000000000000000000000000000000000000000602082015250565b60006147a560258361368b565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614837602c8361368b565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026148cf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614892565b6148d98683614892565b95508019841693508086168417925050509392505050565b6000819050919050565b600061491661491161490c84613732565b6148f1565b613732565b9050919050565b6000819050919050565b614930836148fb565b61494461493c8261491d565b84845461489f565b825550505050565b600090565b61495961494c565b614964818484614927565b505050565b5b818110156149885761497d600082614951565b60018101905061496a565b5050565b601f8211156149cd5761499e8161486d565b6149a784614882565b810160208510156149b6578190505b6149ca6149c285614882565b830182614969565b50505b505050565b600082821c905092915050565b60006149f0600019846008026149d2565b1980831691505092915050565b6000614a0983836149df565b9150826002028217905092915050565b614a2282613680565b67ffffffffffffffff811115614a3b57614a3a6139b9565b5b614a458254613f4a565b614a5082828561498c565b600060209050601f831160018114614a835760008415614a71578287015190505b614a7b85826149fd565b865550614ae3565b601f198416614a918661486d565b60005b82811015614ab957848901518255600182019150602085019450602081019050614a94565b86831015614ad65784890151614ad2601f8916826149df565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614b4760298361368b565b9150614b5282614aeb565b604082019050919050565b60006020820190508181036000830152614b7681614b3a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614bd9602a8361368b565b9150614be482614b7d565b604082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614c6b602f8361368b565b9150614c7682614c0f565b604082019050919050565b60006020820190508181036000830152614c9a81614c5e565b9050919050565b600081905092915050565b6000614cb782613680565b614cc18185614ca1565b9350614cd181856020860161369c565b80840191505092915050565b6000614ce98285614cac565b9150614cf58284614cac565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d5d60268361368b565b9150614d6882614d01565b604082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614def602c8361368b565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e8160298361368b565b9150614e8c82614e25565b604082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1360248361368b565b9150614f1e82614eb7565b604082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614f7f60108361368b565b9150614f8a82614f49565b602082019050919050565b60006020820190508181036000830152614fae81614f72565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614feb60198361368b565b9150614ff682614fb5565b602082019050919050565b6000602082019050818103600083015261501a81614fde565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061507d60328361368b565b915061508882615021565b604082019050919050565b600060208201905081810360008301526150ac81615070565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006150e960148361368b565b91506150f4826150b3565b602082019050919050565b60006020820190508181036000830152615118816150dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515982613732565b915061516483613732565b9250826151745761517361511f565b5b828204905092915050565b600061518a82613732565b915061519583613732565b9250826151a5576151a461511f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000615206826151df565b61521081856151ea565b935061522081856020860161369c565b615229816136c6565b840191505092915050565b600060808201905061524960008301876137c7565b61525660208301866137c7565b615263604083018561393c565b818103606083015261527581846151fb565b905095945050505050565b60008151905061528f816135f1565b92915050565b6000602082840312156152ab576152aa6135bb565b5b60006152b984828501615280565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006152f860208361368b565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615364601c8361368b565b915061536f8261532e565b602082019050919050565b6000602082019050818103600083015261539381615357565b905091905056fea2646970667358221220f634d637b86e758f64a02dcd02efda0df715a23f314b4da2e85e301543126b3664736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e636f736d69636d6574612e696f2f7761722d636869636b732f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003268747470733a2f2f6170692e636f736d69636d6574612e696f2f7761722d636869636b732f636f6e74726163742e6a736f6e0000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c806370a0823111610144578063a22cb465116100b6578063d547cfb71161007a578063d547cfb7146108e0578063da6405e11461090b578063e8a3d48514610934578063e985e9c51461095f578063f2fde38b1461099c578063f47c84c5146109c557610267565b8063a22cb46514610811578063b88d4fde1461083a578063be9a655514610863578063c1d7ae311461087a578063c87b56dd146108a357610267565b80638da5cb5b116101085780638da5cb5b1461071357806391b7f5ed1461073e578063938e3d7b1461076757806395d89b4114610790578063a035b1fe146107bb578063a187c89b146107e657610267565b806370a0823114610673578063715018a6146106b05780637501f741146106c75780638456cb59146106f2578063853828b61461070957610267565b80632f994122116101dd5780634f6ccce7116101a15780634f6ccce714610551578063547520fe1461058e57806355f804b3146105b75780635c975abb146105e057806360cfd3591461060b5780636352211e1461063657610267565b80632f9941221461046957806334131cd3146104a657806340c10f19146104cf57806342842e0e146104eb578063438b63001461051457610267565b8063163e1e611161022f578063163e1e611461037757806318160ddd146103a057806323b872dd146103cb578063290c292d146103f45780632e1a7d4d146104105780632f745c591461042c57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b3146103115780630f2091861461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061361d565b6109f0565b6040516102a09190613665565b60405180910390f35b3480156102b557600080fd5b506102be610a02565b6040516102cb9190613710565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613768565b610a94565b60405161030891906137d6565b60405180910390f35b34801561031d57600080fd5b506103386004803603810190610333919061381d565b610b19565b005b34801561034657600080fd5b50610361600480360381019061035c919061385d565b610c30565b60405161036e9190613665565b60405180910390f35b34801561038357600080fd5b5061039e600480360381019061039991906138ef565b610c86565b005b3480156103ac57600080fd5b506103b5610dd3565b6040516103c2919061394b565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613966565b610de0565b005b61040e6004803603810190610409919061381d565b610e40565b005b61042a60048036038101906104259190613768565b611011565b005b34801561043857600080fd5b50610453600480360381019061044e919061381d565b6110ce565b604051610460919061394b565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b919061385d565b611173565b60405161049d9190613665565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190613af7565b611193565b005b6104e960048036038101906104e4919061381d565b6112a4565b005b3480156104f757600080fd5b50610512600480360381019061050d9190613966565b611467565b005b34801561052057600080fd5b5061053b6004803603810190610536919061385d565b611487565b6040516105489190613bfe565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613768565b611535565b604051610585919061394b565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613768565b6115a6565b005b3480156105c357600080fd5b506105de60048036038101906105d99190613cd5565b61162c565b005b3480156105ec57600080fd5b506105f56116bb565b6040516106029190613665565b60405180910390f35b34801561061757600080fd5b506106206116d2565b60405161062d9190613665565b60405180910390f35b34801561064257600080fd5b5061065d60048036038101906106589190613768565b6116e5565b60405161066a91906137d6565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061385d565b611796565b6040516106a7919061394b565b60405180910390f35b3480156106bc57600080fd5b506106c561184d565b005b3480156106d357600080fd5b506106dc6118d5565b6040516106e9919061394b565b60405180910390f35b3480156106fe57600080fd5b506107076118db565b005b610711611961565b005b34801561071f57600080fd5b50610728611a1d565b60405161073591906137d6565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190613768565b611a47565b005b34801561077357600080fd5b5061078e60048036038101906107899190613cd5565b611acd565b005b34801561079c57600080fd5b506107a5611b5c565b6040516107b29190613710565b60405180910390f35b3480156107c757600080fd5b506107d0611bee565b6040516107dd919061394b565b60405180910390f35b3480156107f257600080fd5b506107fb611bf4565b604051610808919061394b565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613d4a565b611bfa565b005b34801561084657600080fd5b50610861600480360381019061085c9190613e2b565b611c10565b005b34801561086f57600080fd5b50610878611c72565b005b34801561088657600080fd5b506108a1600480360381019061089c9190613eae565b611cf8565b005b3480156108af57600080fd5b506108ca60048036038101906108c59190613768565b611d91565b6040516108d79190613710565b60405180910390f35b3480156108ec57600080fd5b506108f5611e38565b6040516109029190613710565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190613768565b611ec6565b005b34801561094057600080fd5b50610949611f4c565b6040516109569190613710565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613edb565b611fda565b6040516109939190613665565b60405180910390f35b3480156109a857600080fd5b506109c360048036038101906109be919061385d565b61206e565b005b3480156109d157600080fd5b506109da612165565b6040516109e7919061394b565b60405180910390f35b60006109fb82612295565b9050919050565b606060008054610a1190613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3d90613f4a565b8015610a8a5780601f10610a5f57610100808354040283529160200191610a8a565b820191906000526020600020905b815481529060010190602001808311610a6d57829003601f168201915b5050505050905090565b6000610a9f8261230f565b610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613fed565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b24826116e5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b9061407f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bb361237b565b73ffffffffffffffffffffffffffffffffffffffff161480610be25750610be181610bdc61237b565b611fda565b5b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890614111565b60405180910390fd5b610c2b8383612383565b505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c8e61237b565b73ffffffffffffffffffffffffffffffffffffffff16610cac611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf99061417d565b60405180910390fd5b6000610d0c610dd3565b90506108ae8383905082610d2091906141cc565b1115610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d589061424c565b60405180910390fd5b6000600190505b838390508111610dcd57610dba8484600184610d84919061426c565b818110610d9457610d936142a0565b5b9050602002016020810190610da9919061385d565b8284610db591906141cc565b61243c565b8080610dc5906142cf565b915050610d68565b50505050565b6000600880549050905090565b610df1610deb61237b565b8261245a565b610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614389565b60405180910390fd5b610e3b838383612538565b505050565b6000610e4a610dd3565b9050610e5583610c30565b610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061441b565b60405180910390fd5b601060009054906101000a900460ff1615610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb906144ad565b60405180910390fd5b600082118015610ef65750600d548211155b610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c9061453f565b60405180910390fd5b81600f54610f43919061455f565b341015610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c90614605565b60405180910390fd5b6108ae8282610f9491906141cc565b1115610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc9061424c565b60405180910390fd5b6000600190505b82811161100b57610ff8848284610ff391906141cc565b61243c565b8080611003906142cf565b915050610fdc565b50505050565b61101961237b565b73ffffffffffffffffffffffffffffffffffffffff16611037611a1d565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110849061417d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110cb57600080fd5b50565b60006110d983611796565b821061111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190614697565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b61119b61237b565b73ffffffffffffffffffffffffffffffffffffffff166111b9611a1d565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112069061417d565b60405180910390fd5b60005b81518110156112a057600160116000848481518110611234576112336142a0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611298906142cf565b915050611212565b5050565b60006112ae610dd3565b90506112b8611a1d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113db57601060009054906101000a900460ff16611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614729565b60405180910390fd5b60008211801561134b5750600d548211155b61138a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611381906147bb565b60405180910390fd5b81600e54611398919061455f565b3410156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614605565b60405180910390fd5b5b6108ae82826113ea91906141cc565b111561142b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114229061424c565b60405180910390fd5b6000600190505b8281116114615761144e84828461144991906141cc565b61243c565b8080611459906142cf565b915050611432565b50505050565b61148283838360405180602001604052806000815250611c10565b505050565b6060600061149483611796565b905060008167ffffffffffffffff8111156114b2576114b16139b9565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060005b8281101561152a576114f885826110ce565b82828151811061150b5761150a6142a0565b5b6020026020010181815250508080611522906142cf565b9150506114e6565b508092505050919050565b600061153f610dd3565b8210611580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115779061484d565b60405180910390fd5b60088281548110611594576115936142a0565b5b90600052602060002001549050919050565b6115ae61237b565b73ffffffffffffffffffffffffffffffffffffffff166115cc611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061417d565b60405180910390fd5b80600d8190555050565b61163461237b565b73ffffffffffffffffffffffffffffffffffffffff16611652611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f9061417d565b60405180910390fd5b80600b90816116b79190614a19565b5050565b6000600a60009054906101000a900460ff16905090565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614b5d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90614bef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61185561237b565b73ffffffffffffffffffffffffffffffffffffffff16611873611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c09061417d565b60405180910390fd5b6118d36000612793565b565b600d5481565b6118e361237b565b73ffffffffffffffffffffffffffffffffffffffff16611901611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e9061417d565b60405180910390fd5b61195f612859565b565b61196961237b565b73ffffffffffffffffffffffffffffffffffffffff16611987611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d49061417d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611a1b57600080fd5b565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a4f61237b565b73ffffffffffffffffffffffffffffffffffffffff16611a6d611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba9061417d565b60405180910390fd5b80600e8190555050565b611ad561237b565b73ffffffffffffffffffffffffffffffffffffffff16611af3611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b409061417d565b60405180910390fd5b80600c9081611b589190614a19565b5050565b606060018054611b6b90613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9790613f4a565b8015611be45780601f10611bb957610100808354040283529160200191611be4565b820191906000526020600020905b815481529060010190602001808311611bc757829003601f168201915b5050505050905090565b600e5481565b600f5481565b611c0c611c0561237b565b83836128fc565b5050565b611c21611c1b61237b565b8361245a565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790614389565b60405180910390fd5b611c6c84848484612a68565b50505050565b611c7a61237b565b73ffffffffffffffffffffffffffffffffffffffff16611c98611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce59061417d565b60405180910390fd5b611cf6612ac4565b565b611d0061237b565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b9061417d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060611d9c8261230f565b611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290614c81565b60405180910390fd5b6000611de5612b66565b90506000815111611e055760405180602001604052806000815250611e30565b80611e0f84612bf8565b604051602001611e20929190614cdd565b6040516020818303038152906040525b915050919050565b600b8054611e4590613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7190613f4a565b8015611ebe5780601f10611e9357610100808354040283529160200191611ebe565b820191906000526020600020905b815481529060010190602001808311611ea157829003601f168201915b505050505081565b611ece61237b565b73ffffffffffffffffffffffffffffffffffffffff16611eec611a1d565b73ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f399061417d565b60405180910390fd5b80600f8190555050565b600c8054611f5990613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8590613f4a565b8015611fd25780601f10611fa757610100808354040283529160200191611fd2565b820191906000526020600020905b815481529060010190602001808311611fb557829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61207661237b565b73ffffffffffffffffffffffffffffffffffffffff16612094611a1d565b73ffffffffffffffffffffffffffffffffffffffff16146120ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e19061417d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215090614d73565b60405180910390fd5b61216281612793565b50565b6108ae81565b600080823b905060008111915050919050565b612189838383612290565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121cb576121c681612d58565b61220a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612209576122088382612da1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361224c5761224781612f0e565b61228b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461228a576122898282612fdf565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061230857506123078261305e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123f6836116e5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612456828260405180602001604052806000815250613140565b5050565b60006124658261230f565b6124a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249b90614e05565b60405180910390fd5b60006124af836116e5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061251e57508373ffffffffffffffffffffffffffffffffffffffff1661250684610a94565b73ffffffffffffffffffffffffffffffffffffffff16145b8061252f575061252e8185611fda565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612558826116e5565b73ffffffffffffffffffffffffffffffffffffffff16146125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614e97565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490614f29565b60405180910390fd5b61262883838361319b565b612633600082612383565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612683919061426c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126da91906141cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128616116bb565b156128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890614f95565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128e561237b565b6040516128f291906137d6565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190615001565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a5b9190613665565b60405180910390a3505050565b612a73848484612538565b612a7f848484846131f3565b612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615093565b60405180910390fd5b50505050565b612acc6116bb565b612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906150ff565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b4f61237b565b604051612b5c91906137d6565b60405180910390a1565b6060600b8054612b7590613f4a565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba190613f4a565b8015612bee5780601f10612bc357610100808354040283529160200191612bee565b820191906000526020600020905b815481529060010190602001808311612bd157829003601f168201915b5050505050905090565b606060008203612c3f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d53565b600082905060005b60008214612c71578080612c5a906142cf565b915050600a82612c6a919061514e565b9150612c47565b60008167ffffffffffffffff811115612c8d57612c8c6139b9565b5b6040519080825280601f01601f191660200182016040528015612cbf5781602001600182028036833780820191505090505b5090505b60008514612d4c57600182612cd8919061426c565b9150600a85612ce7919061517f565b6030612cf391906141cc565b60f81b818381518110612d0957612d086142a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d45919061514e565b9450612cc3565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dae84611796565b612db8919061426c565b9050600060076000848152602001908152602001600020549050818114612e9d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f22919061426c565b9050600060096000848152602001908152602001600020549050600060088381548110612f5257612f516142a0565b5b906000526020600020015490508060088381548110612f7457612f736142a0565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fc357612fc26151b0565b5b6001900381819060005260206000200160009055905550505050565b6000612fea83611796565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061312957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061313957506131388261337a565b5b9050919050565b61314a83836133e4565b61315760008484846131f3565b613196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318d90615093565b60405180910390fd5b505050565b6131a36116bb565b156131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131da90614f95565b60405180910390fd5b6131ee83838361217e565b505050565b60006132148473ffffffffffffffffffffffffffffffffffffffff1661216b565b1561336d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261323d61237b565b8786866040518563ffffffff1660e01b815260040161325f9493929190615234565b6020604051808303816000875af192505050801561329b57506040513d601f19601f820116820180604052508101906132989190615295565b60015b61331d573d80600081146132cb576040519150601f19603f3d011682016040523d82523d6000602084013e6132d0565b606091505b506000815103613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c90615093565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613372565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344a9061530e565b60405180910390fd5b61345c8161230f565b1561349c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134939061537a565b60405180910390fd5b6134a86000838361319b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134f891906141cc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135fa816135c5565b811461360557600080fd5b50565b600081359050613617816135f1565b92915050565b600060208284031215613633576136326135bb565b5b600061364184828501613608565b91505092915050565b60008115159050919050565b61365f8161364a565b82525050565b600060208201905061367a6000830184613656565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136ba57808201518184015260208101905061369f565b60008484015250505050565b6000601f19601f8301169050919050565b60006136e282613680565b6136ec818561368b565b93506136fc81856020860161369c565b613705816136c6565b840191505092915050565b6000602082019050818103600083015261372a81846136d7565b905092915050565b6000819050919050565b61374581613732565b811461375057600080fd5b50565b6000813590506137628161373c565b92915050565b60006020828403121561377e5761377d6135bb565b5b600061378c84828501613753565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137c082613795565b9050919050565b6137d0816137b5565b82525050565b60006020820190506137eb60008301846137c7565b92915050565b6137fa816137b5565b811461380557600080fd5b50565b600081359050613817816137f1565b92915050565b60008060408385031215613834576138336135bb565b5b600061384285828601613808565b925050602061385385828601613753565b9150509250929050565b600060208284031215613873576138726135bb565b5b600061388184828501613808565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126138af576138ae61388a565b5b8235905067ffffffffffffffff8111156138cc576138cb61388f565b5b6020830191508360208202830111156138e8576138e7613894565b5b9250929050565b60008060208385031215613906576139056135bb565b5b600083013567ffffffffffffffff811115613924576139236135c0565b5b61393085828601613899565b92509250509250929050565b61394581613732565b82525050565b6000602082019050613960600083018461393c565b92915050565b60008060006060848603121561397f5761397e6135bb565b5b600061398d86828701613808565b935050602061399e86828701613808565b92505060406139af86828701613753565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139f1826136c6565b810181811067ffffffffffffffff82111715613a1057613a0f6139b9565b5b80604052505050565b6000613a236135b1565b9050613a2f82826139e8565b919050565b600067ffffffffffffffff821115613a4f57613a4e6139b9565b5b602082029050602081019050919050565b6000613a73613a6e84613a34565b613a19565b90508083825260208201905060208402830185811115613a9657613a95613894565b5b835b81811015613abf5780613aab8882613808565b845260208401935050602081019050613a98565b5050509392505050565b600082601f830112613ade57613add61388a565b5b8135613aee848260208601613a60565b91505092915050565b600060208284031215613b0d57613b0c6135bb565b5b600082013567ffffffffffffffff811115613b2b57613b2a6135c0565b5b613b3784828501613ac9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b7581613732565b82525050565b6000613b878383613b6c565b60208301905092915050565b6000602082019050919050565b6000613bab82613b40565b613bb58185613b4b565b9350613bc083613b5c565b8060005b83811015613bf1578151613bd88882613b7b565b9750613be383613b93565b925050600181019050613bc4565b5085935050505092915050565b60006020820190508181036000830152613c188184613ba0565b905092915050565b600080fd5b600067ffffffffffffffff821115613c4057613c3f6139b9565b5b613c49826136c6565b9050602081019050919050565b82818337600083830152505050565b6000613c78613c7384613c25565b613a19565b905082815260208101848484011115613c9457613c93613c20565b5b613c9f848285613c56565b509392505050565b600082601f830112613cbc57613cbb61388a565b5b8135613ccc848260208601613c65565b91505092915050565b600060208284031215613ceb57613cea6135bb565b5b600082013567ffffffffffffffff811115613d0957613d086135c0565b5b613d1584828501613ca7565b91505092915050565b613d278161364a565b8114613d3257600080fd5b50565b600081359050613d4481613d1e565b92915050565b60008060408385031215613d6157613d606135bb565b5b6000613d6f85828601613808565b9250506020613d8085828601613d35565b9150509250929050565b600067ffffffffffffffff821115613da557613da46139b9565b5b613dae826136c6565b9050602081019050919050565b6000613dce613dc984613d8a565b613a19565b905082815260208101848484011115613dea57613de9613c20565b5b613df5848285613c56565b509392505050565b600082601f830112613e1257613e1161388a565b5b8135613e22848260208601613dbb565b91505092915050565b60008060008060808587031215613e4557613e446135bb565b5b6000613e5387828801613808565b9450506020613e6487828801613808565b9350506040613e7587828801613753565b925050606085013567ffffffffffffffff811115613e9657613e956135c0565b5b613ea287828801613dfd565b91505092959194509250565b600060208284031215613ec457613ec36135bb565b5b6000613ed284828501613d35565b91505092915050565b60008060408385031215613ef257613ef16135bb565b5b6000613f0085828601613808565b9250506020613f1185828601613808565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f6257607f821691505b602082108103613f7557613f74613f1b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613fd7602c8361368b565b9150613fe282613f7b565b604082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061406960218361368b565b91506140748261400d565b604082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006140fb60388361368b565b91506141068261409f565b604082019050919050565b6000602082019050818103600083015261412a816140ee565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061416760208361368b565b915061417282614131565b602082019050919050565b600060208201905081810360008301526141968161415a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141d782613732565b91506141e283613732565b92508282019050808211156141fa576141f961419d565b5b92915050565b7f45786365656473206d6178696d756d20737570706c7921000000000000000000600082015250565b600061423660178361368b565b915061424182614200565b602082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b600061427782613732565b915061428283613732565b925082820390508181111561429a5761429961419d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006142da82613732565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361430c5761430b61419d565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061437360318361368b565b915061437e82614317565b604082019050919050565b600060208201905081810360008301526143a281614366565b9050919050565b7f596f7520617265206e6f742077686974656c697374656420666f72207468652060008201527f57617220436869636b73207072652d73616c6521000000000000000000000000602082015250565b600061440560348361368b565b9150614410826143a9565b604082019050919050565b60006020820190508181036000830152614434816143f8565b9050919050565b7f596f752063616e2774207072652d6d696e742057617220436869636b7320617460008201527f20746865206d6f6d656e74210000000000000000000000000000000000000000602082015250565b6000614497602c8361368b565b91506144a28261443b565b604082019050919050565b600060208201905081810360008301526144c68161448a565b9050919050565b7f596f752063616e206f6e6c79206d696e74203120746f2031302057617220436860008201527f69636b7321000000000000000000000000000000000000000000000000000000602082015250565b600061452960258361368b565b9150614534826144cd565b604082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b600061456a82613732565b915061457583613732565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145ae576145ad61419d565b5b828202905092915050565b7f45746865722073656e74206973206e6f7420636f727265637421000000000000600082015250565b60006145ef601a8361368b565b91506145fa826145b9565b602082019050919050565b6000602082019050818103600083015261461e816145e2565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614681602b8361368b565b915061468c82614625565b604082019050919050565b600060208201905081810360008301526146b081614674565b9050919050565b7f5468652057617220436869636b73206d61696e2073616c65206973206e6f742060008201527f6f70656e21000000000000000000000000000000000000000000000000000000602082015250565b600061471360258361368b565b915061471e826146b7565b604082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f596f752063616e206f6e6c79206d696e74203120746f2032302057617220436860008201527f69636b7321000000000000000000000000000000000000000000000000000000602082015250565b60006147a560258361368b565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614837602c8361368b565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026148cf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614892565b6148d98683614892565b95508019841693508086168417925050509392505050565b6000819050919050565b600061491661491161490c84613732565b6148f1565b613732565b9050919050565b6000819050919050565b614930836148fb565b61494461493c8261491d565b84845461489f565b825550505050565b600090565b61495961494c565b614964818484614927565b505050565b5b818110156149885761497d600082614951565b60018101905061496a565b5050565b601f8211156149cd5761499e8161486d565b6149a784614882565b810160208510156149b6578190505b6149ca6149c285614882565b830182614969565b50505b505050565b600082821c905092915050565b60006149f0600019846008026149d2565b1980831691505092915050565b6000614a0983836149df565b9150826002028217905092915050565b614a2282613680565b67ffffffffffffffff811115614a3b57614a3a6139b9565b5b614a458254613f4a565b614a5082828561498c565b600060209050601f831160018114614a835760008415614a71578287015190505b614a7b85826149fd565b865550614ae3565b601f198416614a918661486d565b60005b82811015614ab957848901518255600182019150602085019450602081019050614a94565b86831015614ad65784890151614ad2601f8916826149df565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614b4760298361368b565b9150614b5282614aeb565b604082019050919050565b60006020820190508181036000830152614b7681614b3a565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614bd9602a8361368b565b9150614be482614b7d565b604082019050919050565b60006020820190508181036000830152614c0881614bcc565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614c6b602f8361368b565b9150614c7682614c0f565b604082019050919050565b60006020820190508181036000830152614c9a81614c5e565b9050919050565b600081905092915050565b6000614cb782613680565b614cc18185614ca1565b9350614cd181856020860161369c565b80840191505092915050565b6000614ce98285614cac565b9150614cf58284614cac565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d5d60268361368b565b9150614d6882614d01565b604082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614def602c8361368b565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e8160298361368b565b9150614e8c82614e25565b604082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1360248361368b565b9150614f1e82614eb7565b604082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614f7f60108361368b565b9150614f8a82614f49565b602082019050919050565b60006020820190508181036000830152614fae81614f72565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614feb60198361368b565b9150614ff682614fb5565b602082019050919050565b6000602082019050818103600083015261501a81614fde565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061507d60328361368b565b915061508882615021565b604082019050919050565b600060208201905081810360008301526150ac81615070565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006150e960148361368b565b91506150f4826150b3565b602082019050919050565b60006020820190508181036000830152615118816150dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515982613732565b915061516483613732565b9250826151745761517361511f565b5b828204905092915050565b600061518a82613732565b915061519583613732565b9250826151a5576151a461511f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000615206826151df565b61521081856151ea565b935061522081856020860161369c565b615229816136c6565b840191505092915050565b600060808201905061524960008301876137c7565b61525660208301866137c7565b615263604083018561393c565b818103606083015261527581846151fb565b905095945050505050565b60008151905061528f816135f1565b92915050565b6000602082840312156152ab576152aa6135bb565b5b60006152b984828501615280565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006152f860208361368b565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615364601c8361368b565b915061536f8261532e565b602082019050919050565b6000602082019050818103600083015261539381615357565b905091905056fea2646970667358221220f634d637b86e758f64a02dcd02efda0df715a23f314b4da2e85e301543126b3664736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6170692e636f736d69636d6574612e696f2f7761722d636869636b732f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003268747470733a2f2f6170692e636f736d69636d6574612e696f2f7761722d636869636b732f636f6e74726163742e6a736f6e0000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseTokenURI (string): https://api.cosmicmeta.io/war-chicks/
Arg [1] : _contractURI (string): https://api.cosmicmeta.io/war-chicks/contract.json
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [3] : 68747470733a2f2f6170692e636f736d69636d6574612e696f2f7761722d6368
Arg [4] : 69636b732f000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [6] : 68747470733a2f2f6170692e636f736d69636d6574612e696f2f7761722d6368
Arg [7] : 69636b732f636f6e74726163742e6a736f6e0000000000000000000000000000
Deployed Bytecode Sourcemap
314:4897:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4640:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2408:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3919:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3455:120:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2548:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1614:111:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4646:330:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1270:657:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4380:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1290:253:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;863:49:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3237:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1935:605;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5042:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2880:349:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1797:230:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4028:94:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3583:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1091:84:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;792:28:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2111:235:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1849:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:11;;;;;;;;;;;;;:::i;:::-;;563:27:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4240:61;;;;;;;;;;;;;:::i;:::-;;4509:123;;;:::i;:::-;;1029:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3826:86:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3704:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2570:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;634:34:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;717:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4203:153:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5287:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4309:63:2;;;;;;;;;;;;;:::i;:::-;;4130:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2738:329:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;431:26:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3920:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;464:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;496:41:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4640:212;4779:4;4808:36;4832:11;4808:23;:36::i;:::-;4801:43;;4640:212;;;:::o;2408:98:4:-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;4022:16;4030:7;4022;:16::i;:::-;4014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:15;:24;4121:7;4105:24;;;;;;;;;;;;;;;;;;;;;4098:31;;3919:217;;;:::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;3586:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:5;3675:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3700:37;3717:5;3724:12;:10;:12::i;:::-;3700:16;:37::i;:::-;3675:62;3654:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;3455:120:2:-;3518:4;3542:17;:25;3560:6;3542:25;;;;;;;;;;;;;;;;;;;;;;;;;3535:32;;3455:120;;;:::o;2548:324::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2622:14:2::1;2639:13;:11;:13::i;:::-;2622:30;;533:4;2682:9;;:16;;2673:6;:25;;;;:::i;:::-;:39;;2665:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;2758:9;2770:1;2758:13;;2753:112;2778:9;;:16;;2773:1;:21;2753:112;;2816:37;2826:9;;2838:1;2836;:3;;;;:::i;:::-;2826:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2851:1;2842:6;:10;;;;:::i;:::-;2816:9;:37::i;:::-;2796:3;;;;;:::i;:::-;;;;2753:112;;;;2611:261;2548:324:::0;;:::o;1614:111:5:-;1675:7;1701:10;:17;;;;1694:24;;1614:111;:::o;4646:330:4:-;4835:41;4854:12;:10;:12::i;:::-;4868:7;4835:18;:41::i;:::-;4827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;:::-;4646:330;;;:::o;1270:657:2:-;1345:14;1362:13;:11;:13::i;:::-;1345:30;;1396:21;1413:3;1396:16;:21::i;:::-;1388:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;1494:8;;;;;;;;;;;1493:9;1485:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1582:1;1570:9;:13;:37;;;;;1600:7;;1587:9;:20;;1570:37;1562:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1696:9;1681:12;;:24;;;;:::i;:::-;1668:9;:37;;1660:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;533:4;1764:9;1755:6;:18;;;;:::i;:::-;:32;;1747:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1833:9;1845:1;1833:13;;1828:92;1853:9;1848:1;:14;1828:92;;1882:26;1892:3;1906:1;1897:6;:10;;;;:::i;:::-;1882:9;:26::i;:::-;1864:3;;;;;:::i;:::-;;;;1828:92;;;;1334:593;1270:657;;:::o;4380:121::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4467:10:2::1;4459:24;;:33;4484:7;4459:33;;;;;;;;;;;;;;;;;;;;;;;4451:42;;;::::0;::::1;;4380:121:::0;:::o;1290:253:5:-;1387:7;1422:23;1439:5;1422:16;:23::i;:::-;1414:5;:31;1406:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1510:12;:19;1523:5;1510:19;;;;;;;;;;;;;;;:26;1530:5;1510:26;;;;;;;;;;;;1503:33;;1290:253;;;;:::o;863:49:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;3237:210::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3331:9:2::1;3326:114;3346:12;:19;3342:1;:23;3326:114;;;3424:4;3387:17;:34;3405:12;3418:1;3405:15;;;;;;;;:::i;:::-;;;;;;;;3387:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;3367:3;;;;;:::i;:::-;;;;3326:114;;;;3237:210:::0;:::o;1935:605::-;2007:14;2024:13;:11;:13::i;:::-;2007:30;;2068:7;:5;:7::i;:::-;2054:21;;:10;:21;;;2050:298;;2100:8;;;;;;;;;;;2092:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;2185:1;2173:9;:13;:37;;;;;2203:7;;2190:9;:20;;2173:37;2165:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;2296:9;2288:5;;:17;;;;:::i;:::-;2275:9;:30;;2267:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2050:298;533:4;2377:9;2368:6;:18;;;;:::i;:::-;:32;;2360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2446:9;2458:1;2446:13;;2441:92;2466:9;2461:1;:14;2441:92;;2495:26;2505:3;2519:1;2510:6;:10;;;;:::i;:::-;2495:9;:26::i;:::-;2477:3;;;;;:::i;:::-;;;;2441:92;;;;1996:544;1935:605;;:::o;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;:::-;5042:179;;;:::o;2880:349:2:-;2940:16;2969:18;2990:17;3000:6;2990:9;:17::i;:::-;2969:38;;3020:25;3062:10;3048:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3020:53;;3091:9;3086:108;3106:10;3102:1;:14;3086:108;;;3152:30;3172:6;3180:1;3152:19;:30::i;:::-;3138:8;3147:1;3138:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;3118:3;;;;;:::i;:::-;;;;3086:108;;;;3213:8;3206:15;;;;2880:349;;;:::o;1797:230:5:-;1872:7;1907:30;:28;:30::i;:::-;1899:5;:38;1891:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2003:10;2014:5;2003:17;;;;;;;;:::i;:::-;;;;;;;;;;1996:24;;1797:230;;;:::o;4028:94:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4106:8:2::1;4096:7;:18;;;;4028:94:::0;:::o;3583:113::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3675:13:2::1;3660:12;:28;;;;;;:::i;:::-;;3583:113:::0;:::o;1091:84:12:-;1138:4;1161:7;;;;;;;;;;;1154:14;;1091:84;:::o;792:28:2:-;;;;;;;;;;;;;:::o;2111:235:4:-;2183:7;2202:13;2218:7;:16;2226:7;2218:16;;;;;;;;;;;;;;;;;;;;;2202:32;;2269:1;2252:19;;:5;:19;;;2244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2334:5;2327:12;;;2111:235;;;:::o;1849:205::-;1921:7;1965:1;1948:19;;:5;:19;;;1940:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2031:9;:16;2041:5;2031:16;;;;;;;;;;;;;;;;2024:23;;1849:205;;;:::o;1661:101:11:-;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;563:27:2:-;;;;:::o;4240:61::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4285:8:2::1;:6;:8::i;:::-;4240:61::o:0;4509:123::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4584:10:2::1;4576:24;;:47;4601:21;4576:47;;;;;;;;;;;;;;;;;;;;;;;4568:56;;;::::0;::::1;;4509:123::o:0;1029:85:11:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3826:86:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3898:6:2::1;3890:5;:14;;;;3826:86:::0;:::o;3704:114::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3798:12:2::1;3784:11;:26;;;;;;:::i;:::-;;3704:114:::0;:::o;2570:102:4:-;2626:13;2658:7;2651:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:102;:::o;634:34:2:-;;;;:::o;717:40::-;;;;:::o;4203:153:4:-;4297:52;4316:12;:10;:12::i;:::-;4330:8;4340;4297:18;:52::i;:::-;4203:153;;:::o;5287:320::-;5456:41;5475:12;:10;:12::i;:::-;5489:7;5456:18;:41::i;:::-;5448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;4309:63:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4354:10:2::1;:8;:10::i;:::-;4309:63::o:0;4130:102::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4215:9:2::1;4204:8;;:20;;;;;;;;;;;;;;;;;;4130:102:::0;:::o;2738:329:4:-;2811:13;2844:16;2852:7;2844;:16::i;:::-;2836:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2923:21;2947:10;:8;:10::i;:::-;2923:34;;2998:1;2980:7;2974:21;:25;:86;;;;;;;;;;;;;;;;;3026:7;3035:18;:7;:16;:18::i;:::-;3009:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2974:86;2967:93;;;2738:329;;;:::o;431:26:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3920:100::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4006:6:2::1;3991:12;:21;;;;3920:100:::0;:::o;464:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4422:162:4:-;4519:4;4542:18;:25;4561:5;4542:25;;;;;;;;;;;;;;;:35;4568:8;4542:35;;;;;;;;;;;;;;;;;;;;;;;;;4535:42;;4422:162;;;;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;::::0;1991:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;496:41:2:-;533:4;496:41;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;2623:572:5:-;2762:45;2789:4;2795:2;2799:7;2762:26;:45::i;:::-;2838:1;2822:18;;:4;:18;;;2818:183;;2856:40;2888:7;2856:31;:40::i;:::-;2818:183;;;2925:2;2917:10;;:4;:10;;;2913:88;;2943:47;2976:4;2982:7;2943:32;:47::i;:::-;2913:88;2818:183;3028:1;3014:16;;:2;:16;;;3010:179;;3046:45;3083:7;3046:36;:45::i;:::-;3010:179;;;3118:4;3112:10;;:2;:10;;;3108:81;;3138:40;3166:2;3170:7;3138:27;:40::i;:::-;3108:81;3010:179;2623:572;;;:::o;13430:122:4:-;;;;:::o;989:222:5:-;1091:4;1129:35;1114:50;;;:11;:50;;;;:90;;;;1168:36;1192:11;1168:23;:36::i;:::-;1114:90;1107:97;;989:222;;;:::o;7079:125:4:-;7144:4;7195:1;7167:30;;:7;:16;7175:7;7167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7160:37;;7079:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;10930:171:4:-;11031:2;11004:15;:24;11020:7;11004:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11086:7;11082:2;11048:46;;11057:23;11072:7;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;8036:108::-;8111:26;8121:2;8125:7;8111:26;;;;;;;;;;;;:9;:26::i;:::-;8036:108;;:::o;7362:344::-;7455:4;7479:16;7487:7;7479;:16::i;:::-;7471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;;7666:32;7683:5;7690:7;7666:16;:32::i;:::-;7611:87;7603:96;;;7362:344;;;;:::o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:1;10481:16;;:2;:16;;;10473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10709:1;10690:9;:15;10700:4;10690:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10737:1;10720:9;:13;10730:2;10720:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10767:2;10748:7;:16;10756:7;10748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10804:7;10800:2;10785:27;;10794:4;10785:27;;;;;;;;;;;;10259:560;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;1856:115:12:-;1405:8;:6;:8::i;:::-;1404:9;1396:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1925:4:::1;1915:7;;:14;;;;;;;;;;;;;;;;;;1944:20;1951:12;:10;:12::i;:::-;1944:20;;;;;;:::i;:::-;;;;;;;;1856:115::o:0;11236:307:4:-;11386:8;11377:17;;:5;:17;;;11369:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11472:8;11434:18;:25;11453:5;11434:25;;;;;;;;;;;;;;;:35;11460:8;11434:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11517:8;11495:41;;11510:5;11495:41;;;11527:8;11495:41;;;;;;:::i;:::-;;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:307;;;;:::o;2103:117:12:-;1670:8;:6;:8::i;:::-;1662:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2171:5:::1;2161:7;;:15;;;;;;;;;;;;;;;;;;2191:22;2200:12;:10;:12::i;:::-;2191:22;;;;;;:::i;:::-;;;;;;;;2103:117::o:0;5095:113:2:-;5155:13;5188:12;5181:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5095:113;:::o;328:703:13:-;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;3901:161:5:-;4004:10;:17;;;;3977:15;:24;3993:7;3977:24;;;;;;;;;;;:44;;;;4031:10;4047:7;4031:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3901:161;:::o;4679:970::-;4941:22;4991:1;4966:22;4983:4;4966:16;:22::i;:::-;:26;;;;:::i;:::-;4941:51;;5002:18;5023:17;:26;5041:7;5023:26;;;;;;;;;;;;5002:47;;5167:14;5153:10;:28;5149:323;;5197:19;5219:12;:18;5232:4;5219:18;;;;;;;;;;;;;;;:34;5238:14;5219:34;;;;;;;;;;;;5197:56;;5301:11;5268:12;:18;5281:4;5268:18;;;;;;;;;;;;;;;:30;5287:10;5268:30;;;;;;;;;;;:44;;;;5417:10;5384:17;:30;5402:11;5384:30;;;;;;;;;;;:43;;;;5183:289;5149:323;5565:17;:26;5583:7;5565:26;;;;;;;;;;;5558:33;;;5608:12;:18;5621:4;5608:18;;;;;;;;;;;;;;;:34;5627:14;5608:34;;;;;;;;;;;5601:41;;;4760:889;;4679:970;;:::o;5937:1061::-;6186:22;6231:1;6211:10;:17;;;;:21;;;;:::i;:::-;6186:46;;6242:18;6263:15;:24;6279:7;6263:24;;;;;;;;;;;;6242:45;;6609:19;6631:10;6642:14;6631:26;;;;;;;;:::i;:::-;;;;;;;;;;6609:48;;6693:11;6668:10;6679;6668:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6803:10;6772:15;:28;6788:11;6772:28;;;;;;;;;;;:41;;;;6941:15;:24;6957:7;6941:24;;;;;;;;;;;6934:31;;;6975:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6008:990;;;5937:1061;:::o;3489:217::-;3573:14;3590:20;3607:2;3590:16;:20::i;:::-;3573:37;;3647:7;3620:12;:16;3633:2;3620:16;;;;;;;;;;;;;;;:24;3637:6;3620:24;;;;;;;;;;;:34;;;;3693:6;3664:17;:26;3682:7;3664:26;;;;;;;;;;;:35;;;;3563:143;3489:217;;:::o;1490:300:4:-;1592:4;1642:25;1627:40;;;:11;:40;;;;:104;;;;1698:33;1683:48;;;:11;:48;;;;1627:104;:156;;;;1747:36;1771:11;1747:23;:36::i;:::-;1627:156;1608:175;;1490:300;;;:::o;8365:311::-;8490:18;8496:2;8500:7;8490:5;:18::i;:::-;8539:54;8570:1;8574:2;8578:7;8587:5;8539:22;:54::i;:::-;8518:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8365:311;;;:::o;4860:227:2:-;1405:8:12;:6;:8::i;:::-;1404:9;1396:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5034:45:2::1;5061:4;5067:2;5071:7;5034:26;:45::i;:::-;4860:227:::0;;;:::o;12096:778:4:-;12246:4;12266:15;:2;:13;;;:15::i;:::-;12262:606;;;12317:2;12301:36;;;12338:12;:10;:12::i;:::-;12352:4;12358:7;12367:5;12301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12557:1;12540:6;:13;:18;12536:266;;12582:60;;;;;;;;;;:::i;:::-;;;;;;;;12536:266;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12433:41;;;12423:51;;;:6;:51;;;;12416:58;;;;;12262:606;12853:4;12846:11;;12096:778;;;;;;;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;8998:372:4:-;9091:1;9077:16;;:2;:16;;;9069:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:16;9157:7;9149;:16::i;:::-;9148:17;9140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9282:1;9265:9;:13;9275:2;9265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9312:2;9293:7;:16;9301:7;9293:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9355:7;9351:2;9330:33;;9347:1;9330:33;;;;;;;;;;;;8998:372;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:329::-;4949:6;4998:2;4986:9;4977:7;4973:23;4969:32;4966:119;;;5004:79;;:::i;:::-;4966:119;5124:1;5149:53;5194:7;5185:6;5174:9;5170:22;5149:53;:::i;:::-;5139:63;;5095:117;4890:329;;;;:::o;5225:117::-;5334:1;5331;5324:12;5348:117;5457:1;5454;5447:12;5471:117;5580:1;5577;5570:12;5611:568;5684:8;5694:6;5744:3;5737:4;5729:6;5725:17;5721:27;5711:122;;5752:79;;:::i;:::-;5711:122;5865:6;5852:20;5842:30;;5895:18;5887:6;5884:30;5881:117;;;5917:79;;:::i;:::-;5881:117;6031:4;6023:6;6019:17;6007:29;;6085:3;6077:4;6069:6;6065:17;6055:8;6051:32;6048:41;6045:128;;;6092:79;;:::i;:::-;6045:128;5611:568;;;;;:::o;6185:559::-;6271:6;6279;6328:2;6316:9;6307:7;6303:23;6299:32;6296:119;;;6334:79;;:::i;:::-;6296:119;6482:1;6471:9;6467:17;6454:31;6512:18;6504:6;6501:30;6498:117;;;6534:79;;:::i;:::-;6498:117;6647:80;6719:7;6710:6;6699:9;6695:22;6647:80;:::i;:::-;6629:98;;;;6425:312;6185:559;;;;;:::o;6750:118::-;6837:24;6855:5;6837:24;:::i;:::-;6832:3;6825:37;6750:118;;:::o;6874:222::-;6967:4;7005:2;6994:9;6990:18;6982:26;;7018:71;7086:1;7075:9;7071:17;7062:6;7018:71;:::i;:::-;6874:222;;;;:::o;7102:619::-;7179:6;7187;7195;7244:2;7232:9;7223:7;7219:23;7215:32;7212:119;;;7250:79;;:::i;:::-;7212:119;7370:1;7395:53;7440:7;7431:6;7420:9;7416:22;7395:53;:::i;:::-;7385:63;;7341:117;7497:2;7523:53;7568:7;7559:6;7548:9;7544:22;7523:53;:::i;:::-;7513:63;;7468:118;7625:2;7651:53;7696:7;7687:6;7676:9;7672:22;7651:53;:::i;:::-;7641:63;;7596:118;7102:619;;;;;:::o;7727:180::-;7775:77;7772:1;7765:88;7872:4;7869:1;7862:15;7896:4;7893:1;7886:15;7913:281;7996:27;8018:4;7996:27;:::i;:::-;7988:6;7984:40;8126:6;8114:10;8111:22;8090:18;8078:10;8075:34;8072:62;8069:88;;;8137:18;;:::i;:::-;8069:88;8177:10;8173:2;8166:22;7956:238;7913:281;;:::o;8200:129::-;8234:6;8261:20;;:::i;:::-;8251:30;;8290:33;8318:4;8310:6;8290:33;:::i;:::-;8200:129;;;:::o;8335:311::-;8412:4;8502:18;8494:6;8491:30;8488:56;;;8524:18;;:::i;:::-;8488:56;8574:4;8566:6;8562:17;8554:25;;8634:4;8628;8624:15;8616:23;;8335:311;;;:::o;8669:710::-;8765:5;8790:81;8806:64;8863:6;8806:64;:::i;:::-;8790:81;:::i;:::-;8781:90;;8891:5;8920:6;8913:5;8906:21;8954:4;8947:5;8943:16;8936:23;;9007:4;8999:6;8995:17;8987:6;8983:30;9036:3;9028:6;9025:15;9022:122;;;9055:79;;:::i;:::-;9022:122;9170:6;9153:220;9187:6;9182:3;9179:15;9153:220;;;9262:3;9291:37;9324:3;9312:10;9291:37;:::i;:::-;9286:3;9279:50;9358:4;9353:3;9349:14;9342:21;;9229:144;9213:4;9208:3;9204:14;9197:21;;9153:220;;;9157:21;8771:608;;8669:710;;;;;:::o;9402:370::-;9473:5;9522:3;9515:4;9507:6;9503:17;9499:27;9489:122;;9530:79;;:::i;:::-;9489:122;9647:6;9634:20;9672:94;9762:3;9754:6;9747:4;9739:6;9735:17;9672:94;:::i;:::-;9663:103;;9479:293;9402:370;;;;:::o;9778:539::-;9862:6;9911:2;9899:9;9890:7;9886:23;9882:32;9879:119;;;9917:79;;:::i;:::-;9879:119;10065:1;10054:9;10050:17;10037:31;10095:18;10087:6;10084:30;10081:117;;;10117:79;;:::i;:::-;10081:117;10222:78;10292:7;10283:6;10272:9;10268:22;10222:78;:::i;:::-;10212:88;;10008:302;9778:539;;;;:::o;10323:114::-;10390:6;10424:5;10418:12;10408:22;;10323:114;;;:::o;10443:184::-;10542:11;10576:6;10571:3;10564:19;10616:4;10611:3;10607:14;10592:29;;10443:184;;;;:::o;10633:132::-;10700:4;10723:3;10715:11;;10753:4;10748:3;10744:14;10736:22;;10633:132;;;:::o;10771:108::-;10848:24;10866:5;10848:24;:::i;:::-;10843:3;10836:37;10771:108;;:::o;10885:179::-;10954:10;10975:46;11017:3;11009:6;10975:46;:::i;:::-;11053:4;11048:3;11044:14;11030:28;;10885:179;;;;:::o;11070:113::-;11140:4;11172;11167:3;11163:14;11155:22;;11070:113;;;:::o;11219:732::-;11338:3;11367:54;11415:5;11367:54;:::i;:::-;11437:86;11516:6;11511:3;11437:86;:::i;:::-;11430:93;;11547:56;11597:5;11547:56;:::i;:::-;11626:7;11657:1;11642:284;11667:6;11664:1;11661:13;11642:284;;;11743:6;11737:13;11770:63;11829:3;11814:13;11770:63;:::i;:::-;11763:70;;11856:60;11909:6;11856:60;:::i;:::-;11846:70;;11702:224;11689:1;11686;11682:9;11677:14;;11642:284;;;11646:14;11942:3;11935:10;;11343:608;;;11219:732;;;;:::o;11957:373::-;12100:4;12138:2;12127:9;12123:18;12115:26;;12187:9;12181:4;12177:20;12173:1;12162:9;12158:17;12151:47;12215:108;12318:4;12309:6;12215:108;:::i;:::-;12207:116;;11957:373;;;;:::o;12336:117::-;12445:1;12442;12435:12;12459:308;12521:4;12611:18;12603:6;12600:30;12597:56;;;12633:18;;:::i;:::-;12597:56;12671:29;12693:6;12671:29;:::i;:::-;12663:37;;12755:4;12749;12745:15;12737:23;;12459:308;;;:::o;12773:146::-;12870:6;12865:3;12860;12847:30;12911:1;12902:6;12897:3;12893:16;12886:27;12773:146;;;:::o;12925:425::-;13003:5;13028:66;13044:49;13086:6;13044:49;:::i;:::-;13028:66;:::i;:::-;13019:75;;13117:6;13110:5;13103:21;13155:4;13148:5;13144:16;13193:3;13184:6;13179:3;13175:16;13172:25;13169:112;;;13200:79;;:::i;:::-;13169:112;13290:54;13337:6;13332:3;13327;13290:54;:::i;:::-;13009:341;12925:425;;;;;:::o;13370:340::-;13426:5;13475:3;13468:4;13460:6;13456:17;13452:27;13442:122;;13483:79;;:::i;:::-;13442:122;13600:6;13587:20;13625:79;13700:3;13692:6;13685:4;13677:6;13673:17;13625:79;:::i;:::-;13616:88;;13432:278;13370:340;;;;:::o;13716:509::-;13785:6;13834:2;13822:9;13813:7;13809:23;13805:32;13802:119;;;13840:79;;:::i;:::-;13802:119;13988:1;13977:9;13973:17;13960:31;14018:18;14010:6;14007:30;14004:117;;;14040:79;;:::i;:::-;14004:117;14145:63;14200:7;14191:6;14180:9;14176:22;14145:63;:::i;:::-;14135:73;;13931:287;13716:509;;;;:::o;14231:116::-;14301:21;14316:5;14301:21;:::i;:::-;14294:5;14291:32;14281:60;;14337:1;14334;14327:12;14281:60;14231:116;:::o;14353:133::-;14396:5;14434:6;14421:20;14412:29;;14450:30;14474:5;14450:30;:::i;:::-;14353:133;;;;:::o;14492:468::-;14557:6;14565;14614:2;14602:9;14593:7;14589:23;14585:32;14582:119;;;14620:79;;:::i;:::-;14582:119;14740:1;14765:53;14810:7;14801:6;14790:9;14786:22;14765:53;:::i;:::-;14755:63;;14711:117;14867:2;14893:50;14935:7;14926:6;14915:9;14911:22;14893:50;:::i;:::-;14883:60;;14838:115;14492:468;;;;;:::o;14966:307::-;15027:4;15117:18;15109:6;15106:30;15103:56;;;15139:18;;:::i;:::-;15103:56;15177:29;15199:6;15177:29;:::i;:::-;15169:37;;15261:4;15255;15251:15;15243:23;;14966:307;;;:::o;15279:423::-;15356:5;15381:65;15397:48;15438:6;15397:48;:::i;:::-;15381:65;:::i;:::-;15372:74;;15469:6;15462:5;15455:21;15507:4;15500:5;15496:16;15545:3;15536:6;15531:3;15527:16;15524:25;15521:112;;;15552:79;;:::i;:::-;15521:112;15642:54;15689:6;15684:3;15679;15642:54;:::i;:::-;15362:340;15279:423;;;;;:::o;15721:338::-;15776:5;15825:3;15818:4;15810:6;15806:17;15802:27;15792:122;;15833:79;;:::i;:::-;15792:122;15950:6;15937:20;15975:78;16049:3;16041:6;16034:4;16026:6;16022:17;15975:78;:::i;:::-;15966:87;;15782:277;15721:338;;;;:::o;16065:943::-;16160:6;16168;16176;16184;16233:3;16221:9;16212:7;16208:23;16204:33;16201:120;;;16240:79;;:::i;:::-;16201:120;16360:1;16385:53;16430:7;16421:6;16410:9;16406:22;16385:53;:::i;:::-;16375:63;;16331:117;16487:2;16513:53;16558:7;16549:6;16538:9;16534:22;16513:53;:::i;:::-;16503:63;;16458:118;16615:2;16641:53;16686:7;16677:6;16666:9;16662:22;16641:53;:::i;:::-;16631:63;;16586:118;16771:2;16760:9;16756:18;16743:32;16802:18;16794:6;16791:30;16788:117;;;16824:79;;:::i;:::-;16788:117;16929:62;16983:7;16974:6;16963:9;16959:22;16929:62;:::i;:::-;16919:72;;16714:287;16065:943;;;;;;;:::o;17014:323::-;17070:6;17119:2;17107:9;17098:7;17094:23;17090:32;17087:119;;;17125:79;;:::i;:::-;17087:119;17245:1;17270:50;17312:7;17303:6;17292:9;17288:22;17270:50;:::i;:::-;17260:60;;17216:114;17014:323;;;;:::o;17343:474::-;17411:6;17419;17468:2;17456:9;17447:7;17443:23;17439:32;17436:119;;;17474:79;;:::i;:::-;17436:119;17594:1;17619:53;17664:7;17655:6;17644:9;17640:22;17619:53;:::i;:::-;17609:63;;17565:117;17721:2;17747:53;17792:7;17783:6;17772:9;17768:22;17747:53;:::i;:::-;17737:63;;17692:118;17343:474;;;;;:::o;17823:180::-;17871:77;17868:1;17861:88;17968:4;17965:1;17958:15;17992:4;17989:1;17982:15;18009:320;18053:6;18090:1;18084:4;18080:12;18070:22;;18137:1;18131:4;18127:12;18158:18;18148:81;;18214:4;18206:6;18202:17;18192:27;;18148:81;18276:2;18268:6;18265:14;18245:18;18242:38;18239:84;;18295:18;;:::i;:::-;18239:84;18060:269;18009:320;;;:::o;18335:231::-;18475:34;18471:1;18463:6;18459:14;18452:58;18544:14;18539:2;18531:6;18527:15;18520:39;18335:231;:::o;18572:366::-;18714:3;18735:67;18799:2;18794:3;18735:67;:::i;:::-;18728:74;;18811:93;18900:3;18811:93;:::i;:::-;18929:2;18924:3;18920:12;18913:19;;18572:366;;;:::o;18944:419::-;19110:4;19148:2;19137:9;19133:18;19125:26;;19197:9;19191:4;19187:20;19183:1;19172:9;19168:17;19161:47;19225:131;19351:4;19225:131;:::i;:::-;19217:139;;18944:419;;;:::o;19369:220::-;19509:34;19505:1;19497:6;19493:14;19486:58;19578:3;19573:2;19565:6;19561:15;19554:28;19369:220;:::o;19595:366::-;19737:3;19758:67;19822:2;19817:3;19758:67;:::i;:::-;19751:74;;19834:93;19923:3;19834:93;:::i;:::-;19952:2;19947:3;19943:12;19936:19;;19595:366;;;:::o;19967:419::-;20133:4;20171:2;20160:9;20156:18;20148:26;;20220:9;20214:4;20210:20;20206:1;20195:9;20191:17;20184:47;20248:131;20374:4;20248:131;:::i;:::-;20240:139;;19967:419;;;:::o;20392:243::-;20532:34;20528:1;20520:6;20516:14;20509:58;20601:26;20596:2;20588:6;20584:15;20577:51;20392:243;:::o;20641:366::-;20783:3;20804:67;20868:2;20863:3;20804:67;:::i;:::-;20797:74;;20880:93;20969:3;20880:93;:::i;:::-;20998:2;20993:3;20989:12;20982:19;;20641:366;;;:::o;21013:419::-;21179:4;21217:2;21206:9;21202:18;21194:26;;21266:9;21260:4;21256:20;21252:1;21241:9;21237:17;21230:47;21294:131;21420:4;21294:131;:::i;:::-;21286:139;;21013:419;;;:::o;21438:182::-;21578:34;21574:1;21566:6;21562:14;21555:58;21438:182;:::o;21626:366::-;21768:3;21789:67;21853:2;21848:3;21789:67;:::i;:::-;21782:74;;21865:93;21954:3;21865:93;:::i;:::-;21983:2;21978:3;21974:12;21967:19;;21626:366;;;:::o;21998:419::-;22164:4;22202:2;22191:9;22187:18;22179:26;;22251:9;22245:4;22241:20;22237:1;22226:9;22222:17;22215:47;22279:131;22405:4;22279:131;:::i;:::-;22271:139;;21998:419;;;:::o;22423:180::-;22471:77;22468:1;22461:88;22568:4;22565:1;22558:15;22592:4;22589:1;22582:15;22609:191;22649:3;22668:20;22686:1;22668:20;:::i;:::-;22663:25;;22702:20;22720:1;22702:20;:::i;:::-;22697:25;;22745:1;22742;22738:9;22731:16;;22766:3;22763:1;22760:10;22757:36;;;22773:18;;:::i;:::-;22757:36;22609:191;;;;:::o;22806:173::-;22946:25;22942:1;22934:6;22930:14;22923:49;22806:173;:::o;22985:366::-;23127:3;23148:67;23212:2;23207:3;23148:67;:::i;:::-;23141:74;;23224:93;23313:3;23224:93;:::i;:::-;23342:2;23337:3;23333:12;23326:19;;22985:366;;;:::o;23357:419::-;23523:4;23561:2;23550:9;23546:18;23538:26;;23610:9;23604:4;23600:20;23596:1;23585:9;23581:17;23574:47;23638:131;23764:4;23638:131;:::i;:::-;23630:139;;23357:419;;;:::o;23782:194::-;23822:4;23842:20;23860:1;23842:20;:::i;:::-;23837:25;;23876:20;23894:1;23876:20;:::i;:::-;23871:25;;23920:1;23917;23913:9;23905:17;;23944:1;23938:4;23935:11;23932:37;;;23949:18;;:::i;:::-;23932:37;23782:194;;;;:::o;23982:180::-;24030:77;24027:1;24020:88;24127:4;24124:1;24117:15;24151:4;24148:1;24141:15;24168:233;24207:3;24230:24;24248:5;24230:24;:::i;:::-;24221:33;;24276:66;24269:5;24266:77;24263:103;;24346:18;;:::i;:::-;24263:103;24393:1;24386:5;24382:13;24375:20;;24168:233;;;:::o;24407:236::-;24547:34;24543:1;24535:6;24531:14;24524:58;24616:19;24611:2;24603:6;24599:15;24592:44;24407:236;:::o;24649:366::-;24791:3;24812:67;24876:2;24871:3;24812:67;:::i;:::-;24805:74;;24888:93;24977:3;24888:93;:::i;:::-;25006:2;25001:3;24997:12;24990:19;;24649:366;;;:::o;25021:419::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:239::-;25586:34;25582:1;25574:6;25570:14;25563:58;25655:22;25650:2;25642:6;25638:15;25631:47;25446:239;:::o;25691:366::-;25833:3;25854:67;25918:2;25913:3;25854:67;:::i;:::-;25847:74;;25930:93;26019:3;25930:93;:::i;:::-;26048:2;26043:3;26039:12;26032:19;;25691:366;;;:::o;26063:419::-;26229:4;26267:2;26256:9;26252:18;26244:26;;26316:9;26310:4;26306:20;26302:1;26291:9;26287:17;26280:47;26344:131;26470:4;26344:131;:::i;:::-;26336:139;;26063:419;;;:::o;26488:231::-;26628:34;26624:1;26616:6;26612:14;26605:58;26697:14;26692:2;26684:6;26680:15;26673:39;26488:231;:::o;26725:366::-;26867:3;26888:67;26952:2;26947:3;26888:67;:::i;:::-;26881:74;;26964:93;27053:3;26964:93;:::i;:::-;27082:2;27077:3;27073:12;27066:19;;26725:366;;;:::o;27097:419::-;27263:4;27301:2;27290:9;27286:18;27278:26;;27350:9;27344:4;27340:20;27336:1;27325:9;27321:17;27314:47;27378:131;27504:4;27378:131;:::i;:::-;27370:139;;27097:419;;;:::o;27522:224::-;27662:34;27658:1;27650:6;27646:14;27639:58;27731:7;27726:2;27718:6;27714:15;27707:32;27522:224;:::o;27752:366::-;27894:3;27915:67;27979:2;27974:3;27915:67;:::i;:::-;27908:74;;27991:93;28080:3;27991:93;:::i;:::-;28109:2;28104:3;28100:12;28093:19;;27752:366;;;:::o;28124:419::-;28290:4;28328:2;28317:9;28313:18;28305:26;;28377:9;28371:4;28367:20;28363:1;28352:9;28348:17;28341:47;28405:131;28531:4;28405:131;:::i;:::-;28397:139;;28124:419;;;:::o;28549:348::-;28589:7;28612:20;28630:1;28612:20;:::i;:::-;28607:25;;28646:20;28664:1;28646:20;:::i;:::-;28641:25;;28834:1;28766:66;28762:74;28759:1;28756:81;28751:1;28744:9;28737:17;28733:105;28730:131;;;28841:18;;:::i;:::-;28730:131;28889:1;28886;28882:9;28871:20;;28549:348;;;;:::o;28903:176::-;29043:28;29039:1;29031:6;29027:14;29020:52;28903:176;:::o;29085:366::-;29227:3;29248:67;29312:2;29307:3;29248:67;:::i;:::-;29241:74;;29324:93;29413:3;29324:93;:::i;:::-;29442:2;29437:3;29433:12;29426:19;;29085:366;;;:::o;29457:419::-;29623:4;29661:2;29650:9;29646:18;29638:26;;29710:9;29704:4;29700:20;29696:1;29685:9;29681:17;29674:47;29738:131;29864:4;29738:131;:::i;:::-;29730:139;;29457:419;;;:::o;29882:230::-;30022:34;30018:1;30010:6;30006:14;29999:58;30091:13;30086:2;30078:6;30074:15;30067:38;29882:230;:::o;30118:366::-;30260:3;30281:67;30345:2;30340:3;30281:67;:::i;:::-;30274:74;;30357:93;30446:3;30357:93;:::i;:::-;30475:2;30470:3;30466:12;30459:19;;30118:366;;;:::o;30490:419::-;30656:4;30694:2;30683:9;30679:18;30671:26;;30743:9;30737:4;30733:20;30729:1;30718:9;30714:17;30707:47;30771:131;30897:4;30771:131;:::i;:::-;30763:139;;30490:419;;;:::o;30915:224::-;31055:34;31051:1;31043:6;31039:14;31032:58;31124:7;31119:2;31111:6;31107:15;31100:32;30915:224;:::o;31145:366::-;31287:3;31308:67;31372:2;31367:3;31308:67;:::i;:::-;31301:74;;31384:93;31473:3;31384:93;:::i;:::-;31502:2;31497:3;31493:12;31486:19;;31145:366;;;:::o;31517:419::-;31683:4;31721:2;31710:9;31706:18;31698:26;;31770:9;31764:4;31760:20;31756:1;31745:9;31741:17;31734:47;31798:131;31924:4;31798:131;:::i;:::-;31790:139;;31517:419;;;:::o;31942:224::-;32082:34;32078:1;32070:6;32066:14;32059:58;32151:7;32146:2;32138:6;32134:15;32127:32;31942:224;:::o;32172:366::-;32314:3;32335:67;32399:2;32394:3;32335:67;:::i;:::-;32328:74;;32411:93;32500:3;32411:93;:::i;:::-;32529:2;32524:3;32520:12;32513:19;;32172:366;;;:::o;32544:419::-;32710:4;32748:2;32737:9;32733:18;32725:26;;32797:9;32791:4;32787:20;32783:1;32772:9;32768:17;32761:47;32825:131;32951:4;32825:131;:::i;:::-;32817:139;;32544:419;;;:::o;32969:231::-;33109:34;33105:1;33097:6;33093:14;33086:58;33178:14;33173:2;33165:6;33161:15;33154:39;32969:231;:::o;33206:366::-;33348:3;33369:67;33433:2;33428:3;33369:67;:::i;:::-;33362:74;;33445:93;33534:3;33445:93;:::i;:::-;33563:2;33558:3;33554:12;33547:19;;33206:366;;;:::o;33578:419::-;33744:4;33782:2;33771:9;33767:18;33759:26;;33831:9;33825:4;33821:20;33817:1;33806:9;33802:17;33795:47;33859:131;33985:4;33859:131;:::i;:::-;33851:139;;33578:419;;;:::o;34003:141::-;34052:4;34075:3;34067:11;;34098:3;34095:1;34088:14;34132:4;34129:1;34119:18;34111:26;;34003:141;;;:::o;34150:93::-;34187:6;34234:2;34229;34222:5;34218:14;34214:23;34204:33;;34150:93;;;:::o;34249:107::-;34293:8;34343:5;34337:4;34333:16;34312:37;;34249:107;;;;:::o;34362:393::-;34431:6;34481:1;34469:10;34465:18;34504:97;34534:66;34523:9;34504:97;:::i;:::-;34622:39;34652:8;34641:9;34622:39;:::i;:::-;34610:51;;34694:4;34690:9;34683:5;34679:21;34670:30;;34743:4;34733:8;34729:19;34722:5;34719:30;34709:40;;34438:317;;34362:393;;;;;:::o;34761:60::-;34789:3;34810:5;34803:12;;34761:60;;;:::o;34827:142::-;34877:9;34910:53;34928:34;34937:24;34955:5;34937:24;:::i;:::-;34928:34;:::i;:::-;34910:53;:::i;:::-;34897:66;;34827:142;;;:::o;34975:75::-;35018:3;35039:5;35032:12;;34975:75;;;:::o;35056:269::-;35166:39;35197:7;35166:39;:::i;:::-;35227:91;35276:41;35300:16;35276:41;:::i;:::-;35268:6;35261:4;35255:11;35227:91;:::i;:::-;35221:4;35214:105;35132:193;35056:269;;;:::o;35331:73::-;35376:3;35331:73;:::o;35410:189::-;35487:32;;:::i;:::-;35528:65;35586:6;35578;35572:4;35528:65;:::i;:::-;35463:136;35410:189;;:::o;35605:186::-;35665:120;35682:3;35675:5;35672:14;35665:120;;;35736:39;35773:1;35766:5;35736:39;:::i;:::-;35709:1;35702:5;35698:13;35689:22;;35665:120;;;35605:186;;:::o;35797:543::-;35898:2;35893:3;35890:11;35887:446;;;35932:38;35964:5;35932:38;:::i;:::-;36016:29;36034:10;36016:29;:::i;:::-;36006:8;36002:44;36199:2;36187:10;36184:18;36181:49;;;36220:8;36205:23;;36181:49;36243:80;36299:22;36317:3;36299:22;:::i;:::-;36289:8;36285:37;36272:11;36243:80;:::i;:::-;35902:431;;35887:446;35797:543;;;:::o;36346:117::-;36400:8;36450:5;36444:4;36440:16;36419:37;;36346:117;;;;:::o;36469:169::-;36513:6;36546:51;36594:1;36590:6;36582:5;36579:1;36575:13;36546:51;:::i;:::-;36542:56;36627:4;36621;36617:15;36607:25;;36520:118;36469:169;;;;:::o;36643:295::-;36719:4;36865:29;36890:3;36884:4;36865:29;:::i;:::-;36857:37;;36927:3;36924:1;36920:11;36914:4;36911:21;36903:29;;36643:295;;;;:::o;36943:1395::-;37060:37;37093:3;37060:37;:::i;:::-;37162:18;37154:6;37151:30;37148:56;;;37184:18;;:::i;:::-;37148:56;37228:38;37260:4;37254:11;37228:38;:::i;:::-;37313:67;37373:6;37365;37359:4;37313:67;:::i;:::-;37407:1;37431:4;37418:17;;37463:2;37455:6;37452:14;37480:1;37475:618;;;;38137:1;38154:6;38151:77;;;38203:9;38198:3;38194:19;38188:26;38179:35;;38151:77;38254:67;38314:6;38307:5;38254:67;:::i;:::-;38248:4;38241:81;38110:222;37445:887;;37475:618;37527:4;37523:9;37515:6;37511:22;37561:37;37593:4;37561:37;:::i;:::-;37620:1;37634:208;37648:7;37645:1;37642:14;37634:208;;;37727:9;37722:3;37718:19;37712:26;37704:6;37697:42;37778:1;37770:6;37766:14;37756:24;;37825:2;37814:9;37810:18;37797:31;;37671:4;37668:1;37664:12;37659:17;;37634:208;;;37870:6;37861:7;37858:19;37855:179;;;37928:9;37923:3;37919:19;37913:26;37971:48;38013:4;38005:6;38001:17;37990:9;37971:48;:::i;:::-;37963:6;37956:64;37878:156;37855:179;38080:1;38076;38068:6;38064:14;38060:22;38054:4;38047:36;37482:611;;;37445:887;;37035:1303;;;36943:1395;;:::o;38344:228::-;38484:34;38480:1;38472:6;38468:14;38461:58;38553:11;38548:2;38540:6;38536:15;38529:36;38344:228;:::o;38578:366::-;38720:3;38741:67;38805:2;38800:3;38741:67;:::i;:::-;38734:74;;38817:93;38906:3;38817:93;:::i;:::-;38935:2;38930:3;38926:12;38919:19;;38578:366;;;:::o;38950:419::-;39116:4;39154:2;39143:9;39139:18;39131:26;;39203:9;39197:4;39193:20;39189:1;39178:9;39174:17;39167:47;39231:131;39357:4;39231:131;:::i;:::-;39223:139;;38950:419;;;:::o;39375:229::-;39515:34;39511:1;39503:6;39499:14;39492:58;39584:12;39579:2;39571:6;39567:15;39560:37;39375:229;:::o;39610:366::-;39752:3;39773:67;39837:2;39832:3;39773:67;:::i;:::-;39766:74;;39849:93;39938:3;39849:93;:::i;:::-;39967:2;39962:3;39958:12;39951:19;;39610:366;;;:::o;39982:419::-;40148:4;40186:2;40175:9;40171:18;40163:26;;40235:9;40229:4;40225:20;40221:1;40210:9;40206:17;40199:47;40263:131;40389:4;40263:131;:::i;:::-;40255:139;;39982:419;;;:::o;40407:234::-;40547:34;40543:1;40535:6;40531:14;40524:58;40616:17;40611:2;40603:6;40599:15;40592:42;40407:234;:::o;40647:366::-;40789:3;40810:67;40874:2;40869:3;40810:67;:::i;:::-;40803:74;;40886:93;40975:3;40886:93;:::i;:::-;41004:2;40999:3;40995:12;40988:19;;40647:366;;;:::o;41019:419::-;41185:4;41223:2;41212:9;41208:18;41200:26;;41272:9;41266:4;41262:20;41258:1;41247:9;41243:17;41236:47;41300:131;41426:4;41300:131;:::i;:::-;41292:139;;41019:419;;;:::o;41444:148::-;41546:11;41583:3;41568:18;;41444:148;;;;:::o;41598:390::-;41704:3;41732:39;41765:5;41732:39;:::i;:::-;41787:89;41869:6;41864:3;41787:89;:::i;:::-;41780:96;;41885:65;41943:6;41938:3;41931:4;41924:5;41920:16;41885:65;:::i;:::-;41975:6;41970:3;41966:16;41959:23;;41708:280;41598:390;;;;:::o;41994:435::-;42174:3;42196:95;42287:3;42278:6;42196:95;:::i;:::-;42189:102;;42308:95;42399:3;42390:6;42308:95;:::i;:::-;42301:102;;42420:3;42413:10;;41994:435;;;;;:::o;42435:225::-;42575:34;42571:1;42563:6;42559:14;42552:58;42644:8;42639:2;42631:6;42627:15;42620:33;42435:225;:::o;42666:366::-;42808:3;42829:67;42893:2;42888:3;42829:67;:::i;:::-;42822:74;;42905:93;42994:3;42905:93;:::i;:::-;43023:2;43018:3;43014:12;43007:19;;42666:366;;;:::o;43038:419::-;43204:4;43242:2;43231:9;43227:18;43219:26;;43291:9;43285:4;43281:20;43277:1;43266:9;43262:17;43255:47;43319:131;43445:4;43319:131;:::i;:::-;43311:139;;43038:419;;;:::o;43463:231::-;43603:34;43599:1;43591:6;43587:14;43580:58;43672:14;43667:2;43659:6;43655:15;43648:39;43463:231;:::o;43700:366::-;43842:3;43863:67;43927:2;43922:3;43863:67;:::i;:::-;43856:74;;43939:93;44028:3;43939:93;:::i;:::-;44057:2;44052:3;44048:12;44041:19;;43700:366;;;:::o;44072:419::-;44238:4;44276:2;44265:9;44261:18;44253:26;;44325:9;44319:4;44315:20;44311:1;44300:9;44296:17;44289:47;44353:131;44479:4;44353:131;:::i;:::-;44345:139;;44072:419;;;:::o;44497:228::-;44637:34;44633:1;44625:6;44621:14;44614:58;44706:11;44701:2;44693:6;44689:15;44682:36;44497:228;:::o;44731:366::-;44873:3;44894:67;44958:2;44953:3;44894:67;:::i;:::-;44887:74;;44970:93;45059:3;44970:93;:::i;:::-;45088:2;45083:3;45079:12;45072:19;;44731:366;;;:::o;45103:419::-;45269:4;45307:2;45296:9;45292:18;45284:26;;45356:9;45350:4;45346:20;45342:1;45331:9;45327:17;45320:47;45384:131;45510:4;45384:131;:::i;:::-;45376:139;;45103:419;;;:::o;45528:223::-;45668:34;45664:1;45656:6;45652:14;45645:58;45737:6;45732:2;45724:6;45720:15;45713:31;45528:223;:::o;45757:366::-;45899:3;45920:67;45984:2;45979:3;45920:67;:::i;:::-;45913:74;;45996:93;46085:3;45996:93;:::i;:::-;46114:2;46109:3;46105:12;46098:19;;45757:366;;;:::o;46129:419::-;46295:4;46333:2;46322:9;46318:18;46310:26;;46382:9;46376:4;46372:20;46368:1;46357:9;46353:17;46346:47;46410:131;46536:4;46410:131;:::i;:::-;46402:139;;46129:419;;;:::o;46554:166::-;46694:18;46690:1;46682:6;46678:14;46671:42;46554:166;:::o;46726:366::-;46868:3;46889:67;46953:2;46948:3;46889:67;:::i;:::-;46882:74;;46965:93;47054:3;46965:93;:::i;:::-;47083:2;47078:3;47074:12;47067:19;;46726:366;;;:::o;47098:419::-;47264:4;47302:2;47291:9;47287:18;47279:26;;47351:9;47345:4;47341:20;47337:1;47326:9;47322:17;47315:47;47379:131;47505:4;47379:131;:::i;:::-;47371:139;;47098:419;;;:::o;47523:175::-;47663:27;47659:1;47651:6;47647:14;47640:51;47523:175;:::o;47704:366::-;47846:3;47867:67;47931:2;47926:3;47867:67;:::i;:::-;47860:74;;47943:93;48032:3;47943:93;:::i;:::-;48061:2;48056:3;48052:12;48045:19;;47704:366;;;:::o;48076:419::-;48242:4;48280:2;48269:9;48265:18;48257:26;;48329:9;48323:4;48319:20;48315:1;48304:9;48300:17;48293:47;48357:131;48483:4;48357:131;:::i;:::-;48349:139;;48076:419;;;:::o;48501:237::-;48641:34;48637:1;48629:6;48625:14;48618:58;48710:20;48705:2;48697:6;48693:15;48686:45;48501:237;:::o;48744:366::-;48886:3;48907:67;48971:2;48966:3;48907:67;:::i;:::-;48900:74;;48983:93;49072:3;48983:93;:::i;:::-;49101:2;49096:3;49092:12;49085:19;;48744:366;;;:::o;49116:419::-;49282:4;49320:2;49309:9;49305:18;49297:26;;49369:9;49363:4;49359:20;49355:1;49344:9;49340:17;49333:47;49397:131;49523:4;49397:131;:::i;:::-;49389:139;;49116:419;;;:::o;49541:170::-;49681:22;49677:1;49669:6;49665:14;49658:46;49541:170;:::o;49717:366::-;49859:3;49880:67;49944:2;49939:3;49880:67;:::i;:::-;49873:74;;49956:93;50045:3;49956:93;:::i;:::-;50074:2;50069:3;50065:12;50058:19;;49717:366;;;:::o;50089:419::-;50255:4;50293:2;50282:9;50278:18;50270:26;;50342:9;50336:4;50332:20;50328:1;50317:9;50313:17;50306:47;50370:131;50496:4;50370:131;:::i;:::-;50362:139;;50089:419;;;:::o;50514:180::-;50562:77;50559:1;50552:88;50659:4;50656:1;50649:15;50683:4;50680:1;50673:15;50700:185;50740:1;50757:20;50775:1;50757:20;:::i;:::-;50752:25;;50791:20;50809:1;50791:20;:::i;:::-;50786:25;;50830:1;50820:35;;50835:18;;:::i;:::-;50820:35;50877:1;50874;50870:9;50865:14;;50700:185;;;;:::o;50891:176::-;50923:1;50940:20;50958:1;50940:20;:::i;:::-;50935:25;;50974:20;50992:1;50974:20;:::i;:::-;50969:25;;51013:1;51003:35;;51018:18;;:::i;:::-;51003:35;51059:1;51056;51052:9;51047:14;;50891:176;;;;:::o;51073:180::-;51121:77;51118:1;51111:88;51218:4;51215:1;51208:15;51242:4;51239:1;51232:15;51259:98;51310:6;51344:5;51338:12;51328:22;;51259:98;;;:::o;51363:168::-;51446:11;51480:6;51475:3;51468:19;51520:4;51515:3;51511:14;51496:29;;51363:168;;;;:::o;51537:373::-;51623:3;51651:38;51683:5;51651:38;:::i;:::-;51705:70;51768:6;51763:3;51705:70;:::i;:::-;51698:77;;51784:65;51842:6;51837:3;51830:4;51823:5;51819:16;51784:65;:::i;:::-;51874:29;51896:6;51874:29;:::i;:::-;51869:3;51865:39;51858:46;;51627:283;51537:373;;;;:::o;51916:640::-;52111:4;52149:3;52138:9;52134:19;52126:27;;52163:71;52231:1;52220:9;52216:17;52207:6;52163:71;:::i;:::-;52244:72;52312:2;52301:9;52297:18;52288:6;52244:72;:::i;:::-;52326;52394:2;52383:9;52379:18;52370:6;52326:72;:::i;:::-;52445:9;52439:4;52435:20;52430:2;52419:9;52415:18;52408:48;52473:76;52544:4;52535:6;52473:76;:::i;:::-;52465:84;;51916:640;;;;;;;:::o;52562:141::-;52618:5;52649:6;52643:13;52634:22;;52665:32;52691:5;52665:32;:::i;:::-;52562:141;;;;:::o;52709:349::-;52778:6;52827:2;52815:9;52806:7;52802:23;52798:32;52795:119;;;52833:79;;:::i;:::-;52795:119;52953:1;52978:63;53033:7;53024:6;53013:9;53009:22;52978:63;:::i;:::-;52968:73;;52924:127;52709:349;;;;:::o;53064:182::-;53204:34;53200:1;53192:6;53188:14;53181:58;53064:182;:::o;53252:366::-;53394:3;53415:67;53479:2;53474:3;53415:67;:::i;:::-;53408:74;;53491:93;53580:3;53491:93;:::i;:::-;53609:2;53604:3;53600:12;53593:19;;53252:366;;;:::o;53624:419::-;53790:4;53828:2;53817:9;53813:18;53805:26;;53877:9;53871:4;53867:20;53863:1;53852:9;53848:17;53841:47;53905:131;54031:4;53905:131;:::i;:::-;53897:139;;53624:419;;;:::o;54049:178::-;54189:30;54185:1;54177:6;54173:14;54166:54;54049:178;:::o;54233:366::-;54375:3;54396:67;54460:2;54455:3;54396:67;:::i;:::-;54389:74;;54472:93;54561:3;54472:93;:::i;:::-;54590:2;54585:3;54581:12;54574:19;;54233:366;;;:::o;54605:419::-;54771:4;54809:2;54798:9;54794:18;54786:26;;54858:9;54852:4;54848:20;54844:1;54833:9;54829:17;54822:47;54886:131;55012:4;54886:131;:::i;:::-;54878:139;;54605:419;;;:::o
Swarm Source
ipfs://f634d637b86e758f64a02dcd02efda0df715a23f314b4da2e85e301543126b36
Loading...
Loading
Loading...
Loading
OVERVIEW
Part of the generative art series 'Cosmic Meta' which is 100% stored on the Ethereum blockchain. Each artwork is an advanced 3D collectible driven by powerful AI...Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.