Overview
POL Balance
POL Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 237 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 55658308 | 377 days ago | IN | 0 POL | 0.01082092 | ||||
Set Approval For... | 49845541 | 528 days ago | IN | 0 POL | 0.00349923 | ||||
Set Approval For... | 44655171 | 659 days ago | IN | 0 POL | 0.00340872 | ||||
Set Approval For... | 44655168 | 659 days ago | IN | 0 POL | 0.00330543 | ||||
Safe Transfer Fr... | 42009960 | 727 days ago | IN | 0 POL | 0.05039553 | ||||
Set Approval For... | 38435033 | 820 days ago | IN | 0 POL | 0.00294341 | ||||
Withdraw Money | 34043108 | 928 days ago | IN | 0 POL | 0.00099144 | ||||
Set Approval For... | 32947989 | 955 days ago | IN | 0 POL | 0.00233735 | ||||
Public Sale Mint | 31826584 | 984 days ago | IN | 10 POL | 0.00529176 | ||||
Public Sale Mint | 31826535 | 984 days ago | IN | 10 POL | 0.00293246 | ||||
Withdraw Money | 31826482 | 984 days ago | IN | 0 POL | 0.00099375 | ||||
Safe Transfer Fr... | 31826021 | 984 days ago | IN | 0 POL | 0.00254135 | ||||
Safe Transfer Fr... | 31825979 | 984 days ago | IN | 0 POL | 0.00199524 | ||||
Safe Transfer Fr... | 31825957 | 984 days ago | IN | 0 POL | 0.00192272 | ||||
Safe Transfer Fr... | 31825924 | 984 days ago | IN | 0 POL | 0.00222831 | ||||
Set Approval For... | 31650018 | 989 days ago | IN | 0 POL | 0.00144915 | ||||
Safe Transfer Fr... | 30445814 | 1020 days ago | IN | 0 POL | 0.00215298 | ||||
Safe Transfer Fr... | 30443989 | 1020 days ago | IN | 0 POL | 0.00163998 | ||||
Safe Transfer Fr... | 30443935 | 1020 days ago | IN | 0 POL | 0.00274788 | ||||
Safe Transfer Fr... | 30439972 | 1020 days ago | IN | 0 POL | 0.00274788 | ||||
Safe Transfer Fr... | 30436011 | 1020 days ago | IN | 0 POL | 0.00222831 | ||||
Safe Transfer Fr... | 30435491 | 1020 days ago | IN | 0 POL | 0.0016438 | ||||
Safe Transfer Fr... | 30435448 | 1020 days ago | IN | 0 POL | 0.00169736 | ||||
Safe Transfer Fr... | 30435020 | 1021 days ago | IN | 0 POL | 0.00241821 | ||||
Safe Transfer Fr... | 30399227 | 1021 days ago | IN | 0 POL | 0.00288775 |
Loading...
Loading
Contract Name:
MonkeyKingBajie
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /** _ /\ | | / \ _ __ ___ __ _ __| | ___ _ _ ___ / /\ \ | '_ ` _ \ / _` |/ _` |/ _ | | | / __| / ____ \| | | | | | (_| | (_| | __| |_| \__ \ /_/ \_|_| |_| |_|\__,_|\__,_|\___|\__,_|___/ @developer:CivilLabs_Amadeus */ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./ERC721A.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; contract MonkeyKingBajie is Ownable, ERC721A, ReentrancyGuard { constructor( ) ERC721A("MonkeyKing_Bajie", "BAJIE", 10, 3600) {} // For marketing etc. function reserveMint(uint256 quantity, address to) external onlyOwner { require( totalSupply() + quantity <= collectionSize, "too many already minted before dev mint" ); uint256 numChunks = quantity / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(to, maxBatchSize); } if (quantity % maxBatchSize != 0){ _safeMint(to, quantity % maxBatchSize); } } // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } function refundIfOver(uint256 price) private { require(msg.value >= price, "Need to send more ETH."); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } // allowList mint uint256 public allowListMintPrice = 0.000000 ether; // default false bool public allowListStatus = false; uint256 public allowListMintAmount = 600; uint256 public immutable maxPerAddressDuringMint = 2; mapping(address => uint256) public allowList; function allowListMint(uint256 quantity) external payable { require(allowListStatus, "not begun"); require(allowList[msg.sender] >= quantity, "reached max amount per address"); require(allowListMintAmount >= quantity, "reached max amount"); require(totalSupply() + quantity <= collectionSize, "reached max supply"); allowList[msg.sender] -= quantity; _safeMint(msg.sender, quantity); allowListMintAmount -= quantity; refundIfOver(allowListMintPrice*quantity); } function setAllowList(address[] calldata allowList_) external onlyOwner{ for(uint256 i = 0;i < allowList_.length;i++){ allowList[allowList_[i]] = maxPerAddressDuringMint; } } function setAllowListStatus(bool status) external onlyOwner { allowListStatus = status; } //public sale bool public publicSaleStatus = false; uint256 public publicPrice = 1.000000 ether; uint256 public amountForPublicSale = 2800; // per mint public sale limitation uint256 public immutable publicSalePerMint = 10; function publicSaleMint(uint256 quantity) external payable { require( publicSaleStatus, "not begun" ); require( totalSupply() + quantity <= collectionSize, "reached max supply" ); require( amountForPublicSale >= quantity, "reached max amount" ); require( quantity <= publicSalePerMint, "reached max amount per mint" ); _safeMint(msg.sender, quantity); amountForPublicSale -= quantity; refundIfOver(uint256(publicPrice) * quantity); } function setPublicSaleStatus(bool status) external onlyOwner { publicSaleStatus = status; } }
// 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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/introspection/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, "collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "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(), "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), "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("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), "balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "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("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), "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, "approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "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), "approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "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), "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), "token already minted"); require(quantity <= maxBatchSize, "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), "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, "transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "transfer from incorrect owner" ); require(to != address(0), "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("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 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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 (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 (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 (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// 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); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"allowListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"allowListMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowListMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowListStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForPublicSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"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":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSalePerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"reserveMint","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":"allowList_","type":"address[]"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAllowListStatus","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":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setPublicSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052600060015560006008556000600b556000600c60006101000a81548160ff021916908315150217905550610258600d55600260c0908152506000600f60006101000a81548160ff021916908315150217905550670de0b6b3a7640000601055610af0601155600a60e0908152503480156200007f57600080fd5b506040518060400160405280601081526020017f4d6f6e6b65794b696e675f42616a6965000000000000000000000000000000008152506040518060400160405280600581526020017f42414a4945000000000000000000000000000000000000000000000000000000815250600a610e106200011162000105620001f160201b60201c565b620001f960201b60201c565b6000811162000157576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014e90620003dd565b60405180910390fd5b600082116200019d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019490620003bb565b60405180910390fd5b8360029080519060200190620001b5929190620002bd565b508260039080519060200190620001ce929190620002bd565b508160a081815250508060808181525050505050506001600981905550620004ed565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002cb9062000410565b90600052602060002090601f016020900481019282620002ef57600085556200033b565b82601f106200030a57805160ff19168380011785556200033b565b828001600101855582156200033b579182015b828111156200033a5782518255916020019190600101906200031d565b5b5090506200034a91906200034e565b5090565b5b80821115620003695760008160009055506001016200034f565b5090565b60006200037c601e83620003ff565b9150620003898262000475565b602082019050919050565b6000620003a3602583620003ff565b9150620003b0826200049e565b604082019050919050565b60006020820190508181036000830152620003d6816200036d565b9050919050565b60006020820190508181036000830152620003f88162000394565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200042957607f821691505b6020821081141562000440576200043f62000446565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f6d61782062617463682073697a65206d757374206265206e6f6e7a65726f0000600082015250565b7f636f6c6c656374696f6e206d75737420686176652061206e6f6e7a65726f207360008201527f7570706c79000000000000000000000000000000000000000000000000000000602082015250565b60805160a05160c05160e0516155106200057b600039600081816110830152611d7c015260008181611424015261186e01526000818161129f015281816112dc015281816113180152818161134d01528181612b5d01528181612b8601526133b20152600081816112280152818161175401528181611cc2015281816128c701526128fb01526155106000f3fe60806040526004361061023b5760003560e01c806379995c111161012e578063b3ab66b0116100ab578063c87b56dd1161006f578063c87b56dd14610855578063d7224ba014610892578063dc33e681146108bd578063e985e9c5146108fa578063f2fde38b146109375761023b565b8063b3ab66b014610791578063b423fe67146107ad578063b6c693e5146107d6578063b88d4fde14610801578063bab442251461082a5761023b565b806395d89b41116100f257806395d89b41146106d05780639dc74e63146106fb578063a22cb46514610726578063a945bf801461074f578063ac4460021461077a5761023b565b806379995c11146105f6578063802751ca146106125780638bc35c2f1461063d5780638da5cb5b146106685780639231ab2a146106935761023b565b80633ba5ae24116101bc5780636352211e116101805780636352211e146105115780636447c35d1461054e57806368855b641461057757806370a08231146105a2578063715018a6146105df5761023b565b80633ba5ae241461042e57806342842e0e146104595780634f6ccce71461048257806355f804b3146104bf57806360b02f70146104e85761023b565b806323b872dd1161020357806323b872dd146103395780632848aeaf146103625780632d20fb601461039f5780632f745c59146103c8578063300bc3a1146104055761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c92565b610960565b60405161027491906143e6565b60405180910390f35b34801561028957600080fd5b50610292610aaa565b60405161029f9190614401565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613d39565b610b3c565b6040516102dc919061437f565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613bd8565b610bc1565b005b34801561031a57600080fd5b50610323610cda565b604051610330919061483e565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613ac2565b610ce4565b005b34801561036e57600080fd5b5061038960048036038101906103849190613a55565b610cf4565b604051610396919061483e565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613d39565b610d0c565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190613bd8565b610dea565b6040516103fc919061483e565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613c65565b610fe8565b005b34801561043a57600080fd5b50610443611081565b604051610450919061483e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613ac2565b6110a5565b005b34801561048e57600080fd5b506104a960048036038101906104a49190613d39565b6110c5565b6040516104b6919061483e565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613cec565b611118565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190613d66565b6111aa565b005b34801561051d57600080fd5b5061053860048036038101906105339190613d39565b611382565b604051610545919061437f565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613c18565b611398565b005b34801561058357600080fd5b5061058c6114c5565b604051610599919061483e565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613a55565b6114cb565b6040516105d6919061483e565b60405180910390f35b3480156105eb57600080fd5b506105f46115b4565b005b610610600480360381019061060b9190613d39565b61163c565b005b34801561061e57600080fd5b50610627611859565b60405161063491906143e6565b60405180910390f35b34801561064957600080fd5b5061065261186c565b60405161065f919061483e565b60405180910390f35b34801561067457600080fd5b5061067d611890565b60405161068a919061437f565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613d39565b6118b9565b6040516106c79190614823565b60405180910390f35b3480156106dc57600080fd5b506106e56118d1565b6040516106f29190614401565b60405180910390f35b34801561070757600080fd5b50610710611963565b60405161071d919061483e565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190613b98565b611969565b005b34801561075b57600080fd5b50610764611aea565b604051610771919061483e565b60405180910390f35b34801561078657600080fd5b5061078f611af0565b005b6107ab60048036038101906107a69190613d39565b611c71565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190613c65565b611e19565b005b3480156107e257600080fd5b506107eb611eb2565b6040516107f891906143e6565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613b15565b611ec5565b005b34801561083657600080fd5b5061083f611f21565b60405161084c919061483e565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613d39565b611f27565b6040516108899190614401565b60405180910390f35b34801561089e57600080fd5b506108a7611fce565b6040516108b4919061483e565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df9190613a55565b611fd4565b6040516108f1919061483e565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613a82565b611fe6565b60405161092e91906143e6565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613a55565b61207a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a9357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa35750610aa282612172565b5b9050919050565b606060028054610ab990614b9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae590614b9c565b8015610b325780601f10610b0757610100808354040283529160200191610b32565b820191906000526020600020905b815481529060010190602001808311610b1557829003601f168201915b5050505050905090565b6000610b47826121dc565b610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90614463565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bcc82611382565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c34906144e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5c6121ea565b73ffffffffffffffffffffffffffffffffffffffff161480610c8b5750610c8a81610c856121ea565b611fe6565b5b610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614423565b60405180910390fd5b610cd58383836121f2565b505050565b6000600154905090565b610cef8383836122a4565b505050565b600e6020528060005260406000206000915090505481565b610d146121ea565b73ffffffffffffffffffffffffffffffffffffffff16610d32611890565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90614683565b60405180910390fd5b60026009541415610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906147e3565b60405180910390fd5b6002600981905550610ddf8161285d565b600160098190555050565b6000610df5836114cb565b8210610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d906146e3565b60405180910390fd5b6000610e40610cda565b905060008060005b83811015610fa6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f3a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f925786841415610f83578195505050505050610fe2565b8380610f8e90614bff565b9450505b508080610f9e90614bff565b915050610e48565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd9906147a3565b60405180910390fd5b92915050565b610ff06121ea565b73ffffffffffffffffffffffffffffffffffffffff1661100e611890565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614683565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110c083838360405180602001604052806000815250611ec5565b505050565b60006110cf610cda565b8210611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614523565b60405180910390fd5b819050919050565b6111206121ea565b73ffffffffffffffffffffffffffffffffffffffff1661113e611890565b73ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90614683565b60405180910390fd5b8181600a91906111a59291906137f3565b505050565b6111b26121ea565b73ffffffffffffffffffffffffffffffffffffffff166111d0611890565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90614683565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082611250610cda565b61125a9190614943565b111561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290614783565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000836112c99190614999565b905060005b8181101561131357611300837f0000000000000000000000000000000000000000000000000000000000000000612aeb565b808061130b90614bff565b9150506112ce565b5060007f0000000000000000000000000000000000000000000000000000000000000000846113429190614c48565b1461137d5761137c827f0000000000000000000000000000000000000000000000000000000000000000856113779190614c48565b612aeb565b5b505050565b600061138d82612b09565b600001519050919050565b6113a06121ea565b73ffffffffffffffffffffffffffffffffffffffff166113be611890565b73ffffffffffffffffffffffffffffffffffffffff1614611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90614683565b60405180910390fd5b60005b828290508110156114c0577f0000000000000000000000000000000000000000000000000000000000000000600e600085858581811061145a57611459614d06565b5b905060200201602081019061146f9190613a55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806114b890614bff565b915050611417565b505050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611533906144a3565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115bc6121ea565b73ffffffffffffffffffffffffffffffffffffffff166115da611890565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614683565b60405180910390fd5b61163a6000612d0c565b565b600c60009054906101000a900460ff1661168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168290614563565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614623565b60405180910390fd5b80600d541015611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990614543565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008161177c610cda565b6117869190614943565b11156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be90614603565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118169190614a58565b925050819055506118273382612aeb565b80600d60008282546118399190614a58565b9250508190555061185681600b5461185191906149ca565b612dd0565b50565b600c60009054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118c1613879565b6118ca82612b09565b9050919050565b6060600380546118e090614b9c565b80601f016020809104026020016040519081016040528092919081815260200182805461190c90614b9c565b80156119595780601f1061192e57610100808354040283529160200191611959565b820191906000526020600020905b81548152906001019060200180831161193c57829003601f168201915b5050505050905090565b60115481565b6119716121ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906146c3565b60405180910390fd5b80600760006119ec6121ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a996121ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ade91906143e6565b60405180910390a35050565b60105481565b611af86121ea565b73ffffffffffffffffffffffffffffffffffffffff16611b16611890565b73ffffffffffffffffffffffffffffffffffffffff1614611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6390614683565b60405180910390fd5b60026009541415611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906147e3565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611be09061436a565b60006040518083038185875af1925050503d8060008114611c1d576040519150601f19603f3d011682016040523d82523d6000602084013e611c22565b606091505b5050905080611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90614723565b60405180910390fd5b506001600981905550565b600f60009054906101000a900460ff16611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614563565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611cea610cda565b611cf49190614943565b1115611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614603565b60405180910390fd5b806011541015611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190614543565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614703565b60405180910390fd5b611de73382612aeb565b8060116000828254611df99190614a58565b92505081905550611e1681601054611e1191906149ca565b612dd0565b50565b611e216121ea565b73ffffffffffffffffffffffffffffffffffffffff16611e3f611890565b73ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614683565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600f60009054906101000a900460ff1681565b611ed08484846122a4565b611edc84848484612e71565b611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290614583565b60405180910390fd5b50505050565b600d5481565b6060611f32826121dc565b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890614443565b60405180910390fd5b6000611f7b613008565b90506000815111611f9b5760405180602001604052806000815250611fc6565b80611fa58461309a565b604051602001611fb6929190614346565b6040516020818303038152906040525b915050919050565b60085481565b6000611fdf826131fb565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120826121ea565b73ffffffffffffffffffffffffffffffffffffffff166120a0611890565b73ffffffffffffffffffffffffffffffffffffffff16146120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90614683565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614483565b60405180910390fd5b61216f81612d0c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006122af82612b09565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166122d66121ea565b73ffffffffffffffffffffffffffffffffffffffff16148061233257506122fb6121ea565b73ffffffffffffffffffffffffffffffffffffffff1661231a84610b3c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061234e575061234d82600001516123486121ea565b611fe6565b5b905080612390576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612387906145e3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990614643565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906144c3565b60405180910390fd5b61247f85858560016132e4565b61248f60008484600001516121f2565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124fd9190614a24565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125a191906148fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846126a79190614943565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127ed5761271d816121dc565b156127ec576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461285586868660016132ea565b505050505050565b60006008549050600082116128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e906145a3565b60405180910390fd5b6000600183836128b79190614943565b6128c19190614a58565b905060017f00000000000000000000000000000000000000000000000000000000000000006128f09190614a58565b8111156129275760017f00000000000000000000000000000000000000000000000000000000000000006129249190614a58565b90505b612930816121dc565b61296f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612966906147c3565b60405180910390fd5b60008290505b818111612ad257600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612abf5760006129f282612b09565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612aca90614bff565b915050612975565b50600181612ae09190614943565b600881905550505050565b612b058282604051806020016040528060008152506132f0565b5050565b612b11613879565b612b1a826121dc565b612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090614663565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612bbd5760017f000000000000000000000000000000000000000000000000000000000000000084612bb09190614a58565b612bba9190614943565b90505b60008390505b818110612ccb576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612cb757809350505050612d07565b508080612cc390614b72565b915050612bc3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe906145c3565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80341015612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a90614743565b60405180910390fd5b80341115612e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612e419190614a58565b9081150290604051600060405180830381858888f19350505050158015612e6c573d6000803e3d6000fd5b505b50565b6000612e928473ffffffffffffffffffffffffffffffffffffffff166137d0565b15612ffb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ebb6121ea565b8786866040518563ffffffff1660e01b8152600401612edd949392919061439a565b602060405180830381600087803b158015612ef757600080fd5b505af1925050508015612f2857506040513d601f19601f82011682018060405250810190612f259190613cbf565b60015b612fab573d8060008114612f58576040519150601f19603f3d011682016040523d82523d6000602084013e612f5d565b606091505b50600081511415612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9a90614583565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613000565b600190505b949350505050565b6060600a805461301790614b9c565b80601f016020809104026020016040519081016040528092919081815260200182805461304390614b9c565b80156130905780601f1061306557610100808354040283529160200191613090565b820191906000526020600020905b81548152906001019060200180831161307357829003601f168201915b5050505050905090565b606060008214156130e2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131f6565b600082905060005b600082146131145780806130fd90614bff565b915050600a8261310d9190614999565b91506130ea565b60008167ffffffffffffffff8111156131305761312f614d35565b5b6040519080825280601f01601f1916602001820160405280156131625781602001600182028036833780820191505090505b5090505b600085146131ef5760018261317b9190614a58565b9150600a8561318a9190614c48565b60306131969190614943565b60f81b8183815181106131ac576131ab614d06565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131e89190614999565b9450613166565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561326c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326390614503565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335e90614803565b60405180910390fd5b613370816121dc565b156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a7906146a3565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340a90614763565b60405180910390fd5b61342060008583866132e4565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161351d91906148fd565b6fffffffffffffffffffffffffffffffff16815260200185836020015161354491906148fd565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137b357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137536000888488612e71565b613792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378990614583565b60405180910390fd5b818061379d90614bff565b92505080806137ab90614bff565b9150506136e2565b50806001819055506137c860008785886132ea565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546137ff90614b9c565b90600052602060002090601f0160209004810192826138215760008555613868565b82601f1061383a57803560ff1916838001178555613868565b82800160010185558215613868579182015b8281111561386757823582559160200191906001019061384c565b5b50905061387591906138b3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156138cc5760008160009055506001016138b4565b5090565b60006138e36138de8461487e565b614859565b9050828152602081018484840111156138ff576138fe614d73565b5b61390a848285614b30565b509392505050565b6000813590506139218161547e565b92915050565b60008083601f84011261393d5761393c614d69565b5b8235905067ffffffffffffffff81111561395a57613959614d64565b5b60208301915083602082028301111561397657613975614d6e565b5b9250929050565b60008135905061398c81615495565b92915050565b6000813590506139a1816154ac565b92915050565b6000815190506139b6816154ac565b92915050565b600082601f8301126139d1576139d0614d69565b5b81356139e18482602086016138d0565b91505092915050565b60008083601f840112613a00576139ff614d69565b5b8235905067ffffffffffffffff811115613a1d57613a1c614d64565b5b602083019150836001820283011115613a3957613a38614d6e565b5b9250929050565b600081359050613a4f816154c3565b92915050565b600060208284031215613a6b57613a6a614d7d565b5b6000613a7984828501613912565b91505092915050565b60008060408385031215613a9957613a98614d7d565b5b6000613aa785828601613912565b9250506020613ab885828601613912565b9150509250929050565b600080600060608486031215613adb57613ada614d7d565b5b6000613ae986828701613912565b9350506020613afa86828701613912565b9250506040613b0b86828701613a40565b9150509250925092565b60008060008060808587031215613b2f57613b2e614d7d565b5b6000613b3d87828801613912565b9450506020613b4e87828801613912565b9350506040613b5f87828801613a40565b925050606085013567ffffffffffffffff811115613b8057613b7f614d78565b5b613b8c878288016139bc565b91505092959194509250565b60008060408385031215613baf57613bae614d7d565b5b6000613bbd85828601613912565b9250506020613bce8582860161397d565b9150509250929050565b60008060408385031215613bef57613bee614d7d565b5b6000613bfd85828601613912565b9250506020613c0e85828601613a40565b9150509250929050565b60008060208385031215613c2f57613c2e614d7d565b5b600083013567ffffffffffffffff811115613c4d57613c4c614d78565b5b613c5985828601613927565b92509250509250929050565b600060208284031215613c7b57613c7a614d7d565b5b6000613c898482850161397d565b91505092915050565b600060208284031215613ca857613ca7614d7d565b5b6000613cb684828501613992565b91505092915050565b600060208284031215613cd557613cd4614d7d565b5b6000613ce3848285016139a7565b91505092915050565b60008060208385031215613d0357613d02614d7d565b5b600083013567ffffffffffffffff811115613d2157613d20614d78565b5b613d2d858286016139ea565b92509250509250929050565b600060208284031215613d4f57613d4e614d7d565b5b6000613d5d84828501613a40565b91505092915050565b60008060408385031215613d7d57613d7c614d7d565b5b6000613d8b85828601613a40565b9250506020613d9c85828601613912565b9150509250929050565b613daf81614a8c565b82525050565b613dbe81614a8c565b82525050565b613dcd81614a9e565b82525050565b6000613dde826148af565b613de881856148c5565b9350613df8818560208601614b3f565b613e0181614d82565b840191505092915050565b6000613e17826148ba565b613e2181856148e1565b9350613e31818560208601614b3f565b613e3a81614d82565b840191505092915050565b6000613e50826148ba565b613e5a81856148f2565b9350613e6a818560208601614b3f565b80840191505092915050565b6000613e836030836148e1565b9150613e8e82614d93565b604082019050919050565b6000613ea6601f836148e1565b9150613eb182614de2565b602082019050919050565b6000613ec96024836148e1565b9150613ed482614e0b565b604082019050919050565b6000613eec6026836148e1565b9150613ef782614e5a565b604082019050919050565b6000613f0f6022836148e1565b9150613f1a82614ea9565b604082019050919050565b6000613f32601c836148e1565b9150613f3d82614ef8565b602082019050919050565b6000613f556019836148e1565b9150613f6082614f21565b602082019050919050565b6000613f786028836148e1565b9150613f8382614f4a565b604082019050919050565b6000613f9b601a836148e1565b9150613fa682614f99565b602082019050919050565b6000613fbe6012836148e1565b9150613fc982614fc2565b602082019050919050565b6000613fe16009836148e1565b9150613fec82614feb565b602082019050919050565b6000614004602a836148e1565b915061400f82615014565b604082019050919050565b60006140276018836148e1565b915061403282615063565b602082019050919050565b600061404a6026836148e1565b91506140558261508c565b604082019050919050565b600061406d6029836148e1565b9150614078826150db565b604082019050919050565b60006140906012836148e1565b915061409b8261512a565b602082019050919050565b60006140b3601e836148e1565b91506140be82615153565b602082019050919050565b60006140d6601d836148e1565b91506140e18261517c565b602082019050919050565b60006140f96021836148e1565b9150614104826151a5565b604082019050919050565b600061411c6020836148e1565b9150614127826151f4565b602082019050919050565b600061413f6014836148e1565b915061414a8261521d565b602082019050919050565b60006141626011836148e1565b915061416d82615246565b602082019050919050565b60006141856019836148e1565b91506141908261526f565b602082019050919050565b60006141a8601b836148e1565b91506141b382615298565b602082019050919050565b60006141cb6000836148d6565b91506141d6826152c1565b600082019050919050565b60006141ee6010836148e1565b91506141f9826152c4565b602082019050919050565b60006142116016836148e1565b915061421c826152ed565b602082019050919050565b60006142346019836148e1565b915061423f82615316565b602082019050919050565b60006142576027836148e1565b91506142628261533f565b604082019050919050565b600061427a6025836148e1565b91506142858261538e565b604082019050919050565b600061429d6026836148e1565b91506142a8826153dd565b604082019050919050565b60006142c0601f836148e1565b91506142cb8261542c565b602082019050919050565b60006142e36018836148e1565b91506142ee82615455565b602082019050919050565b60408201600082015161430f6000850182613da6565b5060208201516143226020850182614337565b50505050565b61433181614b12565b82525050565b61434081614b1c565b82525050565b60006143528285613e45565b915061435e8284613e45565b91508190509392505050565b6000614375826141be565b9150819050919050565b60006020820190506143946000830184613db5565b92915050565b60006080820190506143af6000830187613db5565b6143bc6020830186613db5565b6143c96040830185614328565b81810360608301526143db8184613dd3565b905095945050505050565b60006020820190506143fb6000830184613dc4565b92915050565b6000602082019050818103600083015261441b8184613e0c565b905092915050565b6000602082019050818103600083015261443c81613e76565b9050919050565b6000602082019050818103600083015261445c81613e99565b9050919050565b6000602082019050818103600083015261447c81613ebc565b9050919050565b6000602082019050818103600083015261449c81613edf565b9050919050565b600060208201905081810360008301526144bc81613f02565b9050919050565b600060208201905081810360008301526144dc81613f25565b9050919050565b600060208201905081810360008301526144fc81613f48565b9050919050565b6000602082019050818103600083015261451c81613f6b565b9050919050565b6000602082019050818103600083015261453c81613f8e565b9050919050565b6000602082019050818103600083015261455c81613fb1565b9050919050565b6000602082019050818103600083015261457c81613fd4565b9050919050565b6000602082019050818103600083015261459c81613ff7565b9050919050565b600060208201905081810360008301526145bc8161401a565b9050919050565b600060208201905081810360008301526145dc8161403d565b9050919050565b600060208201905081810360008301526145fc81614060565b9050919050565b6000602082019050818103600083015261461c81614083565b9050919050565b6000602082019050818103600083015261463c816140a6565b9050919050565b6000602082019050818103600083015261465c816140c9565b9050919050565b6000602082019050818103600083015261467c816140ec565b9050919050565b6000602082019050818103600083015261469c8161410f565b9050919050565b600060208201905081810360008301526146bc81614132565b9050919050565b600060208201905081810360008301526146dc81614155565b9050919050565b600060208201905081810360008301526146fc81614178565b9050919050565b6000602082019050818103600083015261471c8161419b565b9050919050565b6000602082019050818103600083015261473c816141e1565b9050919050565b6000602082019050818103600083015261475c81614204565b9050919050565b6000602082019050818103600083015261477c81614227565b9050919050565b6000602082019050818103600083015261479c8161424a565b9050919050565b600060208201905081810360008301526147bc8161426d565b9050919050565b600060208201905081810360008301526147dc81614290565b9050919050565b600060208201905081810360008301526147fc816142b3565b9050919050565b6000602082019050818103600083015261481c816142d6565b9050919050565b600060408201905061483860008301846142f9565b92915050565b60006020820190506148536000830184614328565b92915050565b6000614863614874565b905061486f8282614bce565b919050565b6000604051905090565b600067ffffffffffffffff82111561489957614898614d35565b5b6148a282614d82565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061490882614ad6565b915061491383614ad6565b9250826fffffffffffffffffffffffffffffffff0382111561493857614937614c79565b5b828201905092915050565b600061494e82614b12565b915061495983614b12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561498e5761498d614c79565b5b828201905092915050565b60006149a482614b12565b91506149af83614b12565b9250826149bf576149be614ca8565b5b828204905092915050565b60006149d582614b12565b91506149e083614b12565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a1957614a18614c79565b5b828202905092915050565b6000614a2f82614ad6565b9150614a3a83614ad6565b925082821015614a4d57614a4c614c79565b5b828203905092915050565b6000614a6382614b12565b9150614a6e83614b12565b925082821015614a8157614a80614c79565b5b828203905092915050565b6000614a9782614af2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614b5d578082015181840152602081019050614b42565b83811115614b6c576000848401525b50505050565b6000614b7d82614b12565b91506000821415614b9157614b90614c79565b5b600182039050919050565b60006002820490506001821680614bb457607f821691505b60208210811415614bc857614bc7614cd7565b5b50919050565b614bd782614d82565b810181811067ffffffffffffffff82111715614bf657614bf5614d35565b5b80604052505050565b6000614c0a82614b12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c3d57614c3c614c79565b5b600182019050919050565b6000614c5382614b12565b9150614c5e83614b12565b925082614c6e57614c6d614ca8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f722060008201527f617070726f76656420666f7220616c6c00000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f617070726f76656420717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f62616c616e636520717565727920666f7220746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b7f617070726f76616c20746f2063757272656e74206f776e657200000000000000600082015250565b7f6e756d626572206d696e74656420717565727920666f7220746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f676c6f62616c20696e646578206f7574206f6620626f756e6473000000000000600082015250565b7f72656163686564206d617820616d6f756e740000000000000000000000000000600082015250565b7f6e6f7420626567756e0000000000000000000000000000000000000000000000600082015250565b7f7472616e7366657220746f206e6f6e204552433732315265636569766572206960008201527f6d706c656d656e74657200000000000000000000000000000000000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f756e61626c6520746f2064657465726d696e6520746865206f776e6572206f6660008201527f20746f6b656e0000000000000000000000000000000000000000000000000000602082015250565b7f7472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f72656163686564206d617820616d6f756e742070657220616464726573730000600082015250565b7f7472616e736665722066726f6d20696e636f7272656374206f776e6572000000600082015250565b7f6f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f6b656e20616c7265616479206d696e746564000000000000000000000000600082015250565b7f617070726f766520746f2063616c6c6572000000000000000000000000000000600082015250565b7f6f776e657220696e646578206f7574206f6620626f756e647300000000000000600082015250565b7f72656163686564206d617820616d6f756e7420706572206d696e740000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f7175616e7469747920746f206d696e7420746f6f206869676800000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f756e61626c6520746f2067657420746f6b656e206f66206f776e65722062792060008201527f696e646578000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6d696e7420746f20746865207a65726f20616464726573730000000000000000600082015250565b61548781614a8c565b811461549257600080fd5b50565b61549e81614a9e565b81146154a957600080fd5b50565b6154b581614aaa565b81146154c057600080fd5b50565b6154cc81614b12565b81146154d757600080fd5b5056fea264697066735822122011fce755522677655dc233155335271a3c19fab97770f6becd7050681b50c75e64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806379995c111161012e578063b3ab66b0116100ab578063c87b56dd1161006f578063c87b56dd14610855578063d7224ba014610892578063dc33e681146108bd578063e985e9c5146108fa578063f2fde38b146109375761023b565b8063b3ab66b014610791578063b423fe67146107ad578063b6c693e5146107d6578063b88d4fde14610801578063bab442251461082a5761023b565b806395d89b41116100f257806395d89b41146106d05780639dc74e63146106fb578063a22cb46514610726578063a945bf801461074f578063ac4460021461077a5761023b565b806379995c11146105f6578063802751ca146106125780638bc35c2f1461063d5780638da5cb5b146106685780639231ab2a146106935761023b565b80633ba5ae24116101bc5780636352211e116101805780636352211e146105115780636447c35d1461054e57806368855b641461057757806370a08231146105a2578063715018a6146105df5761023b565b80633ba5ae241461042e57806342842e0e146104595780634f6ccce71461048257806355f804b3146104bf57806360b02f70146104e85761023b565b806323b872dd1161020357806323b872dd146103395780632848aeaf146103625780632d20fb601461039f5780632f745c59146103c8578063300bc3a1146104055761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613c92565b610960565b60405161027491906143e6565b60405180910390f35b34801561028957600080fd5b50610292610aaa565b60405161029f9190614401565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613d39565b610b3c565b6040516102dc919061437f565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613bd8565b610bc1565b005b34801561031a57600080fd5b50610323610cda565b604051610330919061483e565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190613ac2565b610ce4565b005b34801561036e57600080fd5b5061038960048036038101906103849190613a55565b610cf4565b604051610396919061483e565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c19190613d39565b610d0c565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190613bd8565b610dea565b6040516103fc919061483e565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613c65565b610fe8565b005b34801561043a57600080fd5b50610443611081565b604051610450919061483e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190613ac2565b6110a5565b005b34801561048e57600080fd5b506104a960048036038101906104a49190613d39565b6110c5565b6040516104b6919061483e565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613cec565b611118565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190613d66565b6111aa565b005b34801561051d57600080fd5b5061053860048036038101906105339190613d39565b611382565b604051610545919061437f565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190613c18565b611398565b005b34801561058357600080fd5b5061058c6114c5565b604051610599919061483e565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613a55565b6114cb565b6040516105d6919061483e565b60405180910390f35b3480156105eb57600080fd5b506105f46115b4565b005b610610600480360381019061060b9190613d39565b61163c565b005b34801561061e57600080fd5b50610627611859565b60405161063491906143e6565b60405180910390f35b34801561064957600080fd5b5061065261186c565b60405161065f919061483e565b60405180910390f35b34801561067457600080fd5b5061067d611890565b60405161068a919061437f565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613d39565b6118b9565b6040516106c79190614823565b60405180910390f35b3480156106dc57600080fd5b506106e56118d1565b6040516106f29190614401565b60405180910390f35b34801561070757600080fd5b50610710611963565b60405161071d919061483e565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190613b98565b611969565b005b34801561075b57600080fd5b50610764611aea565b604051610771919061483e565b60405180910390f35b34801561078657600080fd5b5061078f611af0565b005b6107ab60048036038101906107a69190613d39565b611c71565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190613c65565b611e19565b005b3480156107e257600080fd5b506107eb611eb2565b6040516107f891906143e6565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613b15565b611ec5565b005b34801561083657600080fd5b5061083f611f21565b60405161084c919061483e565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613d39565b611f27565b6040516108899190614401565b60405180910390f35b34801561089e57600080fd5b506108a7611fce565b6040516108b4919061483e565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df9190613a55565b611fd4565b6040516108f1919061483e565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613a82565b611fe6565b60405161092e91906143e6565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613a55565b61207a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a2b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a9357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aa35750610aa282612172565b5b9050919050565b606060028054610ab990614b9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae590614b9c565b8015610b325780601f10610b0757610100808354040283529160200191610b32565b820191906000526020600020905b815481529060010190602001808311610b1557829003601f168201915b5050505050905090565b6000610b47826121dc565b610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90614463565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bcc82611382565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c34906144e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c5c6121ea565b73ffffffffffffffffffffffffffffffffffffffff161480610c8b5750610c8a81610c856121ea565b611fe6565b5b610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614423565b60405180910390fd5b610cd58383836121f2565b505050565b6000600154905090565b610cef8383836122a4565b505050565b600e6020528060005260406000206000915090505481565b610d146121ea565b73ffffffffffffffffffffffffffffffffffffffff16610d32611890565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90614683565b60405180910390fd5b60026009541415610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906147e3565b60405180910390fd5b6002600981905550610ddf8161285d565b600160098190555050565b6000610df5836114cb565b8210610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d906146e3565b60405180910390fd5b6000610e40610cda565b905060008060005b83811015610fa6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f3a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f925786841415610f83578195505050505050610fe2565b8380610f8e90614bff565b9450505b508080610f9e90614bff565b915050610e48565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd9906147a3565b60405180910390fd5b92915050565b610ff06121ea565b73ffffffffffffffffffffffffffffffffffffffff1661100e611890565b73ffffffffffffffffffffffffffffffffffffffff1614611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614683565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000a81565b6110c083838360405180602001604052806000815250611ec5565b505050565b60006110cf610cda565b8210611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790614523565b60405180910390fd5b819050919050565b6111206121ea565b73ffffffffffffffffffffffffffffffffffffffff1661113e611890565b73ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90614683565b60405180910390fd5b8181600a91906111a59291906137f3565b505050565b6111b26121ea565b73ffffffffffffffffffffffffffffffffffffffff166111d0611890565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90614683565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000e1082611250610cda565b61125a9190614943565b111561129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290614783565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a836112c99190614999565b905060005b8181101561131357611300837f000000000000000000000000000000000000000000000000000000000000000a612aeb565b808061130b90614bff565b9150506112ce565b5060007f000000000000000000000000000000000000000000000000000000000000000a846113429190614c48565b1461137d5761137c827f000000000000000000000000000000000000000000000000000000000000000a856113779190614c48565b612aeb565b5b505050565b600061138d82612b09565b600001519050919050565b6113a06121ea565b73ffffffffffffffffffffffffffffffffffffffff166113be611890565b73ffffffffffffffffffffffffffffffffffffffff1614611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90614683565b60405180910390fd5b60005b828290508110156114c0577f0000000000000000000000000000000000000000000000000000000000000002600e600085858581811061145a57611459614d06565b5b905060200201602081019061146f9190613a55565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806114b890614bff565b915050611417565b505050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611533906144a3565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115bc6121ea565b73ffffffffffffffffffffffffffffffffffffffff166115da611890565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614683565b60405180910390fd5b61163a6000612d0c565b565b600c60009054906101000a900460ff1661168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168290614563565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490614623565b60405180910390fd5b80600d541015611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990614543565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000e108161177c610cda565b6117869190614943565b11156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be90614603565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118169190614a58565b925050819055506118273382612aeb565b80600d60008282546118399190614a58565b9250508190555061185681600b5461185191906149ca565b612dd0565b50565b600c60009054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000281565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118c1613879565b6118ca82612b09565b9050919050565b6060600380546118e090614b9c565b80601f016020809104026020016040519081016040528092919081815260200182805461190c90614b9c565b80156119595780601f1061192e57610100808354040283529160200191611959565b820191906000526020600020905b81548152906001019060200180831161193c57829003601f168201915b5050505050905090565b60115481565b6119716121ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d6906146c3565b60405180910390fd5b80600760006119ec6121ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a996121ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ade91906143e6565b60405180910390a35050565b60105481565b611af86121ea565b73ffffffffffffffffffffffffffffffffffffffff16611b16611890565b73ffffffffffffffffffffffffffffffffffffffff1614611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6390614683565b60405180910390fd5b60026009541415611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906147e3565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611be09061436a565b60006040518083038185875af1925050503d8060008114611c1d576040519150601f19603f3d011682016040523d82523d6000602084013e611c22565b606091505b5050905080611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90614723565b60405180910390fd5b506001600981905550565b600f60009054906101000a900460ff16611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614563565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000e1081611cea610cda565b611cf49190614943565b1115611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90614603565b60405180910390fd5b806011541015611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190614543565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a811115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614703565b60405180910390fd5b611de73382612aeb565b8060116000828254611df99190614a58565b92505081905550611e1681601054611e1191906149ca565b612dd0565b50565b611e216121ea565b73ffffffffffffffffffffffffffffffffffffffff16611e3f611890565b73ffffffffffffffffffffffffffffffffffffffff1614611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90614683565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600f60009054906101000a900460ff1681565b611ed08484846122a4565b611edc84848484612e71565b611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290614583565b60405180910390fd5b50505050565b600d5481565b6060611f32826121dc565b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890614443565b60405180910390fd5b6000611f7b613008565b90506000815111611f9b5760405180602001604052806000815250611fc6565b80611fa58461309a565b604051602001611fb6929190614346565b6040516020818303038152906040525b915050919050565b60085481565b6000611fdf826131fb565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120826121ea565b73ffffffffffffffffffffffffffffffffffffffff166120a0611890565b73ffffffffffffffffffffffffffffffffffffffff16146120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90614683565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614483565b60405180910390fd5b61216f81612d0c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006122af82612b09565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166122d66121ea565b73ffffffffffffffffffffffffffffffffffffffff16148061233257506122fb6121ea565b73ffffffffffffffffffffffffffffffffffffffff1661231a84610b3c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061234e575061234d82600001516123486121ea565b611fe6565b5b905080612390576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612387906145e3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990614643565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906144c3565b60405180910390fd5b61247f85858560016132e4565b61248f60008484600001516121f2565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124fd9190614a24565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125a191906148fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846126a79190614943565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127ed5761271d816121dc565b156127ec576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461285586868660016132ea565b505050505050565b60006008549050600082116128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e906145a3565b60405180910390fd5b6000600183836128b79190614943565b6128c19190614a58565b905060017f0000000000000000000000000000000000000000000000000000000000000e106128f09190614a58565b8111156129275760017f0000000000000000000000000000000000000000000000000000000000000e106129249190614a58565b90505b612930816121dc565b61296f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612966906147c3565b60405180910390fd5b60008290505b818111612ad257600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612abf5760006129f282612b09565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612aca90614bff565b915050612975565b50600181612ae09190614943565b600881905550505050565b612b058282604051806020016040528060008152506132f0565b5050565b612b11613879565b612b1a826121dc565b612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090614663565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8310612bbd5760017f000000000000000000000000000000000000000000000000000000000000000a84612bb09190614a58565b612bba9190614943565b90505b60008390505b818110612ccb576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612cb757809350505050612d07565b508080612cc390614b72565b915050612bc3565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe906145c3565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80341015612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a90614743565b60405180910390fd5b80341115612e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612e419190614a58565b9081150290604051600060405180830381858888f19350505050158015612e6c573d6000803e3d6000fd5b505b50565b6000612e928473ffffffffffffffffffffffffffffffffffffffff166137d0565b15612ffb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ebb6121ea565b8786866040518563ffffffff1660e01b8152600401612edd949392919061439a565b602060405180830381600087803b158015612ef757600080fd5b505af1925050508015612f2857506040513d601f19601f82011682018060405250810190612f259190613cbf565b60015b612fab573d8060008114612f58576040519150601f19603f3d011682016040523d82523d6000602084013e612f5d565b606091505b50600081511415612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9a90614583565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613000565b600190505b949350505050565b6060600a805461301790614b9c565b80601f016020809104026020016040519081016040528092919081815260200182805461304390614b9c565b80156130905780601f1061306557610100808354040283529160200191613090565b820191906000526020600020905b81548152906001019060200180831161307357829003601f168201915b5050505050905090565b606060008214156130e2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131f6565b600082905060005b600082146131145780806130fd90614bff565b915050600a8261310d9190614999565b91506130ea565b60008167ffffffffffffffff8111156131305761312f614d35565b5b6040519080825280601f01601f1916602001820160405280156131625781602001600182028036833780820191505090505b5090505b600085146131ef5760018261317b9190614a58565b9150600a8561318a9190614c48565b60306131969190614943565b60f81b8183815181106131ac576131ab614d06565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131e89190614999565b9450613166565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561326c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326390614503565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335e90614803565b60405180910390fd5b613370816121dc565b156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a7906146a3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115613413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340a90614763565b60405180910390fd5b61342060008583866132e4565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161351d91906148fd565b6fffffffffffffffffffffffffffffffff16815260200185836020015161354491906148fd565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156137b357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137536000888488612e71565b613792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378990614583565b60405180910390fd5b818061379d90614bff565b92505080806137ab90614bff565b9150506136e2565b50806001819055506137c860008785886132ea565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546137ff90614b9c565b90600052602060002090601f0160209004810192826138215760008555613868565b82601f1061383a57803560ff1916838001178555613868565b82800160010185558215613868579182015b8281111561386757823582559160200191906001019061384c565b5b50905061387591906138b3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156138cc5760008160009055506001016138b4565b5090565b60006138e36138de8461487e565b614859565b9050828152602081018484840111156138ff576138fe614d73565b5b61390a848285614b30565b509392505050565b6000813590506139218161547e565b92915050565b60008083601f84011261393d5761393c614d69565b5b8235905067ffffffffffffffff81111561395a57613959614d64565b5b60208301915083602082028301111561397657613975614d6e565b5b9250929050565b60008135905061398c81615495565b92915050565b6000813590506139a1816154ac565b92915050565b6000815190506139b6816154ac565b92915050565b600082601f8301126139d1576139d0614d69565b5b81356139e18482602086016138d0565b91505092915050565b60008083601f840112613a00576139ff614d69565b5b8235905067ffffffffffffffff811115613a1d57613a1c614d64565b5b602083019150836001820283011115613a3957613a38614d6e565b5b9250929050565b600081359050613a4f816154c3565b92915050565b600060208284031215613a6b57613a6a614d7d565b5b6000613a7984828501613912565b91505092915050565b60008060408385031215613a9957613a98614d7d565b5b6000613aa785828601613912565b9250506020613ab885828601613912565b9150509250929050565b600080600060608486031215613adb57613ada614d7d565b5b6000613ae986828701613912565b9350506020613afa86828701613912565b9250506040613b0b86828701613a40565b9150509250925092565b60008060008060808587031215613b2f57613b2e614d7d565b5b6000613b3d87828801613912565b9450506020613b4e87828801613912565b9350506040613b5f87828801613a40565b925050606085013567ffffffffffffffff811115613b8057613b7f614d78565b5b613b8c878288016139bc565b91505092959194509250565b60008060408385031215613baf57613bae614d7d565b5b6000613bbd85828601613912565b9250506020613bce8582860161397d565b9150509250929050565b60008060408385031215613bef57613bee614d7d565b5b6000613bfd85828601613912565b9250506020613c0e85828601613a40565b9150509250929050565b60008060208385031215613c2f57613c2e614d7d565b5b600083013567ffffffffffffffff811115613c4d57613c4c614d78565b5b613c5985828601613927565b92509250509250929050565b600060208284031215613c7b57613c7a614d7d565b5b6000613c898482850161397d565b91505092915050565b600060208284031215613ca857613ca7614d7d565b5b6000613cb684828501613992565b91505092915050565b600060208284031215613cd557613cd4614d7d565b5b6000613ce3848285016139a7565b91505092915050565b60008060208385031215613d0357613d02614d7d565b5b600083013567ffffffffffffffff811115613d2157613d20614d78565b5b613d2d858286016139ea565b92509250509250929050565b600060208284031215613d4f57613d4e614d7d565b5b6000613d5d84828501613a40565b91505092915050565b60008060408385031215613d7d57613d7c614d7d565b5b6000613d8b85828601613a40565b9250506020613d9c85828601613912565b9150509250929050565b613daf81614a8c565b82525050565b613dbe81614a8c565b82525050565b613dcd81614a9e565b82525050565b6000613dde826148af565b613de881856148c5565b9350613df8818560208601614b3f565b613e0181614d82565b840191505092915050565b6000613e17826148ba565b613e2181856148e1565b9350613e31818560208601614b3f565b613e3a81614d82565b840191505092915050565b6000613e50826148ba565b613e5a81856148f2565b9350613e6a818560208601614b3f565b80840191505092915050565b6000613e836030836148e1565b9150613e8e82614d93565b604082019050919050565b6000613ea6601f836148e1565b9150613eb182614de2565b602082019050919050565b6000613ec96024836148e1565b9150613ed482614e0b565b604082019050919050565b6000613eec6026836148e1565b9150613ef782614e5a565b604082019050919050565b6000613f0f6022836148e1565b9150613f1a82614ea9565b604082019050919050565b6000613f32601c836148e1565b9150613f3d82614ef8565b602082019050919050565b6000613f556019836148e1565b9150613f6082614f21565b602082019050919050565b6000613f786028836148e1565b9150613f8382614f4a565b604082019050919050565b6000613f9b601a836148e1565b9150613fa682614f99565b602082019050919050565b6000613fbe6012836148e1565b9150613fc982614fc2565b602082019050919050565b6000613fe16009836148e1565b9150613fec82614feb565b602082019050919050565b6000614004602a836148e1565b915061400f82615014565b604082019050919050565b60006140276018836148e1565b915061403282615063565b602082019050919050565b600061404a6026836148e1565b91506140558261508c565b604082019050919050565b600061406d6029836148e1565b9150614078826150db565b604082019050919050565b60006140906012836148e1565b915061409b8261512a565b602082019050919050565b60006140b3601e836148e1565b91506140be82615153565b602082019050919050565b60006140d6601d836148e1565b91506140e18261517c565b602082019050919050565b60006140f96021836148e1565b9150614104826151a5565b604082019050919050565b600061411c6020836148e1565b9150614127826151f4565b602082019050919050565b600061413f6014836148e1565b915061414a8261521d565b602082019050919050565b60006141626011836148e1565b915061416d82615246565b602082019050919050565b60006141856019836148e1565b91506141908261526f565b602082019050919050565b60006141a8601b836148e1565b91506141b382615298565b602082019050919050565b60006141cb6000836148d6565b91506141d6826152c1565b600082019050919050565b60006141ee6010836148e1565b91506141f9826152c4565b602082019050919050565b60006142116016836148e1565b915061421c826152ed565b602082019050919050565b60006142346019836148e1565b915061423f82615316565b602082019050919050565b60006142576027836148e1565b91506142628261533f565b604082019050919050565b600061427a6025836148e1565b91506142858261538e565b604082019050919050565b600061429d6026836148e1565b91506142a8826153dd565b604082019050919050565b60006142c0601f836148e1565b91506142cb8261542c565b602082019050919050565b60006142e36018836148e1565b91506142ee82615455565b602082019050919050565b60408201600082015161430f6000850182613da6565b5060208201516143226020850182614337565b50505050565b61433181614b12565b82525050565b61434081614b1c565b82525050565b60006143528285613e45565b915061435e8284613e45565b91508190509392505050565b6000614375826141be565b9150819050919050565b60006020820190506143946000830184613db5565b92915050565b60006080820190506143af6000830187613db5565b6143bc6020830186613db5565b6143c96040830185614328565b81810360608301526143db8184613dd3565b905095945050505050565b60006020820190506143fb6000830184613dc4565b92915050565b6000602082019050818103600083015261441b8184613e0c565b905092915050565b6000602082019050818103600083015261443c81613e76565b9050919050565b6000602082019050818103600083015261445c81613e99565b9050919050565b6000602082019050818103600083015261447c81613ebc565b9050919050565b6000602082019050818103600083015261449c81613edf565b9050919050565b600060208201905081810360008301526144bc81613f02565b9050919050565b600060208201905081810360008301526144dc81613f25565b9050919050565b600060208201905081810360008301526144fc81613f48565b9050919050565b6000602082019050818103600083015261451c81613f6b565b9050919050565b6000602082019050818103600083015261453c81613f8e565b9050919050565b6000602082019050818103600083015261455c81613fb1565b9050919050565b6000602082019050818103600083015261457c81613fd4565b9050919050565b6000602082019050818103600083015261459c81613ff7565b9050919050565b600060208201905081810360008301526145bc8161401a565b9050919050565b600060208201905081810360008301526145dc8161403d565b9050919050565b600060208201905081810360008301526145fc81614060565b9050919050565b6000602082019050818103600083015261461c81614083565b9050919050565b6000602082019050818103600083015261463c816140a6565b9050919050565b6000602082019050818103600083015261465c816140c9565b9050919050565b6000602082019050818103600083015261467c816140ec565b9050919050565b6000602082019050818103600083015261469c8161410f565b9050919050565b600060208201905081810360008301526146bc81614132565b9050919050565b600060208201905081810360008301526146dc81614155565b9050919050565b600060208201905081810360008301526146fc81614178565b9050919050565b6000602082019050818103600083015261471c8161419b565b9050919050565b6000602082019050818103600083015261473c816141e1565b9050919050565b6000602082019050818103600083015261475c81614204565b9050919050565b6000602082019050818103600083015261477c81614227565b9050919050565b6000602082019050818103600083015261479c8161424a565b9050919050565b600060208201905081810360008301526147bc8161426d565b9050919050565b600060208201905081810360008301526147dc81614290565b9050919050565b600060208201905081810360008301526147fc816142b3565b9050919050565b6000602082019050818103600083015261481c816142d6565b9050919050565b600060408201905061483860008301846142f9565b92915050565b60006020820190506148536000830184614328565b92915050565b6000614863614874565b905061486f8282614bce565b919050565b6000604051905090565b600067ffffffffffffffff82111561489957614898614d35565b5b6148a282614d82565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061490882614ad6565b915061491383614ad6565b9250826fffffffffffffffffffffffffffffffff0382111561493857614937614c79565b5b828201905092915050565b600061494e82614b12565b915061495983614b12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561498e5761498d614c79565b5b828201905092915050565b60006149a482614b12565b91506149af83614b12565b9250826149bf576149be614ca8565b5b828204905092915050565b60006149d582614b12565b91506149e083614b12565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a1957614a18614c79565b5b828202905092915050565b6000614a2f82614ad6565b9150614a3a83614ad6565b925082821015614a4d57614a4c614c79565b5b828203905092915050565b6000614a6382614b12565b9150614a6e83614b12565b925082821015614a8157614a80614c79565b5b828203905092915050565b6000614a9782614af2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614b5d578082015181840152602081019050614b42565b83811115614b6c576000848401525b50505050565b6000614b7d82614b12565b91506000821415614b9157614b90614c79565b5b600182039050919050565b60006002820490506001821680614bb457607f821691505b60208210811415614bc857614bc7614cd7565b5b50919050565b614bd782614d82565b810181811067ffffffffffffffff82111715614bf657614bf5614d35565b5b80604052505050565b6000614c0a82614b12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c3d57614c3c614c79565b5b600182019050919050565b6000614c5382614b12565b9150614c5e83614b12565b925082614c6e57614c6d614ca8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f722060008201527f617070726f76656420666f7220616c6c00000000000000000000000000000000602082015250565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b7f617070726f76656420717565727920666f72206e6f6e6578697374656e74207460008201527f6f6b656e00000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f62616c616e636520717565727920666f7220746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b7f617070726f76616c20746f2063757272656e74206f776e657200000000000000600082015250565b7f6e756d626572206d696e74656420717565727920666f7220746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f676c6f62616c20696e646578206f7574206f6620626f756e6473000000000000600082015250565b7f72656163686564206d617820616d6f756e740000000000000000000000000000600082015250565b7f6e6f7420626567756e0000000000000000000000000000000000000000000000600082015250565b7f7472616e7366657220746f206e6f6e204552433732315265636569766572206960008201527f6d706c656d656e74657200000000000000000000000000000000000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f756e61626c6520746f2064657465726d696e6520746865206f776e6572206f6660008201527f20746f6b656e0000000000000000000000000000000000000000000000000000602082015250565b7f7472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f72656163686564206d617820616d6f756e742070657220616464726573730000600082015250565b7f7472616e736665722066726f6d20696e636f7272656374206f776e6572000000600082015250565b7f6f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f6b656e20616c7265616479206d696e746564000000000000000000000000600082015250565b7f617070726f766520746f2063616c6c6572000000000000000000000000000000600082015250565b7f6f776e657220696e646578206f7574206f6620626f756e647300000000000000600082015250565b7f72656163686564206d617820616d6f756e7420706572206d696e740000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f7175616e7469747920746f206d696e7420746f6f206869676800000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f756e61626c6520746f2067657420746f6b656e206f66206f776e65722062792060008201527f696e646578000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6d696e7420746f20746865207a65726f20616464726573730000000000000000600082015250565b61548781614a8c565b811461549257600080fd5b50565b61549e81614a9e565b81146154a957600080fd5b50565b6154b581614aaa565b81146154c057600080fd5b50565b6154cc81614b12565b81146154d757600080fd5b5056fea264697066735822122011fce755522677655dc233155335271a3c19fab97770f6becd7050681b50c75e64736f6c63430008070033
Deployed Bytecode Sourcemap
552:3849:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4069:358:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5697:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7128:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6724:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2702:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7928:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2546:44:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1677:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3307:703:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3344:101:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3645:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8122:151:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2858:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1373:104:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;720:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5527:116:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3132:206:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2323:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4478:199:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;;;;;;;;;;;:::i;:::-;;2597:529:12;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2400:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2487:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1036:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1922:149:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5845:96:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3559:41:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7378:260:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3510:43:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1483:188;;;;;;;;;;;;;:::i;:::-;;3699:591;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4296:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3468:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8331:291:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2441:40:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5999:361:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12529:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1805:111:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7696:178:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4069:358:11;4191:4;4233:25;4218:40;;;:11;:40;;;;:98;;;;4283:33;4268:48;;;:11;:48;;;;4218:98;:158;;;;4341:35;4326:50;;;:11;:50;;;;4218:158;:204;;;;4386:36;4410:11;4386:23;:36::i;:::-;4218:204;4205:217;;4069:358;;;:::o;5697:92::-;5751:13;5779:5;5772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5697:92;:::o;7128:191::-;7196:7;7219:16;7227:7;7219;:16::i;:::-;7211:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7290:15;:24;7306:7;7290:24;;;;;;;;;;;;;;;;;;;;;7283:31;;7128:191;;;:::o;6724:351::-;6792:13;6808:24;6824:7;6808:15;:24::i;:::-;6792:40;;6852:5;6846:11;;:2;:11;;;;6838:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;6925:5;6909:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;6934:37;6951:5;6958:12;:10;:12::i;:::-;6934:16;:37::i;:::-;6909:62;6894:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;7042:28;7051:2;7055:7;7064:5;7042:8;:28::i;:::-;6786:289;6724:351;;:::o;2702:92::-;2755:7;2777:12;;2770:19;;2702:92;:::o;7928:136::-;8031:28;8041:4;8047:2;8051:7;8031:9;:28::i;:::-;7928:136;;;:::o;2546:44:12:-;;;;;;;;;;;;;;;;;:::o;1677:122::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:1::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;1764:28:12::2;1783:8;1764:18;:28::i;:::-;1701:1:1::1;2628:7;:22;;;;1677:122:12::0;:::o;3307:703:11:-;3412:7;3445:16;3455:5;3445:9;:16::i;:::-;3437:5;:24;3429:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;3497:22;3522:13;:11;:13::i;:::-;3497:38;;3541:19;3570:25;3619:9;3614:339;3638:14;3634:1;:18;3614:339;;;3667:31;3701:11;:14;3713:1;3701:14;;;;;;;;;;;3667:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3753:1;3727:28;;:9;:14;;;:28;;;3723:87;;3787:9;:14;;;3767:34;;3723:87;3842:5;3821:26;;:17;:26;;;3817:130;;;3878:5;3863:11;:20;3859:57;;;3904:1;3897:8;;;;;;;;;3859:57;3925:13;;;;;:::i;:::-;;;;3817:130;3659:294;3654:3;;;;;:::i;:::-;;;;3614:339;;;;3958:47;;;;;;;;;;:::i;:::-;;;;;;;;3307:703;;;;;:::o;3344:101:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3432:6:12::1;3414:15;;:24;;;;;;;;;;;;;;;;;;3344:101:::0;:::o;3645:47::-;;;:::o;8122:151:11:-;8229:39;8246:4;8252:2;8256:7;8229:39;;;;;;;;;;;;:16;:39::i;:::-;8122:151;;;:::o;2858:165::-;2925:7;2956:13;:11;:13::i;:::-;2948:5;:21;2940:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;3013:5;3006:12;;2858:165;;;:::o;1373:104:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1463:7:12::1;;1447:13;:23;;;;;;;:::i;:::-;;1373:104:::0;;:::o;720:474::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;849:14:12::1;837:8;821:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;800:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;938:17;969:12;958:8;:23;;;;:::i;:::-;938:43;;996:9;991:92;1015:9;1011:1;:13;991:92;;;1045:27;1055:2;1059:12;1045:9;:27::i;:::-;1026:3;;;;;:::i;:::-;;;;991:92;;;;1123:1;1107:12;1096:8;:23;;;;:::i;:::-;:28;1092:96;;1139:38;1149:2;1164:12;1153:8;:23;;;;:::i;:::-;1139:9;:38::i;:::-;1092:96;790:404;720:474:::0;;:::o;5527:116:11:-;5591:7;5613:20;5625:7;5613:11;:20::i;:::-;:25;;;5606:32;;5527:116;;;:::o;3132:206:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3217:9:12::1;3213:119;3235:10;;:17;;3231:1;:21;3213:119;;;3298:23;3271:9;:24;3281:10;;3292:1;3281:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3271:24;;;;;;;;;;;;;;;:50;;;;3253:3;;;;;:::i;:::-;;;;3213:119;;;;3132:206:::0;;:::o;2323:50::-;;;;:::o;4478:199:11:-;4542:7;4582:1;4565:19;;:5;:19;;;;4557:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4644:12;:19;4657:5;4644:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4636:36;;4629:43;;4478:199;;;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;2597:529:12:-;2673:15;;;;;;;;;;;2665:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;2745:8;2720:9;:21;2730:10;2720:21;;;;;;;;;;;;;;;;:33;;2712:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2829:8;2806:19;;:31;;2798:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2906:14;2894:8;2878:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;2870:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2978:8;2953:9;:21;2963:10;2953:21;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;2996:31;3006:10;3018:8;2996:9;:31::i;:::-;3060:8;3037:19;;:31;;;;;;;:::i;:::-;;;;;;;;3078:41;3110:8;3091:18;;:27;;;;:::i;:::-;3078:12;:41::i;:::-;2597:529;:::o;2400:35::-;;;;;;;;;;;;;:::o;2487:52::-;;;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;1922:149:12:-;2000:21;;:::i;:::-;2044:20;2056:7;2044:11;:20::i;:::-;2037:27;;1922:149;;;:::o;5845:96:11:-;5901:13;5929:7;5922:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5845:96;:::o;3559:41:12:-;;;;:::o;7378:260:11:-;7480:12;:10;:12::i;:::-;7468:24;;:8;:24;;;;7460:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7566:8;7521:18;:32;7540:12;:10;:12::i;:::-;7521:32;;;;;;;;;;;;;;;:42;7554:8;7521:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7614:8;7585:48;;7600:12;:10;:12::i;:::-;7585:48;;;7624:8;7585:48;;;;;;:::i;:::-;;;;;;;;7378:260;;:::o;3510:43:12:-;;;;:::o;1483:188::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:1::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;1551:12:12::2;1569:10;:15;;1592:21;1569:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1550:68;;;1636:7;1628:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1540:131;1701:1:1::1;2628:7;:22;;;;1483:188:12:o:0;3699:591::-;3785:16;;;;;;;;;;;3768:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;3887:14;3875:8;3859:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;3842:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;3991:8;3968:19;;:31;;3951:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;4079:17;4067:8;:29;;4050:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;4156:31;4166:10;4178:8;4156:9;:31::i;:::-;4220:8;4197:19;;:31;;;;;;;:::i;:::-;;;;;;;;4238:45;4274:8;4259:11;;4251:31;;;;:::i;:::-;4238:12;:45::i;:::-;3699:591;:::o;4296:103::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4386:6:12::1;4367:16;;:25;;;;;;;;;;;;;;;;;;4296:103:::0;:::o;3468:36::-;;;;;;;;;;;;;:::o;8331:291:11:-;8462:28;8472:4;8478:2;8482:7;8462:9;:28::i;:::-;8511:48;8534:4;8540:2;8544:7;8553:5;8511:22;:48::i;:::-;8496:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;8331:291;;;;:::o;2441:40:12:-;;;;:::o;5999:361:11:-;6092:13;6130:16;6138:7;6130;:16::i;:::-;6115:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6200:21;6224:10;:8;:10::i;:::-;6200:34;;6277:1;6259:7;6253:21;:25;:102;;;;;;;;;;;;;;;;;6313:7;6322:18;:7;:16;:18::i;:::-;6296:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6253:102;6240:115;;;5999:361;;;:::o;12529:43::-;;;;:::o;1805:111:12:-;1863:7;1889:20;1903:5;1889:13;:20::i;:::-;1882:27;;1805:111;;;:::o;7696:178:11:-;7813:4;7834:18;:25;7853:5;7834:25;;;;;;;;;;;;;;;:35;7860:8;7834:35;;;;;;;;;;;;;;;;;;;;;;;;;7827:42;;7696:178;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;8852:103:11:-;8909:4;8938:12;;8928:7;:22;8921:29;;8852:103;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;12360:165:11:-;12479:2;12452:15;:24;12468:7;12452:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12512:7;12508:2;12492:28;;12501:5;12492:28;;;;;;;;;;;;12360:165;;;:::o;10804:1457::-;10896:35;10934:20;10946:7;10934:11;:20::i;:::-;10896:58;;10961:22;11003:13;:18;;;10987:34;;:12;:10;:12::i;:::-;:34;;;:80;;;;11055:12;:10;:12::i;:::-;11031:36;;:20;11043:7;11031:11;:20::i;:::-;:36;;;10987:80;:140;;;;11077:50;11094:13;:18;;;11114:12;:10;:12::i;:::-;11077:16;:50::i;:::-;10987:140;10961:167;;11150:17;11135:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;11268:4;11246:26;;:13;:18;;;:26;;;11231:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;11345:1;11331:16;;:2;:16;;;;11323:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11387:43;11409:4;11415:2;11419:7;11428:1;11387:21;:43::i;:::-;11484:49;11501:1;11505:7;11514:13;:18;;;11484:8;:49::i;:::-;11570:1;11540:12;:18;11553:4;11540:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11605:1;11577:12;:16;11590:2;11577:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11635:43;;;;;;;;11650:2;11635:43;;;;;;11661:15;11635:43;;;;;11612:11;:20;11624:7;11612:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11902:19;11934:1;11924:7;:11;;;;:::i;:::-;11902:33;;11986:1;11945:43;;:11;:24;11957:11;11945:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;11941:229;;;12002:20;12010:11;12002:7;:20::i;:::-;11998:166;;;12061:94;;;;;;;;12087:13;:18;;;12061:94;;;;;;12117:13;:28;;;12061:94;;;;;12034:11;:24;12046:11;12034:24;;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11998:166;11941:229;12200:7;12196:2;12181:27;;12190:4;12181:27;;;;;;;;;;;;12214:42;12235:4;12241:2;12245:7;12254:1;12214:20;:42::i;:::-;10890:1371;;;10804:1457;;;:::o;12672:827::-;12733:25;12761:24;;12733:52;;12810:1;12799:8;:12;12791:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;12846:16;12896:1;12885:8;12865:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;12846:51;;12935:1;12918:14;:18;;;;:::i;:::-;12907:8;:29;12903:79;;;12974:1;12957:14;:18;;;;:::i;:::-;12946:29;;12903:79;13095:17;13103:8;13095:7;:17::i;:::-;13087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13166:9;13178:17;13166:29;;13161:289;13202:8;13197:1;:13;13161:289;;13260:1;13229:33;;:11;:14;13241:1;13229:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13225:219;;;13274:31;13308:14;13320:1;13308:11;:14::i;:::-;13274:48;;13349:86;;;;;;;;13375:9;:14;;;13349:86;;;;;;13401:9;:24;;;13349:86;;;;;13332:11;:14;13344:1;13332:14;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13264:180;13225:219;13212:3;;;;;:::i;:::-;;;;13161:289;;;;13493:1;13482:8;:12;;;;:::i;:::-;13455:24;:39;;;;12727:772;;12672:827;:::o;8959:96::-;9023:27;9033:2;9037:8;9023:27;;;;;;;;;;;;:9;:27::i;:::-;8959:96;;:::o;4910:568::-;4983:21;;:::i;:::-;5022:16;5030:7;5022;:16::i;:::-;5014:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5083:26;5130:12;5119:7;:23;5115:91;;5198:1;5183:12;5173:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5152:47;;5115:91;5217:12;5232:7;5217:22;;5212:207;5249:18;5241:4;:26;5212:207;;5285:31;5319:11;:17;5331:4;5319:17;;;;;;;;;;;5285:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5374:1;5348:28;;:9;:14;;;:28;;;5344:69;;5395:9;5388:16;;;;;;;5344:69;5277:142;5269:6;;;;;:::i;:::-;;;;5212:207;;;;5425:48;;;;;;;;;;:::i;:::-;;;;;;;;4910:568;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;2077:219:12:-;2153:5;2140:9;:18;;2132:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;2211:5;2199:9;:17;2195:95;;;2240:10;2232:28;;:47;2273:5;2261:9;:17;;;;:::i;:::-;2232:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2195:95;2077:219;:::o;14030:658:11:-;14162:4;14178:15;:2;:13;;;:15::i;:::-;14174:510;;;14231:2;14215:36;;;14252:12;:10;:12::i;:::-;14266:4;14272:7;14281:5;14215:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14203:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14459:1;14442:6;:13;:18;14438:200;;;14474:52;;;;;;;;;;:::i;:::-;;;;;;;;14438:200;14608:6;14602:13;14593:6;14589:2;14585:15;14578:38;14203:443;14345:45;;;14335:55;;;:6;:55;;;;14328:62;;;;;14174:510;14673:4;14666:11;;14030:658;;;;;;;:::o;1255:112:12:-;1315:13;1347;1340:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1255:112;:::o;328:703:8:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;4681:225:11:-;4742:7;4789:1;4772:19;;:5;:19;;;;4757:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;4868:12;:19;4881:5;4868:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4860:41;;4853:48;;4681:225;;;:::o;15136:136::-;;;;;:::o;15644:135::-;;;;;:::o;9381:1203::-;9481:20;9504:12;;9481:35;;9544:1;9530:16;;:2;:16;;;;9522:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;9710:21;9718:12;9710:7;:21::i;:::-;9709:22;9701:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;9782:12;9770:8;:24;;9762:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9831:61;9861:1;9865:2;9869:12;9883:8;9831:21;:61::i;:::-;9899:30;9932:12;:16;9945:2;9932:16;;;;;;;;;;;;;;;9899:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9973:116;;;;;;;;10022:8;9992:11;:19;;;:39;;;;:::i;:::-;9973:116;;;;;;10074:8;10039:11;:24;;;:44;;;;:::i;:::-;9973:116;;;;;9954:12;:16;9967:2;9954:16;;;;;;;;;;;;;;;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10123:43;;;;;;;;10138:2;10123:43;;;;;;10149:15;10123:43;;;;;10095:11;:25;10107:12;10095:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10173:20;10196:12;10173:35;;10220:9;10215:265;10239:8;10235:1;:12;10215:265;;;10292:12;10288:2;10267:38;;10284:1;10267:38;;;;;;;;;;;;10330:59;10361:1;10365:2;10369:12;10383:5;10330:22;:59::i;:::-;10313:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;10459:14;;;;;:::i;:::-;;;;10249:3;;;;;:::i;:::-;;;;10215:265;;;;10501:12;10486;:27;;;;10519:60;10548:1;10552:2;10556:12;10570:8;10519:20;:60::i;:::-;9475:1109;;;9381:1203;;;:::o;1175:320:6:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;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;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1959:553::-;2017:8;2027:6;2077:3;2070:4;2062:6;2058:17;2054:27;2044:122;;2085:79;;:::i;:::-;2044:122;2198:6;2185:20;2175:30;;2228:18;2220:6;2217:30;2214:117;;;2250:79;;:::i;:::-;2214:117;2364:4;2356:6;2352:17;2340:29;;2418:3;2410:4;2402:6;2398:17;2388:8;2384:32;2381:41;2378:128;;;2425:79;;:::i;:::-;2378:128;1959:553;;;;;:::o;2518:139::-;2564:5;2602:6;2589:20;2580:29;;2618:33;2645:5;2618:33;:::i;:::-;2518:139;;;;:::o;2663:329::-;2722:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:119;;;2777:79;;:::i;:::-;2739:119;2897:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2868:117;2663:329;;;;:::o;2998:474::-;3066:6;3074;3123:2;3111:9;3102:7;3098:23;3094:32;3091:119;;;3129:79;;:::i;:::-;3091:119;3249:1;3274:53;3319:7;3310:6;3299:9;3295:22;3274:53;:::i;:::-;3264:63;;3220:117;3376:2;3402:53;3447:7;3438:6;3427:9;3423:22;3402:53;:::i;:::-;3392:63;;3347:118;2998:474;;;;;:::o;3478:619::-;3555:6;3563;3571;3620:2;3608:9;3599:7;3595:23;3591:32;3588:119;;;3626:79;;:::i;:::-;3588:119;3746:1;3771:53;3816:7;3807:6;3796:9;3792:22;3771:53;:::i;:::-;3761:63;;3717:117;3873:2;3899:53;3944:7;3935:6;3924:9;3920:22;3899:53;:::i;:::-;3889:63;;3844:118;4001:2;4027:53;4072:7;4063:6;4052:9;4048:22;4027:53;:::i;:::-;4017:63;;3972:118;3478:619;;;;;:::o;4103:943::-;4198:6;4206;4214;4222;4271:3;4259:9;4250:7;4246:23;4242:33;4239:120;;;4278:79;;:::i;:::-;4239:120;4398:1;4423:53;4468:7;4459:6;4448:9;4444:22;4423:53;:::i;:::-;4413:63;;4369:117;4525:2;4551:53;4596:7;4587:6;4576:9;4572:22;4551:53;:::i;:::-;4541:63;;4496:118;4653:2;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4624:118;4809:2;4798:9;4794:18;4781:32;4840:18;4832:6;4829:30;4826:117;;;4862:79;;:::i;:::-;4826:117;4967:62;5021:7;5012:6;5001:9;4997:22;4967:62;:::i;:::-;4957:72;;4752:287;4103:943;;;;;;;:::o;5052:468::-;5117:6;5125;5174:2;5162:9;5153:7;5149:23;5145:32;5142:119;;;5180:79;;:::i;:::-;5142:119;5300:1;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5271:117;5427:2;5453:50;5495:7;5486:6;5475:9;5471:22;5453:50;:::i;:::-;5443:60;;5398:115;5052:468;;;;;:::o;5526:474::-;5594:6;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;5526:474;;;;;:::o;6006:559::-;6092:6;6100;6149:2;6137:9;6128:7;6124:23;6120:32;6117:119;;;6155:79;;:::i;:::-;6117:119;6303:1;6292:9;6288:17;6275:31;6333:18;6325:6;6322:30;6319:117;;;6355:79;;:::i;:::-;6319:117;6468:80;6540:7;6531:6;6520:9;6516:22;6468:80;:::i;:::-;6450:98;;;;6246:312;6006:559;;;;;:::o;6571:323::-;6627:6;6676:2;6664:9;6655:7;6651:23;6647:32;6644:119;;;6682:79;;:::i;:::-;6644:119;6802:1;6827:50;6869:7;6860:6;6849:9;6845:22;6827:50;:::i;:::-;6817:60;;6773:114;6571:323;;;;:::o;6900:327::-;6958:6;7007:2;6995:9;6986:7;6982:23;6978:32;6975:119;;;7013:79;;:::i;:::-;6975:119;7133:1;7158:52;7202:7;7193:6;7182:9;7178:22;7158:52;:::i;:::-;7148:62;;7104:116;6900:327;;;;:::o;7233:349::-;7302:6;7351:2;7339:9;7330:7;7326:23;7322:32;7319:119;;;7357:79;;:::i;:::-;7319:119;7477:1;7502:63;7557:7;7548:6;7537:9;7533:22;7502:63;:::i;:::-;7492:73;;7448:127;7233:349;;;;:::o;7588:529::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7870:1;7859:9;7855:17;7842:31;7900:18;7892:6;7889:30;7886:117;;;7922:79;;:::i;:::-;7886:117;8035:65;8092:7;8083:6;8072:9;8068:22;8035:65;:::i;:::-;8017:83;;;;7813:297;7588:529;;;;;:::o;8123:329::-;8182:6;8231:2;8219:9;8210:7;8206:23;8202:32;8199:119;;;8237:79;;:::i;:::-;8199:119;8357:1;8382:53;8427:7;8418:6;8407:9;8403:22;8382:53;:::i;:::-;8372:63;;8328:117;8123:329;;;;:::o;8458:474::-;8526:6;8534;8583:2;8571:9;8562:7;8558:23;8554:32;8551:119;;;8589:79;;:::i;:::-;8551:119;8709:1;8734:53;8779:7;8770:6;8759:9;8755:22;8734:53;:::i;:::-;8724:63;;8680:117;8836:2;8862:53;8907:7;8898:6;8887:9;8883:22;8862:53;:::i;:::-;8852:63;;8807:118;8458:474;;;;;:::o;8938:108::-;9015:24;9033:5;9015:24;:::i;:::-;9010:3;9003:37;8938:108;;:::o;9052:118::-;9139:24;9157:5;9139:24;:::i;:::-;9134:3;9127:37;9052:118;;:::o;9176:109::-;9257:21;9272:5;9257:21;:::i;:::-;9252:3;9245:34;9176:109;;:::o;9291:360::-;9377:3;9405:38;9437:5;9405:38;:::i;:::-;9459:70;9522:6;9517:3;9459:70;:::i;:::-;9452:77;;9538:52;9583:6;9578:3;9571:4;9564:5;9560:16;9538:52;:::i;:::-;9615:29;9637:6;9615:29;:::i;:::-;9610:3;9606:39;9599:46;;9381:270;9291:360;;;;:::o;9657:364::-;9745:3;9773:39;9806:5;9773:39;:::i;:::-;9828:71;9892:6;9887:3;9828:71;:::i;:::-;9821:78;;9908:52;9953:6;9948:3;9941:4;9934:5;9930:16;9908:52;:::i;:::-;9985:29;10007:6;9985:29;:::i;:::-;9980:3;9976:39;9969:46;;9749:272;9657:364;;;;:::o;10027:377::-;10133:3;10161:39;10194:5;10161:39;:::i;:::-;10216:89;10298:6;10293:3;10216:89;:::i;:::-;10209:96;;10314:52;10359:6;10354:3;10347:4;10340:5;10336:16;10314:52;:::i;:::-;10391:6;10386:3;10382:16;10375:23;;10137:267;10027:377;;;;:::o;10410:366::-;10552:3;10573:67;10637:2;10632:3;10573:67;:::i;:::-;10566:74;;10649:93;10738:3;10649:93;:::i;:::-;10767:2;10762:3;10758:12;10751:19;;10410:366;;;:::o;10782:::-;10924:3;10945:67;11009:2;11004:3;10945:67;:::i;:::-;10938:74;;11021:93;11110:3;11021:93;:::i;:::-;11139:2;11134:3;11130:12;11123:19;;10782:366;;;:::o;11154:::-;11296:3;11317:67;11381:2;11376:3;11317:67;:::i;:::-;11310:74;;11393:93;11482:3;11393:93;:::i;:::-;11511:2;11506:3;11502:12;11495:19;;11154:366;;;:::o;11526:::-;11668:3;11689:67;11753:2;11748:3;11689:67;:::i;:::-;11682:74;;11765:93;11854:3;11765:93;:::i;:::-;11883:2;11878:3;11874:12;11867:19;;11526:366;;;:::o;11898:::-;12040:3;12061:67;12125:2;12120:3;12061:67;:::i;:::-;12054:74;;12137:93;12226:3;12137:93;:::i;:::-;12255:2;12250:3;12246:12;12239:19;;11898:366;;;:::o;12270:::-;12412:3;12433:67;12497:2;12492:3;12433:67;:::i;:::-;12426:74;;12509:93;12598:3;12509:93;:::i;:::-;12627:2;12622:3;12618:12;12611:19;;12270:366;;;:::o;12642:::-;12784:3;12805:67;12869:2;12864:3;12805:67;:::i;:::-;12798:74;;12881:93;12970:3;12881:93;:::i;:::-;12999:2;12994:3;12990:12;12983:19;;12642:366;;;:::o;13014:::-;13156:3;13177:67;13241:2;13236:3;13177:67;:::i;:::-;13170:74;;13253:93;13342:3;13253:93;:::i;:::-;13371:2;13366:3;13362:12;13355:19;;13014:366;;;:::o;13386:::-;13528:3;13549:67;13613:2;13608:3;13549:67;:::i;:::-;13542:74;;13625:93;13714:3;13625:93;:::i;:::-;13743:2;13738:3;13734:12;13727:19;;13386:366;;;:::o;13758:::-;13900:3;13921:67;13985:2;13980:3;13921:67;:::i;:::-;13914:74;;13997:93;14086:3;13997:93;:::i;:::-;14115:2;14110:3;14106:12;14099:19;;13758:366;;;:::o;14130:365::-;14272:3;14293:66;14357:1;14352:3;14293:66;:::i;:::-;14286:73;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14130:365;;;:::o;14501:366::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:::-;15015:3;15036:67;15100:2;15095:3;15036:67;:::i;:::-;15029:74;;15112:93;15201:3;15112:93;:::i;:::-;15230:2;15225:3;15221:12;15214:19;;14873:366;;;:::o;15245:::-;15387:3;15408:67;15472:2;15467:3;15408:67;:::i;:::-;15401:74;;15484:93;15573:3;15484:93;:::i;:::-;15602:2;15597:3;15593:12;15586:19;;15245:366;;;:::o;15617:::-;15759:3;15780:67;15844:2;15839:3;15780:67;:::i;:::-;15773:74;;15856:93;15945:3;15856:93;:::i;:::-;15974:2;15969:3;15965:12;15958:19;;15617:366;;;:::o;15989:::-;16131:3;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16228:93;16317:3;16228:93;:::i;:::-;16346:2;16341:3;16337:12;16330:19;;15989:366;;;:::o;16361:::-;16503:3;16524:67;16588:2;16583:3;16524:67;:::i;:::-;16517:74;;16600:93;16689:3;16600:93;:::i;:::-;16718:2;16713:3;16709:12;16702:19;;16361:366;;;:::o;16733:::-;16875:3;16896:67;16960:2;16955:3;16896:67;:::i;:::-;16889:74;;16972:93;17061:3;16972:93;:::i;:::-;17090:2;17085:3;17081:12;17074:19;;16733:366;;;:::o;17105:::-;17247:3;17268:67;17332:2;17327:3;17268:67;:::i;:::-;17261:74;;17344:93;17433:3;17344:93;:::i;:::-;17462:2;17457:3;17453:12;17446:19;;17105:366;;;:::o;17477:::-;17619:3;17640:67;17704:2;17699:3;17640:67;:::i;:::-;17633:74;;17716:93;17805:3;17716:93;:::i;:::-;17834:2;17829:3;17825:12;17818:19;;17477:366;;;:::o;17849:::-;17991:3;18012:67;18076:2;18071:3;18012:67;:::i;:::-;18005:74;;18088:93;18177:3;18088:93;:::i;:::-;18206:2;18201:3;18197:12;18190:19;;17849:366;;;:::o;18221:::-;18363:3;18384:67;18448:2;18443:3;18384:67;:::i;:::-;18377:74;;18460:93;18549:3;18460:93;:::i;:::-;18578:2;18573:3;18569:12;18562:19;;18221:366;;;:::o;18593:::-;18735:3;18756:67;18820:2;18815:3;18756:67;:::i;:::-;18749:74;;18832:93;18921:3;18832:93;:::i;:::-;18950:2;18945:3;18941:12;18934:19;;18593:366;;;:::o;18965:::-;19107:3;19128:67;19192:2;19187:3;19128:67;:::i;:::-;19121:74;;19204:93;19293:3;19204:93;:::i;:::-;19322:2;19317:3;19313:12;19306:19;;18965:366;;;:::o;19337:398::-;19496:3;19517:83;19598:1;19593:3;19517:83;:::i;:::-;19510:90;;19609:93;19698:3;19609:93;:::i;:::-;19727:1;19722:3;19718:11;19711:18;;19337:398;;;:::o;19741:366::-;19883:3;19904:67;19968:2;19963:3;19904:67;:::i;:::-;19897:74;;19980:93;20069:3;19980:93;:::i;:::-;20098:2;20093:3;20089:12;20082:19;;19741:366;;;:::o;20113:::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:::-;20627:3;20648:67;20712:2;20707:3;20648:67;:::i;:::-;20641:74;;20724:93;20813:3;20724:93;:::i;:::-;20842:2;20837:3;20833:12;20826:19;;20485:366;;;:::o;20857:::-;20999:3;21020:67;21084:2;21079:3;21020:67;:::i;:::-;21013:74;;21096:93;21185:3;21096:93;:::i;:::-;21214:2;21209:3;21205:12;21198:19;;20857:366;;;:::o;21229:::-;21371:3;21392:67;21456:2;21451:3;21392:67;:::i;:::-;21385:74;;21468:93;21557:3;21468:93;:::i;:::-;21586:2;21581:3;21577:12;21570:19;;21229:366;;;:::o;21601:::-;21743:3;21764:67;21828:2;21823:3;21764:67;:::i;:::-;21757:74;;21840:93;21929:3;21840:93;:::i;:::-;21958:2;21953:3;21949:12;21942:19;;21601:366;;;:::o;21973:::-;22115:3;22136:67;22200:2;22195:3;22136:67;:::i;:::-;22129:74;;22212:93;22301:3;22212:93;:::i;:::-;22330:2;22325:3;22321:12;22314:19;;21973:366;;;:::o;22345:::-;22487:3;22508:67;22572:2;22567:3;22508:67;:::i;:::-;22501:74;;22584:93;22673:3;22584:93;:::i;:::-;22702:2;22697:3;22693:12;22686:19;;22345:366;;;:::o;22787:527::-;22946:4;22941:3;22937:14;23033:4;23026:5;23022:16;23016:23;23052:63;23109:4;23104:3;23100:14;23086:12;23052:63;:::i;:::-;22961:164;23217:4;23210:5;23206:16;23200:23;23236:61;23291:4;23286:3;23282:14;23268:12;23236:61;:::i;:::-;23135:172;22915:399;22787:527;;:::o;23320:118::-;23407:24;23425:5;23407:24;:::i;:::-;23402:3;23395:37;23320:118;;:::o;23444:105::-;23519:23;23536:5;23519:23;:::i;:::-;23514:3;23507:36;23444:105;;:::o;23555:435::-;23735:3;23757:95;23848:3;23839:6;23757:95;:::i;:::-;23750:102;;23869:95;23960:3;23951:6;23869:95;:::i;:::-;23862:102;;23981:3;23974:10;;23555:435;;;;;:::o;23996:379::-;24180:3;24202:147;24345:3;24202:147;:::i;:::-;24195:154;;24366:3;24359:10;;23996:379;;;:::o;24381:222::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24525:71;24593:1;24582:9;24578:17;24569:6;24525:71;:::i;:::-;24381:222;;;;:::o;24609:640::-;24804:4;24842:3;24831:9;24827:19;24819:27;;24856:71;24924:1;24913:9;24909:17;24900:6;24856:71;:::i;:::-;24937:72;25005:2;24994:9;24990:18;24981:6;24937:72;:::i;:::-;25019;25087:2;25076:9;25072:18;25063:6;25019:72;:::i;:::-;25138:9;25132:4;25128:20;25123:2;25112:9;25108:18;25101:48;25166:76;25237:4;25228:6;25166:76;:::i;:::-;25158:84;;24609:640;;;;;;;:::o;25255:210::-;25342:4;25380:2;25369:9;25365:18;25357:26;;25393:65;25455:1;25444:9;25440:17;25431:6;25393:65;:::i;:::-;25255:210;;;;:::o;25471:313::-;25584:4;25622:2;25611:9;25607:18;25599:26;;25671:9;25665:4;25661:20;25657:1;25646:9;25642:17;25635:47;25699:78;25772:4;25763:6;25699:78;:::i;:::-;25691:86;;25471:313;;;;:::o;25790:419::-;25956:4;25994:2;25983:9;25979:18;25971:26;;26043:9;26037:4;26033:20;26029:1;26018:9;26014:17;26007:47;26071:131;26197:4;26071:131;:::i;:::-;26063:139;;25790:419;;;:::o;26215:::-;26381:4;26419:2;26408:9;26404:18;26396:26;;26468:9;26462:4;26458:20;26454:1;26443:9;26439:17;26432:47;26496:131;26622:4;26496:131;:::i;:::-;26488:139;;26215:419;;;:::o;26640:::-;26806:4;26844:2;26833:9;26829:18;26821:26;;26893:9;26887:4;26883:20;26879:1;26868:9;26864:17;26857:47;26921:131;27047:4;26921:131;:::i;:::-;26913:139;;26640:419;;;:::o;27065:::-;27231:4;27269:2;27258:9;27254:18;27246:26;;27318:9;27312:4;27308:20;27304:1;27293:9;27289:17;27282:47;27346:131;27472:4;27346:131;:::i;:::-;27338:139;;27065:419;;;:::o;27490:::-;27656:4;27694:2;27683:9;27679:18;27671:26;;27743:9;27737:4;27733:20;27729:1;27718:9;27714:17;27707:47;27771:131;27897:4;27771:131;:::i;:::-;27763:139;;27490:419;;;:::o;27915:::-;28081:4;28119:2;28108:9;28104:18;28096:26;;28168:9;28162:4;28158:20;28154:1;28143:9;28139:17;28132:47;28196:131;28322:4;28196:131;:::i;:::-;28188:139;;27915:419;;;:::o;28340:::-;28506:4;28544:2;28533:9;28529:18;28521:26;;28593:9;28587:4;28583:20;28579:1;28568:9;28564:17;28557:47;28621:131;28747:4;28621:131;:::i;:::-;28613:139;;28340:419;;;:::o;28765:::-;28931:4;28969:2;28958:9;28954:18;28946:26;;29018:9;29012:4;29008:20;29004:1;28993:9;28989:17;28982:47;29046:131;29172:4;29046:131;:::i;:::-;29038:139;;28765:419;;;:::o;29190:::-;29356:4;29394:2;29383:9;29379:18;29371:26;;29443:9;29437:4;29433:20;29429:1;29418:9;29414:17;29407:47;29471:131;29597:4;29471:131;:::i;:::-;29463:139;;29190:419;;;:::o;29615:::-;29781:4;29819:2;29808:9;29804:18;29796:26;;29868:9;29862:4;29858:20;29854:1;29843:9;29839:17;29832:47;29896:131;30022:4;29896:131;:::i;:::-;29888:139;;29615:419;;;:::o;30040:::-;30206:4;30244:2;30233:9;30229:18;30221:26;;30293:9;30287:4;30283:20;30279:1;30268:9;30264:17;30257:47;30321:131;30447:4;30321:131;:::i;:::-;30313:139;;30040:419;;;:::o;30465:::-;30631:4;30669:2;30658:9;30654:18;30646:26;;30718:9;30712:4;30708:20;30704:1;30693:9;30689:17;30682:47;30746:131;30872:4;30746:131;:::i;:::-;30738:139;;30465:419;;;:::o;30890:::-;31056:4;31094:2;31083:9;31079:18;31071:26;;31143:9;31137:4;31133:20;31129:1;31118:9;31114:17;31107:47;31171:131;31297:4;31171:131;:::i;:::-;31163:139;;30890:419;;;:::o;31315:::-;31481:4;31519:2;31508:9;31504:18;31496:26;;31568:9;31562:4;31558:20;31554:1;31543:9;31539:17;31532:47;31596:131;31722:4;31596:131;:::i;:::-;31588:139;;31315:419;;;:::o;31740:::-;31906:4;31944:2;31933:9;31929:18;31921:26;;31993:9;31987:4;31983:20;31979:1;31968:9;31964:17;31957:47;32021:131;32147:4;32021:131;:::i;:::-;32013:139;;31740:419;;;:::o;32165:::-;32331:4;32369:2;32358:9;32354:18;32346:26;;32418:9;32412:4;32408:20;32404:1;32393:9;32389:17;32382:47;32446:131;32572:4;32446:131;:::i;:::-;32438:139;;32165:419;;;:::o;32590:::-;32756:4;32794:2;32783:9;32779:18;32771:26;;32843:9;32837:4;32833:20;32829:1;32818:9;32814:17;32807:47;32871:131;32997:4;32871:131;:::i;:::-;32863:139;;32590:419;;;:::o;33015:::-;33181:4;33219:2;33208:9;33204:18;33196:26;;33268:9;33262:4;33258:20;33254:1;33243:9;33239:17;33232:47;33296:131;33422:4;33296:131;:::i;:::-;33288:139;;33015:419;;;:::o;33440:::-;33606:4;33644:2;33633:9;33629:18;33621:26;;33693:9;33687:4;33683:20;33679:1;33668:9;33664:17;33657:47;33721:131;33847:4;33721:131;:::i;:::-;33713:139;;33440:419;;;:::o;33865:::-;34031:4;34069:2;34058:9;34054:18;34046:26;;34118:9;34112:4;34108:20;34104:1;34093:9;34089:17;34082:47;34146:131;34272:4;34146:131;:::i;:::-;34138:139;;33865:419;;;:::o;34290:::-;34456:4;34494:2;34483:9;34479:18;34471:26;;34543:9;34537:4;34533:20;34529:1;34518:9;34514:17;34507:47;34571:131;34697:4;34571:131;:::i;:::-;34563:139;;34290:419;;;:::o;34715:::-;34881:4;34919:2;34908:9;34904:18;34896:26;;34968:9;34962:4;34958:20;34954:1;34943:9;34939:17;34932:47;34996:131;35122:4;34996:131;:::i;:::-;34988:139;;34715:419;;;:::o;35140:::-;35306:4;35344:2;35333:9;35329:18;35321:26;;35393:9;35387:4;35383:20;35379:1;35368:9;35364:17;35357:47;35421:131;35547:4;35421:131;:::i;:::-;35413:139;;35140:419;;;:::o;35565:::-;35731:4;35769:2;35758:9;35754:18;35746:26;;35818:9;35812:4;35808:20;35804:1;35793:9;35789:17;35782:47;35846:131;35972:4;35846:131;:::i;:::-;35838:139;;35565:419;;;:::o;35990:::-;36156:4;36194:2;36183:9;36179:18;36171:26;;36243:9;36237:4;36233:20;36229:1;36218:9;36214:17;36207:47;36271:131;36397:4;36271:131;:::i;:::-;36263:139;;35990:419;;;:::o;36415:::-;36581:4;36619:2;36608:9;36604:18;36596:26;;36668:9;36662:4;36658:20;36654:1;36643:9;36639:17;36632:47;36696:131;36822:4;36696:131;:::i;:::-;36688:139;;36415:419;;;:::o;36840:::-;37006:4;37044:2;37033:9;37029:18;37021:26;;37093:9;37087:4;37083:20;37079:1;37068:9;37064:17;37057:47;37121:131;37247:4;37121:131;:::i;:::-;37113:139;;36840:419;;;:::o;37265:::-;37431:4;37469:2;37458:9;37454:18;37446:26;;37518:9;37512:4;37508:20;37504:1;37493:9;37489:17;37482:47;37546:131;37672:4;37546:131;:::i;:::-;37538:139;;37265:419;;;:::o;37690:::-;37856:4;37894:2;37883:9;37879:18;37871:26;;37943:9;37937:4;37933:20;37929:1;37918:9;37914:17;37907:47;37971:131;38097:4;37971:131;:::i;:::-;37963:139;;37690:419;;;:::o;38115:::-;38281:4;38319:2;38308:9;38304:18;38296:26;;38368:9;38362:4;38358:20;38354:1;38343:9;38339:17;38332:47;38396:131;38522:4;38396:131;:::i;:::-;38388:139;;38115:419;;;:::o;38540:::-;38706:4;38744:2;38733:9;38729:18;38721:26;;38793:9;38787:4;38783:20;38779:1;38768:9;38764:17;38757:47;38821:131;38947:4;38821:131;:::i;:::-;38813:139;;38540:419;;;:::o;38965:::-;39131:4;39169:2;39158:9;39154:18;39146:26;;39218:9;39212:4;39208:20;39204:1;39193:9;39189:17;39182:47;39246:131;39372:4;39246:131;:::i;:::-;39238:139;;38965:419;;;:::o;39390:346::-;39545:4;39583:2;39572:9;39568:18;39560:26;;39596:133;39726:1;39715:9;39711:17;39702:6;39596:133;:::i;:::-;39390:346;;;;:::o;39742:222::-;39835:4;39873:2;39862:9;39858:18;39850:26;;39886:71;39954:1;39943:9;39939:17;39930:6;39886:71;:::i;:::-;39742:222;;;;:::o;39970:129::-;40004:6;40031:20;;:::i;:::-;40021:30;;40060:33;40088:4;40080:6;40060:33;:::i;:::-;39970:129;;;:::o;40105:75::-;40138:6;40171:2;40165:9;40155:19;;40105:75;:::o;40186:307::-;40247:4;40337:18;40329:6;40326:30;40323:56;;;40359:18;;:::i;:::-;40323:56;40397:29;40419:6;40397:29;:::i;:::-;40389:37;;40481:4;40475;40471:15;40463:23;;40186:307;;;:::o;40499:98::-;40550:6;40584:5;40578:12;40568:22;;40499:98;;;:::o;40603:99::-;40655:6;40689:5;40683:12;40673:22;;40603:99;;;:::o;40708:168::-;40791:11;40825:6;40820:3;40813:19;40865:4;40860:3;40856:14;40841:29;;40708:168;;;;:::o;40882:147::-;40983:11;41020:3;41005:18;;40882:147;;;;:::o;41035:169::-;41119:11;41153:6;41148:3;41141:19;41193:4;41188:3;41184:14;41169:29;;41035:169;;;;:::o;41210:148::-;41312:11;41349:3;41334:18;;41210:148;;;;:::o;41364:273::-;41404:3;41423:20;41441:1;41423:20;:::i;:::-;41418:25;;41457:20;41475:1;41457:20;:::i;:::-;41452:25;;41579:1;41543:34;41539:42;41536:1;41533:49;41530:75;;;41585:18;;:::i;:::-;41530:75;41629:1;41626;41622:9;41615:16;;41364:273;;;;:::o;41643:305::-;41683:3;41702:20;41720:1;41702:20;:::i;:::-;41697:25;;41736:20;41754:1;41736:20;:::i;:::-;41731:25;;41890:1;41822:66;41818:74;41815:1;41812:81;41809:107;;;41896:18;;:::i;:::-;41809:107;41940:1;41937;41933:9;41926:16;;41643:305;;;;:::o;41954:185::-;41994:1;42011:20;42029:1;42011:20;:::i;:::-;42006:25;;42045:20;42063:1;42045:20;:::i;:::-;42040:25;;42084:1;42074:35;;42089:18;;:::i;:::-;42074:35;42131:1;42128;42124:9;42119:14;;41954:185;;;;:::o;42145:348::-;42185:7;42208:20;42226:1;42208:20;:::i;:::-;42203:25;;42242:20;42260:1;42242:20;:::i;:::-;42237:25;;42430:1;42362:66;42358:74;42355:1;42352:81;42347:1;42340:9;42333:17;42329:105;42326:131;;;42437:18;;:::i;:::-;42326:131;42485:1;42482;42478:9;42467:20;;42145:348;;;;:::o;42499:191::-;42539:4;42559:20;42577:1;42559:20;:::i;:::-;42554:25;;42593:20;42611:1;42593:20;:::i;:::-;42588:25;;42632:1;42629;42626:8;42623:34;;;42637:18;;:::i;:::-;42623:34;42682:1;42679;42675:9;42667:17;;42499:191;;;;:::o;42696:::-;42736:4;42756:20;42774:1;42756:20;:::i;:::-;42751:25;;42790:20;42808:1;42790:20;:::i;:::-;42785:25;;42829:1;42826;42823:8;42820:34;;;42834:18;;:::i;:::-;42820:34;42879:1;42876;42872:9;42864:17;;42696:191;;;;:::o;42893:96::-;42930:7;42959:24;42977:5;42959:24;:::i;:::-;42948:35;;42893:96;;;:::o;42995:90::-;43029:7;43072:5;43065:13;43058:21;43047:32;;42995:90;;;:::o;43091:149::-;43127:7;43167:66;43160:5;43156:78;43145:89;;43091:149;;;:::o;43246:118::-;43283:7;43323:34;43316:5;43312:46;43301:57;;43246:118;;;:::o;43370:126::-;43407:7;43447:42;43440:5;43436:54;43425:65;;43370:126;;;:::o;43502:77::-;43539:7;43568:5;43557:16;;43502:77;;;:::o;43585:101::-;43621:7;43661:18;43654:5;43650:30;43639:41;;43585:101;;;:::o;43692:154::-;43776:6;43771:3;43766;43753:30;43838:1;43829:6;43824:3;43820:16;43813:27;43692:154;;;:::o;43852:307::-;43920:1;43930:113;43944:6;43941:1;43938:13;43930:113;;;44029:1;44024:3;44020:11;44014:18;44010:1;44005:3;44001:11;43994:39;43966:2;43963:1;43959:10;43954:15;;43930:113;;;44061:6;44058:1;44055:13;44052:101;;;44141:1;44132:6;44127:3;44123:16;44116:27;44052:101;43901:258;43852:307;;;:::o;44165:171::-;44204:3;44227:24;44245:5;44227:24;:::i;:::-;44218:33;;44273:4;44266:5;44263:15;44260:41;;;44281:18;;:::i;:::-;44260:41;44328:1;44321:5;44317:13;44310:20;;44165:171;;;:::o;44342:320::-;44386:6;44423:1;44417:4;44413:12;44403:22;;44470:1;44464:4;44460:12;44491:18;44481:81;;44547:4;44539:6;44535:17;44525:27;;44481:81;44609:2;44601:6;44598:14;44578:18;44575:38;44572:84;;;44628:18;;:::i;:::-;44572:84;44393:269;44342:320;;;:::o;44668:281::-;44751:27;44773:4;44751:27;:::i;:::-;44743:6;44739:40;44881:6;44869:10;44866:22;44845:18;44833:10;44830:34;44827:62;44824:88;;;44892:18;;:::i;:::-;44824:88;44932:10;44928:2;44921:22;44711:238;44668:281;;:::o;44955:233::-;44994:3;45017:24;45035:5;45017:24;:::i;:::-;45008:33;;45063:66;45056:5;45053:77;45050:103;;;45133:18;;:::i;:::-;45050:103;45180:1;45173:5;45169:13;45162:20;;44955:233;;;:::o;45194:176::-;45226:1;45243:20;45261:1;45243:20;:::i;:::-;45238:25;;45277:20;45295:1;45277:20;:::i;:::-;45272:25;;45316:1;45306:35;;45321:18;;:::i;:::-;45306:35;45362:1;45359;45355:9;45350:14;;45194:176;;;;:::o;45376:180::-;45424:77;45421:1;45414:88;45521:4;45518:1;45511:15;45545:4;45542:1;45535:15;45562:180;45610:77;45607:1;45600:88;45707:4;45704:1;45697:15;45731:4;45728:1;45721:15;45748:180;45796:77;45793:1;45786:88;45893:4;45890:1;45883:15;45917:4;45914:1;45907:15;45934:180;45982:77;45979:1;45972:88;46079:4;46076:1;46069:15;46103:4;46100:1;46093:15;46120:180;46168:77;46165:1;46158:88;46265:4;46262:1;46255:15;46289:4;46286:1;46279:15;46306:117;46415:1;46412;46405:12;46429:117;46538:1;46535;46528:12;46552:117;46661:1;46658;46651:12;46675:117;46784:1;46781;46774:12;46798:117;46907:1;46904;46897:12;46921:117;47030:1;47027;47020:12;47044:102;47085:6;47136:2;47132:7;47127:2;47120:5;47116:14;47112:28;47102:38;;47044:102;;;:::o;47152:235::-;47292:34;47288:1;47280:6;47276:14;47269:58;47361:18;47356:2;47348:6;47344:15;47337:43;47152:235;:::o;47393:181::-;47533:33;47529:1;47521:6;47517:14;47510:57;47393:181;:::o;47580:223::-;47720:34;47716:1;47708:6;47704:14;47697:58;47789:6;47784:2;47776:6;47772:15;47765:31;47580:223;:::o;47809:225::-;47949:34;47945:1;47937:6;47933:14;47926:58;48018:8;48013:2;48005:6;48001:15;47994:33;47809:225;:::o;48040:221::-;48180:34;48176:1;48168:6;48164:14;48157:58;48249:4;48244:2;48236:6;48232:15;48225:29;48040:221;:::o;48267:178::-;48407:30;48403:1;48395:6;48391:14;48384:54;48267:178;:::o;48451:175::-;48591:27;48587:1;48579:6;48575:14;48568:51;48451:175;:::o;48632:227::-;48772:34;48768:1;48760:6;48756:14;48749:58;48841:10;48836:2;48828:6;48824:15;48817:35;48632:227;:::o;48865:176::-;49005:28;49001:1;48993:6;48989:14;48982:52;48865:176;:::o;49047:168::-;49187:20;49183:1;49175:6;49171:14;49164:44;49047:168;:::o;49221:159::-;49361:11;49357:1;49349:6;49345:14;49338:35;49221:159;:::o;49386:229::-;49526:34;49522:1;49514:6;49510:14;49503:58;49595:12;49590:2;49582:6;49578:15;49571:37;49386:229;:::o;49621:174::-;49761:26;49757:1;49749:6;49745:14;49738:50;49621:174;:::o;49801:225::-;49941:34;49937:1;49929:6;49925:14;49918:58;50010:8;50005:2;49997:6;49993:15;49986:33;49801:225;:::o;50032:228::-;50172:34;50168:1;50160:6;50156:14;50149:58;50241:11;50236:2;50228:6;50224:15;50217:36;50032:228;:::o;50266:168::-;50406:20;50402:1;50394:6;50390:14;50383:44;50266:168;:::o;50440:180::-;50580:32;50576:1;50568:6;50564:14;50557:56;50440:180;:::o;50626:179::-;50766:31;50762:1;50754:6;50750:14;50743:55;50626:179;:::o;50811:220::-;50951:34;50947:1;50939:6;50935:14;50928:58;51020:3;51015:2;51007:6;51003:15;50996:28;50811:220;:::o;51037:182::-;51177:34;51173:1;51165:6;51161:14;51154:58;51037:182;:::o;51225:170::-;51365:22;51361:1;51353:6;51349:14;51342:46;51225:170;:::o;51401:167::-;51541:19;51537:1;51529:6;51525:14;51518:43;51401:167;:::o;51574:175::-;51714:27;51710:1;51702:6;51698:14;51691:51;51574:175;:::o;51755:177::-;51895:29;51891:1;51883:6;51879:14;51872:53;51755:177;:::o;51938:114::-;;:::o;52058:166::-;52198:18;52194:1;52186:6;52182:14;52175:42;52058:166;:::o;52230:172::-;52370:24;52366:1;52358:6;52354:14;52347:48;52230:172;:::o;52408:175::-;52548:27;52544:1;52536:6;52532:14;52525:51;52408:175;:::o;52589:226::-;52729:34;52725:1;52717:6;52713:14;52706:58;52798:9;52793:2;52785:6;52781:15;52774:34;52589:226;:::o;52821:224::-;52961:34;52957:1;52949:6;52945:14;52938:58;53030:7;53025:2;53017:6;53013:15;53006:32;52821:224;:::o;53051:225::-;53191:34;53187:1;53179:6;53175:14;53168:58;53260:8;53255:2;53247:6;53243:15;53236:33;53051:225;:::o;53282:181::-;53422:33;53418:1;53410:6;53406:14;53399:57;53282:181;:::o;53469:174::-;53609:26;53605:1;53597:6;53593:14;53586:50;53469:174;:::o;53649:122::-;53722:24;53740:5;53722:24;:::i;:::-;53715:5;53712:35;53702:63;;53761:1;53758;53751:12;53702:63;53649:122;:::o;53777:116::-;53847:21;53862:5;53847:21;:::i;:::-;53840:5;53837:32;53827:60;;53883:1;53880;53873:12;53827:60;53777:116;:::o;53899:120::-;53971:23;53988:5;53971:23;:::i;:::-;53964:5;53961:34;53951:62;;54009:1;54006;53999:12;53951:62;53899:120;:::o;54025:122::-;54098:24;54116:5;54098:24;:::i;:::-;54091:5;54088:35;54078:63;;54137:1;54134;54127:12;54078:63;54025:122;:::o
Swarm Source
ipfs://11fce755522677655dc233155335271a3c19fab97770f6becd7050681b50c75e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.