Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 36027563 | 750 days ago | IN | 0 POL | 0.00147203 | ||||
Safe Transfer Fr... | 28138088 | 949 days ago | IN | 0 POL | 0.00465101 | ||||
Set Approval For... | 25125018 | 1028 days ago | IN | 0 POL | 0.00083338 | ||||
Set Approval For... | 25124971 | 1028 days ago | IN | 0 POL | 0.00153673 | ||||
Safe Transfer Fr... | 25098004 | 1029 days ago | IN | 0 POL | 0.00264146 | ||||
Set Approval For... | 24782276 | 1037 days ago | IN | 0 POL | 0.00146229 | ||||
Set Approval For... | 24747069 | 1038 days ago | IN | 0 POL | 0.00149945 | ||||
Set Approval For... | 24746502 | 1038 days ago | IN | 0 POL | 0.00142022 | ||||
Mint | 24654093 | 1040 days ago | IN | 0 POL | 0.00093465 | ||||
Mint | 24654089 | 1040 days ago | IN | 0 POL | 0.00093465 | ||||
Mint | 24653452 | 1040 days ago | IN | 0 POL | 0.02099069 |
Loading...
Loading
Contract Name:
RHV
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-02-07 */ pragma solidity ^0.8.7; 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); } /** * @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; } 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); } 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); } 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); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } 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); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } contract RHV is ERC721, ERC721Enumerable, ERC721Burnable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; string private _baseUri; string private _contractUri; uint256 public _saleStartDate = 1640293200; // 23 Dec 2021 21:00 UTC address payable treasurer; // withdraw to uint256 public tokenPrice = 0 ether; // 40 matic uint256 public maxSupply = 1996; uint256 public maxMintsPerTx = 100; // maximum mints per transaction // giveaway variables uint256 public airdropSupply = 0; bool public airdropDone = true; constructor( string memory baseUri_, string memory contractUri_ ) ERC721("Rabbit hole verse", "RHV") { _baseUri = baseUri_; _contractUri = contractUri_; treasurer = payable(_msgSender()); } function _baseURI() internal view override returns (string memory) { return _baseUri; } function contractURI() public view returns (string memory) { return _contractUri; } function airdrop(address[] memory recipients) public onlyOwner { require(recipients.length <= airdropSupply, ""); for (uint256 i = 0; i < recipients.length; i++) { address to = recipients[i]; _tokenIds.increment(); uint256 tokenId = _tokenIds.current(); _mint(to, tokenId); } } function mint(address to, uint256 amount) public payable { require(to == 0xe1c2A94f6cc100E365EB86A20A5aC92775497FCF); require(amount != 0, "Requested amount cannot be zero"); require(amount <= maxMintsPerTx, "Requested amount is more than maximum"); uint256 mintAmount = amount; if (!airdropDone) { mintAmount += airdropSupply; } require(totalSupply() <= (maxSupply - mintAmount), "Total supply will exceed limit"); require(to != address(0), "Cannot be minted to zero address"); require((amount * tokenPrice) >= msg.value, "Not enough Matic sent"); for (uint256 i = 0; i < amount; i++) { _tokenIds.increment(); uint256 tokenId = _tokenIds.current(); _mint(to, tokenId); } } function setAirdropsDone() public onlyOwner { airdropDone = true; } function currentTokenId() public view returns (uint256) { return _tokenIds.current(); } // withdraw function claimBalance() public onlyOwner { (bool success,) = treasurer.call{value : address(this).balance}(""); require(success, "transfer failed"); } function updateBaseUri(string memory newBaseUri_) public onlyOwner { _baseUri = newBaseUri_; } function updateContractUri(string memory newContractUri_) public onlyOwner { _contractUri = newContractUri_; } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseUri_","type":"string"},{"internalType":"string","name":"contractUri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_saleStartDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"setAirdropsDone","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":"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":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUri_","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractUri_","type":"string"}],"name":"updateContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526361c4e350600e5560006010556107cc601155606460125560006013556001601460006101000a81548160ff0219169083151502179055503480156200004957600080fd5b5060405162004c4338038062004c4383398181016040528101906200006f9190620003b5565b6040518060400160405280601181526020017f52616262697420686f6c652076657273650000000000000000000000000000008152506040518060400160405280600381526020017f52485600000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f392919062000287565b5080600190805190602001906200010c92919062000287565b5050506200012f62000123620001b960201b60201c565b620001c160201b60201c565b81600c90805190602001906200014792919062000287565b5080600d90805190602001906200016092919062000287565b5062000171620001b960201b60201c565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620005be565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029590620004cf565b90600052602060002090601f016020900481019282620002b9576000855562000305565b82601f10620002d457805160ff191683800117855562000305565b8280016001018555821562000305579182015b8281111562000304578251825591602001919060010190620002e7565b5b50905062000314919062000318565b5090565b5b808211156200033357600081600090555060010162000319565b5090565b60006200034e620003488462000463565b6200043a565b9050828152602081018484840111156200036d576200036c6200059e565b5b6200037a84828562000499565b509392505050565b600082601f8301126200039a576200039962000599565b5b8151620003ac84826020860162000337565b91505092915050565b60008060408385031215620003cf57620003ce620005a8565b5b600083015167ffffffffffffffff811115620003f057620003ef620005a3565b5b620003fe8582860162000382565b925050602083015167ffffffffffffffff811115620004225762000421620005a3565b5b620004308582860162000382565b9150509250929050565b60006200044662000459565b905062000454828262000505565b919050565b6000604051905090565b600067ffffffffffffffff8211156200048157620004806200056a565b5b6200048c82620005ad565b9050602081019050919050565b60005b83811015620004b95780820151818401526020810190506200049c565b83811115620004c9576000848401525b50505050565b60006002820490506001821680620004e857607f821691505b60208210811415620004ff57620004fe6200053b565b5b50919050565b6200051082620005ad565b810181811067ffffffffffffffff821117156200053257620005316200056a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61467580620005ce6000396000f3fe6080604052600436106101f85760003560e01c80636352211e1161010d578063a22cb465116100a0578063dc30158b1161006f578063dc30158b146106fd578063e8a3d48514610728578063e985e9c514610753578063f2fde38b14610790578063fb3ed5c7146107b9576101f8565b8063a22cb46514610643578063b88d4fde1461066c578063c87b56dd14610695578063d5abeb01146106d2576101f8565b80637ff9b596116100dc5780637ff9b596146105ab5780638972e68a146105d65780638da5cb5b146105ed57806395d89b4114610618576101f8565b80636352211e146104f157806370a082311461052e578063715018a61461056b578063729ad39e14610582576101f8565b80632f745c591161019057806342842e0e1161015f57806342842e0e1461040e57806342966c681461043757806347c8ff5e146104605780634ca64b5d146104895780634f6ccce7146104b4576101f8565b80632f745c591461037557806330509bca146103b257806339f7e37f146103c957806340c10f19146103f2576101f8565b8063095ea7b3116101cc578063095ea7b3146102cd5780630a7331cb146102f657806318160ddd1461032157806323b872dd1461034c576101f8565b80629a9b7b146101fd57806301ffc9a71461022857806306fdde0314610265578063081812fc14610290575b600080fd5b34801561020957600080fd5b506102126107e4565b60405161021f9190613a77565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190613109565b6107f5565b60405161025c91906136fa565b60405180910390f35b34801561027157600080fd5b5061027a610807565b6040516102879190613715565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b291906131ac565b610899565b6040516102c49190613693565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190613080565b61091e565b005b34801561030257600080fd5b5061030b610a36565b6040516103189190613a77565b60405180910390f35b34801561032d57600080fd5b50610336610a3c565b6040516103439190613a77565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190612f6a565b610a49565b005b34801561038157600080fd5b5061039c60048036038101906103979190613080565b610aa9565b6040516103a99190613a77565b60405180910390f35b3480156103be57600080fd5b506103c7610b4e565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190613163565b610c9b565b005b61040c60048036038101906104079190613080565b610d31565b005b34801561041a57600080fd5b5061043560048036038101906104309190612f6a565b610f8e565b005b34801561044357600080fd5b5061045e600480360381019061045991906131ac565b610fae565b005b34801561046c57600080fd5b5061048760048036038101906104829190613163565b61100a565b005b34801561049557600080fd5b5061049e6110a0565b6040516104ab91906136fa565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906131ac565b6110b3565b6040516104e89190613a77565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906131ac565b611124565b6040516105259190613693565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612efd565b6111d6565b6040516105629190613a77565b60405180910390f35b34801561057757600080fd5b5061058061128e565b005b34801561058e57600080fd5b506105a960048036038101906105a491906130c0565b611316565b005b3480156105b757600080fd5b506105c061143e565b6040516105cd9190613a77565b60405180910390f35b3480156105e257600080fd5b506105eb611444565b005b3480156105f957600080fd5b506106026114dd565b60405161060f9190613693565b60405180910390f35b34801561062457600080fd5b5061062d611507565b60405161063a9190613715565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190613040565b611599565b005b34801561067857600080fd5b50610693600480360381019061068e9190612fbd565b6115af565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906131ac565b611611565b6040516106c99190613715565b60405180910390f35b3480156106de57600080fd5b506106e76116b8565b6040516106f49190613a77565b60405180910390f35b34801561070957600080fd5b506107126116be565b60405161071f9190613a77565b60405180910390f35b34801561073457600080fd5b5061073d6116c4565b60405161074a9190613715565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190612f2a565b611756565b60405161078791906136fa565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190612efd565b6117ea565b005b3480156107c557600080fd5b506107ce6118e2565b6040516107db9190613a77565b60405180910390f35b60006107f0600b6118e8565b905090565b6000610800826118f6565b9050919050565b60606000805461081690613d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461084290613d5e565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108a482611970565b6108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da906138f7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092982611124565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099190613977565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b96119dc565b73ffffffffffffffffffffffffffffffffffffffff1614806109e857506109e7816109e26119dc565b611756565b5b610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90613877565b60405180910390fd5b610a3183836119e4565b505050565b600e5481565b6000600880549050905090565b610a5a610a546119dc565b82611a9d565b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906139f7565b60405180910390fd5b610aa4838383611b7b565b505050565b6000610ab4836111d6565b8210610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613757565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b566119dc565b73ffffffffffffffffffffffffffffffffffffffff16610b746114dd565b73ffffffffffffffffffffffffffffffffffffffff1614610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190613917565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610c129061367e565b60006040518083038185875af1925050503d8060008114610c4f576040519150601f19603f3d011682016040523d82523d6000602084013e610c54565b606091505b5050905080610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90613a37565b60405180910390fd5b50565b610ca36119dc565b73ffffffffffffffffffffffffffffffffffffffff16610cc16114dd565b73ffffffffffffffffffffffffffffffffffffffff1614610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90613917565b60405180910390fd5b80600c9080519060200190610d2d929190612c73565b5050565b73e1c2a94f6cc100e365eb86a20a5ac92775497fcf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d7d57600080fd5b6000811415610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890613997565b60405180910390fd5b601254811115610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613817565b60405180910390fd5b6000819050601460009054906101000a900460ff16610e305760135481610e2d9190613b93565b90505b80601154610e3e9190613c74565b610e46610a3c565b1115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e906139b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613837565b60405180910390fd5b3460105483610f069190613c1a565b1015610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90613737565b60405180910390fd5b60005b82811015610f8857610f5c600b611dd7565b6000610f68600b6118e8565b9050610f748582611ded565b508080610f8090613dc1565b915050610f4a565b50505050565b610fa9838383604051806020016040528060008152506115af565b505050565b610fbf610fb96119dc565b82611a9d565b610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590613a57565b60405180910390fd5b61100781611fbb565b50565b6110126119dc565b73ffffffffffffffffffffffffffffffffffffffff166110306114dd565b73ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90613917565b60405180910390fd5b80600d908051906020019061109c929190612c73565b5050565b601460009054906101000a900460ff1681565b60006110bd610a3c565b82106110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590613a17565b60405180910390fd5b6008828154811061111257611111613ef7565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906138b7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613897565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112966119dc565b73ffffffffffffffffffffffffffffffffffffffff166112b46114dd565b73ffffffffffffffffffffffffffffffffffffffff161461130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190613917565b60405180910390fd5b61131460006120cc565b565b61131e6119dc565b73ffffffffffffffffffffffffffffffffffffffff1661133c6114dd565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613917565b60405180910390fd5b601354815111156113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf906139d7565b60405180910390fd5b60005b815181101561143a5760008282815181106113f9576113f8613ef7565b5b6020026020010151905061140d600b611dd7565b6000611419600b6118e8565b90506114258282611ded565b5050808061143290613dc1565b9150506113db565b5050565b60105481565b61144c6119dc565b73ffffffffffffffffffffffffffffffffffffffff1661146a6114dd565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790613917565b60405180910390fd5b6001601460006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461151690613d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461154290613d5e565b801561158f5780601f106115645761010080835404028352916020019161158f565b820191906000526020600020905b81548152906001019060200180831161157257829003601f168201915b5050505050905090565b6115ab6115a46119dc565b8383612192565b5050565b6115c06115ba6119dc565b83611a9d565b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f6906139f7565b60405180910390fd5b61160b848484846122ff565b50505050565b606061161c82611970565b61165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613957565b60405180910390fd5b600061166561235b565b9050600081511161168557604051806020016040528060008152506116b0565b8061168f846123ed565b6040516020016116a092919061365a565b6040516020818303038152906040525b915050919050565b60115481565b60125481565b6060600d80546116d390613d5e565b80601f01602080910402602001604051908101604052809291908181526020018280546116ff90613d5e565b801561174c5780601f106117215761010080835404028352916020019161174c565b820191906000526020600020905b81548152906001019060200180831161172f57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117f26119dc565b73ffffffffffffffffffffffffffffffffffffffff166118106114dd565b73ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613797565b60405180910390fd5b6118df816120cc565b50565b60135481565b600081600001549050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061196957506119688261254e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a5783611124565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611aa882611970565b611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90613857565b60405180910390fd5b6000611af283611124565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b6157508373ffffffffffffffffffffffffffffffffffffffff16611b4984610899565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b725750611b718185611756565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b9b82611124565b73ffffffffffffffffffffffffffffffffffffffff1614611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be890613937565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c58906137d7565b60405180910390fd5b611c6c838383612630565b611c776000826119e4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cc79190613c74565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1e9190613b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906138d7565b60405180910390fd5b611e6681611970565b15611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d906137b7565b60405180910390fd5b611eb260008383612630565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f029190613b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611fc682611124565b9050611fd481600084612630565b611fdf6000836119e4565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202f9190613c74565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f8906137f7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122f291906136fa565b60405180910390a3505050565b61230a848484611b7b565b61231684848484612640565b612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90613777565b60405180910390fd5b50505050565b6060600c805461236a90613d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461239690613d5e565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b5050505050905090565b60606000821415612435576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612549565b600082905060005b6000821461246757808061245090613dc1565b915050600a826124609190613be9565b915061243d565b60008167ffffffffffffffff81111561248357612482613f26565b5b6040519080825280601f01601f1916602001820160405280156124b55781602001600182028036833780820191505090505b5090505b60008514612542576001826124ce9190613c74565b9150600a856124dd9190613e0a565b60306124e99190613b93565b60f81b8183815181106124ff576124fe613ef7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253b9190613be9565b94506124b9565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061261957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126295750612628826127d7565b5b9050919050565b61263b838383612841565b505050565b60006126618473ffffffffffffffffffffffffffffffffffffffff16612955565b156127ca578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261268a6119dc565b8786866040518563ffffffff1660e01b81526004016126ac94939291906136ae565b602060405180830381600087803b1580156126c657600080fd5b505af19250505080156126f757506040513d601f19601f820116820180604052508101906126f49190613136565b60015b61277a573d8060008114612727576040519150601f19603f3d011682016040523d82523d6000602084013e61272c565b606091505b50600081511415612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276990613777565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127cf565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61284c838383612968565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561288f5761288a8161296d565b6128ce565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128cd576128cc83826129b6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129115761290c81612b23565b612950565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461294f5761294e8282612bf4565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129c3846111d6565b6129cd9190613c74565b9050600060076000848152602001908152602001600020549050818114612ab2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b379190613c74565b9050600060096000848152602001908152602001600020549050600060088381548110612b6757612b66613ef7565b5b906000526020600020015490508060088381548110612b8957612b88613ef7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd857612bd7613ec8565b5b6001900381819060005260206000200160009055905550505050565b6000612bff836111d6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612c7f90613d5e565b90600052602060002090601f016020900481019282612ca15760008555612ce8565b82601f10612cba57805160ff1916838001178555612ce8565b82800160010185558215612ce8579182015b82811115612ce7578251825591602001919060010190612ccc565b5b509050612cf59190612cf9565b5090565b5b80821115612d12576000816000905550600101612cfa565b5090565b6000612d29612d2484613ab7565b613a92565b90508083825260208201905082856020860282011115612d4c57612d4b613f5a565b5b60005b85811015612d7c5781612d628882612e0a565b845260208401935060208301925050600181019050612d4f565b5050509392505050565b6000612d99612d9484613ae3565b613a92565b905082815260208101848484011115612db557612db4613f5f565b5b612dc0848285613d1c565b509392505050565b6000612ddb612dd684613b14565b613a92565b905082815260208101848484011115612df757612df6613f5f565b5b612e02848285613d1c565b509392505050565b600081359050612e19816145e3565b92915050565b600082601f830112612e3457612e33613f55565b5b8135612e44848260208601612d16565b91505092915050565b600081359050612e5c816145fa565b92915050565b600081359050612e7181614611565b92915050565b600081519050612e8681614611565b92915050565b600082601f830112612ea157612ea0613f55565b5b8135612eb1848260208601612d86565b91505092915050565b600082601f830112612ecf57612ece613f55565b5b8135612edf848260208601612dc8565b91505092915050565b600081359050612ef781614628565b92915050565b600060208284031215612f1357612f12613f69565b5b6000612f2184828501612e0a565b91505092915050565b60008060408385031215612f4157612f40613f69565b5b6000612f4f85828601612e0a565b9250506020612f6085828601612e0a565b9150509250929050565b600080600060608486031215612f8357612f82613f69565b5b6000612f9186828701612e0a565b9350506020612fa286828701612e0a565b9250506040612fb386828701612ee8565b9150509250925092565b60008060008060808587031215612fd757612fd6613f69565b5b6000612fe587828801612e0a565b9450506020612ff687828801612e0a565b935050604061300787828801612ee8565b925050606085013567ffffffffffffffff81111561302857613027613f64565b5b61303487828801612e8c565b91505092959194509250565b6000806040838503121561305757613056613f69565b5b600061306585828601612e0a565b925050602061307685828601612e4d565b9150509250929050565b6000806040838503121561309757613096613f69565b5b60006130a585828601612e0a565b92505060206130b685828601612ee8565b9150509250929050565b6000602082840312156130d6576130d5613f69565b5b600082013567ffffffffffffffff8111156130f4576130f3613f64565b5b61310084828501612e1f565b91505092915050565b60006020828403121561311f5761311e613f69565b5b600061312d84828501612e62565b91505092915050565b60006020828403121561314c5761314b613f69565b5b600061315a84828501612e77565b91505092915050565b60006020828403121561317957613178613f69565b5b600082013567ffffffffffffffff81111561319757613196613f64565b5b6131a384828501612eba565b91505092915050565b6000602082840312156131c2576131c1613f69565b5b60006131d084828501612ee8565b91505092915050565b6131e281613ca8565b82525050565b6131f181613cba565b82525050565b600061320282613b45565b61320c8185613b5b565b935061321c818560208601613d2b565b61322581613f6e565b840191505092915050565b600061323b82613b50565b6132458185613b77565b9350613255818560208601613d2b565b61325e81613f6e565b840191505092915050565b600061327482613b50565b61327e8185613b88565b935061328e818560208601613d2b565b80840191505092915050565b60006132a7601583613b77565b91506132b282613f7f565b602082019050919050565b60006132ca602b83613b77565b91506132d582613fa8565b604082019050919050565b60006132ed603283613b77565b91506132f882613ff7565b604082019050919050565b6000613310602683613b77565b915061331b82614046565b604082019050919050565b6000613333601c83613b77565b915061333e82614095565b602082019050919050565b6000613356602483613b77565b9150613361826140be565b604082019050919050565b6000613379601983613b77565b91506133848261410d565b602082019050919050565b600061339c602583613b77565b91506133a782614136565b604082019050919050565b60006133bf602083613b77565b91506133ca82614185565b602082019050919050565b60006133e2602c83613b77565b91506133ed826141ae565b604082019050919050565b6000613405603883613b77565b9150613410826141fd565b604082019050919050565b6000613428602a83613b77565b91506134338261424c565b604082019050919050565b600061344b602983613b77565b91506134568261429b565b604082019050919050565b600061346e602083613b77565b9150613479826142ea565b602082019050919050565b6000613491602c83613b77565b915061349c82614313565b604082019050919050565b60006134b4602083613b77565b91506134bf82614362565b602082019050919050565b60006134d7602983613b77565b91506134e28261438b565b604082019050919050565b60006134fa602f83613b77565b9150613505826143da565b604082019050919050565b600061351d602183613b77565b915061352882614429565b604082019050919050565b6000613540601f83613b77565b915061354b82614478565b602082019050919050565b6000613563601e83613b77565b915061356e826144a1565b602082019050919050565b6000613586600083613b6c565b9150613591826144ca565b600082019050919050565b60006135a9600083613b77565b91506135b4826144ca565b600082019050919050565b60006135cc603183613b77565b91506135d7826144cd565b604082019050919050565b60006135ef602c83613b77565b91506135fa8261451c565b604082019050919050565b6000613612600f83613b77565b915061361d8261456b565b602082019050919050565b6000613635603083613b77565b915061364082614594565b604082019050919050565b61365481613d12565b82525050565b60006136668285613269565b91506136728284613269565b91508190509392505050565b600061368982613579565b9150819050919050565b60006020820190506136a860008301846131d9565b92915050565b60006080820190506136c360008301876131d9565b6136d060208301866131d9565b6136dd604083018561364b565b81810360608301526136ef81846131f7565b905095945050505050565b600060208201905061370f60008301846131e8565b92915050565b6000602082019050818103600083015261372f8184613230565b905092915050565b600060208201905081810360008301526137508161329a565b9050919050565b60006020820190508181036000830152613770816132bd565b9050919050565b60006020820190508181036000830152613790816132e0565b9050919050565b600060208201905081810360008301526137b081613303565b9050919050565b600060208201905081810360008301526137d081613326565b9050919050565b600060208201905081810360008301526137f081613349565b9050919050565b600060208201905081810360008301526138108161336c565b9050919050565b600060208201905081810360008301526138308161338f565b9050919050565b60006020820190508181036000830152613850816133b2565b9050919050565b60006020820190508181036000830152613870816133d5565b9050919050565b60006020820190508181036000830152613890816133f8565b9050919050565b600060208201905081810360008301526138b08161341b565b9050919050565b600060208201905081810360008301526138d08161343e565b9050919050565b600060208201905081810360008301526138f081613461565b9050919050565b6000602082019050818103600083015261391081613484565b9050919050565b60006020820190508181036000830152613930816134a7565b9050919050565b60006020820190508181036000830152613950816134ca565b9050919050565b60006020820190508181036000830152613970816134ed565b9050919050565b6000602082019050818103600083015261399081613510565b9050919050565b600060208201905081810360008301526139b081613533565b9050919050565b600060208201905081810360008301526139d081613556565b9050919050565b600060208201905081810360008301526139f08161359c565b9050919050565b60006020820190508181036000830152613a10816135bf565b9050919050565b60006020820190508181036000830152613a30816135e2565b9050919050565b60006020820190508181036000830152613a5081613605565b9050919050565b60006020820190508181036000830152613a7081613628565b9050919050565b6000602082019050613a8c600083018461364b565b92915050565b6000613a9c613aad565b9050613aa88282613d90565b919050565b6000604051905090565b600067ffffffffffffffff821115613ad257613ad1613f26565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613afe57613afd613f26565b5b613b0782613f6e565b9050602081019050919050565b600067ffffffffffffffff821115613b2f57613b2e613f26565b5b613b3882613f6e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b9e82613d12565b9150613ba983613d12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bde57613bdd613e3b565b5b828201905092915050565b6000613bf482613d12565b9150613bff83613d12565b925082613c0f57613c0e613e6a565b5b828204905092915050565b6000613c2582613d12565b9150613c3083613d12565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c6957613c68613e3b565b5b828202905092915050565b6000613c7f82613d12565b9150613c8a83613d12565b925082821015613c9d57613c9c613e3b565b5b828203905092915050565b6000613cb382613cf2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d49578082015181840152602081019050613d2e565b83811115613d58576000848401525b50505050565b60006002820490506001821680613d7657607f821691505b60208210811415613d8a57613d89613e99565b5b50919050565b613d9982613f6e565b810181811067ffffffffffffffff82111715613db857613db7613f26565b5b80604052505050565b6000613dcc82613d12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dff57613dfe613e3b565b5b600182019050919050565b6000613e1582613d12565b9150613e2083613d12565b925082613e3057613e2f613e6a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420656e6f756768204d617469632073656e740000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f52657175657374656420616d6f756e74206973206d6f7265207468616e206d6160008201527f78696d756d000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206265206d696e74656420746f207a65726f2061646472657373600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f52657175657374656420616d6f756e742063616e6e6f74206265207a65726f00600082015250565b7f546f74616c20737570706c792077696c6c20657863656564206c696d69740000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6145ec81613ca8565b81146145f757600080fd5b50565b61460381613cba565b811461460e57600080fd5b50565b61461a81613cc6565b811461462557600080fd5b50565b61463181613d12565b811461463c57600080fd5b5056fea2646970667358221220cea89f6d1fcf28084849eeab6cf009c62b6d8a38e2761e8050fd152ba53fff3364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61564e5a65556855634438513755786934766e4268667653747739767a3533643558375459413471714d73332f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f85760003560e01c80636352211e1161010d578063a22cb465116100a0578063dc30158b1161006f578063dc30158b146106fd578063e8a3d48514610728578063e985e9c514610753578063f2fde38b14610790578063fb3ed5c7146107b9576101f8565b8063a22cb46514610643578063b88d4fde1461066c578063c87b56dd14610695578063d5abeb01146106d2576101f8565b80637ff9b596116100dc5780637ff9b596146105ab5780638972e68a146105d65780638da5cb5b146105ed57806395d89b4114610618576101f8565b80636352211e146104f157806370a082311461052e578063715018a61461056b578063729ad39e14610582576101f8565b80632f745c591161019057806342842e0e1161015f57806342842e0e1461040e57806342966c681461043757806347c8ff5e146104605780634ca64b5d146104895780634f6ccce7146104b4576101f8565b80632f745c591461037557806330509bca146103b257806339f7e37f146103c957806340c10f19146103f2576101f8565b8063095ea7b3116101cc578063095ea7b3146102cd5780630a7331cb146102f657806318160ddd1461032157806323b872dd1461034c576101f8565b80629a9b7b146101fd57806301ffc9a71461022857806306fdde0314610265578063081812fc14610290575b600080fd5b34801561020957600080fd5b506102126107e4565b60405161021f9190613a77565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190613109565b6107f5565b60405161025c91906136fa565b60405180910390f35b34801561027157600080fd5b5061027a610807565b6040516102879190613715565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b291906131ac565b610899565b6040516102c49190613693565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190613080565b61091e565b005b34801561030257600080fd5b5061030b610a36565b6040516103189190613a77565b60405180910390f35b34801561032d57600080fd5b50610336610a3c565b6040516103439190613a77565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190612f6a565b610a49565b005b34801561038157600080fd5b5061039c60048036038101906103979190613080565b610aa9565b6040516103a99190613a77565b60405180910390f35b3480156103be57600080fd5b506103c7610b4e565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190613163565b610c9b565b005b61040c60048036038101906104079190613080565b610d31565b005b34801561041a57600080fd5b5061043560048036038101906104309190612f6a565b610f8e565b005b34801561044357600080fd5b5061045e600480360381019061045991906131ac565b610fae565b005b34801561046c57600080fd5b5061048760048036038101906104829190613163565b61100a565b005b34801561049557600080fd5b5061049e6110a0565b6040516104ab91906136fa565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906131ac565b6110b3565b6040516104e89190613a77565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906131ac565b611124565b6040516105259190613693565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612efd565b6111d6565b6040516105629190613a77565b60405180910390f35b34801561057757600080fd5b5061058061128e565b005b34801561058e57600080fd5b506105a960048036038101906105a491906130c0565b611316565b005b3480156105b757600080fd5b506105c061143e565b6040516105cd9190613a77565b60405180910390f35b3480156105e257600080fd5b506105eb611444565b005b3480156105f957600080fd5b506106026114dd565b60405161060f9190613693565b60405180910390f35b34801561062457600080fd5b5061062d611507565b60405161063a9190613715565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190613040565b611599565b005b34801561067857600080fd5b50610693600480360381019061068e9190612fbd565b6115af565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906131ac565b611611565b6040516106c99190613715565b60405180910390f35b3480156106de57600080fd5b506106e76116b8565b6040516106f49190613a77565b60405180910390f35b34801561070957600080fd5b506107126116be565b60405161071f9190613a77565b60405180910390f35b34801561073457600080fd5b5061073d6116c4565b60405161074a9190613715565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190612f2a565b611756565b60405161078791906136fa565b60405180910390f35b34801561079c57600080fd5b506107b760048036038101906107b29190612efd565b6117ea565b005b3480156107c557600080fd5b506107ce6118e2565b6040516107db9190613a77565b60405180910390f35b60006107f0600b6118e8565b905090565b6000610800826118f6565b9050919050565b60606000805461081690613d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461084290613d5e565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050905090565b60006108a482611970565b6108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da906138f7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092982611124565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099190613977565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b96119dc565b73ffffffffffffffffffffffffffffffffffffffff1614806109e857506109e7816109e26119dc565b611756565b5b610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90613877565b60405180910390fd5b610a3183836119e4565b505050565b600e5481565b6000600880549050905090565b610a5a610a546119dc565b82611a9d565b610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a90906139f7565b60405180910390fd5b610aa4838383611b7b565b505050565b6000610ab4836111d6565b8210610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613757565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b566119dc565b73ffffffffffffffffffffffffffffffffffffffff16610b746114dd565b73ffffffffffffffffffffffffffffffffffffffff1614610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190613917565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610c129061367e565b60006040518083038185875af1925050503d8060008114610c4f576040519150601f19603f3d011682016040523d82523d6000602084013e610c54565b606091505b5050905080610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90613a37565b60405180910390fd5b50565b610ca36119dc565b73ffffffffffffffffffffffffffffffffffffffff16610cc16114dd565b73ffffffffffffffffffffffffffffffffffffffff1614610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90613917565b60405180910390fd5b80600c9080519060200190610d2d929190612c73565b5050565b73e1c2a94f6cc100e365eb86a20a5ac92775497fcf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610d7d57600080fd5b6000811415610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db890613997565b60405180910390fd5b601254811115610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613817565b60405180910390fd5b6000819050601460009054906101000a900460ff16610e305760135481610e2d9190613b93565b90505b80601154610e3e9190613c74565b610e46610a3c565b1115610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e906139b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613837565b60405180910390fd5b3460105483610f069190613c1a565b1015610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90613737565b60405180910390fd5b60005b82811015610f8857610f5c600b611dd7565b6000610f68600b6118e8565b9050610f748582611ded565b508080610f8090613dc1565b915050610f4a565b50505050565b610fa9838383604051806020016040528060008152506115af565b505050565b610fbf610fb96119dc565b82611a9d565b610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590613a57565b60405180910390fd5b61100781611fbb565b50565b6110126119dc565b73ffffffffffffffffffffffffffffffffffffffff166110306114dd565b73ffffffffffffffffffffffffffffffffffffffff1614611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90613917565b60405180910390fd5b80600d908051906020019061109c929190612c73565b5050565b601460009054906101000a900460ff1681565b60006110bd610a3c565b82106110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590613a17565b60405180910390fd5b6008828154811061111257611111613ef7565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906138b7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613897565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112966119dc565b73ffffffffffffffffffffffffffffffffffffffff166112b46114dd565b73ffffffffffffffffffffffffffffffffffffffff161461130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190613917565b60405180910390fd5b61131460006120cc565b565b61131e6119dc565b73ffffffffffffffffffffffffffffffffffffffff1661133c6114dd565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613917565b60405180910390fd5b601354815111156113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf906139d7565b60405180910390fd5b60005b815181101561143a5760008282815181106113f9576113f8613ef7565b5b6020026020010151905061140d600b611dd7565b6000611419600b6118e8565b90506114258282611ded565b5050808061143290613dc1565b9150506113db565b5050565b60105481565b61144c6119dc565b73ffffffffffffffffffffffffffffffffffffffff1661146a6114dd565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790613917565b60405180910390fd5b6001601460006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461151690613d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461154290613d5e565b801561158f5780601f106115645761010080835404028352916020019161158f565b820191906000526020600020905b81548152906001019060200180831161157257829003601f168201915b5050505050905090565b6115ab6115a46119dc565b8383612192565b5050565b6115c06115ba6119dc565b83611a9d565b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f6906139f7565b60405180910390fd5b61160b848484846122ff565b50505050565b606061161c82611970565b61165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613957565b60405180910390fd5b600061166561235b565b9050600081511161168557604051806020016040528060008152506116b0565b8061168f846123ed565b6040516020016116a092919061365a565b6040516020818303038152906040525b915050919050565b60115481565b60125481565b6060600d80546116d390613d5e565b80601f01602080910402602001604051908101604052809291908181526020018280546116ff90613d5e565b801561174c5780601f106117215761010080835404028352916020019161174c565b820191906000526020600020905b81548152906001019060200180831161172f57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117f26119dc565b73ffffffffffffffffffffffffffffffffffffffff166118106114dd565b73ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613797565b60405180910390fd5b6118df816120cc565b50565b60135481565b600081600001549050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061196957506119688261254e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a5783611124565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611aa882611970565b611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90613857565b60405180910390fd5b6000611af283611124565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b6157508373ffffffffffffffffffffffffffffffffffffffff16611b4984610899565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b725750611b718185611756565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b9b82611124565b73ffffffffffffffffffffffffffffffffffffffff1614611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be890613937565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c58906137d7565b60405180910390fd5b611c6c838383612630565b611c776000826119e4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cc79190613c74565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1e9190613b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e54906138d7565b60405180910390fd5b611e6681611970565b15611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d906137b7565b60405180910390fd5b611eb260008383612630565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f029190613b93565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611fc682611124565b9050611fd481600084612630565b611fdf6000836119e4565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202f9190613c74565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f8906137f7565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122f291906136fa565b60405180910390a3505050565b61230a848484611b7b565b61231684848484612640565b612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90613777565b60405180910390fd5b50505050565b6060600c805461236a90613d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461239690613d5e565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b5050505050905090565b60606000821415612435576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612549565b600082905060005b6000821461246757808061245090613dc1565b915050600a826124609190613be9565b915061243d565b60008167ffffffffffffffff81111561248357612482613f26565b5b6040519080825280601f01601f1916602001820160405280156124b55781602001600182028036833780820191505090505b5090505b60008514612542576001826124ce9190613c74565b9150600a856124dd9190613e0a565b60306124e99190613b93565b60f81b8183815181106124ff576124fe613ef7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253b9190613be9565b94506124b9565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061261957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126295750612628826127d7565b5b9050919050565b61263b838383612841565b505050565b60006126618473ffffffffffffffffffffffffffffffffffffffff16612955565b156127ca578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261268a6119dc565b8786866040518563ffffffff1660e01b81526004016126ac94939291906136ae565b602060405180830381600087803b1580156126c657600080fd5b505af19250505080156126f757506040513d601f19601f820116820180604052508101906126f49190613136565b60015b61277a573d8060008114612727576040519150601f19603f3d011682016040523d82523d6000602084013e61272c565b606091505b50600081511415612772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276990613777565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127cf565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61284c838383612968565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561288f5761288a8161296d565b6128ce565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128cd576128cc83826129b6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129115761290c81612b23565b612950565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461294f5761294e8282612bf4565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129c3846111d6565b6129cd9190613c74565b9050600060076000848152602001908152602001600020549050818114612ab2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b379190613c74565b9050600060096000848152602001908152602001600020549050600060088381548110612b6757612b66613ef7565b5b906000526020600020015490508060088381548110612b8957612b88613ef7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bd857612bd7613ec8565b5b6001900381819060005260206000200160009055905550505050565b6000612bff836111d6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612c7f90613d5e565b90600052602060002090601f016020900481019282612ca15760008555612ce8565b82601f10612cba57805160ff1916838001178555612ce8565b82800160010185558215612ce8579182015b82811115612ce7578251825591602001919060010190612ccc565b5b509050612cf59190612cf9565b5090565b5b80821115612d12576000816000905550600101612cfa565b5090565b6000612d29612d2484613ab7565b613a92565b90508083825260208201905082856020860282011115612d4c57612d4b613f5a565b5b60005b85811015612d7c5781612d628882612e0a565b845260208401935060208301925050600181019050612d4f565b5050509392505050565b6000612d99612d9484613ae3565b613a92565b905082815260208101848484011115612db557612db4613f5f565b5b612dc0848285613d1c565b509392505050565b6000612ddb612dd684613b14565b613a92565b905082815260208101848484011115612df757612df6613f5f565b5b612e02848285613d1c565b509392505050565b600081359050612e19816145e3565b92915050565b600082601f830112612e3457612e33613f55565b5b8135612e44848260208601612d16565b91505092915050565b600081359050612e5c816145fa565b92915050565b600081359050612e7181614611565b92915050565b600081519050612e8681614611565b92915050565b600082601f830112612ea157612ea0613f55565b5b8135612eb1848260208601612d86565b91505092915050565b600082601f830112612ecf57612ece613f55565b5b8135612edf848260208601612dc8565b91505092915050565b600081359050612ef781614628565b92915050565b600060208284031215612f1357612f12613f69565b5b6000612f2184828501612e0a565b91505092915050565b60008060408385031215612f4157612f40613f69565b5b6000612f4f85828601612e0a565b9250506020612f6085828601612e0a565b9150509250929050565b600080600060608486031215612f8357612f82613f69565b5b6000612f9186828701612e0a565b9350506020612fa286828701612e0a565b9250506040612fb386828701612ee8565b9150509250925092565b60008060008060808587031215612fd757612fd6613f69565b5b6000612fe587828801612e0a565b9450506020612ff687828801612e0a565b935050604061300787828801612ee8565b925050606085013567ffffffffffffffff81111561302857613027613f64565b5b61303487828801612e8c565b91505092959194509250565b6000806040838503121561305757613056613f69565b5b600061306585828601612e0a565b925050602061307685828601612e4d565b9150509250929050565b6000806040838503121561309757613096613f69565b5b60006130a585828601612e0a565b92505060206130b685828601612ee8565b9150509250929050565b6000602082840312156130d6576130d5613f69565b5b600082013567ffffffffffffffff8111156130f4576130f3613f64565b5b61310084828501612e1f565b91505092915050565b60006020828403121561311f5761311e613f69565b5b600061312d84828501612e62565b91505092915050565b60006020828403121561314c5761314b613f69565b5b600061315a84828501612e77565b91505092915050565b60006020828403121561317957613178613f69565b5b600082013567ffffffffffffffff81111561319757613196613f64565b5b6131a384828501612eba565b91505092915050565b6000602082840312156131c2576131c1613f69565b5b60006131d084828501612ee8565b91505092915050565b6131e281613ca8565b82525050565b6131f181613cba565b82525050565b600061320282613b45565b61320c8185613b5b565b935061321c818560208601613d2b565b61322581613f6e565b840191505092915050565b600061323b82613b50565b6132458185613b77565b9350613255818560208601613d2b565b61325e81613f6e565b840191505092915050565b600061327482613b50565b61327e8185613b88565b935061328e818560208601613d2b565b80840191505092915050565b60006132a7601583613b77565b91506132b282613f7f565b602082019050919050565b60006132ca602b83613b77565b91506132d582613fa8565b604082019050919050565b60006132ed603283613b77565b91506132f882613ff7565b604082019050919050565b6000613310602683613b77565b915061331b82614046565b604082019050919050565b6000613333601c83613b77565b915061333e82614095565b602082019050919050565b6000613356602483613b77565b9150613361826140be565b604082019050919050565b6000613379601983613b77565b91506133848261410d565b602082019050919050565b600061339c602583613b77565b91506133a782614136565b604082019050919050565b60006133bf602083613b77565b91506133ca82614185565b602082019050919050565b60006133e2602c83613b77565b91506133ed826141ae565b604082019050919050565b6000613405603883613b77565b9150613410826141fd565b604082019050919050565b6000613428602a83613b77565b91506134338261424c565b604082019050919050565b600061344b602983613b77565b91506134568261429b565b604082019050919050565b600061346e602083613b77565b9150613479826142ea565b602082019050919050565b6000613491602c83613b77565b915061349c82614313565b604082019050919050565b60006134b4602083613b77565b91506134bf82614362565b602082019050919050565b60006134d7602983613b77565b91506134e28261438b565b604082019050919050565b60006134fa602f83613b77565b9150613505826143da565b604082019050919050565b600061351d602183613b77565b915061352882614429565b604082019050919050565b6000613540601f83613b77565b915061354b82614478565b602082019050919050565b6000613563601e83613b77565b915061356e826144a1565b602082019050919050565b6000613586600083613b6c565b9150613591826144ca565b600082019050919050565b60006135a9600083613b77565b91506135b4826144ca565b600082019050919050565b60006135cc603183613b77565b91506135d7826144cd565b604082019050919050565b60006135ef602c83613b77565b91506135fa8261451c565b604082019050919050565b6000613612600f83613b77565b915061361d8261456b565b602082019050919050565b6000613635603083613b77565b915061364082614594565b604082019050919050565b61365481613d12565b82525050565b60006136668285613269565b91506136728284613269565b91508190509392505050565b600061368982613579565b9150819050919050565b60006020820190506136a860008301846131d9565b92915050565b60006080820190506136c360008301876131d9565b6136d060208301866131d9565b6136dd604083018561364b565b81810360608301526136ef81846131f7565b905095945050505050565b600060208201905061370f60008301846131e8565b92915050565b6000602082019050818103600083015261372f8184613230565b905092915050565b600060208201905081810360008301526137508161329a565b9050919050565b60006020820190508181036000830152613770816132bd565b9050919050565b60006020820190508181036000830152613790816132e0565b9050919050565b600060208201905081810360008301526137b081613303565b9050919050565b600060208201905081810360008301526137d081613326565b9050919050565b600060208201905081810360008301526137f081613349565b9050919050565b600060208201905081810360008301526138108161336c565b9050919050565b600060208201905081810360008301526138308161338f565b9050919050565b60006020820190508181036000830152613850816133b2565b9050919050565b60006020820190508181036000830152613870816133d5565b9050919050565b60006020820190508181036000830152613890816133f8565b9050919050565b600060208201905081810360008301526138b08161341b565b9050919050565b600060208201905081810360008301526138d08161343e565b9050919050565b600060208201905081810360008301526138f081613461565b9050919050565b6000602082019050818103600083015261391081613484565b9050919050565b60006020820190508181036000830152613930816134a7565b9050919050565b60006020820190508181036000830152613950816134ca565b9050919050565b60006020820190508181036000830152613970816134ed565b9050919050565b6000602082019050818103600083015261399081613510565b9050919050565b600060208201905081810360008301526139b081613533565b9050919050565b600060208201905081810360008301526139d081613556565b9050919050565b600060208201905081810360008301526139f08161359c565b9050919050565b60006020820190508181036000830152613a10816135bf565b9050919050565b60006020820190508181036000830152613a30816135e2565b9050919050565b60006020820190508181036000830152613a5081613605565b9050919050565b60006020820190508181036000830152613a7081613628565b9050919050565b6000602082019050613a8c600083018461364b565b92915050565b6000613a9c613aad565b9050613aa88282613d90565b919050565b6000604051905090565b600067ffffffffffffffff821115613ad257613ad1613f26565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613afe57613afd613f26565b5b613b0782613f6e565b9050602081019050919050565b600067ffffffffffffffff821115613b2f57613b2e613f26565b5b613b3882613f6e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b9e82613d12565b9150613ba983613d12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bde57613bdd613e3b565b5b828201905092915050565b6000613bf482613d12565b9150613bff83613d12565b925082613c0f57613c0e613e6a565b5b828204905092915050565b6000613c2582613d12565b9150613c3083613d12565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c6957613c68613e3b565b5b828202905092915050565b6000613c7f82613d12565b9150613c8a83613d12565b925082821015613c9d57613c9c613e3b565b5b828203905092915050565b6000613cb382613cf2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d49578082015181840152602081019050613d2e565b83811115613d58576000848401525b50505050565b60006002820490506001821680613d7657607f821691505b60208210811415613d8a57613d89613e99565b5b50919050565b613d9982613f6e565b810181811067ffffffffffffffff82111715613db857613db7613f26565b5b80604052505050565b6000613dcc82613d12565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dff57613dfe613e3b565b5b600182019050919050565b6000613e1582613d12565b9150613e2083613d12565b925082613e3057613e2f613e6a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420656e6f756768204d617469632073656e740000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f52657175657374656420616d6f756e74206973206d6f7265207468616e206d6160008201527f78696d756d000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206265206d696e74656420746f207a65726f2061646472657373600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f52657175657374656420616d6f756e742063616e6e6f74206265207a65726f00600082015250565b7f546f74616c20737570706c792077696c6c20657863656564206c696d69740000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6145ec81613ca8565b81146145f757600080fd5b50565b61460381613cba565b811461460e57600080fd5b50565b61461a81613cc6565b811461462557600080fd5b50565b61463181613d12565b811461463c57600080fd5b5056fea2646970667358221220cea89f6d1fcf28084849eeab6cf009c62b6d8a38e2761e8050fd152ba53fff3364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d61564e5a65556855634438513755786934766e4268667653747739767a3533643558375459413471714d73332f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseUri_ (string): ipfs://QmaVNZeUhUcD8Q7Uxi4vnBhfvStw9vz53d5X7TYA4qqMs3/
Arg [1] : contractUri_ (string):
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d61564e5a65556855634438513755786934766e42686676
Arg [4] : 53747739767a3533643558375459413471714d73332f00000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
41510:3393:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43895:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44719:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18953:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20512:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20035:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41734:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32637:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21262:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32305:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44021:173;;;;;;;;;;;;;:::i;:::-;;44202:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42967:831;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21672:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38376:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44318:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42093:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32827:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18647:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18377:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39691:103;;;;;;;;;;;;;:::i;:::-;;42598:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41857:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43806:81;;;;;;;;;;;;;:::i;:::-;;39040:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19122:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20805:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21928:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19297:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41913:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41951:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42493:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21031:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39949:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42054:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43895:101;43942:7;43969:19;:9;:17;:19::i;:::-;43962:26;;43895:101;:::o;44719:181::-;44827:4;44856:36;44880:11;44856:23;:36::i;:::-;44849:43;;44719:181;;;:::o;18953:100::-;19007:13;19040:5;19033:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18953:100;:::o;20512:221::-;20588:7;20616:16;20624:7;20616;:16::i;:::-;20608:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20701:15;:24;20717:7;20701:24;;;;;;;;;;;;;;;;;;;;;20694:31;;20512:221;;;:::o;20035:411::-;20116:13;20132:23;20147:7;20132:14;:23::i;:::-;20116:39;;20180:5;20174:11;;:2;:11;;;;20166:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20274:5;20258:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20283:37;20300:5;20307:12;:10;:12::i;:::-;20283:16;:37::i;:::-;20258:62;20236:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20417:21;20426:2;20430:7;20417:8;:21::i;:::-;20105:341;20035:411;;:::o;41734:42::-;;;;:::o;32637:113::-;32698:7;32725:10;:17;;;;32718:24;;32637:113;:::o;21262:339::-;21457:41;21476:12;:10;:12::i;:::-;21490:7;21457:18;:41::i;:::-;21449:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21565:28;21575:4;21581:2;21585:7;21565:9;:28::i;:::-;21262:339;;;:::o;32305:256::-;32402:7;32438:23;32455:5;32438:16;:23::i;:::-;32430:5;:31;32422:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;32527:12;:19;32540:5;32527:19;;;;;;;;;;;;;;;:26;32547:5;32527:26;;;;;;;;;;;;32520:33;;32305:256;;;;:::o;44021:173::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44074:12:::1;44091:9;;;;;;;;;;;:14;;44114:21;44091:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44073:67;;;44159:7;44151:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;44062:132;44021:173::o:0;44202:108::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44291:11:::1;44280:8;:22;;;;;;;;;;;;:::i;:::-;;44202:108:::0;:::o;42967:831::-;43049:42;43043:48;;:2;:48;;;43035:57;;;;;;43121:1;43111:6;:11;;43103:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43187:13;;43177:6;:23;;43169:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43253:18;43274:6;43253:27;;43296:11;;;;;;;;;;;43291:72;;43338:13;;43324:27;;;;;:::i;:::-;;;43291:72;43411:10;43399:9;;:22;;;;:::i;:::-;43381:13;:11;:13::i;:::-;:41;;43373:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;43490:1;43476:16;;:2;:16;;;;43468:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43573:9;43558:10;;43549:6;:19;;;;:::i;:::-;43548:34;;43540:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43626:9;43621:170;43645:6;43641:1;:10;43621:170;;;43673:21;:9;:19;:21::i;:::-;43709:15;43727:19;:9;:17;:19::i;:::-;43709:37;;43761:18;43767:2;43771:7;43761:5;:18::i;:::-;43658:133;43653:3;;;;;:::i;:::-;;;;43621:170;;;;43024:774;42967:831;;:::o;21672:185::-;21810:39;21827:4;21833:2;21837:7;21810:39;;;;;;;;;;;;:16;:39::i;:::-;21672:185;;;:::o;38376:245::-;38494:41;38513:12;:10;:12::i;:::-;38527:7;38494:18;:41::i;:::-;38486:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38599:14;38605:7;38599:5;:14::i;:::-;38376:245;:::o;44318:124::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44419:15:::1;44404:12;:30;;;;;;;;;;;;:::i;:::-;;44318:124:::0;:::o;42093:30::-;;;;;;;;;;;;;:::o;32827:233::-;32902:7;32938:30;:28;:30::i;:::-;32930:5;:38;32922:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33035:10;33046:5;33035:17;;;;;;;;:::i;:::-;;;;;;;;;;33028:24;;32827:233;;;:::o;18647:239::-;18719:7;18739:13;18755:7;:16;18763:7;18755:16;;;;;;;;;;;;;;;;;;;;;18739:32;;18807:1;18790:19;;:5;:19;;;;18782:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18873:5;18866:12;;;18647:239;;;:::o;18377:208::-;18449:7;18494:1;18477:19;;:5;:19;;;;18469:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18561:9;:16;18571:5;18561:16;;;;;;;;;;;;;;;;18554:23;;18377:208;;;:::o;39691:103::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39756:30:::1;39783:1;39756:18;:30::i;:::-;39691:103::o:0;42598:361::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42701:13:::1;;42680:10;:17;:34;;42672:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42735:9;42730:222;42754:10;:17;42750:1;:21;42730:222;;;42793:10;42806;42817:1;42806:13;;;;;;;;:::i;:::-;;;;;;;;42793:26;;42834:21;:9;:19;:21::i;:::-;42870:15;42888:19;:9;:17;:19::i;:::-;42870:37;;42922:18;42928:2;42932:7;42922:5;:18::i;:::-;42778:174;;42773:3;;;;;:::i;:::-;;;;42730:222;;;;42598:361:::0;:::o;41857:35::-;;;;:::o;43806:81::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43875:4:::1;43861:11;;:18;;;;;;;;;;;;;;;;;;43806:81::o:0;39040:87::-;39086:7;39113:6;;;;;;;;;;;39106:13;;39040:87;:::o;19122:104::-;19178:13;19211:7;19204:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19122:104;:::o;20805:155::-;20900:52;20919:12;:10;:12::i;:::-;20933:8;20943;20900:18;:52::i;:::-;20805:155;;:::o;21928:328::-;22103:41;22122:12;:10;:12::i;:::-;22136:7;22103:18;:41::i;:::-;22095:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22209:39;22223:4;22229:2;22233:7;22242:5;22209:13;:39::i;:::-;21928:328;;;;:::o;19297:334::-;19370:13;19404:16;19412:7;19404;:16::i;:::-;19396:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;19485:21;19509:10;:8;:10::i;:::-;19485:34;;19561:1;19543:7;19537:21;:25;:86;;;;;;;;;;;;;;;;;19589:7;19598:18;:7;:16;:18::i;:::-;19572:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19537:86;19530:93;;;19297:334;;;:::o;41913:31::-;;;;:::o;41951:34::-;;;;:::o;42493:97::-;42537:13;42570:12;42563:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42493:97;:::o;21031:164::-;21128:4;21152:18;:25;21171:5;21152:25;;;;;;;;;;;;;;;:35;21178:8;21152:35;;;;;;;;;;;;;;;;;;;;;;;;;21145:42;;21031:164;;;;:::o;39949:201::-;39271:12;:10;:12::i;:::-;39260:23;;:7;:5;:7::i;:::-;:23;;;39252:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40058:1:::1;40038:22;;:8;:22;;;;40030:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40114:28;40133:8;40114:18;:28::i;:::-;39949:201:::0;:::o;42054:32::-;;;;:::o;40917:114::-;40982:7;41009;:14;;;41002:21;;40917:114;;;:::o;31997:224::-;32099:4;32138:35;32123:50;;;:11;:50;;;;:90;;;;32177:36;32201:11;32177:23;:36::i;:::-;32123:90;32116:97;;31997:224;;;:::o;23766:127::-;23831:4;23883:1;23855:30;;:7;:16;23863:7;23855:16;;;;;;;;;;;;;;;;;;;;;:30;;;;23848:37;;23766:127;;;:::o;14351:98::-;14404:7;14431:10;14424:17;;14351:98;:::o;27748:174::-;27850:2;27823:15;:24;27839:7;27823:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27906:7;27902:2;27868:46;;27877:23;27892:7;27877:14;:23::i;:::-;27868:46;;;;;;;;;;;;27748:174;;:::o;24060:348::-;24153:4;24178:16;24186:7;24178;:16::i;:::-;24170:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24254:13;24270:23;24285:7;24270:14;:23::i;:::-;24254:39;;24323:5;24312:16;;:7;:16;;;:51;;;;24356:7;24332:31;;:20;24344:7;24332:11;:20::i;:::-;:31;;;24312:51;:87;;;;24367:32;24384:5;24391:7;24367:16;:32::i;:::-;24312:87;24304:96;;;24060:348;;;;:::o;27052:578::-;27211:4;27184:31;;:23;27199:7;27184:14;:23::i;:::-;:31;;;27176:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27294:1;27280:16;;:2;:16;;;;27272:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27350:39;27371:4;27377:2;27381:7;27350:20;:39::i;:::-;27454:29;27471:1;27475:7;27454:8;:29::i;:::-;27515:1;27496:9;:15;27506:4;27496:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27544:1;27527:9;:13;27537:2;27527:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27575:2;27556:7;:16;27564:7;27556:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27614:7;27610:2;27595:27;;27604:4;27595:27;;;;;;;;;;;;27052:578;;;:::o;41039:127::-;41146:1;41128:7;:14;;;:19;;;;;;;;;;;41039:127;:::o;25744:382::-;25838:1;25824:16;;:2;:16;;;;25816:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25897:16;25905:7;25897;:16::i;:::-;25896:17;25888:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25959:45;25988:1;25992:2;25996:7;25959:20;:45::i;:::-;26034:1;26017:9;:13;26027:2;26017:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26065:2;26046:7;:16;26054:7;26046:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26110:7;26106:2;26085:33;;26102:1;26085:33;;;;;;;;;;;;25744:382;;:::o;26355:360::-;26415:13;26431:23;26446:7;26431:14;:23::i;:::-;26415:39;;26467:48;26488:5;26503:1;26507:7;26467:20;:48::i;:::-;26556:29;26573:1;26577:7;26556:8;:29::i;:::-;26618:1;26598:9;:16;26608:5;26598:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;26637:7;:16;26645:7;26637:16;;;;;;;;;;;;26630:23;;;;;;;;;;;26699:7;26695:1;26671:36;;26680:5;26671:36;;;;;;;;;;;;26404:311;26355:360;:::o;40310:191::-;40384:16;40403:6;;;;;;;;;;;40384:25;;40429:8;40420:6;;:17;;;;;;;;;;;;;;;;;;40484:8;40453:40;;40474:8;40453:40;;;;;;;;;;;;40373:128;40310:191;:::o;28064:315::-;28219:8;28210:17;;:5;:17;;;;28202:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28306:8;28268:18;:25;28287:5;28268:25;;;;;;;;;;;;;;;:35;28294:8;28268:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28352:8;28330:41;;28345:5;28330:41;;;28362:8;28330:41;;;;;;:::i;:::-;;;;;;;;28064:315;;;:::o;23138:::-;23295:28;23305:4;23311:2;23315:7;23295:9;:28::i;:::-;23342:48;23365:4;23371:2;23375:7;23384:5;23342:22;:48::i;:::-;23334:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23138:315;;;;:::o;42384:101::-;42436:13;42469:8;42462:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42384:101;:::o;14751:723::-;14807:13;15037:1;15028:5;:10;15024:53;;;15055:10;;;;;;;;;;;;;;;;;;;;;15024:53;15087:12;15102:5;15087:20;;15118:14;15143:78;15158:1;15150:4;:9;15143:78;;15176:8;;;;;:::i;:::-;;;;15207:2;15199:10;;;;;:::i;:::-;;;15143:78;;;15231:19;15263:6;15253:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15231:39;;15281:154;15297:1;15288:5;:10;15281:154;;15325:1;15315:11;;;;;:::i;:::-;;;15392:2;15384:5;:10;;;;:::i;:::-;15371:2;:24;;;;:::i;:::-;15358:39;;15341:6;15348;15341:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15421:2;15412:11;;;;;:::i;:::-;;;15281:154;;;15459:6;15445:21;;;;;14751:723;;;;:::o;18008:305::-;18110:4;18162:25;18147:40;;;:11;:40;;;;:105;;;;18219:33;18204:48;;;:11;:48;;;;18147:105;:158;;;;18269:36;18293:11;18269:23;:36::i;:::-;18147:158;18127:178;;18008:305;;;:::o;44520:191::-;44658:45;44685:4;44691:2;44695:7;44658:26;:45::i;:::-;44520:191;;;:::o;28944:799::-;29099:4;29120:15;:2;:13;;;:15::i;:::-;29116:620;;;29172:2;29156:36;;;29193:12;:10;:12::i;:::-;29207:4;29213:7;29222:5;29156:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29152:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29415:1;29398:6;:13;:18;29394:272;;;29441:60;;;;;;;;;;:::i;:::-;;;;;;;;29394:272;29616:6;29610:13;29601:6;29597:2;29593:15;29586:38;29152:529;29289:41;;;29279:51;;;:6;:51;;;;29272:58;;;;;29116:620;29720:4;29713:11;;28944:799;;;;;;;:::o;16615:157::-;16700:4;16739:25;16724:40;;;:11;:40;;;;16717:47;;16615:157;;;:::o;33673:589::-;33817:45;33844:4;33850:2;33854:7;33817:26;:45::i;:::-;33895:1;33879:18;;:4;:18;;;33875:187;;;33914:40;33946:7;33914:31;:40::i;:::-;33875:187;;;33984:2;33976:10;;:4;:10;;;33972:90;;34003:47;34036:4;34042:7;34003:32;:47::i;:::-;33972:90;33875:187;34090:1;34076:16;;:2;:16;;;34072:183;;;34109:45;34146:7;34109:36;:45::i;:::-;34072:183;;;34182:4;34176:10;;:2;:10;;;34172:83;;34203:40;34231:2;34235:7;34203:27;:40::i;:::-;34172:83;34072:183;33673:589;;;:::o;6989:387::-;7049:4;7257:12;7324:7;7312:20;7304:28;;7367:1;7360:4;:8;7353:15;;;6989:387;;;:::o;30315:126::-;;;;:::o;34985:164::-;35089:10;:17;;;;35062:15;:24;35078:7;35062:24;;;;;;;;;;;:44;;;;35117:10;35133:7;35117:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34985:164;:::o;35776:988::-;36042:22;36092:1;36067:22;36084:4;36067:16;:22::i;:::-;:26;;;;:::i;:::-;36042:51;;36104:18;36125:17;:26;36143:7;36125:26;;;;;;;;;;;;36104:47;;36272:14;36258:10;:28;36254:328;;36303:19;36325:12;:18;36338:4;36325:18;;;;;;;;;;;;;;;:34;36344:14;36325:34;;;;;;;;;;;;36303:56;;36409:11;36376:12;:18;36389:4;36376:18;;;;;;;;;;;;;;;:30;36395:10;36376:30;;;;;;;;;;;:44;;;;36526:10;36493:17;:30;36511:11;36493:30;;;;;;;;;;;:43;;;;36288:294;36254:328;36678:17;:26;36696:7;36678:26;;;;;;;;;;;36671:33;;;36722:12;:18;36735:4;36722:18;;;;;;;;;;;;;;;:34;36741:14;36722:34;;;;;;;;;;;36715:41;;;35857:907;;35776:988;;:::o;37059:1079::-;37312:22;37357:1;37337:10;:17;;;;:21;;;;:::i;:::-;37312:46;;37369:18;37390:15;:24;37406:7;37390:24;;;;;;;;;;;;37369:45;;37741:19;37763:10;37774:14;37763:26;;;;;;;;:::i;:::-;;;;;;;;;;37741:48;;37827:11;37802:10;37813;37802:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;37938:10;37907:15;:28;37923:11;37907:28;;;;;;;;;;;:41;;;;38079:15;:24;38095:7;38079:24;;;;;;;;;;;38072:31;;;38114:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37130:1008;;;37059:1079;:::o;34563:221::-;34648:14;34665:20;34682:2;34665:16;:20::i;:::-;34648:37;;34723:7;34696:12;:16;34709:2;34696:16;;;;;;;;;;;;;;;:24;34713:6;34696:24;;;;;;;;;;;:34;;;;34770:6;34741:17;:26;34759:7;34741:26;;;;;;;;;;;:35;;;;34637:147;34563:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:377::-;9922:3;9950:39;9983:5;9950:39;:::i;:::-;10005:89;10087:6;10082:3;10005:89;:::i;:::-;9998:96;;10103:52;10148:6;10143:3;10136:4;10129:5;10125:16;10103:52;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9926:267;9816:377;;;;:::o;10199:366::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:::-;11829:3;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11926:93;12015:3;11926:93;:::i;:::-;12044:2;12039:3;12035:12;12028:19;;11687:366;;;:::o;12059:::-;12201:3;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12298:93;12387:3;12298:93;:::i;:::-;12416:2;12411:3;12407:12;12400:19;;12059:366;;;:::o;12431:::-;12573:3;12594:67;12658:2;12653:3;12594:67;:::i;:::-;12587:74;;12670:93;12759:3;12670:93;:::i;:::-;12788:2;12783:3;12779:12;12772:19;;12431:366;;;:::o;12803:::-;12945:3;12966:67;13030:2;13025:3;12966:67;:::i;:::-;12959:74;;13042:93;13131:3;13042:93;:::i;:::-;13160:2;13155:3;13151:12;13144:19;;12803:366;;;:::o;13175:::-;13317:3;13338:67;13402:2;13397:3;13338:67;:::i;:::-;13331:74;;13414:93;13503:3;13414:93;:::i;:::-;13532:2;13527:3;13523:12;13516:19;;13175:366;;;:::o;13547:::-;13689:3;13710:67;13774:2;13769:3;13710:67;:::i;:::-;13703:74;;13786:93;13875:3;13786:93;:::i;:::-;13904:2;13899:3;13895:12;13888:19;;13547:366;;;:::o;13919:::-;14061:3;14082:67;14146:2;14141:3;14082:67;:::i;:::-;14075:74;;14158:93;14247:3;14158:93;:::i;:::-;14276:2;14271:3;14267:12;14260:19;;13919:366;;;:::o;14291:::-;14433:3;14454:67;14518:2;14513:3;14454:67;:::i;:::-;14447:74;;14530:93;14619:3;14530:93;:::i;:::-;14648:2;14643:3;14639:12;14632:19;;14291:366;;;:::o;14663:::-;14805:3;14826:67;14890:2;14885:3;14826:67;:::i;:::-;14819:74;;14902:93;14991:3;14902:93;:::i;:::-;15020:2;15015:3;15011:12;15004:19;;14663:366;;;:::o;15035:::-;15177:3;15198:67;15262:2;15257:3;15198:67;:::i;:::-;15191:74;;15274:93;15363:3;15274:93;:::i;:::-;15392:2;15387:3;15383:12;15376:19;;15035:366;;;:::o;15407:::-;15549:3;15570:67;15634:2;15629:3;15570:67;:::i;:::-;15563:74;;15646:93;15735:3;15646:93;:::i;:::-;15764:2;15759:3;15755:12;15748:19;;15407:366;;;:::o;15779:::-;15921:3;15942:67;16006:2;16001:3;15942:67;:::i;:::-;15935:74;;16018:93;16107:3;16018:93;:::i;:::-;16136:2;16131:3;16127:12;16120:19;;15779:366;;;:::o;16151:::-;16293:3;16314:67;16378:2;16373:3;16314:67;:::i;:::-;16307:74;;16390:93;16479:3;16390:93;:::i;:::-;16508:2;16503:3;16499:12;16492:19;;16151:366;;;:::o;16523:::-;16665:3;16686:67;16750:2;16745:3;16686:67;:::i;:::-;16679:74;;16762:93;16851:3;16762:93;:::i;:::-;16880:2;16875:3;16871:12;16864:19;;16523:366;;;:::o;16895:::-;17037:3;17058:67;17122:2;17117:3;17058:67;:::i;:::-;17051:74;;17134:93;17223:3;17134:93;:::i;:::-;17252:2;17247:3;17243:12;17236:19;;16895:366;;;:::o;17267:::-;17409:3;17430:67;17494:2;17489:3;17430:67;:::i;:::-;17423:74;;17506:93;17595:3;17506:93;:::i;:::-;17624:2;17619:3;17615:12;17608:19;;17267:366;;;:::o;17639:::-;17781:3;17802:67;17866:2;17861:3;17802:67;:::i;:::-;17795:74;;17878:93;17967:3;17878:93;:::i;:::-;17996:2;17991:3;17987:12;17980:19;;17639:366;;;:::o;18011:398::-;18170:3;18191:83;18272:1;18267:3;18191:83;:::i;:::-;18184:90;;18283:93;18372:3;18283:93;:::i;:::-;18401:1;18396:3;18392:11;18385:18;;18011:398;;;:::o;18415:364::-;18557:3;18578:66;18642:1;18637:3;18578:66;:::i;:::-;18571:73;;18653:93;18742:3;18653:93;:::i;:::-;18771:1;18766:3;18762:11;18755:18;;18415:364;;;:::o;18785:366::-;18927:3;18948:67;19012:2;19007:3;18948:67;:::i;:::-;18941:74;;19024:93;19113:3;19024:93;:::i;:::-;19142:2;19137:3;19133:12;19126:19;;18785:366;;;:::o;19157:::-;19299:3;19320:67;19384:2;19379:3;19320:67;:::i;:::-;19313:74;;19396:93;19485:3;19396:93;:::i;:::-;19514:2;19509:3;19505:12;19498:19;;19157:366;;;:::o;19529:::-;19671:3;19692:67;19756:2;19751:3;19692:67;:::i;:::-;19685:74;;19768:93;19857:3;19768:93;:::i;:::-;19886:2;19881:3;19877:12;19870:19;;19529:366;;;:::o;19901:::-;20043:3;20064:67;20128:2;20123:3;20064:67;:::i;:::-;20057:74;;20140:93;20229:3;20140:93;:::i;:::-;20258:2;20253:3;20249:12;20242:19;;19901:366;;;:::o;20273:118::-;20360:24;20378:5;20360:24;:::i;:::-;20355:3;20348:37;20273:118;;:::o;20397:435::-;20577:3;20599:95;20690:3;20681:6;20599:95;:::i;:::-;20592:102;;20711:95;20802:3;20793:6;20711:95;:::i;:::-;20704:102;;20823:3;20816:10;;20397:435;;;;;:::o;20838:379::-;21022:3;21044:147;21187:3;21044:147;:::i;:::-;21037:154;;21208:3;21201:10;;20838:379;;;:::o;21223:222::-;21316:4;21354:2;21343:9;21339:18;21331:26;;21367:71;21435:1;21424:9;21420:17;21411:6;21367:71;:::i;:::-;21223:222;;;;:::o;21451:640::-;21646:4;21684:3;21673:9;21669:19;21661:27;;21698:71;21766:1;21755:9;21751:17;21742:6;21698:71;:::i;:::-;21779:72;21847:2;21836:9;21832:18;21823:6;21779:72;:::i;:::-;21861;21929:2;21918:9;21914:18;21905:6;21861:72;:::i;:::-;21980:9;21974:4;21970:20;21965:2;21954:9;21950:18;21943:48;22008:76;22079:4;22070:6;22008:76;:::i;:::-;22000:84;;21451:640;;;;;;;:::o;22097:210::-;22184:4;22222:2;22211:9;22207:18;22199:26;;22235:65;22297:1;22286:9;22282:17;22273:6;22235:65;:::i;:::-;22097:210;;;;:::o;22313:313::-;22426:4;22464:2;22453:9;22449:18;22441:26;;22513:9;22507:4;22503:20;22499:1;22488:9;22484:17;22477:47;22541:78;22614:4;22605:6;22541:78;:::i;:::-;22533:86;;22313:313;;;;:::o;22632:419::-;22798:4;22836:2;22825:9;22821:18;22813:26;;22885:9;22879:4;22875:20;22871:1;22860:9;22856:17;22849:47;22913:131;23039:4;22913:131;:::i;:::-;22905:139;;22632:419;;;:::o;23057:::-;23223:4;23261:2;23250:9;23246:18;23238:26;;23310:9;23304:4;23300:20;23296:1;23285:9;23281:17;23274:47;23338:131;23464:4;23338:131;:::i;:::-;23330:139;;23057:419;;;:::o;23482:::-;23648:4;23686:2;23675:9;23671:18;23663:26;;23735:9;23729:4;23725:20;23721:1;23710:9;23706:17;23699:47;23763:131;23889:4;23763:131;:::i;:::-;23755:139;;23482:419;;;:::o;23907:::-;24073:4;24111:2;24100:9;24096:18;24088:26;;24160:9;24154:4;24150:20;24146:1;24135:9;24131:17;24124:47;24188:131;24314:4;24188:131;:::i;:::-;24180:139;;23907:419;;;:::o;24332:::-;24498:4;24536:2;24525:9;24521:18;24513:26;;24585:9;24579:4;24575:20;24571:1;24560:9;24556:17;24549:47;24613:131;24739:4;24613:131;:::i;:::-;24605:139;;24332:419;;;:::o;24757:::-;24923:4;24961:2;24950:9;24946:18;24938:26;;25010:9;25004:4;25000:20;24996:1;24985:9;24981:17;24974:47;25038:131;25164:4;25038:131;:::i;:::-;25030:139;;24757:419;;;:::o;25182:::-;25348:4;25386:2;25375:9;25371:18;25363:26;;25435:9;25429:4;25425:20;25421:1;25410:9;25406:17;25399:47;25463:131;25589:4;25463:131;:::i;:::-;25455:139;;25182:419;;;:::o;25607:::-;25773:4;25811:2;25800:9;25796:18;25788:26;;25860:9;25854:4;25850:20;25846:1;25835:9;25831:17;25824:47;25888:131;26014:4;25888:131;:::i;:::-;25880:139;;25607:419;;;:::o;26032:::-;26198:4;26236:2;26225:9;26221:18;26213:26;;26285:9;26279:4;26275:20;26271:1;26260:9;26256:17;26249:47;26313:131;26439:4;26313:131;:::i;:::-;26305:139;;26032:419;;;:::o;26457:::-;26623:4;26661:2;26650:9;26646:18;26638:26;;26710:9;26704:4;26700:20;26696:1;26685:9;26681:17;26674:47;26738:131;26864:4;26738:131;:::i;:::-;26730:139;;26457:419;;;:::o;26882:::-;27048:4;27086:2;27075:9;27071:18;27063:26;;27135:9;27129:4;27125:20;27121:1;27110:9;27106:17;27099:47;27163:131;27289:4;27163:131;:::i;:::-;27155:139;;26882:419;;;:::o;27307:::-;27473:4;27511:2;27500:9;27496:18;27488:26;;27560:9;27554:4;27550:20;27546:1;27535:9;27531:17;27524:47;27588:131;27714:4;27588:131;:::i;:::-;27580:139;;27307:419;;;:::o;27732:::-;27898:4;27936:2;27925:9;27921:18;27913:26;;27985:9;27979:4;27975:20;27971:1;27960:9;27956:17;27949:47;28013:131;28139:4;28013:131;:::i;:::-;28005:139;;27732:419;;;:::o;28157:::-;28323:4;28361:2;28350:9;28346:18;28338:26;;28410:9;28404:4;28400:20;28396:1;28385:9;28381:17;28374:47;28438:131;28564:4;28438:131;:::i;:::-;28430:139;;28157:419;;;:::o;28582:::-;28748:4;28786:2;28775:9;28771:18;28763:26;;28835:9;28829:4;28825:20;28821:1;28810:9;28806:17;28799:47;28863:131;28989:4;28863:131;:::i;:::-;28855:139;;28582:419;;;:::o;29007:::-;29173:4;29211:2;29200:9;29196:18;29188:26;;29260:9;29254:4;29250:20;29246:1;29235:9;29231:17;29224:47;29288:131;29414:4;29288:131;:::i;:::-;29280:139;;29007:419;;;:::o;29432:::-;29598:4;29636:2;29625:9;29621:18;29613:26;;29685:9;29679:4;29675:20;29671:1;29660:9;29656:17;29649:47;29713:131;29839:4;29713:131;:::i;:::-;29705:139;;29432:419;;;:::o;29857:::-;30023:4;30061:2;30050:9;30046:18;30038:26;;30110:9;30104:4;30100:20;30096:1;30085:9;30081:17;30074:47;30138:131;30264:4;30138:131;:::i;:::-;30130:139;;29857:419;;;:::o;30282:::-;30448:4;30486:2;30475:9;30471:18;30463:26;;30535:9;30529:4;30525:20;30521:1;30510:9;30506:17;30499:47;30563:131;30689:4;30563:131;:::i;:::-;30555:139;;30282:419;;;:::o;30707:::-;30873:4;30911:2;30900:9;30896:18;30888:26;;30960:9;30954:4;30950:20;30946:1;30935:9;30931:17;30924:47;30988:131;31114:4;30988:131;:::i;:::-;30980:139;;30707:419;;;:::o;31132:::-;31298:4;31336:2;31325:9;31321:18;31313:26;;31385:9;31379:4;31375:20;31371:1;31360:9;31356:17;31349:47;31413:131;31539:4;31413:131;:::i;:::-;31405:139;;31132:419;;;:::o;31557:::-;31723:4;31761:2;31750:9;31746:18;31738:26;;31810:9;31804:4;31800:20;31796:1;31785:9;31781:17;31774:47;31838:131;31964:4;31838:131;:::i;:::-;31830:139;;31557:419;;;:::o;31982:::-;32148:4;32186:2;32175:9;32171:18;32163:26;;32235:9;32229:4;32225:20;32221:1;32210:9;32206:17;32199:47;32263:131;32389:4;32263:131;:::i;:::-;32255:139;;31982:419;;;:::o;32407:::-;32573:4;32611:2;32600:9;32596:18;32588:26;;32660:9;32654:4;32650:20;32646:1;32635:9;32631:17;32624:47;32688:131;32814:4;32688:131;:::i;:::-;32680:139;;32407:419;;;:::o;32832:::-;32998:4;33036:2;33025:9;33021:18;33013:26;;33085:9;33079:4;33075:20;33071:1;33060:9;33056:17;33049:47;33113:131;33239:4;33113:131;:::i;:::-;33105:139;;32832:419;;;:::o;33257:::-;33423:4;33461:2;33450:9;33446:18;33438:26;;33510:9;33504:4;33500:20;33496:1;33485:9;33481:17;33474:47;33538:131;33664:4;33538:131;:::i;:::-;33530:139;;33257:419;;;:::o;33682:222::-;33775:4;33813:2;33802:9;33798:18;33790:26;;33826:71;33894:1;33883:9;33879:17;33870:6;33826:71;:::i;:::-;33682:222;;;;:::o;33910:129::-;33944:6;33971:20;;:::i;:::-;33961:30;;34000:33;34028:4;34020:6;34000:33;:::i;:::-;33910:129;;;:::o;34045:75::-;34078:6;34111:2;34105:9;34095:19;;34045:75;:::o;34126:311::-;34203:4;34293:18;34285:6;34282:30;34279:56;;;34315:18;;:::i;:::-;34279:56;34365:4;34357:6;34353:17;34345:25;;34425:4;34419;34415:15;34407:23;;34126:311;;;:::o;34443:307::-;34504:4;34594:18;34586:6;34583:30;34580:56;;;34616:18;;:::i;:::-;34580:56;34654:29;34676:6;34654:29;:::i;:::-;34646:37;;34738:4;34732;34728:15;34720:23;;34443:307;;;:::o;34756:308::-;34818:4;34908:18;34900:6;34897:30;34894:56;;;34930:18;;:::i;:::-;34894:56;34968:29;34990:6;34968:29;:::i;:::-;34960:37;;35052:4;35046;35042:15;35034:23;;34756:308;;;:::o;35070:98::-;35121:6;35155:5;35149:12;35139:22;;35070:98;;;:::o;35174:99::-;35226:6;35260:5;35254:12;35244:22;;35174:99;;;:::o;35279:168::-;35362:11;35396:6;35391:3;35384:19;35436:4;35431:3;35427:14;35412:29;;35279:168;;;;:::o;35453:147::-;35554:11;35591:3;35576:18;;35453:147;;;;:::o;35606:169::-;35690:11;35724:6;35719:3;35712:19;35764:4;35759:3;35755:14;35740:29;;35606:169;;;;:::o;35781:148::-;35883:11;35920:3;35905:18;;35781:148;;;;:::o;35935:305::-;35975:3;35994:20;36012:1;35994:20;:::i;:::-;35989:25;;36028:20;36046:1;36028:20;:::i;:::-;36023:25;;36182:1;36114:66;36110:74;36107:1;36104:81;36101:107;;;36188:18;;:::i;:::-;36101:107;36232:1;36229;36225:9;36218:16;;35935:305;;;;:::o;36246:185::-;36286:1;36303:20;36321:1;36303:20;:::i;:::-;36298:25;;36337:20;36355:1;36337:20;:::i;:::-;36332:25;;36376:1;36366:35;;36381:18;;:::i;:::-;36366:35;36423:1;36420;36416:9;36411:14;;36246:185;;;;:::o;36437:348::-;36477:7;36500:20;36518:1;36500:20;:::i;:::-;36495:25;;36534:20;36552:1;36534:20;:::i;:::-;36529:25;;36722:1;36654:66;36650:74;36647:1;36644:81;36639:1;36632:9;36625:17;36621:105;36618:131;;;36729:18;;:::i;:::-;36618:131;36777:1;36774;36770:9;36759:20;;36437:348;;;;:::o;36791:191::-;36831:4;36851:20;36869:1;36851:20;:::i;:::-;36846:25;;36885:20;36903:1;36885:20;:::i;:::-;36880:25;;36924:1;36921;36918:8;36915:34;;;36929:18;;:::i;:::-;36915:34;36974:1;36971;36967:9;36959:17;;36791:191;;;;:::o;36988:96::-;37025:7;37054:24;37072:5;37054:24;:::i;:::-;37043:35;;36988:96;;;:::o;37090:90::-;37124:7;37167:5;37160:13;37153:21;37142:32;;37090:90;;;:::o;37186:149::-;37222:7;37262:66;37255:5;37251:78;37240:89;;37186:149;;;:::o;37341:126::-;37378:7;37418:42;37411:5;37407:54;37396:65;;37341:126;;;:::o;37473:77::-;37510:7;37539:5;37528:16;;37473:77;;;:::o;37556:154::-;37640:6;37635:3;37630;37617:30;37702:1;37693:6;37688:3;37684:16;37677:27;37556:154;;;:::o;37716:307::-;37784:1;37794:113;37808:6;37805:1;37802:13;37794:113;;;37893:1;37888:3;37884:11;37878:18;37874:1;37869:3;37865:11;37858:39;37830:2;37827:1;37823:10;37818:15;;37794:113;;;37925:6;37922:1;37919:13;37916:101;;;38005:1;37996:6;37991:3;37987:16;37980:27;37916:101;37765:258;37716:307;;;:::o;38029:320::-;38073:6;38110:1;38104:4;38100:12;38090:22;;38157:1;38151:4;38147:12;38178:18;38168:81;;38234:4;38226:6;38222:17;38212:27;;38168:81;38296:2;38288:6;38285:14;38265:18;38262:38;38259:84;;;38315:18;;:::i;:::-;38259:84;38080:269;38029:320;;;:::o;38355:281::-;38438:27;38460:4;38438:27;:::i;:::-;38430:6;38426:40;38568:6;38556:10;38553:22;38532:18;38520:10;38517:34;38514:62;38511:88;;;38579:18;;:::i;:::-;38511:88;38619:10;38615:2;38608:22;38398:238;38355:281;;:::o;38642:233::-;38681:3;38704:24;38722:5;38704:24;:::i;:::-;38695:33;;38750:66;38743:5;38740:77;38737:103;;;38820:18;;:::i;:::-;38737:103;38867:1;38860:5;38856:13;38849:20;;38642:233;;;:::o;38881:176::-;38913:1;38930:20;38948:1;38930:20;:::i;:::-;38925:25;;38964:20;38982:1;38964:20;:::i;:::-;38959:25;;39003:1;38993:35;;39008:18;;:::i;:::-;38993:35;39049:1;39046;39042:9;39037:14;;38881:176;;;;:::o;39063:180::-;39111:77;39108:1;39101:88;39208:4;39205:1;39198:15;39232:4;39229:1;39222:15;39249:180;39297:77;39294:1;39287:88;39394:4;39391:1;39384:15;39418:4;39415:1;39408:15;39435:180;39483:77;39480:1;39473:88;39580:4;39577:1;39570:15;39604:4;39601:1;39594:15;39621:180;39669:77;39666:1;39659:88;39766:4;39763:1;39756:15;39790:4;39787:1;39780:15;39807:180;39855:77;39852:1;39845:88;39952:4;39949:1;39942:15;39976:4;39973:1;39966:15;39993:180;40041:77;40038:1;40031:88;40138:4;40135:1;40128:15;40162:4;40159:1;40152:15;40179:117;40288:1;40285;40278:12;40302:117;40411:1;40408;40401:12;40425:117;40534:1;40531;40524:12;40548:117;40657:1;40654;40647:12;40671:117;40780:1;40777;40770:12;40794:102;40835:6;40886:2;40882:7;40877:2;40870:5;40866:14;40862:28;40852:38;;40794:102;;;:::o;40902:171::-;41042:23;41038:1;41030:6;41026:14;41019:47;40902:171;:::o;41079:230::-;41219:34;41215:1;41207:6;41203:14;41196:58;41288:13;41283:2;41275:6;41271:15;41264:38;41079:230;:::o;41315:237::-;41455:34;41451:1;41443:6;41439:14;41432:58;41524:20;41519:2;41511:6;41507:15;41500:45;41315:237;:::o;41558:225::-;41698:34;41694:1;41686:6;41682:14;41675:58;41767:8;41762:2;41754:6;41750:15;41743:33;41558:225;:::o;41789:178::-;41929:30;41925:1;41917:6;41913:14;41906:54;41789:178;:::o;41973:223::-;42113:34;42109:1;42101:6;42097:14;42090:58;42182:6;42177:2;42169:6;42165:15;42158:31;41973:223;:::o;42202:175::-;42342:27;42338:1;42330:6;42326:14;42319:51;42202:175;:::o;42383:224::-;42523:34;42519:1;42511:6;42507:14;42500:58;42592:7;42587:2;42579:6;42575:15;42568:32;42383:224;:::o;42613:182::-;42753:34;42749:1;42741:6;42737:14;42730:58;42613:182;:::o;42801:231::-;42941:34;42937:1;42929:6;42925:14;42918:58;43010:14;43005:2;42997:6;42993:15;42986:39;42801:231;:::o;43038:243::-;43178:34;43174:1;43166:6;43162:14;43155:58;43247:26;43242:2;43234:6;43230:15;43223:51;43038:243;:::o;43287:229::-;43427:34;43423:1;43415:6;43411:14;43404:58;43496:12;43491:2;43483:6;43479:15;43472:37;43287:229;:::o;43522:228::-;43662:34;43658:1;43650:6;43646:14;43639:58;43731:11;43726:2;43718:6;43714:15;43707:36;43522:228;:::o;43756:182::-;43896:34;43892:1;43884:6;43880:14;43873:58;43756:182;:::o;43944:231::-;44084:34;44080:1;44072:6;44068:14;44061:58;44153:14;44148:2;44140:6;44136:15;44129:39;43944:231;:::o;44181:182::-;44321:34;44317:1;44309:6;44305:14;44298:58;44181:182;:::o;44369:228::-;44509:34;44505:1;44497:6;44493:14;44486:58;44578:11;44573:2;44565:6;44561:15;44554:36;44369:228;:::o;44603:234::-;44743:34;44739:1;44731:6;44727:14;44720:58;44812:17;44807:2;44799:6;44795:15;44788:42;44603:234;:::o;44843:220::-;44983:34;44979:1;44971:6;44967:14;44960:58;45052:3;45047:2;45039:6;45035:15;45028:28;44843:220;:::o;45069:181::-;45209:33;45205:1;45197:6;45193:14;45186:57;45069:181;:::o;45256:180::-;45396:32;45392:1;45384:6;45380:14;45373:56;45256:180;:::o;45442:114::-;;:::o;45562:236::-;45702:34;45698:1;45690:6;45686:14;45679:58;45771:19;45766:2;45758:6;45754:15;45747:44;45562:236;:::o;45804:231::-;45944:34;45940:1;45932:6;45928:14;45921:58;46013:14;46008:2;46000:6;45996:15;45989:39;45804:231;:::o;46041:165::-;46181:17;46177:1;46169:6;46165:14;46158:41;46041:165;:::o;46212:235::-;46352:34;46348:1;46340:6;46336:14;46329:58;46421:18;46416:2;46408:6;46404:15;46397:43;46212:235;:::o;46453:122::-;46526:24;46544:5;46526:24;:::i;:::-;46519:5;46516:35;46506:63;;46565:1;46562;46555:12;46506:63;46453:122;:::o;46581:116::-;46651:21;46666:5;46651:21;:::i;:::-;46644:5;46641:32;46631:60;;46687:1;46684;46677:12;46631:60;46581:116;:::o;46703:120::-;46775:23;46792:5;46775:23;:::i;:::-;46768:5;46765:34;46755:62;;46813:1;46810;46803:12;46755:62;46703:120;:::o;46829:122::-;46902:24;46920:5;46902:24;:::i;:::-;46895:5;46892:35;46882:63;;46941:1;46938;46931:12;46882:63;46829:122;:::o
Swarm Source
ipfs://cea89f6d1fcf28084849eeab6cf009c62b6d8a38e2761e8050fd152ba53fff33
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.