ERC-721
Overview
Max Total Supply
1,030 FF
Holders
107
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 FFLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FudBuds
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // _____ _____ _____ _____ _____ _____ _____ _____ // /\ \ /\ \ /\ \ /\ \ /\ \ /\ \ /\ \ /\ \ // /::\ \ /::\____\ /::\ \ /::\ \ /::\ \ /::\ \ /::\____\ /::\ \ // /::::\ \ /:::/ / /::::\ \ /::::\ \ /::::\ \ /::::\ \ /::::| | /::::\ \ // /::::::\ \ /:::/ / /::::::\ \ /::::::\ \ /::::::\ \ /::::::\ \ /:::::| | /::::::\ \ // /:::/\:::\ \ /:::/ / /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ /::::::| | /:::/\:::\ \ // /:::/__\:::\ \ /:::/ / /:::/ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ /:::/|::| | /:::/__\:::\ \ // /::::\ \:::\ \ /:::/ / /:::/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ /:::/ |::| | \:::\ \:::\ \ // /::::::\ \:::\ \ /:::/ / _____ /:::/ / \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ /:::/ |::| | _____ ___\:::\ \:::\ \ // /:::/\:::\ \:::\ \ /:::/____/ /\ \ /:::/ / \:::\ ___\ /:::/\:::\ \:::\ \ /:::/\:::\ \:::\____\ /:::/\:::\ \:::\ \ /:::/ |::| |/\ \ /\ \:::\ \:::\ \ ///:::/ \:::\ \:::\____\|:::| / /::\____\/:::/____/ \:::| | /:::/ \:::\ \:::\____\/:::/ \:::\ \:::| |/:::/__\:::\ \:::\____\/:: / |::| /::\____\/::\ \:::\ \:::\____\ //\::/ \:::\ \::/ /|:::|____\ /:::/ /\:::\ \ /:::|____| \::/ \:::\ \::/ /\::/ |::::\ /:::|____|\:::\ \:::\ \::/ /\::/ /|::| /:::/ /\:::\ \:::\ \::/ / // \/____/ \:::\ \/____/ \:::\ \ /:::/ / \:::\ \ /:::/ / \/____/ \:::\ \/____/ \/____|:::::\/:::/ / \:::\ \:::\ \/____/ \/____/ |::| /:::/ / \:::\ \:::\ \/____/ // \:::\ \ \:::\ \ /:::/ / \:::\ \ /:::/ / \:::\ \ |:::::::::/ / \:::\ \:::\ \ |::|/:::/ / \:::\ \:::\ \ // \:::\____\ \:::\ /:::/ / \:::\ /:::/ / \:::\____\ |::|\::::/ / \:::\ \:::\____\ |::::::/ / \:::\ \:::\____\ // \::/ / \:::\__/:::/ / \:::\ /:::/ / \::/ / |::| \::/____/ \:::\ \::/ / |:::::/ / \:::\ /:::/ / // \/____/ \::::::::/ / \:::\/:::/ / \/____/ |::| ~| \:::\ \/____/ |::::/ / \:::\/:::/ / // \::::::/ / \::::::/ / |::| | \:::\ \ /:::/ / \::::::/ / // \::::/ / \::::/ / \::| | \:::\____\ /:::/ / \::::/ / // \::/____/ \::/____/ \:| | \::/ / \::/ / \::/ / // ~~ ~~ \|___| \/____/ \/____/ \/____/ pragma solidity ^0.8.0; import "./Ownable.sol"; import "./ERC721A.sol"; interface IFud { function mint(address to, uint256 value) external; function burn(address user, uint256 amount) external; } contract FudBuds is Ownable, ERC721A { IFud public Fud; uint256 public immutable maxPerAddress; uint256 public maxFreePerTransaction = 3; uint256 public maxPerTransaction = 20; uint256 public mintPrice = 0.035 ether; bool public mintActive = false; bool public claimingActive = false; string private _baseTokenURI; uint256 public maxFreeSupply = 1000; uint256 public maxGenesis = 3333; uint256 public startTime; mapping(address => uint256) public lastTimeClaimed; mapping(address => uint256) public fudFrensBalance; mapping(address => uint256) public outstandingFud; constructor( uint256 maxBatchSize_, uint256 collectionSize_ ) ERC721A("Fud Frens", "FF", maxBatchSize_, collectionSize_) { maxPerAddress = maxBatchSize_; startTime = block.timestamp; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function freeMint(uint256 quantity) external callerIsUser { require(mintActive, "mint is not active"); require(totalSupply() + quantity <= maxFreeSupply, "max supply has been reached"); require(quantity <= maxFreePerTransaction, "max 3 per transaction"); fudFrensBalance[msg.sender] += quantity; _safeMint(msg.sender, quantity); } function mint(uint256 quantity) external payable callerIsUser { require(mintActive, "mint is not active"); require(totalSupply() + quantity <= maxGenesis, "max supply has been reached"); require( quantity <= maxPerTransaction, "max 20 per address"); require(msg.value >= mintPrice * quantity, "not enough eth sent"); fudFrensBalance[msg.sender] += quantity; _safeMint(msg.sender, quantity); } function devMint(uint256 quantity) external onlyOwner { require(quantity % maxBatchSize == 0,"can only mint a multiple of the maxBatchSize"); require(totalSupply() + quantity <= maxGenesis, "max supply has been reached"); uint256 numChunks = quantity / maxBatchSize; fudFrensBalance[msg.sender] += quantity; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } //This will also claim any outstanding Fud function mintWithFud() external callerIsUser { require(totalSupply() < collectionSize, "max supply has been reached"); Fud.burn(msg.sender, 60 ether); outstandingFud[msg.sender] += getOwedFud(msg.sender); lastTimeClaimed[msg.sender] = block.timestamp; _safeMint(msg.sender, 1); } function claimFud() external { Fud.mint(msg.sender, getOwedFud(msg.sender) + outstandingFud[msg.sender]); lastTimeClaimed[msg.sender] = block.timestamp; outstandingFud[msg.sender] = 0; } function getOwedFud(address user) public view returns(uint256) { return((block.timestamp - (lastTimeClaimed[user] >= startTime ? lastTimeClaimed[user] : startTime)) * fudFrensBalance[user] * 1 ether / 1 days); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function toggleClaimingActive() public onlyOwner { claimingActive = !claimingActive; } function withdrawMoney() external onlyOwner { require(address(this).balance > 0); payable(msg.sender).transfer(address(this).balance); } function setOwnersExplicit(uint256 quantity) external onlyOwner { _setOwnersExplicit(quantity); } function toggleMintActive() external onlyOwner { mintActive = !mintActive; } function setFudAddress(address _fudAddress) external onlyOwner { Fud = IFud(_fudAddress); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } function updateOwedFud(address from, address to) internal { require(msg.sender == address(this)); if(from != address(0)){ outstandingFud[from] += getOwedFud(from); lastTimeClaimed[from] = block.timestamp; } if(to != address(0)){ outstandingFud[to] += getOwedFud(to); lastTimeClaimed[to] = block.timestamp; } } function transferFrom(address from, address to, uint256 tokenId) public override { updateOwedFud(from, to); fudFrensBalance[from]--; fudFrensBalance[to]++; ERC721A.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override { updateOwedFud(from, to); fudFrensBalance[from]--; fudFrensBalance[to]++; ERC721A.safeTransferFrom(from, to, tokenId, data); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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 pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./IERC721Enumerable.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 and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @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.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/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":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Fud","outputs":[{"internalType":"contract IFud","name":"","type":"address"}],"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":"claimFud","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fudFrensBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwedFud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTimeClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreePerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGenesis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintWithFud","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"outstandingFud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fudAddress","type":"address"}],"name":"setFudAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleClaimingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052600060015560006008556003600a556014600b55667c585087238000600c556000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506103e8600f55610d056010553480156200007257600080fd5b5060405162006306380380620063068339818101604052810190620000989190620003a2565b6040518060400160405280600981526020017f467564204672656e7300000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f46460000000000000000000000000000000000000000000000000000000000008152508383620001266200011a6200020f60201b60201c565b6200021760201b60201c565b600081116200016c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001639062000459565b60405180910390fd5b60008211620001b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a99062000437565b60405180910390fd5b8360029080519060200190620001ca929190620002db565b508260039080519060200190620001e3929190620002db565b508160a081815250508060808181525050505050508160c08181525050426011819055505050620005b8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002e99062000496565b90600052602060002090601f0160209004810192826200030d576000855562000359565b82601f106200032857805160ff191683800117855562000359565b8280016001018555821562000359579182015b82811115620003585782518255916020019190600101906200033b565b5b5090506200036891906200036c565b5090565b5b80821115620003875760008160009055506001016200036d565b5090565b6000815190506200039c816200059e565b92915050565b60008060408385031215620003bc57620003bb620004fb565b5b6000620003cc858286016200038b565b9250506020620003df858286016200038b565b9150509250929050565b6000620003f86027836200047b565b9150620004058262000500565b604082019050919050565b60006200041f602e836200047b565b91506200042c826200054f565b604082019050919050565b600060208201905081810360008301526200045281620003e9565b9050919050565b60006020820190508181036000830152620004748162000410565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004af57607f821691505b60208210811415620004c657620004c5620004cc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005a9816200048c565b8114620005b557600080fd5b50565b60805160a05160c051615ced620006196000396000611778015260008181611343015281816114080152818161149b01528181612df101528181612e1a0152613a1701526000818161237b01528181612b5b0152612b8f0152615ced6000f3fe6080604052600436106102885760003560e01c8063697fd03d1161015a578063ac446002116100c1578063dc33e6811161007a578063dc33e6811461099d578063dc37c6d8146109da578063e985e9c514610a17578063eb59ccfa14610a54578063edce4e6d14610a7f578063f2fde38b14610aa857610288565b8063ac446002146108c7578063b88d4fde146108de578063c87b56dd14610907578063d02c2bf214610944578063d7224ba01461095b578063db7fa6b21461098657610288565b80638da5cb5b116101135780638da5cb5b146107b25780639231ab2a146107dd57806395d89b411461081a5780639d98702c14610845578063a0712d6814610882578063a22cb4651461089e57610288565b8063697fd03d146106c85780636ccd5e50146106df57806370a082311461070a578063715018a61461074757806378e979251461075e5780637c928fe91461078957610288565b806342842e0e116101fe5780635c8fe8a2116101b75780635c8fe8a2146105b65780635fabe446146105cd5780636352211e146105f8578063639814e01461063557806367c0ee10146106605780636817c76c1461069d57610288565b806342842e0e146104a6578063456f544d146104cf57806347513334146104fa5780634b980d67146105255780634f6ccce71461055057806355f804b31461058d57610288565b806318160ddd1161025057806318160ddd1461039857806323b872dd146103c357806325fd90f3146103ec5780632d20fb60146104175780632f745c5914610440578063375a069a1461047d57610288565b806301ffc9a71461028d5780630354c202146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906143ca565b610ad1565b6040516102c19190614ad0565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614207565b610c1b565b6040516102fe9190614f03565b60405180910390f35b34801561031357600080fd5b5061031c610d2c565b6040516103299190614b06565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190614471565b610dbe565b6040516103669190614a17565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061438a565b610e43565b005b3480156103a457600080fd5b506103ad610f5c565b6040516103ba9190614f03565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190614274565b610f66565b005b3480156103f857600080fd5b5061040161102a565b60405161040e9190614ad0565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190614471565b61103d565b005b34801561044c57600080fd5b506104676004803603810190610462919061438a565b6110c5565b6040516104749190614f03565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190614471565b6112c3565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190614274565b6114d7565b005b3480156104db57600080fd5b506104e46114f7565b6040516104f19190614f03565b60405180910390f35b34801561050657600080fd5b5061050f6114fd565b60405161051c9190614f03565b60405180910390f35b34801561053157600080fd5b5061053a611503565b6040516105479190614f03565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614471565b611509565b6040516105849190614f03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614424565b61155c565b005b3480156105c257600080fd5b506105cb6115ee565b005b3480156105d957600080fd5b506105e261175a565b6040516105ef9190614f03565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190614471565b611760565b60405161062c9190614a17565b60405180910390f35b34801561064157600080fd5b5061064a611776565b6040516106579190614f03565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614207565b61179a565b6040516106949190614f03565b60405180910390f35b3480156106a957600080fd5b506106b26117b2565b6040516106bf9190614f03565b60405180910390f35b3480156106d457600080fd5b506106dd6117b8565b005b3480156106eb57600080fd5b506106f4611860565b6040516107019190614ad0565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190614207565b611873565b60405161073e9190614f03565b60405180910390f35b34801561075357600080fd5b5061075c61195c565b005b34801561076a57600080fd5b506107736119e4565b6040516107809190614f03565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614471565b6119ea565b005b3480156107be57600080fd5b506107c7611ba6565b6040516107d49190614a17565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190614471565b611bcf565b6040516108119190614ee8565b60405180910390f35b34801561082657600080fd5b5061082f611be7565b60405161083c9190614b06565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614207565b611c79565b6040516108799190614f03565b60405180910390f35b61089c60048036038101906108979190614471565b611c91565b005b3480156108aa57600080fd5b506108c560048036038101906108c0919061434a565b611e9d565b005b3480156108d357600080fd5b506108dc61201e565b005b3480156108ea57600080fd5b50610905600480360381019061090091906142c7565b6120f0565b005b34801561091357600080fd5b5061092e60048036038101906109299190614471565b6121b6565b60405161093b9190614b06565b60405180910390f35b34801561095057600080fd5b5061095961225d565b005b34801561096757600080fd5b50610970612305565b60405161097d9190614f03565b60405180910390f35b34801561099257600080fd5b5061099b61230b565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190614207565b612529565b6040516109d19190614f03565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614207565b61253b565b604051610a0e9190614f03565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190614234565b612553565b604051610a4b9190614ad0565b60405180910390f35b348015610a6057600080fd5b50610a696125e7565b604051610a769190614aeb565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa19190614207565b61260d565b005b348015610ab457600080fd5b50610acf6004803603810190610aca9190614207565b6126cd565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c0457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c145750610c13826127c5565b5b9050919050565b600062015180670de0b6b3a7640000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601154601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cbb57601154610cfc565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b42610d079190615112565b610d119190615084565b610d1b9190615084565b610d259190615053565b9050919050565b606060028054610d3b9061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061529e565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b5050505050905090565b6000610dc98261282f565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90614ea8565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e4e82611760565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ede61283d565b73ffffffffffffffffffffffffffffffffffffffff161480610f0d5750610f0c81610f0761283d565b612553565b5b610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614c28565b60405180910390fd5b610f57838383612845565b505050565b6000600154905090565b610f7083836128f7565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610fc090615274565b9190505550601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061101590615301565b9190505550611025838383612ae1565b505050565b600d60009054906101000a900460ff1681565b61104561283d565b73ffffffffffffffffffffffffffffffffffffffff16611063611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614d08565b60405180910390fd5b6110c281612af1565b50565b60006110d083611873565b8210611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614b28565b60405180910390fd5b600061111b610f5c565b905060008060005b83811015611281576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461121557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561126d578684141561125e5781955050505050506112bd565b838061126990615301565b9450505b50808061127990615301565b915050611123565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614e28565b60405180910390fd5b92915050565b6112cb61283d565b73ffffffffffffffffffffffffffffffffffffffff166112e9611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690614d08565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261136d919061534a565b146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614b88565b60405180910390fd5b601054816113b9610f5c565b6113c39190614ffd565b1115611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90614c68565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000826114329190615053565b905081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190614ffd565b9250508190555060005b818110156114d2576114bf337f0000000000000000000000000000000000000000000000000000000000000000612d7f565b80806114ca90615301565b91505061148d565b505050565b6114f2838383604051806020016040528060008152506120f0565b505050565b600a5481565b600f5481565b600b5481565b6000611513610f5c565b8210611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90614ba8565b60405180910390fd5b819050919050565b61156461283d565b73ffffffffffffffffffffffffffffffffffffffff16611582611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614d08565b60405180910390fd5b8181600e91906115e9929190613ffb565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167633610c1b565b6116809190614ffd565b6040518363ffffffff1660e01b815260040161169d929190614aa7565b600060405180830381600087803b1580156116b757600080fd5b505af11580156116cb573d6000803e3d6000fd5b5050505042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60105481565b600061176b82612d9d565b600001519050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60136020528060005260406000206000915090505481565b600c5481565b6117c061283d565b73ffffffffffffffffffffffffffffffffffffffff166117de611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90614d08565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90614cc8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61196461283d565b73ffffffffffffffffffffffffffffffffffffffff16611982611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614d08565b60405180910390fd5b6119e26000612fa0565b565b60115481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90614c08565b60405180910390fd5b600d60009054906101000a900460ff16611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614d88565b60405180910390fd5b600f5481611ab3610f5c565b611abd9190614ffd565b1115611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614c68565b60405180910390fd5b600a54811115611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614c88565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b929190614ffd565b92505081905550611ba33382612d7f565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bd7614081565b611be082612d9d565b9050919050565b606060038054611bf69061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c229061529e565b8015611c6f5780601f10611c4457610100808354040283529160200191611c6f565b820191906000526020600020905b815481529060010190602001808311611c5257829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614c08565b60405180910390fd5b600d60009054906101000a900460ff16611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614d88565b60405180910390fd5b60105481611d5a610f5c565b611d649190614ffd565b1115611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90614c68565b60405180910390fd5b600b54811115611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614ca8565b60405180910390fd5b80600c54611df89190615084565b341015611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614e68565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e899190614ffd565b92505081905550611e9a3382612d7f565b50565b611ea561283d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614d48565b60405180910390fd5b8060076000611f2061283d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fcd61283d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120129190614ad0565b60405180910390a35050565b61202661283d565b73ffffffffffffffffffffffffffffffffffffffff16612044611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190614d08565b60405180910390fd5b600047116120a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120ed573d6000803e3d6000fd5b50565b6120fa84846128f7565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061214a90615274565b9190505550601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061219f90615301565b91905055506121b084848484613064565b50505050565b60606121c18261282f565b612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f790614d28565b60405180910390fd5b600061220a6130c0565b9050600081511161222a5760405180602001604052806000815250612255565b8061223484613152565b6040516020016122459291906149f3565b6040516020818303038152906040525b915050919050565b61226561283d565b73ffffffffffffffffffffffffffffffffffffffff16612283611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614d08565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614c08565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006123a2610f5c565b106123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614c68565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33680340aad21b3b7000006040518363ffffffff1660e01b8152600401612448929190614a7e565b600060405180830381600087803b15801561246257600080fd5b505af1158015612476573d6000803e3d6000fd5b5050505061248333610c1b565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d19190614ffd565b9250508190555042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612527336001612d7f565b565b6000612534826132b3565b9050919050565b60146020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61261561283d565b73ffffffffffffffffffffffffffffffffffffffff16612633611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614d08565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126d561283d565b73ffffffffffffffffffffffffffffffffffffffff166126f3611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090614d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b090614b48565b60405180910390fd5b6127c281612fa0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461292f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a065761296c82610c1b565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ba9190614ffd565b9250508190555042601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612add57612a4381610c1b565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a919190614ffd565b9250508190555042601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b612aec83838361339c565b505050565b6000600854905060008211612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614c48565b60405180910390fd5b600060018383612b4b9190614ffd565b612b559190615112565b905060017f0000000000000000000000000000000000000000000000000000000000000000612b849190615112565b811115612bbb5760017f0000000000000000000000000000000000000000000000000000000000000000612bb89190615112565b90505b612bc48161282f565b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614e48565b60405180910390fd5b60008290505b818111612d6657600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d53576000612c8682612d9d565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612d5e90615301565b915050612c09565b50600181612d749190614ffd565b600881905550505050565b612d99828260405180602001604052806000815250613955565b5050565b612da5614081565b612dae8261282f565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490614b68565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612e515760017f000000000000000000000000000000000000000000000000000000000000000084612e449190615112565b612e4e9190614ffd565b90505b60008390505b818110612f5f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f4b57809350505050612f9b565b508080612f5790615274565b915050612e57565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9290614e88565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61306f84848461339c565b61307b84848484613e35565b6130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b190614dc8565b60405180910390fd5b50505050565b6060600e80546130cf9061529e565b80601f01602080910402602001604051908101604052809291908181526020018280546130fb9061529e565b80156131485780601f1061311d57610100808354040283529160200191613148565b820191906000526020600020905b81548152906001019060200180831161312b57829003601f168201915b5050505050905090565b6060600082141561319a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132ae565b600082905060005b600082146131cc5780806131b590615301565b915050600a826131c59190615053565b91506131a2565b60008167ffffffffffffffff8111156131e8576131e7615437565b5b6040519080825280601f01601f19166020018201604052801561321a5781602001600182028036833780820191505090505b5090505b600085146132a7576001826132339190615112565b9150600a85613242919061534a565b603061324e9190614ffd565b60f81b81838151811061326457613263615408565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a09190615053565b945061321e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90614be8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006133a782612d9d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166133ce61283d565b73ffffffffffffffffffffffffffffffffffffffff16148061342a57506133f361283d565b73ffffffffffffffffffffffffffffffffffffffff1661341284610dbe565b73ffffffffffffffffffffffffffffffffffffffff16145b806134465750613445826000015161344061283d565b612553565b5b905080613488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347f90614d68565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f190614ce8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190614bc8565b60405180910390fd5b6135778585856001613fcc565b6135876000848460000151612845565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166135f591906150de565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166136999190614fb7565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461379f9190614ffd565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138e5576138158161282f565b156138e4576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461394d8686866001613fd2565b505050505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156139cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c390614e08565b60405180910390fd5b6139d58161282f565b15613a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0c90614de8565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6f90614ec8565b60405180910390fd5b613a856000858386613fcc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613b829190614fb7565b6fffffffffffffffffffffffffffffffff168152602001858360200151613ba99190614fb7565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613e1857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613db86000888488613e35565b613df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dee90614dc8565b60405180910390fd5b8180613e0290615301565b9250508080613e1090615301565b915050613d47565b5080600181905550613e2d6000878588613fd2565b505050505050565b6000613e568473ffffffffffffffffffffffffffffffffffffffff16613fd8565b15613fbf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e7f61283d565b8786866040518563ffffffff1660e01b8152600401613ea19493929190614a32565b602060405180830381600087803b158015613ebb57600080fd5b505af1925050508015613eec57506040513d601f19601f82011682018060405250810190613ee991906143f7565b60015b613f6f573d8060008114613f1c576040519150601f19603f3d011682016040523d82523d6000602084013e613f21565b606091505b50600081511415613f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5e90614dc8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613fc4565b600190505b949350505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546140079061529e565b90600052602060002090601f0160209004810192826140295760008555614070565b82601f1061404257803560ff1916838001178555614070565b82800160010185558215614070579182015b8281111561406f578235825591602001919060010190614054565b5b50905061407d91906140bb565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156140d45760008160009055506001016140bc565b5090565b60006140eb6140e684614f43565b614f1e565b90508281526020810184848401111561410757614106615475565b5b614112848285615232565b509392505050565b60008135905061412981615c5b565b92915050565b60008135905061413e81615c72565b92915050565b60008135905061415381615c89565b92915050565b60008151905061416881615c89565b92915050565b600082601f8301126141835761418261546b565b5b81356141938482602086016140d8565b91505092915050565b60008083601f8401126141b2576141b161546b565b5b8235905067ffffffffffffffff8111156141cf576141ce615466565b5b6020830191508360018202830111156141eb576141ea615470565b5b9250929050565b60008135905061420181615ca0565b92915050565b60006020828403121561421d5761421c61547f565b5b600061422b8482850161411a565b91505092915050565b6000806040838503121561424b5761424a61547f565b5b60006142598582860161411a565b925050602061426a8582860161411a565b9150509250929050565b60008060006060848603121561428d5761428c61547f565b5b600061429b8682870161411a565b93505060206142ac8682870161411a565b92505060406142bd868287016141f2565b9150509250925092565b600080600080608085870312156142e1576142e061547f565b5b60006142ef8782880161411a565b94505060206143008782880161411a565b9350506040614311878288016141f2565b925050606085013567ffffffffffffffff8111156143325761433161547a565b5b61433e8782880161416e565b91505092959194509250565b600080604083850312156143615761436061547f565b5b600061436f8582860161411a565b92505060206143808582860161412f565b9150509250929050565b600080604083850312156143a1576143a061547f565b5b60006143af8582860161411a565b92505060206143c0858286016141f2565b9150509250929050565b6000602082840312156143e0576143df61547f565b5b60006143ee84828501614144565b91505092915050565b60006020828403121561440d5761440c61547f565b5b600061441b84828501614159565b91505092915050565b6000806020838503121561443b5761443a61547f565b5b600083013567ffffffffffffffff8111156144595761445861547a565b5b6144658582860161419c565b92509250509250929050565b6000602082840312156144875761448661547f565b5b6000614495848285016141f2565b91505092915050565b6144a781615146565b82525050565b6144b681615146565b82525050565b6144c581615158565b82525050565b60006144d682614f74565b6144e08185614f8a565b93506144f0818560208601615241565b6144f981615484565b840191505092915050565b61450d816151ea565b82525050565b61451c816151fc565b82525050565b600061452d82614f7f565b6145378185614f9b565b9350614547818560208601615241565b61455081615484565b840191505092915050565b600061456682614f7f565b6145708185614fac565b9350614580818560208601615241565b80840191505092915050565b6000614599602283614f9b565b91506145a482615495565b604082019050919050565b60006145bc602683614f9b565b91506145c7826154e4565b604082019050919050565b60006145df602a83614f9b565b91506145ea82615533565b604082019050919050565b6000614602602c83614f9b565b915061460d82615582565b604082019050919050565b6000614625602383614f9b565b9150614630826155d1565b604082019050919050565b6000614648602583614f9b565b915061465382615620565b604082019050919050565b600061466b603183614f9b565b91506146768261566f565b604082019050919050565b600061468e601e83614f9b565b9150614699826156be565b602082019050919050565b60006146b1603983614f9b565b91506146bc826156e7565b604082019050919050565b60006146d4601883614f9b565b91506146df82615736565b602082019050919050565b60006146f7601b83614f9b565b91506147028261575f565b602082019050919050565b600061471a601583614f9b565b915061472582615788565b602082019050919050565b600061473d601283614f9b565b9150614748826157b1565b602082019050919050565b6000614760602b83614f9b565b915061476b826157da565b604082019050919050565b6000614783602683614f9b565b915061478e82615829565b604082019050919050565b60006147a6602083614f9b565b91506147b182615878565b602082019050919050565b60006147c9602f83614f9b565b91506147d4826158a1565b604082019050919050565b60006147ec601a83614f9b565b91506147f7826158f0565b602082019050919050565b600061480f603283614f9b565b915061481a82615919565b604082019050919050565b6000614832601283614f9b565b915061483d82615968565b602082019050919050565b6000614855602283614f9b565b915061486082615991565b604082019050919050565b6000614878603383614f9b565b9150614883826159e0565b604082019050919050565b600061489b601d83614f9b565b91506148a682615a2f565b602082019050919050565b60006148be602183614f9b565b91506148c982615a58565b604082019050919050565b60006148e1602e83614f9b565b91506148ec82615aa7565b604082019050919050565b6000614904602683614f9b565b915061490f82615af6565b604082019050919050565b6000614927601383614f9b565b915061493282615b45565b602082019050919050565b600061494a602f83614f9b565b915061495582615b6e565b604082019050919050565b600061496d602d83614f9b565b915061497882615bbd565b604082019050919050565b6000614990602283614f9b565b915061499b82615c0c565b604082019050919050565b6040820160008201516149bc600085018261449e565b5060208201516149cf60208501826149e4565b50505050565b6149de816151cc565b82525050565b6149ed816151d6565b82525050565b60006149ff828561455b565b9150614a0b828461455b565b91508190509392505050565b6000602082019050614a2c60008301846144ad565b92915050565b6000608082019050614a4760008301876144ad565b614a5460208301866144ad565b614a6160408301856149d5565b8181036060830152614a7381846144cb565b905095945050505050565b6000604082019050614a9360008301856144ad565b614aa06020830184614513565b9392505050565b6000604082019050614abc60008301856144ad565b614ac960208301846149d5565b9392505050565b6000602082019050614ae560008301846144bc565b92915050565b6000602082019050614b006000830184614504565b92915050565b60006020820190508181036000830152614b208184614522565b905092915050565b60006020820190508181036000830152614b418161458c565b9050919050565b60006020820190508181036000830152614b61816145af565b9050919050565b60006020820190508181036000830152614b81816145d2565b9050919050565b60006020820190508181036000830152614ba1816145f5565b9050919050565b60006020820190508181036000830152614bc181614618565b9050919050565b60006020820190508181036000830152614be18161463b565b9050919050565b60006020820190508181036000830152614c018161465e565b9050919050565b60006020820190508181036000830152614c2181614681565b9050919050565b60006020820190508181036000830152614c41816146a4565b9050919050565b60006020820190508181036000830152614c61816146c7565b9050919050565b60006020820190508181036000830152614c81816146ea565b9050919050565b60006020820190508181036000830152614ca18161470d565b9050919050565b60006020820190508181036000830152614cc181614730565b9050919050565b60006020820190508181036000830152614ce181614753565b9050919050565b60006020820190508181036000830152614d0181614776565b9050919050565b60006020820190508181036000830152614d2181614799565b9050919050565b60006020820190508181036000830152614d41816147bc565b9050919050565b60006020820190508181036000830152614d61816147df565b9050919050565b60006020820190508181036000830152614d8181614802565b9050919050565b60006020820190508181036000830152614da181614825565b9050919050565b60006020820190508181036000830152614dc181614848565b9050919050565b60006020820190508181036000830152614de18161486b565b9050919050565b60006020820190508181036000830152614e018161488e565b9050919050565b60006020820190508181036000830152614e21816148b1565b9050919050565b60006020820190508181036000830152614e41816148d4565b9050919050565b60006020820190508181036000830152614e61816148f7565b9050919050565b60006020820190508181036000830152614e818161491a565b9050919050565b60006020820190508181036000830152614ea18161493d565b9050919050565b60006020820190508181036000830152614ec181614960565b9050919050565b60006020820190508181036000830152614ee181614983565b9050919050565b6000604082019050614efd60008301846149a6565b92915050565b6000602082019050614f1860008301846149d5565b92915050565b6000614f28614f39565b9050614f3482826152d0565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5e57614f5d615437565b5b614f6782615484565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fc282615190565b9150614fcd83615190565b9250826fffffffffffffffffffffffffffffffff03821115614ff257614ff161537b565b5b828201905092915050565b6000615008826151cc565b9150615013836151cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150485761504761537b565b5b828201905092915050565b600061505e826151cc565b9150615069836151cc565b925082615079576150786153aa565b5b828204905092915050565b600061508f826151cc565b915061509a836151cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d3576150d261537b565b5b828202905092915050565b60006150e982615190565b91506150f483615190565b9250828210156151075761510661537b565b5b828203905092915050565b600061511d826151cc565b9150615128836151cc565b92508282101561513b5761513a61537b565b5b828203905092915050565b6000615151826151ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006151f58261520e565b9050919050565b6000615207826151cc565b9050919050565b600061521982615220565b9050919050565b600061522b826151ac565b9050919050565b82818337600083830152505050565b60005b8381101561525f578082015181840152602081019050615244565b8381111561526e576000848401525b50505050565b600061527f826151cc565b915060008214156152935761529261537b565b5b600182039050919050565b600060028204905060018216806152b657607f821691505b602082108114156152ca576152c96153d9565b5b50919050565b6152d982615484565b810181811067ffffffffffffffff821117156152f8576152f7615437565b5b80604052505050565b600061530c826151cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561533f5761533e61537b565b5b600182019050919050565b6000615355826151cc565b9150615360836151cc565b9250826153705761536f6153aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f6d617820737570706c7920686173206265656e20726561636865640000000000600082015250565b7f6d6178203320706572207472616e73616374696f6e0000000000000000000000600082015250565b7f6d61782032302070657220616464726573730000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206574682073656e7400000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615c6481615146565b8114615c6f57600080fd5b50565b615c7b81615158565b8114615c8657600080fd5b50565b615c9281615164565b8114615c9d57600080fd5b50565b615ca9816151cc565b8114615cb457600080fd5b5056fea26469706673582212205069cb8956587fe13d2268cd0bfb5a76278aefa94d2b5f5883aa9959d3d5b82a64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000115c
Deployed Bytecode
0x6080604052600436106102885760003560e01c8063697fd03d1161015a578063ac446002116100c1578063dc33e6811161007a578063dc33e6811461099d578063dc37c6d8146109da578063e985e9c514610a17578063eb59ccfa14610a54578063edce4e6d14610a7f578063f2fde38b14610aa857610288565b8063ac446002146108c7578063b88d4fde146108de578063c87b56dd14610907578063d02c2bf214610944578063d7224ba01461095b578063db7fa6b21461098657610288565b80638da5cb5b116101135780638da5cb5b146107b25780639231ab2a146107dd57806395d89b411461081a5780639d98702c14610845578063a0712d6814610882578063a22cb4651461089e57610288565b8063697fd03d146106c85780636ccd5e50146106df57806370a082311461070a578063715018a61461074757806378e979251461075e5780637c928fe91461078957610288565b806342842e0e116101fe5780635c8fe8a2116101b75780635c8fe8a2146105b65780635fabe446146105cd5780636352211e146105f8578063639814e01461063557806367c0ee10146106605780636817c76c1461069d57610288565b806342842e0e146104a6578063456f544d146104cf57806347513334146104fa5780634b980d67146105255780634f6ccce71461055057806355f804b31461058d57610288565b806318160ddd1161025057806318160ddd1461039857806323b872dd146103c357806325fd90f3146103ec5780632d20fb60146104175780632f745c5914610440578063375a069a1461047d57610288565b806301ffc9a71461028d5780630354c202146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906143ca565b610ad1565b6040516102c19190614ad0565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614207565b610c1b565b6040516102fe9190614f03565b60405180910390f35b34801561031357600080fd5b5061031c610d2c565b6040516103299190614b06565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190614471565b610dbe565b6040516103669190614a17565b60405180910390f35b34801561037b57600080fd5b506103966004803603810190610391919061438a565b610e43565b005b3480156103a457600080fd5b506103ad610f5c565b6040516103ba9190614f03565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190614274565b610f66565b005b3480156103f857600080fd5b5061040161102a565b60405161040e9190614ad0565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190614471565b61103d565b005b34801561044c57600080fd5b506104676004803603810190610462919061438a565b6110c5565b6040516104749190614f03565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190614471565b6112c3565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190614274565b6114d7565b005b3480156104db57600080fd5b506104e46114f7565b6040516104f19190614f03565b60405180910390f35b34801561050657600080fd5b5061050f6114fd565b60405161051c9190614f03565b60405180910390f35b34801561053157600080fd5b5061053a611503565b6040516105479190614f03565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190614471565b611509565b6040516105849190614f03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614424565b61155c565b005b3480156105c257600080fd5b506105cb6115ee565b005b3480156105d957600080fd5b506105e261175a565b6040516105ef9190614f03565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190614471565b611760565b60405161062c9190614a17565b60405180910390f35b34801561064157600080fd5b5061064a611776565b6040516106579190614f03565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190614207565b61179a565b6040516106949190614f03565b60405180910390f35b3480156106a957600080fd5b506106b26117b2565b6040516106bf9190614f03565b60405180910390f35b3480156106d457600080fd5b506106dd6117b8565b005b3480156106eb57600080fd5b506106f4611860565b6040516107019190614ad0565b60405180910390f35b34801561071657600080fd5b50610731600480360381019061072c9190614207565b611873565b60405161073e9190614f03565b60405180910390f35b34801561075357600080fd5b5061075c61195c565b005b34801561076a57600080fd5b506107736119e4565b6040516107809190614f03565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190614471565b6119ea565b005b3480156107be57600080fd5b506107c7611ba6565b6040516107d49190614a17565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff9190614471565b611bcf565b6040516108119190614ee8565b60405180910390f35b34801561082657600080fd5b5061082f611be7565b60405161083c9190614b06565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614207565b611c79565b6040516108799190614f03565b60405180910390f35b61089c60048036038101906108979190614471565b611c91565b005b3480156108aa57600080fd5b506108c560048036038101906108c0919061434a565b611e9d565b005b3480156108d357600080fd5b506108dc61201e565b005b3480156108ea57600080fd5b50610905600480360381019061090091906142c7565b6120f0565b005b34801561091357600080fd5b5061092e60048036038101906109299190614471565b6121b6565b60405161093b9190614b06565b60405180910390f35b34801561095057600080fd5b5061095961225d565b005b34801561096757600080fd5b50610970612305565b60405161097d9190614f03565b60405180910390f35b34801561099257600080fd5b5061099b61230b565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190614207565b612529565b6040516109d19190614f03565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614207565b61253b565b604051610a0e9190614f03565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a399190614234565b612553565b604051610a4b9190614ad0565b60405180910390f35b348015610a6057600080fd5b50610a696125e7565b604051610a769190614aeb565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa19190614207565b61260d565b005b348015610ab457600080fd5b50610acf6004803603810190610aca9190614207565b6126cd565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b9c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c0457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c145750610c13826127c5565b5b9050919050565b600062015180670de0b6b3a7640000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601154601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cbb57601154610cfc565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b42610d079190615112565b610d119190615084565b610d1b9190615084565b610d259190615053565b9050919050565b606060028054610d3b9061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061529e565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b5050505050905090565b6000610dc98261282f565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90614ea8565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e4e82611760565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614da8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ede61283d565b73ffffffffffffffffffffffffffffffffffffffff161480610f0d5750610f0c81610f0761283d565b612553565b5b610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390614c28565b60405180910390fd5b610f57838383612845565b505050565b6000600154905090565b610f7083836128f7565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610fc090615274565b9190505550601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061101590615301565b9190505550611025838383612ae1565b505050565b600d60009054906101000a900460ff1681565b61104561283d565b73ffffffffffffffffffffffffffffffffffffffff16611063611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090614d08565b60405180910390fd5b6110c281612af1565b50565b60006110d083611873565b8210611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890614b28565b60405180910390fd5b600061111b610f5c565b905060008060005b83811015611281576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461121557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561126d578684141561125e5781955050505050506112bd565b838061126990615301565b9450505b50808061127990615301565b915050611123565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614e28565b60405180910390fd5b92915050565b6112cb61283d565b73ffffffffffffffffffffffffffffffffffffffff166112e9611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690614d08565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148261136d919061534a565b146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614b88565b60405180910390fd5b601054816113b9610f5c565b6113c39190614ffd565b1115611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90614c68565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000014826114329190615053565b905081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114839190614ffd565b9250508190555060005b818110156114d2576114bf337f0000000000000000000000000000000000000000000000000000000000000014612d7f565b80806114ca90615301565b91505061148d565b505050565b6114f2838383604051806020016040528060008152506120f0565b505050565b600a5481565b600f5481565b600b5481565b6000611513610f5c565b8210611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90614ba8565b60405180910390fd5b819050919050565b61156461283d565b73ffffffffffffffffffffffffffffffffffffffff16611582611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614d08565b60405180910390fd5b8181600e91906115e9929190613ffb565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461167633610c1b565b6116809190614ffd565b6040518363ffffffff1660e01b815260040161169d929190614aa7565b600060405180830381600087803b1580156116b757600080fd5b505af11580156116cb573d6000803e3d6000fd5b5050505042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b60105481565b600061176b82612d9d565b600001519050919050565b7f000000000000000000000000000000000000000000000000000000000000001481565b60136020528060005260406000206000915090505481565b600c5481565b6117c061283d565b73ffffffffffffffffffffffffffffffffffffffff166117de611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90614d08565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90614cc8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61196461283d565b73ffffffffffffffffffffffffffffffffffffffff16611982611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614d08565b60405180910390fd5b6119e26000612fa0565b565b60115481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90614c08565b60405180910390fd5b600d60009054906101000a900460ff16611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614d88565b60405180910390fd5b600f5481611ab3610f5c565b611abd9190614ffd565b1115611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614c68565b60405180910390fd5b600a54811115611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a90614c88565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b929190614ffd565b92505081905550611ba33382612d7f565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bd7614081565b611be082612d9d565b9050919050565b606060038054611bf69061529e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c229061529e565b8015611c6f5780601f10611c4457610100808354040283529160200191611c6f565b820191906000526020600020905b815481529060010190602001808311611c5257829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614c08565b60405180910390fd5b600d60009054906101000a900460ff16611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614d88565b60405180910390fd5b60105481611d5a610f5c565b611d649190614ffd565b1115611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90614c68565b60405180910390fd5b600b54811115611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614ca8565b60405180910390fd5b80600c54611df89190615084565b341015611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190614e68565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e899190614ffd565b92505081905550611e9a3382612d7f565b50565b611ea561283d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614d48565b60405180910390fd5b8060076000611f2061283d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fcd61283d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120129190614ad0565b60405180910390a35050565b61202661283d565b73ffffffffffffffffffffffffffffffffffffffff16612044611ba6565b73ffffffffffffffffffffffffffffffffffffffff161461209a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209190614d08565b60405180910390fd5b600047116120a757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156120ed573d6000803e3d6000fd5b50565b6120fa84846128f7565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061214a90615274565b9190505550601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061219f90615301565b91905055506121b084848484613064565b50505050565b60606121c18261282f565b612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f790614d28565b60405180910390fd5b600061220a6130c0565b9050600081511161222a5760405180602001604052806000815250612255565b8061223484613152565b6040516020016122459291906149f3565b6040516020818303038152906040525b915050919050565b61226561283d565b73ffffffffffffffffffffffffffffffffffffffff16612283611ba6565b73ffffffffffffffffffffffffffffffffffffffff16146122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614d08565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60085481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614c08565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000115c6123a2610f5c565b106123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614c68565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33680340aad21b3b7000006040518363ffffffff1660e01b8152600401612448929190614a7e565b600060405180830381600087803b15801561246257600080fd5b505af1158015612476573d6000803e3d6000fd5b5050505061248333610c1b565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d19190614ffd565b9250508190555042601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612527336001612d7f565b565b6000612534826132b3565b9050919050565b60146020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61261561283d565b73ffffffffffffffffffffffffffffffffffffffff16612633611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268090614d08565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126d561283d565b73ffffffffffffffffffffffffffffffffffffffff166126f3611ba6565b73ffffffffffffffffffffffffffffffffffffffff1614612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274090614d08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b090614b48565b60405180910390fd5b6127c281612fa0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461292f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a065761296c82610c1b565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ba9190614ffd565b9250508190555042601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612add57612a4381610c1b565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a919190614ffd565b9250508190555042601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b612aec83838361339c565b505050565b6000600854905060008211612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614c48565b60405180910390fd5b600060018383612b4b9190614ffd565b612b559190615112565b905060017f000000000000000000000000000000000000000000000000000000000000115c612b849190615112565b811115612bbb5760017f000000000000000000000000000000000000000000000000000000000000115c612bb89190615112565b90505b612bc48161282f565b612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614e48565b60405180910390fd5b60008290505b818111612d6657600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d53576000612c8682612d9d565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612d5e90615301565b915050612c09565b50600181612d749190614ffd565b600881905550505050565b612d99828260405180602001604052806000815250613955565b5050565b612da5614081565b612dae8261282f565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490614b68565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000148310612e515760017f000000000000000000000000000000000000000000000000000000000000001484612e449190615112565b612e4e9190614ffd565b90505b60008390505b818110612f5f576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f4b57809350505050612f9b565b508080612f5790615274565b915050612e57565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9290614e88565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61306f84848461339c565b61307b84848484613e35565b6130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b190614dc8565b60405180910390fd5b50505050565b6060600e80546130cf9061529e565b80601f01602080910402602001604051908101604052809291908181526020018280546130fb9061529e565b80156131485780601f1061311d57610100808354040283529160200191613148565b820191906000526020600020905b81548152906001019060200180831161312b57829003601f168201915b5050505050905090565b6060600082141561319a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132ae565b600082905060005b600082146131cc5780806131b590615301565b915050600a826131c59190615053565b91506131a2565b60008167ffffffffffffffff8111156131e8576131e7615437565b5b6040519080825280601f01601f19166020018201604052801561321a5781602001600182028036833780820191505090505b5090505b600085146132a7576001826132339190615112565b9150600a85613242919061534a565b603061324e9190614ffd565b60f81b81838151811061326457613263615408565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a09190615053565b945061321e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331b90614be8565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006133a782612d9d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166133ce61283d565b73ffffffffffffffffffffffffffffffffffffffff16148061342a57506133f361283d565b73ffffffffffffffffffffffffffffffffffffffff1661341284610dbe565b73ffffffffffffffffffffffffffffffffffffffff16145b806134465750613445826000015161344061283d565b612553565b5b905080613488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347f90614d68565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146134fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f190614ce8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190614bc8565b60405180910390fd5b6135778585856001613fcc565b6135876000848460000151612845565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166135f591906150de565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166136999190614fb7565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461379f9190614ffd565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156138e5576138158161282f565b156138e4576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461394d8686866001613fd2565b505050505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156139cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c390614e08565b60405180910390fd5b6139d58161282f565b15613a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0c90614de8565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014831115613a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6f90614ec8565b60405180910390fd5b613a856000858386613fcc565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613b829190614fb7565b6fffffffffffffffffffffffffffffffff168152602001858360200151613ba99190614fb7565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613e1857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613db86000888488613e35565b613df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dee90614dc8565b60405180910390fd5b8180613e0290615301565b9250508080613e1090615301565b915050613d47565b5080600181905550613e2d6000878588613fd2565b505050505050565b6000613e568473ffffffffffffffffffffffffffffffffffffffff16613fd8565b15613fbf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e7f61283d565b8786866040518563ffffffff1660e01b8152600401613ea19493929190614a32565b602060405180830381600087803b158015613ebb57600080fd5b505af1925050508015613eec57506040513d601f19601f82011682018060405250810190613ee991906143f7565b60015b613f6f573d8060008114613f1c576040519150601f19603f3d011682016040523d82523d6000602084013e613f21565b606091505b50600081511415613f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5e90614dc8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613fc4565b600190505b949350505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546140079061529e565b90600052602060002090601f0160209004810192826140295760008555614070565b82601f1061404257803560ff1916838001178555614070565b82800160010185558215614070579182015b8281111561406f578235825591602001919060010190614054565b5b50905061407d91906140bb565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156140d45760008160009055506001016140bc565b5090565b60006140eb6140e684614f43565b614f1e565b90508281526020810184848401111561410757614106615475565b5b614112848285615232565b509392505050565b60008135905061412981615c5b565b92915050565b60008135905061413e81615c72565b92915050565b60008135905061415381615c89565b92915050565b60008151905061416881615c89565b92915050565b600082601f8301126141835761418261546b565b5b81356141938482602086016140d8565b91505092915050565b60008083601f8401126141b2576141b161546b565b5b8235905067ffffffffffffffff8111156141cf576141ce615466565b5b6020830191508360018202830111156141eb576141ea615470565b5b9250929050565b60008135905061420181615ca0565b92915050565b60006020828403121561421d5761421c61547f565b5b600061422b8482850161411a565b91505092915050565b6000806040838503121561424b5761424a61547f565b5b60006142598582860161411a565b925050602061426a8582860161411a565b9150509250929050565b60008060006060848603121561428d5761428c61547f565b5b600061429b8682870161411a565b93505060206142ac8682870161411a565b92505060406142bd868287016141f2565b9150509250925092565b600080600080608085870312156142e1576142e061547f565b5b60006142ef8782880161411a565b94505060206143008782880161411a565b9350506040614311878288016141f2565b925050606085013567ffffffffffffffff8111156143325761433161547a565b5b61433e8782880161416e565b91505092959194509250565b600080604083850312156143615761436061547f565b5b600061436f8582860161411a565b92505060206143808582860161412f565b9150509250929050565b600080604083850312156143a1576143a061547f565b5b60006143af8582860161411a565b92505060206143c0858286016141f2565b9150509250929050565b6000602082840312156143e0576143df61547f565b5b60006143ee84828501614144565b91505092915050565b60006020828403121561440d5761440c61547f565b5b600061441b84828501614159565b91505092915050565b6000806020838503121561443b5761443a61547f565b5b600083013567ffffffffffffffff8111156144595761445861547a565b5b6144658582860161419c565b92509250509250929050565b6000602082840312156144875761448661547f565b5b6000614495848285016141f2565b91505092915050565b6144a781615146565b82525050565b6144b681615146565b82525050565b6144c581615158565b82525050565b60006144d682614f74565b6144e08185614f8a565b93506144f0818560208601615241565b6144f981615484565b840191505092915050565b61450d816151ea565b82525050565b61451c816151fc565b82525050565b600061452d82614f7f565b6145378185614f9b565b9350614547818560208601615241565b61455081615484565b840191505092915050565b600061456682614f7f565b6145708185614fac565b9350614580818560208601615241565b80840191505092915050565b6000614599602283614f9b565b91506145a482615495565b604082019050919050565b60006145bc602683614f9b565b91506145c7826154e4565b604082019050919050565b60006145df602a83614f9b565b91506145ea82615533565b604082019050919050565b6000614602602c83614f9b565b915061460d82615582565b604082019050919050565b6000614625602383614f9b565b9150614630826155d1565b604082019050919050565b6000614648602583614f9b565b915061465382615620565b604082019050919050565b600061466b603183614f9b565b91506146768261566f565b604082019050919050565b600061468e601e83614f9b565b9150614699826156be565b602082019050919050565b60006146b1603983614f9b565b91506146bc826156e7565b604082019050919050565b60006146d4601883614f9b565b91506146df82615736565b602082019050919050565b60006146f7601b83614f9b565b91506147028261575f565b602082019050919050565b600061471a601583614f9b565b915061472582615788565b602082019050919050565b600061473d601283614f9b565b9150614748826157b1565b602082019050919050565b6000614760602b83614f9b565b915061476b826157da565b604082019050919050565b6000614783602683614f9b565b915061478e82615829565b604082019050919050565b60006147a6602083614f9b565b91506147b182615878565b602082019050919050565b60006147c9602f83614f9b565b91506147d4826158a1565b604082019050919050565b60006147ec601a83614f9b565b91506147f7826158f0565b602082019050919050565b600061480f603283614f9b565b915061481a82615919565b604082019050919050565b6000614832601283614f9b565b915061483d82615968565b602082019050919050565b6000614855602283614f9b565b915061486082615991565b604082019050919050565b6000614878603383614f9b565b9150614883826159e0565b604082019050919050565b600061489b601d83614f9b565b91506148a682615a2f565b602082019050919050565b60006148be602183614f9b565b91506148c982615a58565b604082019050919050565b60006148e1602e83614f9b565b91506148ec82615aa7565b604082019050919050565b6000614904602683614f9b565b915061490f82615af6565b604082019050919050565b6000614927601383614f9b565b915061493282615b45565b602082019050919050565b600061494a602f83614f9b565b915061495582615b6e565b604082019050919050565b600061496d602d83614f9b565b915061497882615bbd565b604082019050919050565b6000614990602283614f9b565b915061499b82615c0c565b604082019050919050565b6040820160008201516149bc600085018261449e565b5060208201516149cf60208501826149e4565b50505050565b6149de816151cc565b82525050565b6149ed816151d6565b82525050565b60006149ff828561455b565b9150614a0b828461455b565b91508190509392505050565b6000602082019050614a2c60008301846144ad565b92915050565b6000608082019050614a4760008301876144ad565b614a5460208301866144ad565b614a6160408301856149d5565b8181036060830152614a7381846144cb565b905095945050505050565b6000604082019050614a9360008301856144ad565b614aa06020830184614513565b9392505050565b6000604082019050614abc60008301856144ad565b614ac960208301846149d5565b9392505050565b6000602082019050614ae560008301846144bc565b92915050565b6000602082019050614b006000830184614504565b92915050565b60006020820190508181036000830152614b208184614522565b905092915050565b60006020820190508181036000830152614b418161458c565b9050919050565b60006020820190508181036000830152614b61816145af565b9050919050565b60006020820190508181036000830152614b81816145d2565b9050919050565b60006020820190508181036000830152614ba1816145f5565b9050919050565b60006020820190508181036000830152614bc181614618565b9050919050565b60006020820190508181036000830152614be18161463b565b9050919050565b60006020820190508181036000830152614c018161465e565b9050919050565b60006020820190508181036000830152614c2181614681565b9050919050565b60006020820190508181036000830152614c41816146a4565b9050919050565b60006020820190508181036000830152614c61816146c7565b9050919050565b60006020820190508181036000830152614c81816146ea565b9050919050565b60006020820190508181036000830152614ca18161470d565b9050919050565b60006020820190508181036000830152614cc181614730565b9050919050565b60006020820190508181036000830152614ce181614753565b9050919050565b60006020820190508181036000830152614d0181614776565b9050919050565b60006020820190508181036000830152614d2181614799565b9050919050565b60006020820190508181036000830152614d41816147bc565b9050919050565b60006020820190508181036000830152614d61816147df565b9050919050565b60006020820190508181036000830152614d8181614802565b9050919050565b60006020820190508181036000830152614da181614825565b9050919050565b60006020820190508181036000830152614dc181614848565b9050919050565b60006020820190508181036000830152614de18161486b565b9050919050565b60006020820190508181036000830152614e018161488e565b9050919050565b60006020820190508181036000830152614e21816148b1565b9050919050565b60006020820190508181036000830152614e41816148d4565b9050919050565b60006020820190508181036000830152614e61816148f7565b9050919050565b60006020820190508181036000830152614e818161491a565b9050919050565b60006020820190508181036000830152614ea18161493d565b9050919050565b60006020820190508181036000830152614ec181614960565b9050919050565b60006020820190508181036000830152614ee181614983565b9050919050565b6000604082019050614efd60008301846149a6565b92915050565b6000602082019050614f1860008301846149d5565b92915050565b6000614f28614f39565b9050614f3482826152d0565b919050565b6000604051905090565b600067ffffffffffffffff821115614f5e57614f5d615437565b5b614f6782615484565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614fc282615190565b9150614fcd83615190565b9250826fffffffffffffffffffffffffffffffff03821115614ff257614ff161537b565b5b828201905092915050565b6000615008826151cc565b9150615013836151cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150485761504761537b565b5b828201905092915050565b600061505e826151cc565b9150615069836151cc565b925082615079576150786153aa565b5b828204905092915050565b600061508f826151cc565b915061509a836151cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150d3576150d261537b565b5b828202905092915050565b60006150e982615190565b91506150f483615190565b9250828210156151075761510661537b565b5b828203905092915050565b600061511d826151cc565b9150615128836151cc565b92508282101561513b5761513a61537b565b5b828203905092915050565b6000615151826151ac565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006151f58261520e565b9050919050565b6000615207826151cc565b9050919050565b600061521982615220565b9050919050565b600061522b826151ac565b9050919050565b82818337600083830152505050565b60005b8381101561525f578082015181840152602081019050615244565b8381111561526e576000848401525b50505050565b600061527f826151cc565b915060008214156152935761529261537b565b5b600182039050919050565b600060028204905060018216806152b657607f821691505b602082108114156152ca576152c96153d9565b5b50919050565b6152d982615484565b810181811067ffffffffffffffff821117156152f8576152f7615437565b5b80604052505050565b600061530c826151cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561533f5761533e61537b565b5b600182019050919050565b6000615355826151cc565b9150615360836151cc565b9250826153705761536f6153aa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f6d617820737570706c7920686173206265656e20726561636865640000000000600082015250565b7f6d6178203320706572207472616e73616374696f6e0000000000000000000000600082015250565b7f6d61782032302070657220616464726573730000000000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f6d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206574682073656e7400000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615c6481615146565b8114615c6f57600080fd5b50565b615c7b81615158565b8114615c8657600080fd5b50565b615c9281615164565b8114615c9d57600080fd5b50565b615ca9816151cc565b8114615cb457600080fd5b5056fea26469706673582212205069cb8956587fe13d2268cd0bfb5a76278aefa94d2b5f5883aa9959d3d5b82a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000115c
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 20
Arg [1] : collectionSize_ (uint256): 4444
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [1] : 000000000000000000000000000000000000000000000000000000000000115c
Deployed Bytecode Sourcemap
4708:4962:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:370:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7487:219:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5689:94:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7214:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6777:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2524:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9176:227:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4960:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8187:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3155:744:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6481:431:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8277:159:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4823:40:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5075:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4870:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2687:177:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7826:100:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7277:204;;;;;;;;;;;;;:::i;:::-;;5117:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5512:118:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4776:38:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5242:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4915:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7932:94;;;;;;;;;;;;;:::i;:::-;;4999:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4389:211:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:10;;;;;;;;;;;;;:::i;:::-;;5156:24:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5686:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1063:87:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8606:147:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5844:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5187:50:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6050:425;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7482:274:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8032:149:4;;;;;;;;;;;;;:::i;:::-;;9409:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6005:394:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8298:84:4;;;;;;;;;;;;;:::i;:::-;;12922:43:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6964:307:4;;;;;;;;;;;;;:::i;:::-;;8493:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5297:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7819:186:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4754:15:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8388:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1972:201:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3963:370:3;4090:4;4135:25;4120:40;;;:11;:40;;;;:99;;;;4186:33;4171:48;;;:11;:48;;;;4120:99;:160;;;;4245:35;4230:50;;;:11;:50;;;;4120:160;:207;;;;4291:36;4315:11;4291:23;:36::i;:::-;4120:207;4106:221;;3963:370;;;:::o;7487:219:4:-;7541:7;7693:6;7683:7;7659:15;:21;7675:4;7659:21;;;;;;;;;;;;;;;;7609:9;;7584:15;:21;7600:4;7584:21;;;;;;;;;;;;;;;;:34;;:70;;7645:9;;7584:70;;;7621:15;:21;7637:4;7621:21;;;;;;;;;;;;;;;;7584:70;7565:15;:90;;;;:::i;:::-;7564:116;;;;:::i;:::-;:126;;;;:::i;:::-;:135;;;;:::i;:::-;7557:143;;7487:219;;;:::o;5689:94:3:-;5743:13;5772:5;5765:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5689:94;:::o;7214:204::-;7282:7;7306:16;7314:7;7306;:16::i;:::-;7298:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7388:15;:24;7404:7;7388:24;;;;;;;;;;;;;;;;;;;;;7381:31;;7214:204;;;:::o;6777:379::-;6846:13;6862:24;6878:7;6862:15;:24::i;:::-;6846:40;;6907:5;6901:11;;:2;:11;;;;6893:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6992:5;6976:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7001:37;7018:5;7025:12;:10;:12::i;:::-;7001:16;:37::i;:::-;6976:62;6960:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7122:28;7131:2;7135:7;7144:5;7122:8;:28::i;:::-;6839:317;6777:379;;:::o;2524:94::-;2577:7;2600:12;;2593:19;;2524:94;:::o;9176:227:4:-;9264:23;9278:4;9284:2;9264:13;:23::i;:::-;9294:15;:21;9310:4;9294:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;9324:15;:19;9340:2;9324:19;;;;;;;;;;;;;;;;:21;;;;;;;;;:::i;:::-;;;;;;9358:39;9379:4;9385:2;9389:7;9358:20;:39::i;:::-;9176:227;;;:::o;4960:30::-;;;;;;;;;;;;;:::o;8187:105::-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8258:28:4::1;8277:8;8258:18;:28::i;:::-;8187:105:::0;:::o;3155:744:3:-;3264:7;3299:16;3309:5;3299:9;:16::i;:::-;3291:5;:24;3283:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3361:22;3386:13;:11;:13::i;:::-;3361:38;;3406:19;3436:25;3486:9;3481:350;3505:14;3501:1;:18;3481:350;;;3535:31;3569:11;:14;3581:1;3569:14;;;;;;;;;;;3535:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3622:1;3596:28;;:9;:14;;;:28;;;3592:89;;3657:9;:14;;;3637:34;;3592:89;3714:5;3693:26;;:17;:26;;;3689:135;;;3751:5;3736:11;:20;3732:59;;;3778:1;3771:8;;;;;;;;;3732:59;3801:13;;;;;:::i;:::-;;;;3689:135;3526:305;3521:3;;;;;:::i;:::-;;;;3481:350;;;;3837:56;;;;;;;;;;:::i;:::-;;;;;;;;3155:744;;;;;:::o;6481:431:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6577:1:4::1;6561:12;6550:8;:23;;;;:::i;:::-;:28;6542:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;6669:10;;6657:8;6641:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;6633:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6718:17;6749:12;6738:8;:23;;;;:::i;:::-;6718:43;;6799:8;6768:15;:27;6784:10;6768:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;6820:9;6815:92;6839:9;6835:1;:13;6815:92;;;6864:35;6874:10;6886:12;6864:9;:35::i;:::-;6850:3;;;;;:::i;:::-;;;;6815:92;;;;6535:377;6481:431:::0;:::o;8277:159:3:-;8391:39;8408:4;8414:2;8418:7;8391:39;;;;;;;;;;;;:16;:39::i;:::-;8277:159;;;:::o;4823:40:4:-;;;;:::o;5075:35::-;;;;:::o;4870:37::-;;;;:::o;2687:177:3:-;2754:7;2786:13;:11;:13::i;:::-;2778:5;:21;2770:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2853:5;2846:12;;2687:177;;;:::o;7826:100:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7913:7:4::1;;7897:13;:23;;;;;;;:::i;:::-;;7826:100:::0;;:::o;7277:204::-;7313:3;;;;;;;;;;;:8;;;7322:10;7359:14;:26;7374:10;7359:26;;;;;;;;;;;;;;;;7334:22;7345:10;7334;:22::i;:::-;:51;;;;:::i;:::-;7313:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7423:15;7393;:27;7409:10;7393:27;;;;;;;;;;;;;;;:45;;;;7474:1;7445:14;:26;7460:10;7445:26;;;;;;;;;;;;;;;:30;;;;7277:204::o;5117:32::-;;;;:::o;5512:118:3:-;5576:7;5599:20;5611:7;5599:11;:20::i;:::-;:25;;;5592:32;;5512:118;;;:::o;4776:38:4:-;;;:::o;5242:50::-;;;;;;;;;;;;;;;;;:::o;4915:38::-;;;;:::o;7932:94::-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8006:14:4::1;;;;;;;;;;;8005:15;7988:14;;:32;;;;;;;;;;;;;;;;;;7932:94::o:0;4999:34::-;;;;;;;;;;;;;:::o;4389:211:3:-;4453:7;4494:1;4477:19;;:5;:19;;;;4469:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4566:12;:19;4579:5;4566:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4558:36;;4551:43;;4389:211;;;:::o;1714:103:10:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;5156:24:4:-;;;;:::o;5686:358::-;5621:10;5608:23;;:9;:23;;;5600:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5759:10:::1;;;;;;;;;;;5751:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5835:13;;5823:8;5807:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;5799:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5907:21;;5895:8;:33;;5887:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5992:8;5961:15;:27;5977:10;5961:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;6007:31;6017:10;6029:8;6007:9;:31::i;:::-;5686:358:::0;:::o;1063:87:10:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;8606:147:4:-;8687:21;;:::i;:::-;8727:20;8739:7;8727:11;:20::i;:::-;8720:27;;8606:147;;;:::o;5844:98:3:-;5900:13;5929:7;5922:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5844:98;:::o;5187:50:4:-;;;;;;;;;;;;;;;;;:::o;6050:425::-;5621:10;5608:23;;:9;:23;;;5600:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6127:10:::1;;;;;;;;;;;6119:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6203:10;;6191:8;6175:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;6167:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6273:17;;6261:8;:29;;6252:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6353:8;6341:9;;:20;;;;:::i;:::-;6328:9;:33;;6320:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;6423:8;6392:15;:27;6408:10;6392:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;6438:31;6448:10;6460:8;6438:9;:31::i;:::-;6050:425:::0;:::o;7482:274:3:-;7585:12;:10;:12::i;:::-;7573:24;;:8;:24;;;;7565:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7682:8;7637:18;:32;7656:12;:10;:12::i;:::-;7637:32;;;;;;;;;;;;;;;:42;7670:8;7637:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7731:8;7702:48;;7717:12;:10;:12::i;:::-;7702:48;;;7741:8;7702:48;;;;;;:::i;:::-;;;;;;;;7482:274;;:::o;8032:149:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8115:1:4::1;8091:21;:25;8083:34;;;::::0;::::1;;8132:10;8124:28;;:51;8153:21;8124:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8032:149::o:0;9409:256::-;9520:23;9534:4;9540:2;9520:13;:23::i;:::-;9550:15;:21;9566:4;9550:21;;;;;;;;;;;;;;;;:23;;;;;;;;;:::i;:::-;;;;;;9580:15;:19;9596:2;9580:19;;;;;;;;;;;;;;;;:21;;;;;;;;;:::i;:::-;;;;;;9610:49;9635:4;9641:2;9645:7;9654:4;9610:24;:49::i;:::-;9409:256;;;;:::o;6005:394:3:-;6103:13;6144:16;6152:7;6144;:16::i;:::-;6128:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6234:21;6258:10;:8;:10::i;:::-;6234:34;;6313:1;6295:7;6289:21;:25;:104;;;;;;;;;;;;;;;;;6350:7;6359:18;:7;:16;:18::i;:::-;6333:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6289:104;6275:118;;;6005:394;;;:::o;8298:84:4:-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8366:10:4::1;;;;;;;;;;;8365:11;8352:10;;:24;;;;;;;;;;;;;;;;;;8298:84::o:0;12922:43:3:-;;;;:::o;6964:307:4:-;5621:10;5608:23;;:9;:23;;;5600:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;7040:14:::1;7024:13;:11;:13::i;:::-;:30;7016:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7093:3;;;;;;;;;;;:8;;;7102:10;7114:8;7093:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7160:22;7171:10;7160;:22::i;:::-;7130:14;:26;7145:10;7130:26;;;;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;;;;;7219:15;7189;:27;7205:10;7189:27;;;;;;;;;;;;;;;:45;;;;7241:24;7251:10;7263:1;7241:9;:24::i;:::-;6964:307::o:0;8493:107::-;8551:7;8574:20;8588:5;8574:13;:20::i;:::-;8567:27;;8493:107;;;:::o;5297:49::-;;;;;;;;;;;;;;;;;:::o;7819:186:3:-;7941:4;7964:18;:25;7983:5;7964:25;;;;;;;;;;;;;;;:35;7990:8;7964:35;;;;;;;;;;;;;;;;;;;;;;;;;7957:42;;7819:186;;;;:::o;4754:15:4:-;;;;;;;;;;;;;:::o;8388:99::-;1294:12:10;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8469:11:4::1;8458:3;;:23;;;;;;;;;;;;;;;;;;8388:99:::0;:::o;1972:201:10:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;9057:105:3:-;9114:4;9144:12;;9134:7;:22;9127:29;;9057:105;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;12744:172:3:-;12868:2;12841:15;:24;12857:7;12841:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12902:7;12898:2;12882:28;;12891:5;12882:28;;;;;;;;;;;;12744:172;;;:::o;8759:411:4:-;8858:4;8836:27;;:10;:27;;;8828:36;;;;;;8894:1;8878:18;;:4;:18;;;8875:143;;8936:16;8947:4;8936:10;:16::i;:::-;8912:14;:20;8927:4;8912:20;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;8991:15;8967;:21;8983:4;8967:21;;;;;;;;;;;;;;;:39;;;;8875:143;9045:1;9031:16;;:2;:16;;;9028:135;;9085:14;9096:2;9085:10;:14::i;:::-;9063;:18;9078:2;9063:18;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;9136:15;9114;:19;9130:2;9114:19;;;;;;;;;;;;;;;:37;;;;9028:135;8759:411;;:::o;8064:150:3:-;8180:28;8190:4;8196:2;8200:7;8180:9;:28::i;:::-;8064:150;;;:::o;13070:846::-;13132:25;13160:24;;13132:52;;13210:1;13199:8;:12;13191:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;13247:16;13297:1;13286:8;13266:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;13247:51;;13337:1;13320:14;:18;;;;:::i;:::-;13309:8;:29;13305:81;;;13377:1;13360:14;:18;;;;:::i;:::-;13349:29;;13305:81;13501:17;13509:8;13501:7;:17::i;:::-;13493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13573:9;13585:17;13573:29;;13568:297;13609:8;13604:1;:13;13568:297;;13668:1;13637:33;;:11;:14;13649:1;13637:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13633:225;;;13683:31;13717:14;13729:1;13717:11;:14::i;:::-;13683:48;;13759:89;;;;;;;;13786:9;:14;;;13759:89;;;;;;13813:9;:24;;;13759:89;;;;;13742:11;:14;13754:1;13742:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13672:186;13633:225;13619:3;;;;;:::i;:::-;;;;13568:297;;;;13909:1;13898:8;:12;;;;:::i;:::-;13871:24;:39;;;;13125:791;;13070:846;:::o;9168:98::-;9233:27;9243:2;9247:8;9233:27;;;;;;;;;;;;:9;:27::i;:::-;9168:98;;:::o;4852:606::-;4928:21;;:::i;:::-;4969:16;4977:7;4969;:16::i;:::-;4961:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5041:26;5089:12;5078:7;:23;5074:93;;5158:1;5143:12;5133:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5112:47;;5074:93;5180:12;5195:7;5180:22;;5175:212;5212:18;5204:4;:26;5175:212;;5249:31;5283:11;:17;5295:4;5283:17;;;;;;;;;;;5249:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5339:1;5313:28;;:9;:14;;;:28;;;5309:71;;5361:9;5354:16;;;;;;;5309:71;5240:147;5232:6;;;;;:::i;:::-;;;;5175:212;;;;5395:57;;;;;;;;;;:::i;:::-;;;;;;;;4852:606;;;;:::o;2333:191:10:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;8499:319:3:-;8644:28;8654:4;8660:2;8664:7;8644:9;:28::i;:::-;8695:48;8718:4;8724:2;8728:7;8737:5;8695:22;:48::i;:::-;8679:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8499:319;;;;:::o;7712:108:4:-;7772:13;7801;7794:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7712:108;:::o;342:723:11:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;4606:240:3:-;4667:7;4716:1;4699:19;;:5;:19;;;;4683:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4807:12;:19;4820:5;4807:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4799:41;;4792:48;;4606:240;;;:::o;11109:1529::-;11206:35;11244:20;11256:7;11244:11;:20::i;:::-;11206:58;;11273:22;11315:13;:18;;;11299:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11368:12;:10;:12::i;:::-;11344:36;;:20;11356:7;11344:11;:20::i;:::-;:36;;;11299:81;:142;;;;11391:50;11408:13;:18;;;11428:12;:10;:12::i;:::-;11391:16;:50::i;:::-;11299:142;11273:169;;11467:17;11451:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;11599:4;11577:26;;:13;:18;;;:26;;;11561:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11688:1;11674:16;;:2;:16;;;;11666:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11741:43;11763:4;11769:2;11773:7;11782:1;11741:21;:43::i;:::-;11841:49;11858:1;11862:7;11871:13;:18;;;11841:8;:49::i;:::-;11929:1;11899:12;:18;11912:4;11899:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11965:1;11937:12;:16;11950:2;11937:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11996:43;;;;;;;;12011:2;11996:43;;;;;;12022:15;11996:43;;;;;11973:11;:20;11985:7;11973:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12267:19;12299:1;12289:7;:11;;;;:::i;:::-;12267:33;;12352:1;12311:43;;:11;:24;12323:11;12311:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12307:236;;;12369:20;12377:11;12369:7;:20::i;:::-;12365:171;;;12429:97;;;;;;;;12456:13;:18;;;12429:97;;;;;;12487:13;:28;;;12429:97;;;;;12402:11;:24;12414:11;12402:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12365:171;12307:236;12575:7;12571:2;12556:27;;12565:4;12556:27;;;;;;;;;;;;12590:42;12611:4;12617:2;12621:7;12630:1;12590:20;:42::i;:::-;11199:1439;;;11109:1529;;;:::o;9605:1272::-;9710:20;9733:12;;9710:35;;9774:1;9760:16;;:2;:16;;;;9752:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9951:21;9959:12;9951:7;:21::i;:::-;9950:22;9942:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10033:12;10021:8;:24;;10013:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10093:61;10123:1;10127:2;10131:12;10145:8;10093:21;:61::i;:::-;10163:30;10196:12;:16;10209:2;10196:16;;;;;;;;;;;;;;;10163:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10238:119;;;;;;;;10288:8;10258:11;:19;;;:39;;;;:::i;:::-;10238:119;;;;;;10341:8;10306:11;:24;;;:44;;;;:::i;:::-;10238:119;;;;;10219:12;:16;10232:2;10219:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10392:43;;;;;;;;10407:2;10392:43;;;;;;10418:15;10392:43;;;;;10364:11;:25;10376:12;10364:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10444:20;10467:12;10444:35;;10493:9;10488:281;10512:8;10508:1;:12;10488:281;;;10566:12;10562:2;10541:38;;10558:1;10541:38;;;;;;;;;;;;10606:59;10637:1;10641:2;10645:12;10659:5;10606:22;:59::i;:::-;10588:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;10747:14;;;;;:::i;:::-;;;;10522:3;;;;;:::i;:::-;;;;10488:281;;;;10792:12;10777;:27;;;;10811:60;10840:1;10844:2;10848:12;10862:8;10811:20;:60::i;:::-;9703:1174;;;9605:1272;;;:::o;14459:690::-;14596:4;14613:15;:2;:13;;;:15::i;:::-;14609:535;;;14668:2;14652:36;;;14689:12;:10;:12::i;:::-;14703:4;14709:7;14718:5;14652:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14639:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14900:1;14883:6;:13;:18;14879:215;;;14916:61;;;;;;;;;;:::i;:::-;;;;;;;;14879:215;15062:6;15056:13;15047:6;15043:2;15039:15;15032:38;14639:464;14784:45;;;14774:55;;;:6;:55;;;;14767:62;;;;;14609:535;15132:4;15125:11;;14459:690;;;;;;;:::o;15611:141::-;;;;;:::o;16138:140::-;;;;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:12:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:108::-;7050:24;7068:5;7050:24;:::i;:::-;7045:3;7038:37;6973:108;;:::o;7087:118::-;7174:24;7192:5;7174:24;:::i;:::-;7169:3;7162:37;7087:118;;:::o;7211:109::-;7292:21;7307:5;7292:21;:::i;:::-;7287:3;7280:34;7211:109;;:::o;7326:360::-;7412:3;7440:38;7472:5;7440:38;:::i;:::-;7494:70;7557:6;7552:3;7494:70;:::i;:::-;7487:77;;7573:52;7618:6;7613:3;7606:4;7599:5;7595:16;7573:52;:::i;:::-;7650:29;7672:6;7650:29;:::i;:::-;7645:3;7641:39;7634:46;;7416:270;7326:360;;;;:::o;7692:157::-;7792:50;7836:5;7792:50;:::i;:::-;7787:3;7780:63;7692:157;;:::o;7855:185::-;7969:64;8027:5;7969:64;:::i;:::-;7964:3;7957:77;7855:185;;:::o;8046:364::-;8134:3;8162:39;8195:5;8162:39;:::i;:::-;8217:71;8281:6;8276:3;8217:71;:::i;:::-;8210:78;;8297:52;8342:6;8337:3;8330:4;8323:5;8319:16;8297:52;:::i;:::-;8374:29;8396:6;8374:29;:::i;:::-;8369:3;8365:39;8358:46;;8138:272;8046:364;;;;:::o;8416:377::-;8522:3;8550:39;8583:5;8550:39;:::i;:::-;8605:89;8687:6;8682:3;8605:89;:::i;:::-;8598:96;;8703:52;8748:6;8743:3;8736:4;8729:5;8725:16;8703:52;:::i;:::-;8780:6;8775:3;8771:16;8764:23;;8526:267;8416:377;;;;:::o;8799:366::-;8941:3;8962:67;9026:2;9021:3;8962:67;:::i;:::-;8955:74;;9038:93;9127:3;9038:93;:::i;:::-;9156:2;9151:3;9147:12;9140:19;;8799:366;;;:::o;9171:::-;9313:3;9334:67;9398:2;9393:3;9334:67;:::i;:::-;9327:74;;9410:93;9499:3;9410:93;:::i;:::-;9528:2;9523:3;9519:12;9512:19;;9171:366;;;:::o;9543:::-;9685:3;9706:67;9770:2;9765:3;9706:67;:::i;:::-;9699:74;;9782:93;9871:3;9782:93;:::i;:::-;9900:2;9895:3;9891:12;9884:19;;9543:366;;;:::o;9915:::-;10057:3;10078:67;10142:2;10137:3;10078:67;:::i;:::-;10071:74;;10154:93;10243:3;10154:93;:::i;:::-;10272:2;10267:3;10263:12;10256:19;;9915:366;;;:::o;10287:::-;10429:3;10450:67;10514:2;10509:3;10450:67;:::i;:::-;10443:74;;10526:93;10615:3;10526:93;:::i;:::-;10644:2;10639:3;10635:12;10628:19;;10287:366;;;:::o;10659:::-;10801:3;10822:67;10886:2;10881:3;10822:67;:::i;:::-;10815:74;;10898:93;10987:3;10898:93;:::i;:::-;11016:2;11011:3;11007:12;11000:19;;10659:366;;;:::o;11031:::-;11173:3;11194:67;11258:2;11253:3;11194:67;:::i;:::-;11187:74;;11270:93;11359:3;11270:93;:::i;:::-;11388:2;11383:3;11379:12;11372:19;;11031:366;;;:::o;11403:::-;11545:3;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11642:93;11731:3;11642:93;:::i;:::-;11760:2;11755:3;11751:12;11744:19;;11403:366;;;:::o;11775:::-;11917:3;11938:67;12002:2;11997:3;11938:67;:::i;:::-;11931:74;;12014:93;12103:3;12014:93;:::i;:::-;12132:2;12127:3;12123:12;12116:19;;11775:366;;;:::o;12147:::-;12289:3;12310:67;12374:2;12369:3;12310:67;:::i;:::-;12303:74;;12386:93;12475:3;12386:93;:::i;:::-;12504:2;12499:3;12495:12;12488:19;;12147:366;;;:::o;12519:::-;12661:3;12682:67;12746:2;12741:3;12682:67;:::i;:::-;12675:74;;12758:93;12847:3;12758:93;:::i;:::-;12876:2;12871:3;12867:12;12860:19;;12519:366;;;:::o;12891:::-;13033:3;13054:67;13118:2;13113:3;13054:67;:::i;:::-;13047:74;;13130:93;13219:3;13130:93;:::i;:::-;13248:2;13243:3;13239:12;13232:19;;12891:366;;;:::o;13263:::-;13405:3;13426:67;13490:2;13485:3;13426:67;:::i;:::-;13419:74;;13502:93;13591:3;13502:93;:::i;:::-;13620:2;13615:3;13611:12;13604:19;;13263:366;;;:::o;13635:::-;13777:3;13798:67;13862:2;13857:3;13798:67;:::i;:::-;13791:74;;13874:93;13963:3;13874:93;:::i;:::-;13992:2;13987:3;13983:12;13976:19;;13635:366;;;:::o;14007:::-;14149:3;14170:67;14234:2;14229:3;14170:67;:::i;:::-;14163:74;;14246:93;14335:3;14246:93;:::i;:::-;14364:2;14359:3;14355:12;14348:19;;14007:366;;;:::o;14379:::-;14521:3;14542:67;14606:2;14601:3;14542:67;:::i;:::-;14535:74;;14618:93;14707:3;14618:93;:::i;:::-;14736:2;14731:3;14727:12;14720:19;;14379:366;;;:::o;14751:::-;14893:3;14914:67;14978:2;14973:3;14914:67;:::i;:::-;14907:74;;14990:93;15079:3;14990:93;:::i;:::-;15108:2;15103:3;15099:12;15092:19;;14751:366;;;:::o;15123:::-;15265:3;15286:67;15350:2;15345:3;15286:67;:::i;:::-;15279:74;;15362:93;15451:3;15362:93;:::i;:::-;15480:2;15475:3;15471:12;15464:19;;15123:366;;;:::o;15495:::-;15637:3;15658:67;15722:2;15717:3;15658:67;:::i;:::-;15651:74;;15734:93;15823:3;15734:93;:::i;:::-;15852:2;15847:3;15843:12;15836:19;;15495:366;;;:::o;15867:::-;16009:3;16030:67;16094:2;16089:3;16030:67;:::i;:::-;16023:74;;16106:93;16195:3;16106:93;:::i;:::-;16224:2;16219:3;16215:12;16208:19;;15867:366;;;:::o;16239:::-;16381:3;16402:67;16466:2;16461:3;16402:67;:::i;:::-;16395:74;;16478:93;16567:3;16478:93;:::i;:::-;16596:2;16591:3;16587:12;16580:19;;16239:366;;;:::o;16611:::-;16753:3;16774:67;16838:2;16833:3;16774:67;:::i;:::-;16767:74;;16850:93;16939:3;16850:93;:::i;:::-;16968:2;16963:3;16959:12;16952:19;;16611:366;;;:::o;16983:::-;17125:3;17146:67;17210:2;17205:3;17146:67;:::i;:::-;17139:74;;17222:93;17311:3;17222:93;:::i;:::-;17340:2;17335:3;17331:12;17324:19;;16983:366;;;:::o;17355:::-;17497:3;17518:67;17582:2;17577:3;17518:67;:::i;:::-;17511:74;;17594:93;17683:3;17594:93;:::i;:::-;17712:2;17707:3;17703:12;17696:19;;17355:366;;;:::o;17727:::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:::-;18241:3;18262:67;18326:2;18321:3;18262:67;:::i;:::-;18255:74;;18338:93;18427:3;18338:93;:::i;:::-;18456:2;18451:3;18447:12;18440:19;;18099:366;;;:::o;18471:::-;18613:3;18634:67;18698:2;18693:3;18634:67;:::i;:::-;18627:74;;18710:93;18799:3;18710:93;:::i;:::-;18828:2;18823:3;18819:12;18812:19;;18471:366;;;:::o;18843:::-;18985:3;19006:67;19070:2;19065:3;19006:67;:::i;:::-;18999:74;;19082:93;19171:3;19082:93;:::i;:::-;19200:2;19195:3;19191:12;19184:19;;18843:366;;;:::o;19215:::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:::-;19729:3;19750:67;19814:2;19809:3;19750:67;:::i;:::-;19743:74;;19826:93;19915:3;19826:93;:::i;:::-;19944:2;19939:3;19935:12;19928:19;;19587:366;;;:::o;20029:527::-;20188:4;20183:3;20179:14;20275:4;20268:5;20264:16;20258:23;20294:63;20351:4;20346:3;20342:14;20328:12;20294:63;:::i;:::-;20203:164;20459:4;20452:5;20448:16;20442:23;20478:61;20533:4;20528:3;20524:14;20510:12;20478:61;:::i;:::-;20377:172;20157:399;20029:527;;:::o;20562:118::-;20649:24;20667:5;20649:24;:::i;:::-;20644:3;20637:37;20562:118;;:::o;20686:105::-;20761:23;20778:5;20761:23;:::i;:::-;20756:3;20749:36;20686:105;;:::o;20797:435::-;20977:3;20999:95;21090:3;21081:6;20999:95;:::i;:::-;20992:102;;21111:95;21202:3;21193:6;21111:95;:::i;:::-;21104:102;;21223:3;21216:10;;20797:435;;;;;:::o;21238:222::-;21331:4;21369:2;21358:9;21354:18;21346:26;;21382:71;21450:1;21439:9;21435:17;21426:6;21382:71;:::i;:::-;21238:222;;;;:::o;21466:640::-;21661:4;21699:3;21688:9;21684:19;21676:27;;21713:71;21781:1;21770:9;21766:17;21757:6;21713:71;:::i;:::-;21794:72;21862:2;21851:9;21847:18;21838:6;21794:72;:::i;:::-;21876;21944:2;21933:9;21929:18;21920:6;21876:72;:::i;:::-;21995:9;21989:4;21985:20;21980:2;21969:9;21965:18;21958:48;22023:76;22094:4;22085:6;22023:76;:::i;:::-;22015:84;;21466:640;;;;;;;:::o;22112:386::-;22260:4;22298:2;22287:9;22283:18;22275:26;;22311:71;22379:1;22368:9;22364:17;22355:6;22311:71;:::i;:::-;22392:99;22487:2;22476:9;22472:18;22463:6;22392:99;:::i;:::-;22112:386;;;;;:::o;22504:332::-;22625:4;22663:2;22652:9;22648:18;22640:26;;22676:71;22744:1;22733:9;22729:17;22720:6;22676:71;:::i;:::-;22757:72;22825:2;22814:9;22810:18;22801:6;22757:72;:::i;:::-;22504:332;;;;;:::o;22842:210::-;22929:4;22967:2;22956:9;22952:18;22944:26;;22980:65;23042:1;23031:9;23027:17;23018:6;22980:65;:::i;:::-;22842:210;;;;:::o;23058:248::-;23164:4;23202:2;23191:9;23187:18;23179:26;;23215:84;23296:1;23285:9;23281:17;23272:6;23215:84;:::i;:::-;23058:248;;;;:::o;23312:313::-;23425:4;23463:2;23452:9;23448:18;23440:26;;23512:9;23506:4;23502:20;23498:1;23487:9;23483:17;23476:47;23540:78;23613:4;23604:6;23540:78;:::i;:::-;23532:86;;23312:313;;;;:::o;23631:419::-;23797:4;23835:2;23824:9;23820:18;23812:26;;23884:9;23878:4;23874:20;23870:1;23859:9;23855:17;23848:47;23912:131;24038:4;23912:131;:::i;:::-;23904:139;;23631:419;;;:::o;24056:::-;24222:4;24260:2;24249:9;24245:18;24237:26;;24309:9;24303:4;24299:20;24295:1;24284:9;24280:17;24273:47;24337:131;24463:4;24337:131;:::i;:::-;24329:139;;24056:419;;;:::o;24481:::-;24647:4;24685:2;24674:9;24670:18;24662:26;;24734:9;24728:4;24724:20;24720:1;24709:9;24705:17;24698:47;24762:131;24888:4;24762:131;:::i;:::-;24754:139;;24481:419;;;:::o;24906:::-;25072:4;25110:2;25099:9;25095:18;25087:26;;25159:9;25153:4;25149:20;25145:1;25134:9;25130:17;25123:47;25187:131;25313:4;25187:131;:::i;:::-;25179:139;;24906:419;;;:::o;25331:::-;25497:4;25535:2;25524:9;25520:18;25512:26;;25584:9;25578:4;25574:20;25570:1;25559:9;25555:17;25548:47;25612:131;25738:4;25612:131;:::i;:::-;25604:139;;25331:419;;;:::o;25756:::-;25922:4;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25756:419;;;:::o;26181:::-;26347:4;26385:2;26374:9;26370:18;26362:26;;26434:9;26428:4;26424:20;26420:1;26409:9;26405:17;26398:47;26462:131;26588:4;26462:131;:::i;:::-;26454:139;;26181:419;;;:::o;26606:::-;26772:4;26810:2;26799:9;26795:18;26787:26;;26859:9;26853:4;26849:20;26845:1;26834:9;26830:17;26823:47;26887:131;27013:4;26887:131;:::i;:::-;26879:139;;26606:419;;;:::o;27031:::-;27197:4;27235:2;27224:9;27220:18;27212:26;;27284:9;27278:4;27274:20;27270:1;27259:9;27255:17;27248:47;27312:131;27438:4;27312:131;:::i;:::-;27304:139;;27031:419;;;:::o;27456:::-;27622:4;27660:2;27649:9;27645:18;27637:26;;27709:9;27703:4;27699:20;27695:1;27684:9;27680:17;27673:47;27737:131;27863:4;27737:131;:::i;:::-;27729:139;;27456:419;;;:::o;27881:::-;28047:4;28085:2;28074:9;28070:18;28062:26;;28134:9;28128:4;28124:20;28120:1;28109:9;28105:17;28098:47;28162:131;28288:4;28162:131;:::i;:::-;28154:139;;27881:419;;;:::o;28306:::-;28472:4;28510:2;28499:9;28495:18;28487:26;;28559:9;28553:4;28549:20;28545:1;28534:9;28530:17;28523:47;28587:131;28713:4;28587:131;:::i;:::-;28579:139;;28306:419;;;:::o;28731:::-;28897:4;28935:2;28924:9;28920:18;28912:26;;28984:9;28978:4;28974:20;28970:1;28959:9;28955:17;28948:47;29012:131;29138:4;29012:131;:::i;:::-;29004:139;;28731:419;;;:::o;29156:::-;29322:4;29360:2;29349:9;29345:18;29337:26;;29409:9;29403:4;29399:20;29395:1;29384:9;29380:17;29373:47;29437:131;29563:4;29437:131;:::i;:::-;29429:139;;29156:419;;;:::o;29581:::-;29747:4;29785:2;29774:9;29770:18;29762:26;;29834:9;29828:4;29824:20;29820:1;29809:9;29805:17;29798:47;29862:131;29988:4;29862:131;:::i;:::-;29854:139;;29581:419;;;:::o;30006:::-;30172:4;30210:2;30199:9;30195:18;30187:26;;30259:9;30253:4;30249:20;30245:1;30234:9;30230:17;30223:47;30287:131;30413:4;30287:131;:::i;:::-;30279:139;;30006:419;;;:::o;30431:::-;30597:4;30635:2;30624:9;30620:18;30612:26;;30684:9;30678:4;30674:20;30670:1;30659:9;30655:17;30648:47;30712:131;30838:4;30712:131;:::i;:::-;30704:139;;30431:419;;;:::o;30856:::-;31022:4;31060:2;31049:9;31045:18;31037:26;;31109:9;31103:4;31099:20;31095:1;31084:9;31080:17;31073:47;31137:131;31263:4;31137:131;:::i;:::-;31129:139;;30856:419;;;:::o;31281:::-;31447:4;31485:2;31474:9;31470:18;31462:26;;31534:9;31528:4;31524:20;31520:1;31509:9;31505:17;31498:47;31562:131;31688:4;31562:131;:::i;:::-;31554:139;;31281:419;;;:::o;31706:::-;31872:4;31910:2;31899:9;31895:18;31887:26;;31959:9;31953:4;31949:20;31945:1;31934:9;31930:17;31923:47;31987:131;32113:4;31987:131;:::i;:::-;31979:139;;31706:419;;;:::o;32131:::-;32297:4;32335:2;32324:9;32320:18;32312:26;;32384:9;32378:4;32374:20;32370:1;32359:9;32355:17;32348:47;32412:131;32538:4;32412:131;:::i;:::-;32404:139;;32131:419;;;:::o;32556:::-;32722:4;32760:2;32749:9;32745:18;32737:26;;32809:9;32803:4;32799:20;32795:1;32784:9;32780:17;32773:47;32837:131;32963:4;32837:131;:::i;:::-;32829:139;;32556:419;;;:::o;32981:::-;33147:4;33185:2;33174:9;33170:18;33162:26;;33234:9;33228:4;33224:20;33220:1;33209:9;33205:17;33198:47;33262:131;33388:4;33262:131;:::i;:::-;33254:139;;32981:419;;;:::o;33406:::-;33572:4;33610:2;33599:9;33595:18;33587:26;;33659:9;33653:4;33649:20;33645:1;33634:9;33630:17;33623:47;33687:131;33813:4;33687:131;:::i;:::-;33679:139;;33406:419;;;:::o;33831:::-;33997:4;34035:2;34024:9;34020:18;34012:26;;34084:9;34078:4;34074:20;34070:1;34059:9;34055:17;34048:47;34112:131;34238:4;34112:131;:::i;:::-;34104:139;;33831:419;;;:::o;34256:::-;34422:4;34460:2;34449:9;34445:18;34437:26;;34509:9;34503:4;34499:20;34495:1;34484:9;34480:17;34473:47;34537:131;34663:4;34537:131;:::i;:::-;34529:139;;34256:419;;;:::o;34681:::-;34847:4;34885:2;34874:9;34870:18;34862:26;;34934:9;34928:4;34924:20;34920:1;34909:9;34905:17;34898:47;34962:131;35088:4;34962:131;:::i;:::-;34954:139;;34681:419;;;:::o;35106:::-;35272:4;35310:2;35299:9;35295:18;35287:26;;35359:9;35353:4;35349:20;35345:1;35334:9;35330:17;35323:47;35387:131;35513:4;35387:131;:::i;:::-;35379:139;;35106:419;;;:::o;35531:::-;35697:4;35735:2;35724:9;35720:18;35712:26;;35784:9;35778:4;35774:20;35770:1;35759:9;35755:17;35748:47;35812:131;35938:4;35812:131;:::i;:::-;35804:139;;35531:419;;;:::o;35956:::-;36122:4;36160:2;36149:9;36145:18;36137:26;;36209:9;36203:4;36199:20;36195:1;36184:9;36180:17;36173:47;36237:131;36363:4;36237:131;:::i;:::-;36229:139;;35956:419;;;:::o;36381:346::-;36536:4;36574:2;36563:9;36559:18;36551:26;;36587:133;36717:1;36706:9;36702:17;36693:6;36587:133;:::i;:::-;36381:346;;;;:::o;36733:222::-;36826:4;36864:2;36853:9;36849:18;36841:26;;36877:71;36945:1;36934:9;36930:17;36921:6;36877:71;:::i;:::-;36733:222;;;;:::o;36961:129::-;36995:6;37022:20;;:::i;:::-;37012:30;;37051:33;37079:4;37071:6;37051:33;:::i;:::-;36961:129;;;:::o;37096:75::-;37129:6;37162:2;37156:9;37146:19;;37096:75;:::o;37177:307::-;37238:4;37328:18;37320:6;37317:30;37314:56;;;37350:18;;:::i;:::-;37314:56;37388:29;37410:6;37388:29;:::i;:::-;37380:37;;37472:4;37466;37462:15;37454:23;;37177:307;;;:::o;37490:98::-;37541:6;37575:5;37569:12;37559:22;;37490:98;;;:::o;37594:99::-;37646:6;37680:5;37674:12;37664:22;;37594:99;;;:::o;37699:168::-;37782:11;37816:6;37811:3;37804:19;37856:4;37851:3;37847:14;37832:29;;37699:168;;;;:::o;37873:169::-;37957:11;37991:6;37986:3;37979:19;38031:4;38026:3;38022:14;38007:29;;37873:169;;;;:::o;38048:148::-;38150:11;38187:3;38172:18;;38048:148;;;;:::o;38202:273::-;38242:3;38261:20;38279:1;38261:20;:::i;:::-;38256:25;;38295:20;38313:1;38295:20;:::i;:::-;38290:25;;38417:1;38381:34;38377:42;38374:1;38371:49;38368:75;;;38423:18;;:::i;:::-;38368:75;38467:1;38464;38460:9;38453:16;;38202:273;;;;:::o;38481:305::-;38521:3;38540:20;38558:1;38540:20;:::i;:::-;38535:25;;38574:20;38592:1;38574:20;:::i;:::-;38569:25;;38728:1;38660:66;38656:74;38653:1;38650:81;38647:107;;;38734:18;;:::i;:::-;38647:107;38778:1;38775;38771:9;38764:16;;38481:305;;;;:::o;38792:185::-;38832:1;38849:20;38867:1;38849:20;:::i;:::-;38844:25;;38883:20;38901:1;38883:20;:::i;:::-;38878:25;;38922:1;38912:35;;38927:18;;:::i;:::-;38912:35;38969:1;38966;38962:9;38957:14;;38792:185;;;;:::o;38983:348::-;39023:7;39046:20;39064:1;39046:20;:::i;:::-;39041:25;;39080:20;39098:1;39080:20;:::i;:::-;39075:25;;39268:1;39200:66;39196:74;39193:1;39190:81;39185:1;39178:9;39171:17;39167:105;39164:131;;;39275:18;;:::i;:::-;39164:131;39323:1;39320;39316:9;39305:20;;38983:348;;;;:::o;39337:191::-;39377:4;39397:20;39415:1;39397:20;:::i;:::-;39392:25;;39431:20;39449:1;39431:20;:::i;:::-;39426:25;;39470:1;39467;39464:8;39461:34;;;39475:18;;:::i;:::-;39461:34;39520:1;39517;39513:9;39505:17;;39337:191;;;;:::o;39534:::-;39574:4;39594:20;39612:1;39594:20;:::i;:::-;39589:25;;39628:20;39646:1;39628:20;:::i;:::-;39623:25;;39667:1;39664;39661:8;39658:34;;;39672:18;;:::i;:::-;39658:34;39717:1;39714;39710:9;39702:17;;39534:191;;;;:::o;39731:96::-;39768:7;39797:24;39815:5;39797:24;:::i;:::-;39786:35;;39731:96;;;:::o;39833:90::-;39867:7;39910:5;39903:13;39896:21;39885:32;;39833:90;;;:::o;39929:149::-;39965:7;40005:66;39998:5;39994:78;39983:89;;39929:149;;;:::o;40084:118::-;40121:7;40161:34;40154:5;40150:46;40139:57;;40084:118;;;:::o;40208:126::-;40245:7;40285:42;40278:5;40274:54;40263:65;;40208:126;;;:::o;40340:77::-;40377:7;40406:5;40395:16;;40340:77;;;:::o;40423:101::-;40459:7;40499:18;40492:5;40488:30;40477:41;;40423:101;;;:::o;40530:139::-;40593:9;40626:37;40657:5;40626:37;:::i;:::-;40613:50;;40530:139;;;:::o;40675:140::-;40752:9;40785:24;40803:5;40785:24;:::i;:::-;40772:37;;40675:140;;;:::o;40821:126::-;40871:9;40904:37;40935:5;40904:37;:::i;:::-;40891:50;;40821:126;;;:::o;40953:113::-;41003:9;41036:24;41054:5;41036:24;:::i;:::-;41023:37;;40953:113;;;:::o;41072:154::-;41156:6;41151:3;41146;41133:30;41218:1;41209:6;41204:3;41200:16;41193:27;41072:154;;;:::o;41232:307::-;41300:1;41310:113;41324:6;41321:1;41318:13;41310:113;;;41409:1;41404:3;41400:11;41394:18;41390:1;41385:3;41381:11;41374:39;41346:2;41343:1;41339:10;41334:15;;41310:113;;;41441:6;41438:1;41435:13;41432:101;;;41521:1;41512:6;41507:3;41503:16;41496:27;41432:101;41281:258;41232:307;;;:::o;41545:171::-;41584:3;41607:24;41625:5;41607:24;:::i;:::-;41598:33;;41653:4;41646:5;41643:15;41640:41;;;41661:18;;:::i;:::-;41640:41;41708:1;41701:5;41697:13;41690:20;;41545:171;;;:::o;41722:320::-;41766:6;41803:1;41797:4;41793:12;41783:22;;41850:1;41844:4;41840:12;41871:18;41861:81;;41927:4;41919:6;41915:17;41905:27;;41861:81;41989:2;41981:6;41978:14;41958:18;41955:38;41952:84;;;42008:18;;:::i;:::-;41952:84;41773:269;41722:320;;;:::o;42048:281::-;42131:27;42153:4;42131:27;:::i;:::-;42123:6;42119:40;42261:6;42249:10;42246:22;42225:18;42213:10;42210:34;42207:62;42204:88;;;42272:18;;:::i;:::-;42204:88;42312:10;42308:2;42301:22;42091:238;42048:281;;:::o;42335:233::-;42374:3;42397:24;42415:5;42397:24;:::i;:::-;42388:33;;42443:66;42436:5;42433:77;42430:103;;;42513:18;;:::i;:::-;42430:103;42560:1;42553:5;42549:13;42542:20;;42335:233;;;:::o;42574:176::-;42606:1;42623:20;42641:1;42623:20;:::i;:::-;42618:25;;42657:20;42675:1;42657:20;:::i;:::-;42652:25;;42696:1;42686:35;;42701:18;;:::i;:::-;42686:35;42742:1;42739;42735:9;42730:14;;42574:176;;;;:::o;42756:180::-;42804:77;42801:1;42794:88;42901:4;42898:1;42891:15;42925:4;42922:1;42915:15;42942:180;42990:77;42987:1;42980:88;43087:4;43084:1;43077:15;43111:4;43108:1;43101:15;43128:180;43176:77;43173:1;43166:88;43273:4;43270:1;43263:15;43297:4;43294:1;43287:15;43314:180;43362:77;43359:1;43352:88;43459:4;43456:1;43449:15;43483:4;43480:1;43473:15;43500:180;43548:77;43545:1;43538:88;43645:4;43642:1;43635:15;43669:4;43666:1;43659:15;43686:117;43795:1;43792;43785:12;43809:117;43918:1;43915;43908:12;43932:117;44041:1;44038;44031:12;44055:117;44164:1;44161;44154:12;44178:117;44287:1;44284;44277:12;44301:117;44410:1;44407;44400:12;44424:102;44465:6;44516:2;44512:7;44507:2;44500:5;44496:14;44492:28;44482:38;;44424:102;;;:::o;44532:221::-;44672:34;44668:1;44660:6;44656:14;44649:58;44741:4;44736:2;44728:6;44724:15;44717:29;44532:221;:::o;44759:225::-;44899:34;44895:1;44887:6;44883:14;44876:58;44968:8;44963:2;44955:6;44951:15;44944:33;44759:225;:::o;44990:229::-;45130:34;45126:1;45118:6;45114:14;45107:58;45199:12;45194:2;45186:6;45182:15;45175:37;44990:229;:::o;45225:231::-;45365:34;45361:1;45353:6;45349:14;45342:58;45434:14;45429:2;45421:6;45417:15;45410:39;45225:231;:::o;45462:222::-;45602:34;45598:1;45590:6;45586:14;45579:58;45671:5;45666:2;45658:6;45654:15;45647:30;45462:222;:::o;45690:224::-;45830:34;45826:1;45818:6;45814:14;45807:58;45899:7;45894:2;45886:6;45882:15;45875:32;45690:224;:::o;45920:236::-;46060:34;46056:1;46048:6;46044:14;46037:58;46129:19;46124:2;46116:6;46112:15;46105:44;45920:236;:::o;46162:180::-;46302:32;46298:1;46290:6;46286:14;46279:56;46162:180;:::o;46348:244::-;46488:34;46484:1;46476:6;46472:14;46465:58;46557:27;46552:2;46544:6;46540:15;46533:52;46348:244;:::o;46598:174::-;46738:26;46734:1;46726:6;46722:14;46715:50;46598:174;:::o;46778:177::-;46918:29;46914:1;46906:6;46902:14;46895:53;46778:177;:::o;46961:171::-;47101:23;47097:1;47089:6;47085:14;47078:47;46961:171;:::o;47138:168::-;47278:20;47274:1;47266:6;47262:14;47255:44;47138:168;:::o;47312:230::-;47452:34;47448:1;47440:6;47436:14;47429:58;47521:13;47516:2;47508:6;47504:15;47497:38;47312:230;:::o;47548:225::-;47688:34;47684:1;47676:6;47672:14;47665:58;47757:8;47752:2;47744:6;47740:15;47733:33;47548:225;:::o;47779:182::-;47919:34;47915:1;47907:6;47903:14;47896:58;47779:182;:::o;47967:234::-;48107:34;48103:1;48095:6;48091:14;48084:58;48176:17;48171:2;48163:6;48159:15;48152:42;47967:234;:::o;48207:176::-;48347:28;48343:1;48335:6;48331:14;48324:52;48207:176;:::o;48389:237::-;48529:34;48525:1;48517:6;48513:14;48506:58;48598:20;48593:2;48585:6;48581:15;48574:45;48389:237;:::o;48632:168::-;48772:20;48768:1;48760:6;48756:14;48749:44;48632:168;:::o;48806:221::-;48946:34;48942:1;48934:6;48930:14;48923:58;49015:4;49010:2;49002:6;48998:15;48991:29;48806:221;:::o;49033:238::-;49173:34;49169:1;49161:6;49157:14;49150:58;49242:21;49237:2;49229:6;49225:15;49218:46;49033:238;:::o;49277:179::-;49417:31;49413:1;49405:6;49401:14;49394:55;49277:179;:::o;49462:220::-;49602:34;49598:1;49590:6;49586:14;49579:58;49671:3;49666:2;49658:6;49654:15;49647:28;49462:220;:::o;49688:233::-;49828:34;49824:1;49816:6;49812:14;49805:58;49897:16;49892:2;49884:6;49880:15;49873:41;49688:233;:::o;49927:225::-;50067:34;50063:1;50055:6;50051:14;50044:58;50136:8;50131:2;50123:6;50119:15;50112:33;49927:225;:::o;50158:169::-;50298:21;50294:1;50286:6;50282:14;50275:45;50158:169;:::o;50333:234::-;50473:34;50469:1;50461:6;50457:14;50450:58;50542:17;50537:2;50529:6;50525:15;50518:42;50333:234;:::o;50573:232::-;50713:34;50709:1;50701:6;50697:14;50690:58;50782:15;50777:2;50769:6;50765:15;50758:40;50573:232;:::o;50811:221::-;50951:34;50947:1;50939:6;50935:14;50928:58;51020:4;51015:2;51007:6;51003:15;50996:29;50811:221;:::o;51038:122::-;51111:24;51129:5;51111:24;:::i;:::-;51104:5;51101:35;51091:63;;51150:1;51147;51140:12;51091:63;51038:122;:::o;51166:116::-;51236:21;51251:5;51236:21;:::i;:::-;51229:5;51226:32;51216:60;;51272:1;51269;51262:12;51216:60;51166:116;:::o;51288:120::-;51360:23;51377:5;51360:23;:::i;:::-;51353:5;51350:34;51340:62;;51398:1;51395;51388:12;51340:62;51288:120;:::o;51414:122::-;51487:24;51505:5;51487:24;:::i;:::-;51480:5;51477:35;51467:63;;51526:1;51523;51516:12;51467:63;51414:122;:::o
Swarm Source
ipfs://5069cb8956587fe13d2268cd0bfb5a76278aefa94d2b5f5883aa9959d3d5b82a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.