ERC-721
Overview
Max Total Supply
333 KEK
Holders
319
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 KEKLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Kek
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-03 */ // File: @openzeppelin/contracts/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); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/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; } } // File: contracts/ERC721A.sol // Creators: locationtba.eth, 2pmflow.eth pragma solidity ^0.8.0; /** * @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..). * * 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 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. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public 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), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > currentIndex - 1) { endIndex = currentIndex - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Kek.sol pragma solidity ^0.8.0; contract Kek is Ownable, ERC721A { // constants uint256 constant MAX_ELEMENTS = 333; uint256 constant MAX_ELEMENTS_TX = 3; uint256 constant MAX_FREE_PER_TX = 1; uint256 constant PUBLIC_PRICE = 0.1 ether; string public baseTokenURI = "ipfs://QmeExFxosBetEogVfc3gpYudagHQXuuf4zhcywheksrSAp/"; bool public paused = false; constructor(uint256 maxBatchSize_) ERC721A("Kek", "KEK", maxBatchSize_) {} function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(_mintAmount > 0,"No 0 mints"); require(_mintAmount <= MAX_ELEMENTS_TX,"Exceeds max per tx"); require(!paused, "Paused"); require(supply + _mintAmount <= MAX_ELEMENTS,"Exceeds max supply"); require(msg.value >= (_mintAmount - MAX_FREE_PER_TX)* PUBLIC_PRICE,"Invalid funds provided"); _safeMint(msg.sender,_mintAmount); } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function pause(bool _state) external onlyOwner { paused = _state; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string calldata baseURI) public onlyOwner { baseTokenURI = baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a0604052600060015560006008556040518060600160405280603681526020016200455a60369139600990805190602001906200003f92919062000271565b506000600a60006101000a81548160ff0219169083151502179055503480156200006857600080fd5b50604051620045903803806200459083398181016040528101906200008e919062000338565b6040518060400160405280600381526020017f4b656b00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4b454b0000000000000000000000000000000000000000000000000000000000815250826200011b6200010f620001a560201b60201c565b620001ad60201b60201c565b6000811162000161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015890620003cc565b60405180910390fd5b82600290805190602001906200017992919062000271565b5081600390805190602001906200019292919062000271565b5080608081815250505050505062000488565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027f9062000409565b90600052602060002090601f016020900481019282620002a35760008555620002ef565b82601f10620002be57805160ff1916838001178555620002ef565b82800160010185558215620002ef579182015b82811115620002ee578251825591602001919060010190620002d1565b5b509050620002fe919062000302565b5090565b5b808211156200031d57600081600090555060010162000303565b5090565b60008151905062000332816200046e565b92915050565b6000602082840312156200034b57600080fd5b60006200035b8482850162000321565b91505092915050565b600062000373602783620003ee565b91507f455243373231413a206d61782062617463682073697a65206d7573742062652060008301527f6e6f6e7a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620003e78162000364565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200042257607f821691505b602082108114156200043957620004386200043f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200047981620003ff565b81146200048557600080fd5b50565b6080516140a8620004b260003960008181611de701528181611e10015261251c01526140a86000f3fe6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063d547cfb711610064578063d547cfb714610564578063d7224ba01461058f578063e985e9c5146105ba578063f2fde38b146105f757610181565b8063a22cb465146104d5578063b88d4fde146104fe578063c87b56dd1461052757610181565b80636352211e146103d257806370a082311461040f578063715018a61461044c5780638da5cb5b1461046357806395d89b411461048e578063a0712d68146104b957610181565b806323b872dd1161013e57806342842e0e1161011857806342842e0e146103185780634f6ccce71461034157806355f804b31461037e5780635c975abb146103a757610181565b806323b872dd146102a85780632f745c59146102d15780633ccfd60b1461030e57610181565b806301ffc9a71461018657806302329a29146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806318160ddd1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612d15565b610620565b6040516101ba91906137f6565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612cec565b61076a565b005b3480156101f857600080fd5b50610201610803565b60405161020e9190613811565b60405180910390f35b34801561022357600080fd5b5061023e60048036038101906102399190612dac565b610895565b60405161024b919061378f565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612cb0565b61091a565b005b34801561028957600080fd5b50610292610a33565b60405161029f9190613b53565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190612baa565b610a3d565b005b3480156102dd57600080fd5b506102f860048036038101906102f39190612cb0565b610a4d565b6040516103059190613b53565b60405180910390f35b610316610c4b565b005b34801561032457600080fd5b5061033f600480360381019061033a9190612baa565b610d07565b005b34801561034d57600080fd5b5061036860048036038101906103639190612dac565b610d27565b6040516103759190613b53565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612d67565b610d7a565b005b3480156103b357600080fd5b506103bc610e0c565b6040516103c991906137f6565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190612dac565b610e1f565b604051610406919061378f565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612b45565b610e35565b6040516104439190613b53565b60405180910390f35b34801561045857600080fd5b50610461610f1e565b005b34801561046f57600080fd5b50610478610fa6565b604051610485919061378f565b60405180910390f35b34801561049a57600080fd5b506104a3610fcf565b6040516104b09190613811565b60405180910390f35b6104d360048036038101906104ce9190612dac565b611061565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190612c74565b611204565b005b34801561050a57600080fd5b5061052560048036038101906105209190612bf9565b611385565b005b34801561053357600080fd5b5061054e60048036038101906105499190612dac565b6113e1565b60405161055b9190613811565b60405180910390f35b34801561057057600080fd5b50610579611488565b6040516105869190613811565b60405180910390f35b34801561059b57600080fd5b506105a4611516565b6040516105b19190613b53565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612b6e565b61151c565b6040516105ee91906137f6565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190612b45565b6115b0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107635750610762826116a8565b5b9050919050565b610772611712565b73ffffffffffffffffffffffffffffffffffffffff16610790610fa6565b73ffffffffffffffffffffffffffffffffffffffff16146107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd906139b3565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b60606002805461081290613e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461083e90613e9d565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b60006108a08261171a565b6108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690613b13565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092582610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90613a53565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b5611712565b73ffffffffffffffffffffffffffffffffffffffff1614806109e457506109e3816109de611712565b61151c565b5b610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90613933565b60405180910390fd5b610a2e838383611728565b505050565b6000600154905090565b610a488383836117da565b505050565b6000610a5883610e35565b8210610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613833565b60405180910390fd5b6000610aa3610a33565b905060008060005b83811015610c09576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b9d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf55786841415610be6578195505050505050610c45565b8380610bf190613ecf565b9450505b508080610c0190613ecf565b915050610aab565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613ad3565b60405180910390fd5b92915050565b610c53611712565b73ffffffffffffffffffffffffffffffffffffffff16610c71610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe906139b3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610d0557600080fd5b565b610d2283838360405180602001604052806000815250611385565b505050565b6000610d31610a33565b8210610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906138f3565b60405180910390fd5b819050919050565b610d82611712565b73ffffffffffffffffffffffffffffffffffffffff16610da0610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906139b3565b60405180910390fd5b818160099190610e0792919061294d565b505050565b600a60009054906101000a900460ff1681565b6000610e2a82611d93565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90613973565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f26611712565b73ffffffffffffffffffffffffffffffffffffffff16610f44610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906139b3565b60405180910390fd5b610fa46000611f96565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610fde90613e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461100a90613e9d565b80156110575780601f1061102c57610100808354040283529160200191611057565b820191906000526020600020905b81548152906001019060200180831161103a57829003601f168201915b5050505050905090565b600061106b610a33565b9050600082116110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906138b3565b60405180910390fd5b60038211156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb906138d3565b60405180910390fd5b600a60009054906101000a900460ff1615611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613853565b60405180910390fd5b61014d82826111539190613c58565b1115611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613953565b60405180910390fd5b67016345785d8a00006001836111aa9190613d6d565b6111b49190613cdf565b3410156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90613a33565b60405180910390fd5b611200338361205a565b5050565b61120c611712565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561127a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611271906139f3565b60405180910390fd5b8060076000611287611712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611334611712565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161137991906137f6565b60405180910390a35050565b6113908484846117da565b61139c84848484612078565b6113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613a73565b60405180910390fd5b50505050565b60606113ec8261171a565b61142b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611422906139d3565b60405180910390fd5b600061143561220f565b905060008151116114555760405180602001604052806000815250611480565b8061145f846122a1565b60405160200161147092919061376b565b6040516020818303038152906040525b915050919050565b6009805461149590613e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546114c190613e9d565b801561150e5780601f106114e35761010080835404028352916020019161150e565b820191906000526020600020905b8154815290600101906020018083116114f157829003601f168201915b505050505081565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115b8611712565b73ffffffffffffffffffffffffffffffffffffffff166115d6610fa6565b73ffffffffffffffffffffffffffffffffffffffff161461162c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611623906139b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390613873565b60405180910390fd5b6116a581611f96565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006117e582611d93565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661180c611712565b73ffffffffffffffffffffffffffffffffffffffff1614806118685750611831611712565b73ffffffffffffffffffffffffffffffffffffffff1661185084610895565b73ffffffffffffffffffffffffffffffffffffffff16145b806118845750611883826000015161187e611712565b61151c565b5b9050806118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613a13565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613993565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90613913565b60405180910390fd5b6119b5858585600161244e565b6119c56000848460000151611728565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a339190613d39565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611ad79190613c12565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611bdd9190613c58565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d2357611c538161171a565b15611d22576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8b8686866001612454565b505050505050565b611d9b6129d3565b611da48261171a565b611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613893565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310611e475760017f000000000000000000000000000000000000000000000000000000000000000084611e3a9190613d6d565b611e449190613c58565b90505b60008390505b818110611f55576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f4157809350505050611f91565b508080611f4d90613e73565b915050611e4d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613af3565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61207482826040518060200160405280600081525061245a565b5050565b60006120998473ffffffffffffffffffffffffffffffffffffffff1661293a565b15612202578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120c2611712565b8786866040518563ffffffff1660e01b81526004016120e494939291906137aa565b602060405180830381600087803b1580156120fe57600080fd5b505af192505050801561212f57506040513d601f19601f8201168201806040525081019061212c9190612d3e565b60015b6121b2573d806000811461215f576040519150601f19603f3d011682016040523d82523d6000602084013e612164565b606091505b506000815114156121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190613a73565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612207565b600190505b949350505050565b60606009805461221e90613e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461224a90613e9d565b80156122975780601f1061226c57610100808354040283529160200191612297565b820191906000526020600020905b81548152906001019060200180831161227a57829003601f168201915b5050505050905090565b606060008214156122e9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612449565b600082905060005b6000821461231b57808061230490613ecf565b915050600a826123149190613cae565b91506122f1565b60008167ffffffffffffffff81111561235d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561238f5781602001600182028036833780820191505090505b5090505b60008514612442576001826123a89190613d6d565b9150600a856123b79190613f18565b60306123c39190613c58565b60f81b8183815181106123ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561243b9190613cae565b9450612393565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890613ab3565b60405180910390fd5b6124da8161171a565b1561251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190613a93565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561257d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257490613b33565b60405180910390fd5b61258a600085838661244e565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516126879190613c12565b6fffffffffffffffffffffffffffffffff1681526020018583602001516126ae9190613c12565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561291d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bd6000888488612078565b6128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f390613a73565b60405180910390fd5b818061290790613ecf565b925050808061291590613ecf565b91505061284c565b50806001819055506129326000878588612454565b505050505050565b600080823b905060008111915050919050565b82805461295990613e9d565b90600052602060002090601f01602090048101928261297b57600085556129c2565b82601f1061299457803560ff19168380011785556129c2565b828001600101855582156129c2579182015b828111156129c15782358255916020019190600101906129a6565b5b5090506129cf9190612a0d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612a26576000816000905550600101612a0e565b5090565b6000612a3d612a3884613b9f565b613b6e565b905082815260208101848484011115612a5557600080fd5b612a60848285613e31565b509392505050565b600081359050612a7781614016565b92915050565b600081359050612a8c8161402d565b92915050565b600081359050612aa181614044565b92915050565b600081519050612ab681614044565b92915050565b600082601f830112612acd57600080fd5b8135612add848260208601612a2a565b91505092915050565b60008083601f840112612af857600080fd5b8235905067ffffffffffffffff811115612b1157600080fd5b602083019150836001820283011115612b2957600080fd5b9250929050565b600081359050612b3f8161405b565b92915050565b600060208284031215612b5757600080fd5b6000612b6584828501612a68565b91505092915050565b60008060408385031215612b8157600080fd5b6000612b8f85828601612a68565b9250506020612ba085828601612a68565b9150509250929050565b600080600060608486031215612bbf57600080fd5b6000612bcd86828701612a68565b9350506020612bde86828701612a68565b9250506040612bef86828701612b30565b9150509250925092565b60008060008060808587031215612c0f57600080fd5b6000612c1d87828801612a68565b9450506020612c2e87828801612a68565b9350506040612c3f87828801612b30565b925050606085013567ffffffffffffffff811115612c5c57600080fd5b612c6887828801612abc565b91505092959194509250565b60008060408385031215612c8757600080fd5b6000612c9585828601612a68565b9250506020612ca685828601612a7d565b9150509250929050565b60008060408385031215612cc357600080fd5b6000612cd185828601612a68565b9250506020612ce285828601612b30565b9150509250929050565b600060208284031215612cfe57600080fd5b6000612d0c84828501612a7d565b91505092915050565b600060208284031215612d2757600080fd5b6000612d3584828501612a92565b91505092915050565b600060208284031215612d5057600080fd5b6000612d5e84828501612aa7565b91505092915050565b60008060208385031215612d7a57600080fd5b600083013567ffffffffffffffff811115612d9457600080fd5b612da085828601612ae6565b92509250509250929050565b600060208284031215612dbe57600080fd5b6000612dcc84828501612b30565b91505092915050565b612dde81613da1565b82525050565b612ded81613db3565b82525050565b6000612dfe82613bcf565b612e088185613be5565b9350612e18818560208601613e40565b612e2181614005565b840191505092915050565b6000612e3782613bda565b612e418185613bf6565b9350612e51818560208601613e40565b612e5a81614005565b840191505092915050565b6000612e7082613bda565b612e7a8185613c07565b9350612e8a818560208601613e40565b80840191505092915050565b6000612ea3602283613bf6565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f09600683613bf6565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612f49602683613bf6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612faf602a83613bf6565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613015600a83613bf6565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b6000613055601283613bf6565b91507f45786365656473206d61782070657220747800000000000000000000000000006000830152602082019050919050565b6000613095602383613bf6565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130fb602583613bf6565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613161603983613bf6565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006131c7601283613bf6565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b6000613207602b83613bf6565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061326d602683613bf6565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132d3602083613bf6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613313602f83613bf6565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613379601a83613bf6565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006133b9603283613bf6565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061341f601683613bf6565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b600061345f602283613bf6565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134c5603383613bf6565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b600061352b601d83613bf6565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b600061356b602183613bf6565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135d1602e83613bf6565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613637602f83613bf6565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061369d602d83613bf6565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613703602283613bf6565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61376581613e27565b82525050565b60006137778285612e65565b91506137838284612e65565b91508190509392505050565b60006020820190506137a46000830184612dd5565b92915050565b60006080820190506137bf6000830187612dd5565b6137cc6020830186612dd5565b6137d9604083018561375c565b81810360608301526137eb8184612df3565b905095945050505050565b600060208201905061380b6000830184612de4565b92915050565b6000602082019050818103600083015261382b8184612e2c565b905092915050565b6000602082019050818103600083015261384c81612e96565b9050919050565b6000602082019050818103600083015261386c81612efc565b9050919050565b6000602082019050818103600083015261388c81612f3c565b9050919050565b600060208201905081810360008301526138ac81612fa2565b9050919050565b600060208201905081810360008301526138cc81613008565b9050919050565b600060208201905081810360008301526138ec81613048565b9050919050565b6000602082019050818103600083015261390c81613088565b9050919050565b6000602082019050818103600083015261392c816130ee565b9050919050565b6000602082019050818103600083015261394c81613154565b9050919050565b6000602082019050818103600083015261396c816131ba565b9050919050565b6000602082019050818103600083015261398c816131fa565b9050919050565b600060208201905081810360008301526139ac81613260565b9050919050565b600060208201905081810360008301526139cc816132c6565b9050919050565b600060208201905081810360008301526139ec81613306565b9050919050565b60006020820190508181036000830152613a0c8161336c565b9050919050565b60006020820190508181036000830152613a2c816133ac565b9050919050565b60006020820190508181036000830152613a4c81613412565b9050919050565b60006020820190508181036000830152613a6c81613452565b9050919050565b60006020820190508181036000830152613a8c816134b8565b9050919050565b60006020820190508181036000830152613aac8161351e565b9050919050565b60006020820190508181036000830152613acc8161355e565b9050919050565b60006020820190508181036000830152613aec816135c4565b9050919050565b60006020820190508181036000830152613b0c8161362a565b9050919050565b60006020820190508181036000830152613b2c81613690565b9050919050565b60006020820190508181036000830152613b4c816136f6565b9050919050565b6000602082019050613b68600083018461375c565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613b9557613b94613fd6565b5b8060405250919050565b600067ffffffffffffffff821115613bba57613bb9613fd6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c1d82613deb565b9150613c2883613deb565b9250826fffffffffffffffffffffffffffffffff03821115613c4d57613c4c613f49565b5b828201905092915050565b6000613c6382613e27565b9150613c6e83613e27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ca357613ca2613f49565b5b828201905092915050565b6000613cb982613e27565b9150613cc483613e27565b925082613cd457613cd3613f78565b5b828204905092915050565b6000613cea82613e27565b9150613cf583613e27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2e57613d2d613f49565b5b828202905092915050565b6000613d4482613deb565b9150613d4f83613deb565b925082821015613d6257613d61613f49565b5b828203905092915050565b6000613d7882613e27565b9150613d8383613e27565b925082821015613d9657613d95613f49565b5b828203905092915050565b6000613dac82613e07565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e5e578082015181840152602081019050613e43565b83811115613e6d576000848401525b50505050565b6000613e7e82613e27565b91506000821415613e9257613e91613f49565b5b600182039050919050565b60006002820490506001821680613eb557607f821691505b60208210811415613ec957613ec8613fa7565b5b50919050565b6000613eda82613e27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f0d57613f0c613f49565b5b600182019050919050565b6000613f2382613e27565b9150613f2e83613e27565b925082613f3e57613f3d613f78565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61401f81613da1565b811461402a57600080fd5b50565b61403681613db3565b811461404157600080fd5b50565b61404d81613dbf565b811461405857600080fd5b50565b61406481613e27565b811461406f57600080fd5b5056fea264697066735822122004a5b76dd678f5320484309cd198d5208ba3ca9a5375388198f7ba77f50d2ab264736f6c63430008000033697066733a2f2f516d65457846786f73426574456f675666633367705975646167485158757566347a6863797768656b73725341702f0000000000000000000000000000000000000000000000000000000000000003
Deployed Bytecode
0x6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063d547cfb711610064578063d547cfb714610564578063d7224ba01461058f578063e985e9c5146105ba578063f2fde38b146105f757610181565b8063a22cb465146104d5578063b88d4fde146104fe578063c87b56dd1461052757610181565b80636352211e146103d257806370a082311461040f578063715018a61461044c5780638da5cb5b1461046357806395d89b411461048e578063a0712d68146104b957610181565b806323b872dd1161013e57806342842e0e1161011857806342842e0e146103185780634f6ccce71461034157806355f804b31461037e5780635c975abb146103a757610181565b806323b872dd146102a85780632f745c59146102d15780633ccfd60b1461030e57610181565b806301ffc9a71461018657806302329a29146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806318160ddd1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190612d15565b610620565b6040516101ba91906137f6565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612cec565b61076a565b005b3480156101f857600080fd5b50610201610803565b60405161020e9190613811565b60405180910390f35b34801561022357600080fd5b5061023e60048036038101906102399190612dac565b610895565b60405161024b919061378f565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612cb0565b61091a565b005b34801561028957600080fd5b50610292610a33565b60405161029f9190613b53565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190612baa565b610a3d565b005b3480156102dd57600080fd5b506102f860048036038101906102f39190612cb0565b610a4d565b6040516103059190613b53565b60405180910390f35b610316610c4b565b005b34801561032457600080fd5b5061033f600480360381019061033a9190612baa565b610d07565b005b34801561034d57600080fd5b5061036860048036038101906103639190612dac565b610d27565b6040516103759190613b53565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612d67565b610d7a565b005b3480156103b357600080fd5b506103bc610e0c565b6040516103c991906137f6565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190612dac565b610e1f565b604051610406919061378f565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612b45565b610e35565b6040516104439190613b53565b60405180910390f35b34801561045857600080fd5b50610461610f1e565b005b34801561046f57600080fd5b50610478610fa6565b604051610485919061378f565b60405180910390f35b34801561049a57600080fd5b506104a3610fcf565b6040516104b09190613811565b60405180910390f35b6104d360048036038101906104ce9190612dac565b611061565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190612c74565b611204565b005b34801561050a57600080fd5b5061052560048036038101906105209190612bf9565b611385565b005b34801561053357600080fd5b5061054e60048036038101906105499190612dac565b6113e1565b60405161055b9190613811565b60405180910390f35b34801561057057600080fd5b50610579611488565b6040516105869190613811565b60405180910390f35b34801561059b57600080fd5b506105a4611516565b6040516105b19190613b53565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612b6e565b61151c565b6040516105ee91906137f6565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190612b45565b6115b0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107635750610762826116a8565b5b9050919050565b610772611712565b73ffffffffffffffffffffffffffffffffffffffff16610790610fa6565b73ffffffffffffffffffffffffffffffffffffffff16146107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd906139b3565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b60606002805461081290613e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461083e90613e9d565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b60006108a08261171a565b6108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690613b13565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092582610e1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90613a53565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b5611712565b73ffffffffffffffffffffffffffffffffffffffff1614806109e457506109e3816109de611712565b61151c565b5b610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90613933565b60405180910390fd5b610a2e838383611728565b505050565b6000600154905090565b610a488383836117da565b505050565b6000610a5883610e35565b8210610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090613833565b60405180910390fd5b6000610aa3610a33565b905060008060005b83811015610c09576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b9d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf55786841415610be6578195505050505050610c45565b8380610bf190613ecf565b9450505b508080610c0190613ecf565b915050610aab565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90613ad3565b60405180910390fd5b92915050565b610c53611712565b73ffffffffffffffffffffffffffffffffffffffff16610c71610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe906139b3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610d0557600080fd5b565b610d2283838360405180602001604052806000815250611385565b505050565b6000610d31610a33565b8210610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906138f3565b60405180910390fd5b819050919050565b610d82611712565b73ffffffffffffffffffffffffffffffffffffffff16610da0610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906139b3565b60405180910390fd5b818160099190610e0792919061294d565b505050565b600a60009054906101000a900460ff1681565b6000610e2a82611d93565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90613973565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610f26611712565b73ffffffffffffffffffffffffffffffffffffffff16610f44610fa6565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906139b3565b60405180910390fd5b610fa46000611f96565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610fde90613e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461100a90613e9d565b80156110575780601f1061102c57610100808354040283529160200191611057565b820191906000526020600020905b81548152906001019060200180831161103a57829003601f168201915b5050505050905090565b600061106b610a33565b9050600082116110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906138b3565b60405180910390fd5b60038211156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb906138d3565b60405180910390fd5b600a60009054906101000a900460ff1615611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613853565b60405180910390fd5b61014d82826111539190613c58565b1115611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613953565b60405180910390fd5b67016345785d8a00006001836111aa9190613d6d565b6111b49190613cdf565b3410156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed90613a33565b60405180910390fd5b611200338361205a565b5050565b61120c611712565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561127a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611271906139f3565b60405180910390fd5b8060076000611287611712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611334611712565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161137991906137f6565b60405180910390a35050565b6113908484846117da565b61139c84848484612078565b6113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613a73565b60405180910390fd5b50505050565b60606113ec8261171a565b61142b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611422906139d3565b60405180910390fd5b600061143561220f565b905060008151116114555760405180602001604052806000815250611480565b8061145f846122a1565b60405160200161147092919061376b565b6040516020818303038152906040525b915050919050565b6009805461149590613e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546114c190613e9d565b801561150e5780601f106114e35761010080835404028352916020019161150e565b820191906000526020600020905b8154815290600101906020018083116114f157829003601f168201915b505050505081565b60085481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115b8611712565b73ffffffffffffffffffffffffffffffffffffffff166115d6610fa6565b73ffffffffffffffffffffffffffffffffffffffff161461162c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611623906139b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390613873565b60405180910390fd5b6116a581611f96565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006117e582611d93565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661180c611712565b73ffffffffffffffffffffffffffffffffffffffff1614806118685750611831611712565b73ffffffffffffffffffffffffffffffffffffffff1661185084610895565b73ffffffffffffffffffffffffffffffffffffffff16145b806118845750611883826000015161187e611712565b61151c565b5b9050806118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613a13565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613993565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90613913565b60405180910390fd5b6119b5858585600161244e565b6119c56000848460000151611728565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a339190613d39565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611ad79190613c12565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611bdd9190613c58565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d2357611c538161171a565b15611d22576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8b8686866001612454565b505050505050565b611d9b6129d3565b611da48261171a565b611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90613893565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000038310611e475760017f000000000000000000000000000000000000000000000000000000000000000384611e3a9190613d6d565b611e449190613c58565b90505b60008390505b818110611f55576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f4157809350505050611f91565b508080611f4d90613e73565b915050611e4d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613af3565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61207482826040518060200160405280600081525061245a565b5050565b60006120998473ffffffffffffffffffffffffffffffffffffffff1661293a565b15612202578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120c2611712565b8786866040518563ffffffff1660e01b81526004016120e494939291906137aa565b602060405180830381600087803b1580156120fe57600080fd5b505af192505050801561212f57506040513d601f19601f8201168201806040525081019061212c9190612d3e565b60015b6121b2573d806000811461215f576040519150601f19603f3d011682016040523d82523d6000602084013e612164565b606091505b506000815114156121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190613a73565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612207565b600190505b949350505050565b60606009805461221e90613e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461224a90613e9d565b80156122975780601f1061226c57610100808354040283529160200191612297565b820191906000526020600020905b81548152906001019060200180831161227a57829003601f168201915b5050505050905090565b606060008214156122e9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612449565b600082905060005b6000821461231b57808061230490613ecf565b915050600a826123149190613cae565b91506122f1565b60008167ffffffffffffffff81111561235d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561238f5781602001600182028036833780820191505090505b5090505b60008514612442576001826123a89190613d6d565b9150600a856123b79190613f18565b60306123c39190613c58565b60f81b8183815181106123ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561243b9190613cae565b9450612393565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890613ab3565b60405180910390fd5b6124da8161171a565b1561251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190613a93565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000383111561257d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257490613b33565b60405180910390fd5b61258a600085838661244e565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516126879190613c12565b6fffffffffffffffffffffffffffffffff1681526020018583602001516126ae9190613c12565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561291d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bd6000888488612078565b6128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f390613a73565b60405180910390fd5b818061290790613ecf565b925050808061291590613ecf565b91505061284c565b50806001819055506129326000878588612454565b505050505050565b600080823b905060008111915050919050565b82805461295990613e9d565b90600052602060002090601f01602090048101928261297b57600085556129c2565b82601f1061299457803560ff19168380011785556129c2565b828001600101855582156129c2579182015b828111156129c15782358255916020019190600101906129a6565b5b5090506129cf9190612a0d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612a26576000816000905550600101612a0e565b5090565b6000612a3d612a3884613b9f565b613b6e565b905082815260208101848484011115612a5557600080fd5b612a60848285613e31565b509392505050565b600081359050612a7781614016565b92915050565b600081359050612a8c8161402d565b92915050565b600081359050612aa181614044565b92915050565b600081519050612ab681614044565b92915050565b600082601f830112612acd57600080fd5b8135612add848260208601612a2a565b91505092915050565b60008083601f840112612af857600080fd5b8235905067ffffffffffffffff811115612b1157600080fd5b602083019150836001820283011115612b2957600080fd5b9250929050565b600081359050612b3f8161405b565b92915050565b600060208284031215612b5757600080fd5b6000612b6584828501612a68565b91505092915050565b60008060408385031215612b8157600080fd5b6000612b8f85828601612a68565b9250506020612ba085828601612a68565b9150509250929050565b600080600060608486031215612bbf57600080fd5b6000612bcd86828701612a68565b9350506020612bde86828701612a68565b9250506040612bef86828701612b30565b9150509250925092565b60008060008060808587031215612c0f57600080fd5b6000612c1d87828801612a68565b9450506020612c2e87828801612a68565b9350506040612c3f87828801612b30565b925050606085013567ffffffffffffffff811115612c5c57600080fd5b612c6887828801612abc565b91505092959194509250565b60008060408385031215612c8757600080fd5b6000612c9585828601612a68565b9250506020612ca685828601612a7d565b9150509250929050565b60008060408385031215612cc357600080fd5b6000612cd185828601612a68565b9250506020612ce285828601612b30565b9150509250929050565b600060208284031215612cfe57600080fd5b6000612d0c84828501612a7d565b91505092915050565b600060208284031215612d2757600080fd5b6000612d3584828501612a92565b91505092915050565b600060208284031215612d5057600080fd5b6000612d5e84828501612aa7565b91505092915050565b60008060208385031215612d7a57600080fd5b600083013567ffffffffffffffff811115612d9457600080fd5b612da085828601612ae6565b92509250509250929050565b600060208284031215612dbe57600080fd5b6000612dcc84828501612b30565b91505092915050565b612dde81613da1565b82525050565b612ded81613db3565b82525050565b6000612dfe82613bcf565b612e088185613be5565b9350612e18818560208601613e40565b612e2181614005565b840191505092915050565b6000612e3782613bda565b612e418185613bf6565b9350612e51818560208601613e40565b612e5a81614005565b840191505092915050565b6000612e7082613bda565b612e7a8185613c07565b9350612e8a818560208601613e40565b80840191505092915050565b6000612ea3602283613bf6565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f09600683613bf6565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612f49602683613bf6565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612faf602a83613bf6565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613015600a83613bf6565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b6000613055601283613bf6565b91507f45786365656473206d61782070657220747800000000000000000000000000006000830152602082019050919050565b6000613095602383613bf6565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130fb602583613bf6565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613161603983613bf6565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006131c7601283613bf6565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b6000613207602b83613bf6565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061326d602683613bf6565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132d3602083613bf6565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613313602f83613bf6565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613379601a83613bf6565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006133b9603283613bf6565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b600061341f601683613bf6565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b600061345f602283613bf6565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134c5603383613bf6565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b600061352b601d83613bf6565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b600061356b602183613bf6565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135d1602e83613bf6565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613637602f83613bf6565b91507f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008301527f206f776e6572206f6620746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061369d602d83613bf6565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613703602283613bf6565b91507f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008301527f67680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61376581613e27565b82525050565b60006137778285612e65565b91506137838284612e65565b91508190509392505050565b60006020820190506137a46000830184612dd5565b92915050565b60006080820190506137bf6000830187612dd5565b6137cc6020830186612dd5565b6137d9604083018561375c565b81810360608301526137eb8184612df3565b905095945050505050565b600060208201905061380b6000830184612de4565b92915050565b6000602082019050818103600083015261382b8184612e2c565b905092915050565b6000602082019050818103600083015261384c81612e96565b9050919050565b6000602082019050818103600083015261386c81612efc565b9050919050565b6000602082019050818103600083015261388c81612f3c565b9050919050565b600060208201905081810360008301526138ac81612fa2565b9050919050565b600060208201905081810360008301526138cc81613008565b9050919050565b600060208201905081810360008301526138ec81613048565b9050919050565b6000602082019050818103600083015261390c81613088565b9050919050565b6000602082019050818103600083015261392c816130ee565b9050919050565b6000602082019050818103600083015261394c81613154565b9050919050565b6000602082019050818103600083015261396c816131ba565b9050919050565b6000602082019050818103600083015261398c816131fa565b9050919050565b600060208201905081810360008301526139ac81613260565b9050919050565b600060208201905081810360008301526139cc816132c6565b9050919050565b600060208201905081810360008301526139ec81613306565b9050919050565b60006020820190508181036000830152613a0c8161336c565b9050919050565b60006020820190508181036000830152613a2c816133ac565b9050919050565b60006020820190508181036000830152613a4c81613412565b9050919050565b60006020820190508181036000830152613a6c81613452565b9050919050565b60006020820190508181036000830152613a8c816134b8565b9050919050565b60006020820190508181036000830152613aac8161351e565b9050919050565b60006020820190508181036000830152613acc8161355e565b9050919050565b60006020820190508181036000830152613aec816135c4565b9050919050565b60006020820190508181036000830152613b0c8161362a565b9050919050565b60006020820190508181036000830152613b2c81613690565b9050919050565b60006020820190508181036000830152613b4c816136f6565b9050919050565b6000602082019050613b68600083018461375c565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613b9557613b94613fd6565b5b8060405250919050565b600067ffffffffffffffff821115613bba57613bb9613fd6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c1d82613deb565b9150613c2883613deb565b9250826fffffffffffffffffffffffffffffffff03821115613c4d57613c4c613f49565b5b828201905092915050565b6000613c6382613e27565b9150613c6e83613e27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ca357613ca2613f49565b5b828201905092915050565b6000613cb982613e27565b9150613cc483613e27565b925082613cd457613cd3613f78565b5b828204905092915050565b6000613cea82613e27565b9150613cf583613e27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2e57613d2d613f49565b5b828202905092915050565b6000613d4482613deb565b9150613d4f83613deb565b925082821015613d6257613d61613f49565b5b828203905092915050565b6000613d7882613e27565b9150613d8383613e27565b925082821015613d9657613d95613f49565b5b828203905092915050565b6000613dac82613e07565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e5e578082015181840152602081019050613e43565b83811115613e6d576000848401525b50505050565b6000613e7e82613e27565b91506000821415613e9257613e91613f49565b5b600182039050919050565b60006002820490506001821680613eb557607f821691505b60208210811415613ec957613ec8613fa7565b5b50919050565b6000613eda82613e27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f0d57613f0c613f49565b5b600182019050919050565b6000613f2382613e27565b9150613f2e83613e27565b925082613f3e57613f3d613f78565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61401f81613da1565b811461402a57600080fd5b50565b61403681613db3565b811461404157600080fd5b50565b61404d81613dbf565b811461405857600080fd5b50565b61406481613e27565b811461406f57600080fd5b5056fea264697066735822122004a5b76dd678f5320484309cd198d5208ba3ca9a5375388198f7ba77f50d2ab264736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000003
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 3
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000003
Deployed Bytecode Sourcemap
38263:1380:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23708:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39327:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25434:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26959:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26522:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22272:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27809:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22900:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39199:120;;;:::i;:::-;;28014:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22435:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39537:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38593:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25257:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24134:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37571:94;;;;;;;;;;;;;:::i;:::-;;36920:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25589:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38710:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27227:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28234:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25750:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38501:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32565:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27564:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37820:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23708:370;23835:4;23880:25;23865:40;;;:11;:40;;;;:99;;;;23931:33;23916:48;;;:11;:48;;;;23865:99;:160;;;;23990:35;23975:50;;;:11;:50;;;;23865:160;:207;;;;24036:36;24060:11;24036:23;:36::i;:::-;23865:207;23851:221;;23708:370;;;:::o;39327:81::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39394:6:::1;39385;;:15;;;;;;;;;;;;;;;;;;39327:81:::0;:::o;25434:94::-;25488:13;25517:5;25510:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25434:94;:::o;26959:204::-;27027:7;27051:16;27059:7;27051;:16::i;:::-;27043:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27133:15;:24;27149:7;27133:24;;;;;;;;;;;;;;;;;;;;;27126:31;;26959:204;;;:::o;26522:379::-;26591:13;26607:24;26623:7;26607:15;:24::i;:::-;26591:40;;26652:5;26646:11;;:2;:11;;;;26638:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26737:5;26721:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26746:37;26763:5;26770:12;:10;:12::i;:::-;26746:16;:37::i;:::-;26721:62;26705:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;26867:28;26876:2;26880:7;26889:5;26867:8;:28::i;:::-;26522:379;;;:::o;22272:94::-;22325:7;22348:12;;22341:19;;22272:94;:::o;27809:142::-;27917:28;27927:4;27933:2;27937:7;27917:9;:28::i;:::-;27809:142;;;:::o;22900:744::-;23009:7;23044:16;23054:5;23044:9;:16::i;:::-;23036:5;:24;23028:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23106:22;23131:13;:11;:13::i;:::-;23106:38;;23151:19;23181:25;23231:9;23226:350;23250:14;23246:1;:18;23226:350;;;23280:31;23314:11;:14;23326:1;23314:14;;;;;;;;;;;23280:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23367:1;23341:28;;:9;:14;;;:28;;;23337:89;;23402:9;:14;;;23382:34;;23337:89;23459:5;23438:26;;:17;:26;;;23434:135;;;23496:5;23481:11;:20;23477:59;;;23523:1;23516:8;;;;;;;;;23477:59;23546:13;;;;;:::i;:::-;;;;23434:135;23226:350;23266:3;;;;;:::i;:::-;;;;23226:350;;;;23582:56;;;;;;;;;;:::i;:::-;;;;;;;;22900:744;;;;;:::o;39199:120::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39271:10:::1;39263:24;;:47;39288:21;39263:47;;;;;;;;;;;;;;;;;;;;;;;39255:56;;;::::0;::::1;;39199:120::o:0;28014:157::-;28126:39;28143:4;28149:2;28153:7;28126:39;;;;;;;;;;;;:16;:39::i;:::-;28014:157;;;:::o;22435:177::-;22502:7;22534:13;:11;:13::i;:::-;22526:5;:21;22518:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22601:5;22594:12;;22435:177;;;:::o;39537:103::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39625:7:::1;;39610:12;:22;;;;;;;:::i;:::-;;39537:103:::0;;:::o;38593:26::-;;;;;;;;;;;;;:::o;25257:118::-;25321:7;25344:20;25356:7;25344:11;:20::i;:::-;:25;;;25337:32;;25257:118;;;:::o;24134:211::-;24198:7;24239:1;24222:19;;:5;:19;;;;24214:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24311:12;:19;24324:5;24311:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24303:36;;24296:43;;24134:211;;;:::o;37571:94::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37636:21:::1;37654:1;37636:9;:21::i;:::-;37571:94::o:0;36920:87::-;36966:7;36993:6;;;;;;;;;;;36986:13;;36920:87;:::o;25589:98::-;25645:13;25674:7;25667:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25589:98;:::o;38710:481::-;38771:14;38788:13;:11;:13::i;:::-;38771:30;;38834:1;38820:11;:15;38812:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;38400:1;38868:11;:30;;38860:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38940:6;;;;;;;;;;;38939:7;38931:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;38355:3;38987:11;38978:6;:20;;;;:::i;:::-;:36;;38970:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38483:9;38443:1;39069:11;:29;;;;:::i;:::-;39068:45;;;;:::i;:::-;39055:9;:58;;39047:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;39150:33;39160:10;39171:11;39150:9;:33::i;:::-;38710:481;;:::o;27227:274::-;27330:12;:10;:12::i;:::-;27318:24;;:8;:24;;;;27310:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27427:8;27382:18;:32;27401:12;:10;:12::i;:::-;27382:32;;;;;;;;;;;;;;;:42;27415:8;27382:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27476:8;27447:48;;27462:12;:10;:12::i;:::-;27447:48;;;27486:8;27447:48;;;;;;:::i;:::-;;;;;;;;27227:274;;:::o;28234:311::-;28371:28;28381:4;28387:2;28391:7;28371:9;:28::i;:::-;28422:48;28445:4;28451:2;28455:7;28464:5;28422:22;:48::i;:::-;28406:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;28234:311;;;;:::o;25750:394::-;25848:13;25889:16;25897:7;25889;:16::i;:::-;25873:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25979:21;26003:10;:8;:10::i;:::-;25979:34;;26058:1;26040:7;26034:21;:25;:104;;;;;;;;;;;;;;;;;26095:7;26104:18;:7;:16;:18::i;:::-;26078:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26034:104;26020:118;;;25750:394;;;:::o;38501:85::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32565:43::-;;;;:::o;27564:186::-;27686:4;27709:18;:25;27728:5;27709:25;;;;;;;;;;;;;;;:35;27735:8;27709:35;;;;;;;;;;;;;;;;;;;;;;;;;27702:42;;27564:186;;;;:::o;37820:192::-;37151:12;:10;:12::i;:::-;37140:23;;:7;:5;:7::i;:::-;:23;;;37132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37929:1:::1;37909:22;;:8;:22;;;;37901:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37985:19;37995:8;37985:9;:19::i;:::-;37820:192:::0;:::o;12776:157::-;12861:4;12900:25;12885:40;;;:11;:40;;;;12878:47;;12776:157;;;:::o;20090:98::-;20143:7;20170:10;20163:17;;20090:98;:::o;28784:105::-;28841:4;28871:12;;28861:7;:22;28854:29;;28784:105;;;:::o;32387:172::-;32511:2;32484:15;:24;32500:7;32484:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32545:7;32541:2;32525:28;;32534:5;32525:28;;;;;;;;;;;;32387:172;;;:::o;30752:1529::-;30849:35;30887:20;30899:7;30887:11;:20::i;:::-;30849:58;;30916:22;30958:13;:18;;;30942:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;31011:12;:10;:12::i;:::-;30987:36;;:20;30999:7;30987:11;:20::i;:::-;:36;;;30942:81;:142;;;;31034:50;31051:13;:18;;;31071:12;:10;:12::i;:::-;31034:16;:50::i;:::-;30942:142;30916:169;;31110:17;31094:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31242:4;31220:26;;:13;:18;;;:26;;;31204:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;31331:1;31317:16;;:2;:16;;;;31309:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31384:43;31406:4;31412:2;31416:7;31425:1;31384:21;:43::i;:::-;31484:49;31501:1;31505:7;31514:13;:18;;;31484:8;:49::i;:::-;31572:1;31542:12;:18;31555:4;31542:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31608:1;31580:12;:16;31593:2;31580:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31639:43;;;;;;;;31654:2;31639:43;;;;;;31665:15;31639:43;;;;;31616:11;:20;31628:7;31616:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31910:19;31942:1;31932:7;:11;;;;:::i;:::-;31910:33;;31995:1;31954:43;;:11;:24;31966:11;31954:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;31950:236;;;32012:20;32020:11;32012:7;:20::i;:::-;32008:171;;;32072:97;;;;;;;;32099:13;:18;;;32072:97;;;;;;32130:13;:28;;;32072:97;;;;;32045:11;:24;32057:11;32045:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32008:171;31950:236;32218:7;32214:2;32199:27;;32208:4;32199:27;;;;;;;;;;;;32233:42;32254:4;32260:2;32264:7;32273:1;32233:20;:42::i;:::-;30752:1529;;;;;;:::o;24597:606::-;24673:21;;:::i;:::-;24714:16;24722:7;24714;:16::i;:::-;24706:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24786:26;24834:12;24823:7;:23;24819:93;;24903:1;24888:12;24878:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;24857:47;;24819:93;24925:12;24940:7;24925:22;;24920:212;24957:18;24949:4;:26;24920:212;;24994:31;25028:11;:17;25040:4;25028:17;;;;;;;;;;;24994:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25084:1;25058:28;;:9;:14;;;:28;;;25054:71;;25106:9;25099:16;;;;;;;25054:71;24920:212;24977:6;;;;;:::i;:::-;;;;24920:212;;;;25140:57;;;;;;;;;;:::i;:::-;;;;;;;;24597:606;;;;:::o;38020:173::-;38076:16;38095:6;;;;;;;;;;;38076:25;;38121:8;38112:6;;:17;;;;;;;;;;;;;;;;;;38176:8;38145:40;;38166:8;38145:40;;;;;;;;;;;;38020:173;;:::o;28895:98::-;28960:27;28970:2;28974:8;28960:27;;;;;;;;;;;;:9;:27::i;:::-;28895:98;;:::o;34098:690::-;34235:4;34252:15;:2;:13;;;:15::i;:::-;34248:535;;;34307:2;34291:36;;;34328:12;:10;:12::i;:::-;34342:4;34348:7;34357:5;34291:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34278:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34539:1;34522:6;:13;:18;34518:215;;;34555:61;;;;;;;;;;:::i;:::-;;;;;;;;34518:215;34701:6;34695:13;34686:6;34682:2;34678:15;34671:38;34278:464;34423:45;;;34413:55;;;:6;:55;;;;34406:62;;;;;34248:535;34771:4;34764:11;;34098:690;;;;;;;:::o;39416:113::-;39476:13;39509:12;39502:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39416:113;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;35250:141::-;;;;;:::o;35777:140::-;;;;;:::o;29248:1272::-;29353:20;29376:12;;29353:35;;29417:1;29403:16;;:2;:16;;;;29395:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:21;29602:12;29594:7;:21::i;:::-;29593:22;29585:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:12;29664:8;:24;;29656:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29736:61;29766:1;29770:2;29774:12;29788:8;29736:21;:61::i;:::-;29806:30;29839:12;:16;29852:2;29839:16;;;;;;;;;;;;;;;29806:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29881:119;;;;;;;;29931:8;29901:11;:19;;;:39;;;;:::i;:::-;29881:119;;;;;;29984:8;29949:11;:24;;;:44;;;;:::i;:::-;29881:119;;;;;29862:12;:16;29875:2;29862:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30035:43;;;;;;;;30050:2;30035:43;;;;;;30061:15;30035:43;;;;;30007:11;:25;30019:12;30007:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30087:20;30110:12;30087:35;;30136:9;30131:281;30155:8;30151:1;:12;30131:281;;;30209:12;30205:2;30184:38;;30201:1;30184:38;;;;;;;;;;;;30249:59;30280:1;30284:2;30288:12;30302:5;30249:22;:59::i;:::-;30231:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;30390:14;;;;;:::i;:::-;;;;30165:3;;;;;:::i;:::-;;;;30131:281;;;;30435:12;30420;:27;;;;30454:60;30483:1;30487:2;30491:12;30505:8;30454:20;:60::i;:::-;29248:1272;;;;;;:::o;2836:387::-;2896:4;3104:12;3171:7;3159:20;3151:28;;3214:1;3207:4;:8;3200:15;;;2836:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1233:352::-;;;1351:3;1344:4;1336:6;1332:17;1328:27;1318:2;;1369:1;1366;1359:12;1318:2;1405:6;1392:20;1382:30;;1435:18;1427:6;1424:30;1421:2;;;1467:1;1464;1457:12;1421:2;1504:4;1496:6;1492:17;1480:29;;1558:3;1550:4;1542:6;1538:17;1528:8;1524:32;1521:41;1518:2;;;1575:1;1572;1565:12;1518:2;1308:277;;;;;:::o;1591:139::-;;1675:6;1662:20;1653:29;;1691:33;1718:5;1691:33;:::i;:::-;1643:87;;;;:::o;1736:262::-;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;1860:1;1857;1850:12;1812:2;1903:1;1928:53;1973:7;1964:6;1953:9;1949:22;1928:53;:::i;:::-;1918:63;;1874:117;1802:196;;;;:::o;2004:407::-;;;2129:2;2117:9;2108:7;2104:23;2100:32;2097:2;;;2145:1;2142;2135:12;2097:2;2188:1;2213:53;2258:7;2249:6;2238:9;2234:22;2213:53;:::i;:::-;2203:63;;2159:117;2315:2;2341:53;2386:7;2377:6;2366:9;2362:22;2341:53;:::i;:::-;2331:63;;2286:118;2087:324;;;;;:::o;2417:552::-;;;;2559:2;2547:9;2538:7;2534:23;2530:32;2527:2;;;2575:1;2572;2565:12;2527:2;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2745:2;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;:::i;:::-;2761:63;;2716:118;2873:2;2899:53;2944:7;2935:6;2924:9;2920:22;2899:53;:::i;:::-;2889:63;;2844:118;2517:452;;;;;:::o;2975:809::-;;;;;3143:3;3131:9;3122:7;3118:23;3114:33;3111:2;;;3160:1;3157;3150:12;3111:2;3203:1;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3174:117;3330:2;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3301:118;3458:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;:::i;:::-;3474:63;;3429:118;3614:2;3603:9;3599:18;3586:32;3645:18;3637:6;3634:30;3631:2;;;3677:1;3674;3667:12;3631:2;3705:62;3759:7;3750:6;3739:9;3735:22;3705:62;:::i;:::-;3695:72;;3557:220;3101:683;;;;;;;:::o;3790:401::-;;;3912:2;3900:9;3891:7;3887:23;3883:32;3880:2;;;3928:1;3925;3918:12;3880:2;3971:1;3996:53;4041:7;4032:6;4021:9;4017:22;3996:53;:::i;:::-;3986:63;;3942:117;4098:2;4124:50;4166:7;4157:6;4146:9;4142:22;4124:50;:::i;:::-;4114:60;;4069:115;3870:321;;;;;:::o;4197:407::-;;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;4338:1;4335;4328:12;4290:2;4381:1;4406:53;4451:7;4442:6;4431:9;4427:22;4406:53;:::i;:::-;4396:63;;4352:117;4508:2;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4479:118;4280:324;;;;;:::o;4610:256::-;;4715:2;4703:9;4694:7;4690:23;4686:32;4683:2;;;4731:1;4728;4721:12;4683:2;4774:1;4799:50;4841:7;4832:6;4821:9;4817:22;4799:50;:::i;:::-;4789:60;;4745:114;4673:193;;;;:::o;4872:260::-;;4979:2;4967:9;4958:7;4954:23;4950:32;4947:2;;;4995:1;4992;4985:12;4947:2;5038:1;5063:52;5107:7;5098:6;5087:9;5083:22;5063:52;:::i;:::-;5053:62;;5009:116;4937:195;;;;:::o;5138:282::-;;5256:2;5244:9;5235:7;5231:23;5227:32;5224:2;;;5272:1;5269;5262:12;5224:2;5315:1;5340:63;5395:7;5386:6;5375:9;5371:22;5340:63;:::i;:::-;5330:73;;5286:127;5214:206;;;;:::o;5426:395::-;;;5554:2;5542:9;5533:7;5529:23;5525:32;5522:2;;;5570:1;5567;5560:12;5522:2;5641:1;5630:9;5626:17;5613:31;5671:18;5663:6;5660:30;5657:2;;;5703:1;5700;5693:12;5657:2;5739:65;5796:7;5787:6;5776:9;5772:22;5739:65;:::i;:::-;5721:83;;;;5584:230;5512:309;;;;;:::o;5827:262::-;;5935:2;5923:9;5914:7;5910:23;5906:32;5903:2;;;5951:1;5948;5941:12;5903:2;5994:1;6019:53;6064:7;6055:6;6044:9;6040:22;6019:53;:::i;:::-;6009:63;;5965:117;5893:196;;;;:::o;6095:118::-;6182:24;6200:5;6182:24;:::i;:::-;6177:3;6170:37;6160:53;;:::o;6219:109::-;6300:21;6315:5;6300:21;:::i;:::-;6295:3;6288:34;6278:50;;:::o;6334:360::-;;6448:38;6480:5;6448:38;:::i;:::-;6502:70;6565:6;6560:3;6502:70;:::i;:::-;6495:77;;6581:52;6626:6;6621:3;6614:4;6607:5;6603:16;6581:52;:::i;:::-;6658:29;6680:6;6658:29;:::i;:::-;6653:3;6649:39;6642:46;;6424:270;;;;;:::o;6700:364::-;;6816:39;6849:5;6816:39;:::i;:::-;6871:71;6935:6;6930:3;6871:71;:::i;:::-;6864:78;;6951:52;6996:6;6991:3;6984:4;6977:5;6973:16;6951:52;:::i;:::-;7028:29;7050:6;7028:29;:::i;:::-;7023:3;7019:39;7012:46;;6792:272;;;;;:::o;7070:377::-;;7204:39;7237:5;7204:39;:::i;:::-;7259:89;7341:6;7336:3;7259:89;:::i;:::-;7252:96;;7357:52;7402:6;7397:3;7390:4;7383:5;7379:16;7357:52;:::i;:::-;7434:6;7429:3;7425:16;7418:23;;7180:267;;;;;:::o;7453:366::-;;7616:67;7680:2;7675:3;7616:67;:::i;:::-;7609:74;;7713:34;7709:1;7704:3;7700:11;7693:55;7779:4;7774:2;7769:3;7765:12;7758:26;7810:2;7805:3;7801:12;7794:19;;7599:220;;;:::o;7825:303::-;;7988:66;8052:1;8047:3;7988:66;:::i;:::-;7981:73;;8084:8;8080:1;8075:3;8071:11;8064:29;8119:2;8114:3;8110:12;8103:19;;7971:157;;;:::o;8134:370::-;;8297:67;8361:2;8356:3;8297:67;:::i;:::-;8290:74;;8394:34;8390:1;8385:3;8381:11;8374:55;8460:8;8455:2;8450:3;8446:12;8439:30;8495:2;8490:3;8486:12;8479:19;;8280:224;;;:::o;8510:374::-;;8673:67;8737:2;8732:3;8673:67;:::i;:::-;8666:74;;8770:34;8766:1;8761:3;8757:11;8750:55;8836:12;8831:2;8826:3;8822:12;8815:34;8875:2;8870:3;8866:12;8859:19;;8656:228;;;:::o;8890:308::-;;9053:67;9117:2;9112:3;9053:67;:::i;:::-;9046:74;;9150:12;9146:1;9141:3;9137:11;9130:33;9189:2;9184:3;9180:12;9173:19;;9036:162;;;:::o;9204:316::-;;9367:67;9431:2;9426:3;9367:67;:::i;:::-;9360:74;;9464:20;9460:1;9455:3;9451:11;9444:41;9511:2;9506:3;9502:12;9495:19;;9350:170;;;:::o;9526:367::-;;9689:67;9753:2;9748:3;9689:67;:::i;:::-;9682:74;;9786:34;9782:1;9777:3;9773:11;9766:55;9852:5;9847:2;9842:3;9838:12;9831:27;9884:2;9879:3;9875:12;9868:19;;9672:221;;;:::o;9899:369::-;;10062:67;10126:2;10121:3;10062:67;:::i;:::-;10055:74;;10159:34;10155:1;10150:3;10146:11;10139:55;10225:7;10220:2;10215:3;10211:12;10204:29;10259:2;10254:3;10250:12;10243:19;;10045:223;;;:::o;10274:389::-;;10437:67;10501:2;10496:3;10437:67;:::i;:::-;10430:74;;10534:34;10530:1;10525:3;10521:11;10514:55;10600:27;10595:2;10590:3;10586:12;10579:49;10654:2;10649:3;10645:12;10638:19;;10420:243;;;:::o;10669:316::-;;10832:67;10896:2;10891:3;10832:67;:::i;:::-;10825:74;;10929:20;10925:1;10920:3;10916:11;10909:41;10976:2;10971:3;10967:12;10960:19;;10815:170;;;:::o;10991:375::-;;11154:67;11218:2;11213:3;11154:67;:::i;:::-;11147:74;;11251:34;11247:1;11242:3;11238:11;11231:55;11317:13;11312:2;11307:3;11303:12;11296:35;11357:2;11352:3;11348:12;11341:19;;11137:229;;;:::o;11372:370::-;;11535:67;11599:2;11594:3;11535:67;:::i;:::-;11528:74;;11632:34;11628:1;11623:3;11619:11;11612:55;11698:8;11693:2;11688:3;11684:12;11677:30;11733:2;11728:3;11724:12;11717:19;;11518:224;;;:::o;11748:330::-;;11911:67;11975:2;11970:3;11911:67;:::i;:::-;11904:74;;12008:34;12004:1;11999:3;11995:11;11988:55;12069:2;12064:3;12060:12;12053:19;;11894:184;;;:::o;12084:379::-;;12247:67;12311:2;12306:3;12247:67;:::i;:::-;12240:74;;12344:34;12340:1;12335:3;12331:11;12324:55;12410:17;12405:2;12400:3;12396:12;12389:39;12454:2;12449:3;12445:12;12438:19;;12230:233;;;:::o;12469:324::-;;12632:67;12696:2;12691:3;12632:67;:::i;:::-;12625:74;;12729:28;12725:1;12720:3;12716:11;12709:49;12784:2;12779:3;12775:12;12768:19;;12615:178;;;:::o;12799:382::-;;12962:67;13026:2;13021:3;12962:67;:::i;:::-;12955:74;;13059:34;13055:1;13050:3;13046:11;13039:55;13125:20;13120:2;13115:3;13111:12;13104:42;13172:2;13167:3;13163:12;13156:19;;12945:236;;;:::o;13187:320::-;;13350:67;13414:2;13409:3;13350:67;:::i;:::-;13343:74;;13447:24;13443:1;13438:3;13434:11;13427:45;13498:2;13493:3;13489:12;13482:19;;13333:174;;;:::o;13513:366::-;;13676:67;13740:2;13735:3;13676:67;:::i;:::-;13669:74;;13773:34;13769:1;13764:3;13760:11;13753:55;13839:4;13834:2;13829:3;13825:12;13818:26;13870:2;13865:3;13861:12;13854:19;;13659:220;;;:::o;13885:383::-;;14048:67;14112:2;14107:3;14048:67;:::i;:::-;14041:74;;14145:34;14141:1;14136:3;14132:11;14125:55;14211:21;14206:2;14201:3;14197:12;14190:43;14259:2;14254:3;14250:12;14243:19;;14031:237;;;:::o;14274:327::-;;14437:67;14501:2;14496:3;14437:67;:::i;:::-;14430:74;;14534:31;14530:1;14525:3;14521:11;14514:52;14592:2;14587:3;14583:12;14576:19;;14420:181;;;:::o;14607:365::-;;14770:67;14834:2;14829:3;14770:67;:::i;:::-;14763:74;;14867:34;14863:1;14858:3;14854:11;14847:55;14933:3;14928:2;14923:3;14919:12;14912:25;14963:2;14958:3;14954:12;14947:19;;14753:219;;;:::o;14978:378::-;;15141:67;15205:2;15200:3;15141:67;:::i;:::-;15134:74;;15238:34;15234:1;15229:3;15225:11;15218:55;15304:16;15299:2;15294:3;15290:12;15283:38;15347:2;15342:3;15338:12;15331:19;;15124:232;;;:::o;15362:379::-;;15525:67;15589:2;15584:3;15525:67;:::i;:::-;15518:74;;15622:34;15618:1;15613:3;15609:11;15602:55;15688:17;15683:2;15678:3;15674:12;15667:39;15732:2;15727:3;15723:12;15716:19;;15508:233;;;:::o;15747:377::-;;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;16007:34;16003:1;15998:3;15994:11;15987:55;16073:15;16068:2;16063:3;16059:12;16052:37;16115:2;16110:3;16106:12;16099:19;;15893:231;;;:::o;16130:366::-;;16293:67;16357:2;16352:3;16293:67;:::i;:::-;16286:74;;16390:34;16386:1;16381:3;16377:11;16370:55;16456:4;16451:2;16446:3;16442:12;16435:26;16487:2;16482:3;16478:12;16471:19;;16276:220;;;:::o;16502:118::-;16589:24;16607:5;16589:24;:::i;:::-;16584:3;16577:37;16567:53;;:::o;16626:435::-;;16828:95;16919:3;16910:6;16828:95;:::i;:::-;16821:102;;16940:95;17031:3;17022:6;16940:95;:::i;:::-;16933:102;;17052:3;17045:10;;16810:251;;;;;:::o;17067:222::-;;17198:2;17187:9;17183:18;17175:26;;17211:71;17279:1;17268:9;17264:17;17255:6;17211:71;:::i;:::-;17165:124;;;;:::o;17295:640::-;;17528:3;17517:9;17513:19;17505:27;;17542:71;17610:1;17599:9;17595:17;17586:6;17542:71;:::i;:::-;17623:72;17691:2;17680:9;17676:18;17667:6;17623:72;:::i;:::-;17705;17773:2;17762:9;17758:18;17749:6;17705:72;:::i;:::-;17824:9;17818:4;17814:20;17809:2;17798:9;17794:18;17787:48;17852:76;17923:4;17914:6;17852:76;:::i;:::-;17844:84;;17495:440;;;;;;;:::o;17941:210::-;;18066:2;18055:9;18051:18;18043:26;;18079:65;18141:1;18130:9;18126:17;18117:6;18079:65;:::i;:::-;18033:118;;;;:::o;18157:313::-;;18308:2;18297:9;18293:18;18285:26;;18357:9;18351:4;18347:20;18343:1;18332:9;18328:17;18321:47;18385:78;18458:4;18449:6;18385:78;:::i;:::-;18377:86;;18275:195;;;;:::o;18476:419::-;;18680:2;18669:9;18665:18;18657:26;;18729:9;18723:4;18719:20;18715:1;18704:9;18700:17;18693:47;18757:131;18883:4;18757:131;:::i;:::-;18749:139;;18647:248;;;:::o;18901:419::-;;19105:2;19094:9;19090:18;19082:26;;19154:9;19148:4;19144:20;19140:1;19129:9;19125:17;19118:47;19182:131;19308:4;19182:131;:::i;:::-;19174:139;;19072:248;;;:::o;19326:419::-;;19530:2;19519:9;19515:18;19507:26;;19579:9;19573:4;19569:20;19565:1;19554:9;19550:17;19543:47;19607:131;19733:4;19607:131;:::i;:::-;19599:139;;19497:248;;;:::o;19751:419::-;;19955:2;19944:9;19940:18;19932:26;;20004:9;19998:4;19994:20;19990:1;19979:9;19975:17;19968:47;20032:131;20158:4;20032:131;:::i;:::-;20024:139;;19922:248;;;:::o;20176:419::-;;20380:2;20369:9;20365:18;20357:26;;20429:9;20423:4;20419:20;20415:1;20404:9;20400:17;20393:47;20457:131;20583:4;20457:131;:::i;:::-;20449:139;;20347:248;;;:::o;20601:419::-;;20805:2;20794:9;20790:18;20782:26;;20854:9;20848:4;20844:20;20840:1;20829:9;20825:17;20818:47;20882:131;21008:4;20882:131;:::i;:::-;20874:139;;20772:248;;;:::o;21026:419::-;;21230:2;21219:9;21215:18;21207:26;;21279:9;21273:4;21269:20;21265:1;21254:9;21250:17;21243:47;21307:131;21433:4;21307:131;:::i;:::-;21299:139;;21197:248;;;:::o;21451:419::-;;21655:2;21644:9;21640:18;21632:26;;21704:9;21698:4;21694:20;21690:1;21679:9;21675:17;21668:47;21732:131;21858:4;21732:131;:::i;:::-;21724:139;;21622:248;;;:::o;21876:419::-;;22080:2;22069:9;22065:18;22057:26;;22129:9;22123:4;22119:20;22115:1;22104:9;22100:17;22093:47;22157:131;22283:4;22157:131;:::i;:::-;22149:139;;22047:248;;;:::o;22301:419::-;;22505:2;22494:9;22490:18;22482:26;;22554:9;22548:4;22544:20;22540:1;22529:9;22525:17;22518:47;22582:131;22708:4;22582:131;:::i;:::-;22574:139;;22472:248;;;:::o;22726:419::-;;22930:2;22919:9;22915:18;22907:26;;22979:9;22973:4;22969:20;22965:1;22954:9;22950:17;22943:47;23007:131;23133:4;23007:131;:::i;:::-;22999:139;;22897:248;;;:::o;23151:419::-;;23355:2;23344:9;23340:18;23332:26;;23404:9;23398:4;23394:20;23390:1;23379:9;23375:17;23368:47;23432:131;23558:4;23432:131;:::i;:::-;23424:139;;23322:248;;;:::o;23576:419::-;;23780:2;23769:9;23765:18;23757:26;;23829:9;23823:4;23819:20;23815:1;23804:9;23800:17;23793:47;23857:131;23983:4;23857:131;:::i;:::-;23849:139;;23747:248;;;:::o;24001:419::-;;24205:2;24194:9;24190:18;24182:26;;24254:9;24248:4;24244:20;24240:1;24229:9;24225:17;24218:47;24282:131;24408:4;24282:131;:::i;:::-;24274:139;;24172:248;;;:::o;24426:419::-;;24630:2;24619:9;24615:18;24607:26;;24679:9;24673:4;24669:20;24665:1;24654:9;24650:17;24643:47;24707:131;24833:4;24707:131;:::i;:::-;24699:139;;24597:248;;;:::o;24851:419::-;;25055:2;25044:9;25040:18;25032:26;;25104:9;25098:4;25094:20;25090:1;25079:9;25075:17;25068:47;25132:131;25258:4;25132:131;:::i;:::-;25124:139;;25022:248;;;:::o;25276:419::-;;25480:2;25469:9;25465:18;25457:26;;25529:9;25523:4;25519:20;25515:1;25504:9;25500:17;25493:47;25557:131;25683:4;25557:131;:::i;:::-;25549:139;;25447:248;;;:::o;25701:419::-;;25905:2;25894:9;25890:18;25882:26;;25954:9;25948:4;25944:20;25940:1;25929:9;25925:17;25918:47;25982:131;26108:4;25982:131;:::i;:::-;25974:139;;25872:248;;;:::o;26126:419::-;;26330:2;26319:9;26315:18;26307:26;;26379:9;26373:4;26369:20;26365:1;26354:9;26350:17;26343:47;26407:131;26533:4;26407:131;:::i;:::-;26399:139;;26297:248;;;:::o;26551:419::-;;26755:2;26744:9;26740:18;26732:26;;26804:9;26798:4;26794:20;26790:1;26779:9;26775:17;26768:47;26832:131;26958:4;26832:131;:::i;:::-;26824:139;;26722:248;;;:::o;26976:419::-;;27180:2;27169:9;27165:18;27157:26;;27229:9;27223:4;27219:20;27215:1;27204:9;27200:17;27193:47;27257:131;27383:4;27257:131;:::i;:::-;27249:139;;27147:248;;;:::o;27401:419::-;;27605:2;27594:9;27590:18;27582:26;;27654:9;27648:4;27644:20;27640:1;27629:9;27625:17;27618:47;27682:131;27808:4;27682:131;:::i;:::-;27674:139;;27572:248;;;:::o;27826:419::-;;28030:2;28019:9;28015:18;28007:26;;28079:9;28073:4;28069:20;28065:1;28054:9;28050:17;28043:47;28107:131;28233:4;28107:131;:::i;:::-;28099:139;;27997:248;;;:::o;28251:419::-;;28455:2;28444:9;28440:18;28432:26;;28504:9;28498:4;28494:20;28490:1;28479:9;28475:17;28468:47;28532:131;28658:4;28532:131;:::i;:::-;28524:139;;28422:248;;;:::o;28676:419::-;;28880:2;28869:9;28865:18;28857:26;;28929:9;28923:4;28919:20;28915:1;28904:9;28900:17;28893:47;28957:131;29083:4;28957:131;:::i;:::-;28949:139;;28847:248;;;:::o;29101:222::-;;29232:2;29221:9;29217:18;29209:26;;29245:71;29313:1;29302:9;29298:17;29289:6;29245:71;:::i;:::-;29199:124;;;;:::o;29329:283::-;;29395:2;29389:9;29379:19;;29437:4;29429:6;29425:17;29544:6;29532:10;29529:22;29508:18;29496:10;29493:34;29490:62;29487:2;;;29555:18;;:::i;:::-;29487:2;29595:10;29591:2;29584:22;29369:243;;;;:::o;29618:331::-;;29769:18;29761:6;29758:30;29755:2;;;29791:18;;:::i;:::-;29755:2;29876:4;29872:9;29865:4;29857:6;29853:17;29849:33;29841:41;;29937:4;29931;29927:15;29919:23;;29684:265;;;:::o;29955:98::-;;30040:5;30034:12;30024:22;;30013:40;;;:::o;30059:99::-;;30145:5;30139:12;30129:22;;30118:40;;;:::o;30164:168::-;;30281:6;30276:3;30269:19;30321:4;30316:3;30312:14;30297:29;;30259:73;;;;:::o;30338:169::-;;30456:6;30451:3;30444:19;30496:4;30491:3;30487:14;30472:29;;30434:73;;;;:::o;30513:148::-;;30652:3;30637:18;;30627:34;;;;:::o;30667:273::-;;30726:20;30744:1;30726:20;:::i;:::-;30721:25;;30760:20;30778:1;30760:20;:::i;:::-;30755:25;;30882:1;30846:34;30842:42;30839:1;30836:49;30833:2;;;30888:18;;:::i;:::-;30833:2;30932:1;30929;30925:9;30918:16;;30711:229;;;;:::o;30946:305::-;;31005:20;31023:1;31005:20;:::i;:::-;31000:25;;31039:20;31057:1;31039:20;:::i;:::-;31034:25;;31193:1;31125:66;31121:74;31118:1;31115:81;31112:2;;;31199:18;;:::i;:::-;31112:2;31243:1;31240;31236:9;31229:16;;30990:261;;;;:::o;31257:185::-;;31314:20;31332:1;31314:20;:::i;:::-;31309:25;;31348:20;31366:1;31348:20;:::i;:::-;31343:25;;31387:1;31377:2;;31392:18;;:::i;:::-;31377:2;31434:1;31431;31427:9;31422:14;;31299:143;;;;:::o;31448:348::-;;31511:20;31529:1;31511:20;:::i;:::-;31506:25;;31545:20;31563:1;31545:20;:::i;:::-;31540:25;;31733:1;31665:66;31661:74;31658:1;31655:81;31650:1;31643:9;31636:17;31632:105;31629:2;;;31740:18;;:::i;:::-;31629:2;31788:1;31785;31781:9;31770:20;;31496:300;;;;:::o;31802:191::-;;31862:20;31880:1;31862:20;:::i;:::-;31857:25;;31896:20;31914:1;31896:20;:::i;:::-;31891:25;;31935:1;31932;31929:8;31926:2;;;31940:18;;:::i;:::-;31926:2;31985:1;31982;31978:9;31970:17;;31847:146;;;;:::o;31999:191::-;;32059:20;32077:1;32059:20;:::i;:::-;32054:25;;32093:20;32111:1;32093:20;:::i;:::-;32088:25;;32132:1;32129;32126:8;32123:2;;;32137:18;;:::i;:::-;32123:2;32182:1;32179;32175:9;32167:17;;32044:146;;;;:::o;32196:96::-;;32262:24;32280:5;32262:24;:::i;:::-;32251:35;;32241:51;;;:::o;32298:90::-;;32375:5;32368:13;32361:21;32350:32;;32340:48;;;:::o;32394:149::-;;32470:66;32463:5;32459:78;32448:89;;32438:105;;;:::o;32549:118::-;;32626:34;32619:5;32615:46;32604:57;;32594:73;;;:::o;32673:126::-;;32750:42;32743:5;32739:54;32728:65;;32718:81;;;:::o;32805:77::-;;32871:5;32860:16;;32850:32;;;:::o;32888:154::-;32972:6;32967:3;32962;32949:30;33034:1;33025:6;33020:3;33016:16;33009:27;32939:103;;;:::o;33048:307::-;33116:1;33126:113;33140:6;33137:1;33134:13;33126:113;;;33225:1;33220:3;33216:11;33210:18;33206:1;33201:3;33197:11;33190:39;33162:2;33159:1;33155:10;33150:15;;33126:113;;;33257:6;33254:1;33251:13;33248:2;;;33337:1;33328:6;33323:3;33319:16;33312:27;33248:2;33097:258;;;;:::o;33361:171::-;;33423:24;33441:5;33423:24;:::i;:::-;33414:33;;33469:4;33462:5;33459:15;33456:2;;;33477:18;;:::i;:::-;33456:2;33524:1;33517:5;33513:13;33506:20;;33404:128;;;:::o;33538:320::-;;33619:1;33613:4;33609:12;33599:22;;33666:1;33660:4;33656:12;33687:18;33677:2;;33743:4;33735:6;33731:17;33721:27;;33677:2;33805;33797:6;33794:14;33774:18;33771:38;33768:2;;;33824:18;;:::i;:::-;33768:2;33589:269;;;;:::o;33864:233::-;;33926:24;33944:5;33926:24;:::i;:::-;33917:33;;33972:66;33965:5;33962:77;33959:2;;;34042:18;;:::i;:::-;33959:2;34089:1;34082:5;34078:13;34071:20;;33907:190;;;:::o;34103:176::-;;34152:20;34170:1;34152:20;:::i;:::-;34147:25;;34186:20;34204:1;34186:20;:::i;:::-;34181:25;;34225:1;34215:2;;34230:18;;:::i;:::-;34215:2;34271:1;34268;34264:9;34259:14;;34137:142;;;;:::o;34285:180::-;34333:77;34330:1;34323:88;34430:4;34427:1;34420:15;34454:4;34451:1;34444:15;34471:180;34519:77;34516:1;34509:88;34616:4;34613:1;34606:15;34640:4;34637:1;34630:15;34657:180;34705:77;34702:1;34695:88;34802:4;34799:1;34792:15;34826:4;34823:1;34816:15;34843:180;34891:77;34888:1;34881:88;34988:4;34985:1;34978:15;35012:4;35009:1;35002:15;35029:102;;35121:2;35117:7;35112:2;35105:5;35101:14;35097:28;35087:38;;35077:54;;;:::o;35137:122::-;35210:24;35228:5;35210:24;:::i;:::-;35203:5;35200:35;35190:2;;35249:1;35246;35239:12;35190:2;35180:79;:::o;35265:116::-;35335:21;35350:5;35335:21;:::i;:::-;35328:5;35325:32;35315:2;;35371:1;35368;35361:12;35315:2;35305:76;:::o;35387:120::-;35459:23;35476:5;35459:23;:::i;:::-;35452:5;35449:34;35439:2;;35497:1;35494;35487:12;35439:2;35429:78;:::o;35513:122::-;35586:24;35604:5;35586:24;:::i;:::-;35579:5;35576:35;35566:2;;35625:1;35622;35615:12;35566:2;35556:79;:::o
Swarm Source
ipfs://04a5b76dd678f5320484309cd198d5208ba3ca9a5375388198f7ba77f50d2ab2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.