Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 311 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 15293339 | 850 days ago | IN | 0 ETH | 0.00020785 | ||||
Set Approval For... | 15029991 | 892 days ago | IN | 0 ETH | 0.00627896 | ||||
Set Approval For... | 14371333 | 998 days ago | IN | 0 ETH | 0.00074248 | ||||
Set Approval For... | 14242218 | 1018 days ago | IN | 0 ETH | 0.00255015 | ||||
Transfer From | 14062007 | 1046 days ago | IN | 0 ETH | 0.00730835 | ||||
Set Approval For... | 14039251 | 1050 days ago | IN | 0 ETH | 0.005906 | ||||
Set Approval For... | 14029729 | 1051 days ago | IN | 0 ETH | 0.0046383 | ||||
Withdraw | 13990107 | 1057 days ago | IN | 0 ETH | 0.00562679 | ||||
Set Approval For... | 13978809 | 1059 days ago | IN | 0 ETH | 0.01086514 | ||||
Publicsale Kanga... | 13970400 | 1060 days ago | IN | 0.05 ETH | 0.00529123 | ||||
Publicsale Kanga... | 13970204 | 1060 days ago | IN | 0.05 ETH | 0.0131445 | ||||
Publicsale Kanga... | 13969782 | 1060 days ago | IN | 0.05 ETH | 0.0124849 | ||||
Transfer From | 13969676 | 1060 days ago | IN | 0 ETH | 0.00518668 | ||||
Transfer From | 13969673 | 1060 days ago | IN | 0 ETH | 0.00727232 | ||||
Publicsale Kanga... | 13965356 | 1061 days ago | IN | 0.05 ETH | 0.00854316 | ||||
Presale Kangaroo | 13964799 | 1061 days ago | IN | 0.03 ETH | 0.00229221 | ||||
Withdraw | 13963132 | 1061 days ago | IN | 0 ETH | 0.00363846 | ||||
Publicsale Kanga... | 13962920 | 1061 days ago | IN | 0.05 ETH | 0.00843624 | ||||
Publicsale Kanga... | 13961628 | 1061 days ago | IN | 0.05 ETH | 0.0077862 | ||||
Publicsale Kanga... | 13960056 | 1062 days ago | IN | 0.05 ETH | 0.00719294 | ||||
Publicsale Kanga... | 13959966 | 1062 days ago | IN | 0.05 ETH | 0.00886255 | ||||
Transfer From | 13958886 | 1062 days ago | IN | 0 ETH | 0.00813243 | ||||
Transfer From | 13958855 | 1062 days ago | IN | 0 ETH | 0.00785197 | ||||
Transfer From | 13958667 | 1062 days ago | IN | 0 ETH | 0.01083551 | ||||
Transfer From | 13958664 | 1062 days ago | IN | 0 ETH | 0.00606765 |
Loading...
Loading
Contract Name:
kasualkangarooklub
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-03 */ /** *Submitted for verification at Etherscan.io on 2021-12-21 */ // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //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 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 {} } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/BallerBears.sol pragma solidity ^0.8.9; // @title: KangarooClub.sol contract kasualkangarooklub is ERC721, Ownable { using Strings for uint256; using SafeMath for uint256; uint256 public constant MAX_SUPPLY = 7777; uint256 public reserved = 50; uint256 public presaleSupply = 3333; uint256 public presalePrice = 0.03 ether; uint256 public tier3Price = 0.05 ether; uint256 public tier2Price = 0.04 ether; uint256 public tier1Price = 0.03 ether; uint256 public totalSupply; uint256 public MINT_CAP = 21; address public dev = 0x2c637B4f0819743bb23B1CD633f026E89f4b6351; //address to withdraw to struct WhitelistEntry { bool isApproved; uint reservedQuantity; } mapping(address => WhitelistEntry) public whitelist; bool public presale; bool public publicsale; string public baseUri; string public baseExtension = ".json"; constructor(string memory _baseuri) ERC721("Kasual Kangaroo klub", "KK") { // Base IPFS URI of the Baller Bears baseUri = _baseuri; totalSupply = 0; } function _mintKangaroo(uint256 num) internal returns (bool) { for (uint256 i = 1; i <= num; i++) { uint256 tokenIndex = totalSupply + i; if (tokenIndex < MAX_SUPPLY) _safeMint(_msgSender(), tokenIndex); } totalSupply += num; return true; } function presaleKangaroo(uint256 num) public payable returns (bool) { uint256 currentSupply = totalSupply; require(presale, 'The presale have NOT started, please be patient.'); require(whitelist[msg.sender].isApproved, "You are not in the whitelist to mint"); require(currentSupply + num <= presaleSupply, 'Exceeded pre-sale supply'); require(whitelist[msg.sender].reservedQuantity >= num, "Insufficient reserved presale quantity"); require(msg.value >= presalePrice * num,'Ether value sent is not sufficient'); whitelist[msg.sender].reservedQuantity -= num; return _mintKangaroo(num); } function publicsaleKangaroo(uint256 num) public payable returns (bool) { uint256 currentSupply = totalSupply; require(publicsale, 'The publicsale have NOT started, please be patient.'); require(num < MINT_CAP,'You are trying to mint too many at a time'); require(currentSupply + num <= MAX_SUPPLY - reserved, 'Exceeded total supply'); if(num <= 5){ require(msg.value >= tier3Price * num,'Ether value sent is not sufficient'); } else if (num <= 10){ require(msg.value >= tier2Price * num,'Ether value sent is not sufficient'); } else { require(msg.value >= tier1Price * num,'Ether value sent is not sufficient'); } return _mintKangaroo(num); } function addToWhitelist(address _address, uint256 reservedQty) public onlyOwner { whitelist[_address] = WhitelistEntry(true, reservedQty); } function getReservedPresaleQuantity(address _address) public view returns (uint256) { return whitelist[_address].reservedQuantity; } function initPresaleWhitelist(address [] memory addr, uint [] memory quantities) public onlyOwner { for (uint i = 0; i < addr.length; i++) { whitelist[addr[i]] = WhitelistEntry(true, quantities[i]); } } function togglePublicsale() public onlyOwner { publicsale = !publicsale; } function togglePresale() public onlyOwner { presale = !presale; } function setPresaleSupply(uint256 _presaleSupply) public onlyOwner { presaleSupply = _presaleSupply; } function setReserve(uint256 _reserved) public onlyOwner { reserved = _reserved; } function setPreSalePrice(uint256 _newPrice) public onlyOwner { presalePrice = _newPrice; } function setTier3Price(uint256 _newPrice) public onlyOwner { tier3Price = _newPrice; } function setTier2Price(uint256 _newPrice) public onlyOwner { tier2Price = _newPrice; } function setTier1Price(uint256 _newPrice) public onlyOwner { tier1Price = _newPrice; } function setMintCap(uint256 _mintCap) public onlyOwner { MINT_CAP = _mintCap; } function withdraw() public onlyOwner { uint256 balance = address(this).balance; uint256 devShare = balance.mul(3).div(100); uint256 ownerShare = balance.sub(devShare); payable(msg.sender).transfer(ownerShare); payable(dev).transfer(devShare); } function reserve(uint256 num) public onlyOwner { require(num <= reserved, "Exceeds reserved fighter supply" ); for (uint256 i = 1; i <= num; i++) { uint256 mintIndex = totalSupply + i; _safeMint(msg.sender, mintIndex); } totalSupply += num; reserved -= num; } function setBaseURI(string memory _baseUri) external onlyOwner { baseUri = _baseUri; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } // INTERNAL FUNCTIONS function _baseURI() internal view virtual override returns (string memory) { return baseUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseuri","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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"reservedQty","type":"uint256"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_address","type":"address"}],"name":"getReservedPresaleQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"uint256[]","name":"quantities","type":"uint256[]"}],"name":"initPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","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":"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":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"presaleKangaroo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"publicsaleKangaroo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintCap","type":"uint256"}],"name":"setMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPreSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleSupply","type":"uint256"}],"name":"setPresaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserved","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setTier1Price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setTier2Price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setTier3Price","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":[],"name":"tier1Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tier2Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tier3Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicsale","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"isApproved","type":"bool"},{"internalType":"uint256","name":"reservedQuantity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526032600755610d05600855666a94d74f43000060095566b1a2bc2ec50000600a55668e1bc9bf040000600b55666a94d74f430000600c556015600e55732c637b4f0819743bb23b1cd633f026e89f4b6351600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060139080519060200190620000e2929190620002cc565b50348015620000f057600080fd5b506040516200542238038062005422833981810160405281019062000116919062000519565b6040518060400160405280601481526020017f4b617375616c204b616e6761726f6f206b6c75620000000000000000000000008152506040518060400160405280600281526020017f4b4b00000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200019a929190620002cc565b508060019080519060200190620001b3929190620002cc565b505050620001d6620001ca620001fe60201b60201c565b6200020660201b60201c565b8060129080519060200190620001ee929190620002cc565b506000600d8190555050620005cf565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002da9062000599565b90600052602060002090601f016020900481019282620002fe57600085556200034a565b82601f106200031957805160ff19168380011785556200034a565b828001600101855582156200034a579182015b82811115620003495782518255916020019190600101906200032c565b5b5090506200035991906200035d565b5090565b5b80821115620003785760008160009055506001016200035e565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003e5826200039a565b810181811067ffffffffffffffff82111715620004075762000406620003ab565b5b80604052505050565b60006200041c6200037c565b90506200042a8282620003da565b919050565b600067ffffffffffffffff8211156200044d576200044c620003ab565b5b62000458826200039a565b9050602081019050919050565b60005b838110156200048557808201518184015260208101905062000468565b8381111562000495576000848401525b50505050565b6000620004b2620004ac846200042f565b62000410565b905082815260208101848484011115620004d157620004d062000395565b5b620004de84828562000465565b509392505050565b600082601f830112620004fe57620004fd62000390565b5b8151620005108482602086016200049b565b91505092915050565b60006020828403121562000532576200053162000386565b5b600082015167ffffffffffffffff8111156200055357620005526200038b565b5b6200056184828501620004e6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005b257607f821691505b60208210811415620005c957620005c86200056a565b5b50919050565b614e4380620005df6000396000f3fe6080604052600436106102925760003560e01c8063715018a61161015a578063b3a196e9116100c1578063c87b56dd1161007a578063c87b56dd146109ac578063e985e9c5146109e9578063f2fde38b14610a26578063fb8b51a014610a4f578063fdea8e0b14610a7a578063fe60d12c14610aa557610292565b8063b3a196e9146108b0578063b4269a16146108db578063b88d4fde14610904578063b94805a21461092d578063b96502cb14610958578063c66828621461098157610292565b8063953c802511610113578063953c8025146107b157806395d89b41146107c857806398f1312e146107f35780639abc83201461081e5780639b19251a14610849578063a22cb4651461088757610292565b8063715018a6146106c95780637445968e146106e05780637d7eee4214610709578063819b25ba146107325780638da5cb5b1461075b57806391cca3db1461078657610292565b80633ccfd60b116101fe5780634a079215116101b75780634a079215146105a257806355f804b3146105cd5780635e37af3e146105f65780636352211e1461061f5780636b256fb01461065c57806370a082311461068c57610292565b80633ccfd60b146104bc5780634018d346146104d35780634070a0c9146104fc5780634256dbe31461052557806342842e0e1461054e578063439d8f4e1461057757610292565b80631d0b30cc116102505780631d0b30cc146103bb5780631faf046b146103eb578063214405fc1461042857806323b872dd1461045157806332cb6b0c1461047a57806334393743146104a557610292565b80620e7fa81461029757806301ffc9a7146102c257806306fdde03146102ff578063081812fc1461032a578063095ea7b31461036757806318160ddd14610390575b600080fd5b3480156102a357600080fd5b506102ac610ad0565b6040516102b991906133b4565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e4919061343b565b610ad6565b6040516102f69190613483565b60405180910390f35b34801561030b57600080fd5b50610314610bb8565b6040516103219190613537565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613585565b610c4a565b60405161035e91906135f3565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061363a565b610ccf565b005b34801561039c57600080fd5b506103a5610de7565b6040516103b291906133b4565b60405180910390f35b6103d560048036038101906103d09190613585565b610ded565b6040516103e29190613483565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d919061367a565b611062565b60405161041f91906133b4565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061363a565b6110ae565b005b34801561045d57600080fd5b50610478600480360381019061047391906136a7565b6111b2565b005b34801561048657600080fd5b5061048f611212565b60405161049c91906133b4565b60405180910390f35b3480156104b157600080fd5b506104ba611218565b005b3480156104c857600080fd5b506104d16112c0565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613585565b611438565b005b34801561050857600080fd5b50610523600480360381019061051e9190613585565b6114be565b005b34801561053157600080fd5b5061054c60048036038101906105479190613585565b611544565b005b34801561055a57600080fd5b50610575600480360381019061057091906136a7565b6115ca565b005b34801561058357600080fd5b5061058c6115ea565b60405161059991906133b4565b60405180910390f35b3480156105ae57600080fd5b506105b76115f0565b6040516105c491906133b4565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef919061382f565b6115f6565b005b34801561060257600080fd5b5061061d60048036038101906106189190613585565b61168c565b005b34801561062b57600080fd5b5061064660048036038101906106419190613585565b611712565b60405161065391906135f3565b60405180910390f35b61067660048036038101906106719190613585565b6117c4565b6040516106839190613483565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae919061367a565b6119d9565b6040516106c091906133b4565b60405180910390f35b3480156106d557600080fd5b506106de611a91565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613a03565b611b19565b005b34801561071557600080fd5b50610730600480360381019061072b9190613585565b611c71565b005b34801561073e57600080fd5b5061075960048036038101906107549190613585565b611cf7565b005b34801561076757600080fd5b50610770611e2c565b60405161077d91906135f3565b60405180910390f35b34801561079257600080fd5b5061079b611e56565b6040516107a891906135f3565b60405180910390f35b3480156107bd57600080fd5b506107c6611e7c565b005b3480156107d457600080fd5b506107dd611f24565b6040516107ea9190613537565b60405180910390f35b3480156107ff57600080fd5b50610808611fb6565b60405161081591906133b4565b60405180910390f35b34801561082a57600080fd5b50610833611fbc565b6040516108409190613537565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b919061367a565b61204a565b60405161087e929190613a7b565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613ad0565b61207b565b005b3480156108bc57600080fd5b506108c56121fc565b6040516108d291906133b4565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190613585565b612202565b005b34801561091057600080fd5b5061092b60048036038101906109269190613bb1565b612288565b005b34801561093957600080fd5b506109426122ea565b60405161094f9190613483565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a9190613585565b6122fd565b005b34801561098d57600080fd5b50610996612383565b6040516109a39190613537565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613585565b612411565b6040516109e09190613537565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b9190613c34565b6124bb565b604051610a1d9190613483565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a48919061367a565b61254f565b005b348015610a5b57600080fd5b50610a64612647565b604051610a7191906133b4565b60405180910390f35b348015610a8657600080fd5b50610a8f61264d565b604051610a9c9190613483565b60405180910390f35b348015610ab157600080fd5b50610aba612660565b604051610ac791906133b4565b60405180910390f35b60095481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb15750610bb082612666565b5b9050919050565b606060008054610bc790613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390613ca3565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b5050505050905090565b6000610c55826126d0565b610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613d47565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cda82611712565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290613dd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6a61273c565b73ffffffffffffffffffffffffffffffffffffffff161480610d995750610d9881610d9361273c565b6124bb565b5b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90613e6b565b60405180910390fd5b610de28383612744565b505050565b600d5481565b600080600d549050601160009054906101000a900460ff16610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90613efd565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613f8f565b60405180910390fd5b6008548382610ee29190613fde565b1115610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90614080565b60405180910390fd5b82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90614112565b60405180910390fd5b82600954610fb69190614132565b341015610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906141fe565b60405180910390fd5b82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825461104a919061421e565b9250508190555061105a836127fd565b915050919050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6110b661273c565b73ffffffffffffffffffffffffffffffffffffffff166110d4611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061429e565b60405180910390fd5b604051806040016040528060011515815260200182815250601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505050565b6111c36111bd61273c565b82612871565b611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614330565b60405180910390fd5b61120d83838361294f565b505050565b611e6181565b61122061273c565b73ffffffffffffffffffffffffffffffffffffffff1661123e611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b9061429e565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6112c861273c565b73ffffffffffffffffffffffffffffffffffffffff166112e6611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113339061429e565b60405180910390fd5b6000479050600061136a606461135c600385612bab90919063ffffffff16565b612bc190919063ffffffff16565b905060006113818284612bd790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113c9573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611432573d6000803e3d6000fd5b50505050565b61144061273c565b73ffffffffffffffffffffffffffffffffffffffff1661145e611e2c565b73ffffffffffffffffffffffffffffffffffffffff16146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab9061429e565b60405180910390fd5b80600c8190555050565b6114c661273c565b73ffffffffffffffffffffffffffffffffffffffff166114e4611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115319061429e565b60405180910390fd5b80600e8190555050565b61154c61273c565b73ffffffffffffffffffffffffffffffffffffffff1661156a611e2c565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b79061429e565b60405180910390fd5b8060078190555050565b6115e583838360405180602001604052806000815250612288565b505050565b600a5481565b600b5481565b6115fe61273c565b73ffffffffffffffffffffffffffffffffffffffff1661161c611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699061429e565b60405180910390fd5b80601290805190602001906116889291906132f8565b5050565b61169461273c565b73ffffffffffffffffffffffffffffffffffffffff166116b2611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff9061429e565b60405180910390fd5b80600a8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906143c2565b60405180910390fd5b80915050919050565b600080600d549050601160019054906101000a900460ff1661181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290614454565b60405180910390fd5b600e54831061185f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611856906144e6565b60405180910390fd5b600754611e6161186f919061421e565b838261187b9190613fde565b11156118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390614552565b60405180910390fd5b600583116119195782600a546118d29190614132565b341015611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906141fe565b60405180910390fd5b6119c8565b600a83116119765782600b5461192f9190614132565b341015611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906141fe565b60405180910390fd5b6119c7565b82600c546119849190614132565b3410156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd906141fe565b60405180910390fd5b5b5b6119d1836127fd565b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a41906145e4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a9961273c565b73ffffffffffffffffffffffffffffffffffffffff16611ab7611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b049061429e565b60405180910390fd5b611b176000612bed565b565b611b2161273c565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c9061429e565b60405180910390fd5b60005b8251811015611c6c576040518060400160405280600115158152602001838381518110611bc857611bc7614604565b5b602002602001015181525060106000858481518110611bea57611be9614604565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050508080611c6490614633565b915050611b98565b505050565b611c7961273c565b73ffffffffffffffffffffffffffffffffffffffff16611c97611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce49061429e565b60405180910390fd5b8060098190555050565b611cff61273c565b73ffffffffffffffffffffffffffffffffffffffff16611d1d611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a9061429e565b60405180910390fd5b600754811115611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf906146c8565b60405180910390fd5b6000600190505b818111611df657600081600d54611dd69190613fde565b9050611de23382612cb3565b508080611dee90614633565b915050611dbf565b5080600d6000828254611e099190613fde565b925050819055508060076000828254611e22919061421e565b9250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e8461273c565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef9061429e565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b606060018054611f3390613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5f90613ca3565b8015611fac5780601f10611f8157610100808354040283529160200191611fac565b820191906000526020600020905b815481529060010190602001808311611f8f57829003601f168201915b5050505050905090565b600e5481565b60128054611fc990613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff590613ca3565b80156120425780601f1061201757610100808354040283529160200191612042565b820191906000526020600020905b81548152906001019060200180831161202557829003601f168201915b505050505081565b60106020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b61208361273c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614734565b60405180910390fd5b80600560006120fe61273c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121ab61273c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121f09190613483565b60405180910390a35050565b60085481565b61220a61273c565b73ffffffffffffffffffffffffffffffffffffffff16612228611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122759061429e565b60405180910390fd5b80600b8190555050565b61229961229361273c565b83612871565b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614330565b60405180910390fd5b6122e484848484612cd1565b50505050565b601160019054906101000a900460ff1681565b61230561273c565b73ffffffffffffffffffffffffffffffffffffffff16612323611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123709061429e565b60405180910390fd5b8060088190555050565b6013805461239090613ca3565b80601f01602080910402602001604051908101604052809291908181526020018280546123bc90613ca3565b80156124095780601f106123de57610100808354040283529160200191612409565b820191906000526020600020905b8154815290600101906020018083116123ec57829003601f168201915b505050505081565b606061241c826126d0565b61245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906147c6565b60405180910390fd5b6000612465612d2d565b9050600081511161248557604051806020016040528060008152506124b3565b8061248f84612dbf565b60136040516020016124a3939291906148b6565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61255761273c565b73ffffffffffffffffffffffffffffffffffffffff16612575611e2c565b73ffffffffffffffffffffffffffffffffffffffff16146125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c29061429e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290614959565b60405180910390fd5b61264481612bed565b50565b600c5481565b601160009054906101000a900460ff1681565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127b783611712565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600190505b82811161284e57600081600d5461281c9190613fde565b9050611e6181101561283a5761283961283361273c565b82612cb3565b5b50808061284690614633565b915050612805565b5081600d60008282546128619190613fde565b9250508190555060019050919050565b600061287c826126d0565b6128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b2906149eb565b60405180910390fd5b60006128c683611712565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061293557508373ffffffffffffffffffffffffffffffffffffffff1661291d84610c4a565b73ffffffffffffffffffffffffffffffffffffffff16145b80612946575061294581856124bb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661296f82611712565b73ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90614a7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614b0f565b60405180910390fd5b612a40838383612f20565b612a4b600082612744565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9b919061421e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af29190613fde565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612bb99190614132565b905092915050565b60008183612bcf9190614b5e565b905092915050565b60008183612be5919061421e565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ccd828260405180602001604052806000815250612f25565b5050565b612cdc84848461294f565b612ce884848484612f80565b612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614c01565b60405180910390fd5b50505050565b606060128054612d3c90613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6890613ca3565b8015612db55780601f10612d8a57610100808354040283529160200191612db5565b820191906000526020600020905b815481529060010190602001808311612d9857829003601f168201915b5050505050905090565b60606000821415612e07576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f1b565b600082905060005b60008214612e39578080612e2290614633565b915050600a82612e329190614b5e565b9150612e0f565b60008167ffffffffffffffff811115612e5557612e54613704565b5b6040519080825280601f01601f191660200182016040528015612e875781602001600182028036833780820191505090505b5090505b60008514612f1457600182612ea0919061421e565b9150600a85612eaf9190614c21565b6030612ebb9190613fde565b60f81b818381518110612ed157612ed0614604565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0d9190614b5e565b9450612e8b565b8093505050505b919050565b505050565b612f2f8383613117565b612f3c6000848484612f80565b612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7290614c01565b60405180910390fd5b505050565b6000612fa18473ffffffffffffffffffffffffffffffffffffffff166132e5565b1561310a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fca61273c565b8786866040518563ffffffff1660e01b8152600401612fec9493929190614ca7565b602060405180830381600087803b15801561300657600080fd5b505af192505050801561303757506040513d601f19601f820116820180604052508101906130349190614d08565b60015b6130ba573d8060008114613067576040519150601f19603f3d011682016040523d82523d6000602084013e61306c565b606091505b506000815114156130b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a990614c01565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061310f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90614d81565b60405180910390fd5b613190816126d0565b156131d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c790614ded565b60405180910390fd5b6131dc60008383612f20565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461322c9190613fde565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461330490613ca3565b90600052602060002090601f016020900481019282613326576000855561336d565b82601f1061333f57805160ff191683800117855561336d565b8280016001018555821561336d579182015b8281111561336c578251825591602001919060010190613351565b5b50905061337a919061337e565b5090565b5b8082111561339757600081600090555060010161337f565b5090565b6000819050919050565b6133ae8161339b565b82525050565b60006020820190506133c960008301846133a5565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613418816133e3565b811461342357600080fd5b50565b6000813590506134358161340f565b92915050565b600060208284031215613451576134506133d9565b5b600061345f84828501613426565b91505092915050565b60008115159050919050565b61347d81613468565b82525050565b60006020820190506134986000830184613474565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134d85780820151818401526020810190506134bd565b838111156134e7576000848401525b50505050565b6000601f19601f8301169050919050565b60006135098261349e565b61351381856134a9565b93506135238185602086016134ba565b61352c816134ed565b840191505092915050565b6000602082019050818103600083015261355181846134fe565b905092915050565b6135628161339b565b811461356d57600080fd5b50565b60008135905061357f81613559565b92915050565b60006020828403121561359b5761359a6133d9565b5b60006135a984828501613570565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135dd826135b2565b9050919050565b6135ed816135d2565b82525050565b600060208201905061360860008301846135e4565b92915050565b613617816135d2565b811461362257600080fd5b50565b6000813590506136348161360e565b92915050565b60008060408385031215613651576136506133d9565b5b600061365f85828601613625565b925050602061367085828601613570565b9150509250929050565b6000602082840312156136905761368f6133d9565b5b600061369e84828501613625565b91505092915050565b6000806000606084860312156136c0576136bf6133d9565b5b60006136ce86828701613625565b93505060206136df86828701613625565b92505060406136f086828701613570565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61373c826134ed565b810181811067ffffffffffffffff8211171561375b5761375a613704565b5b80604052505050565b600061376e6133cf565b905061377a8282613733565b919050565b600067ffffffffffffffff82111561379a57613799613704565b5b6137a3826134ed565b9050602081019050919050565b82818337600083830152505050565b60006137d26137cd8461377f565b613764565b9050828152602081018484840111156137ee576137ed6136ff565b5b6137f98482856137b0565b509392505050565b600082601f830112613816576138156136fa565b5b81356138268482602086016137bf565b91505092915050565b600060208284031215613845576138446133d9565b5b600082013567ffffffffffffffff811115613863576138626133de565b5b61386f84828501613801565b91505092915050565b600067ffffffffffffffff82111561389357613892613704565b5b602082029050602081019050919050565b600080fd5b60006138bc6138b784613878565b613764565b905080838252602082019050602084028301858111156138df576138de6138a4565b5b835b8181101561390857806138f48882613625565b8452602084019350506020810190506138e1565b5050509392505050565b600082601f830112613927576139266136fa565b5b81356139378482602086016138a9565b91505092915050565b600067ffffffffffffffff82111561395b5761395a613704565b5b602082029050602081019050919050565b600061397f61397a84613940565b613764565b905080838252602082019050602084028301858111156139a2576139a16138a4565b5b835b818110156139cb57806139b78882613570565b8452602084019350506020810190506139a4565b5050509392505050565b600082601f8301126139ea576139e96136fa565b5b81356139fa84826020860161396c565b91505092915050565b60008060408385031215613a1a57613a196133d9565b5b600083013567ffffffffffffffff811115613a3857613a376133de565b5b613a4485828601613912565b925050602083013567ffffffffffffffff811115613a6557613a646133de565b5b613a71858286016139d5565b9150509250929050565b6000604082019050613a906000830185613474565b613a9d60208301846133a5565b9392505050565b613aad81613468565b8114613ab857600080fd5b50565b600081359050613aca81613aa4565b92915050565b60008060408385031215613ae757613ae66133d9565b5b6000613af585828601613625565b9250506020613b0685828601613abb565b9150509250929050565b600067ffffffffffffffff821115613b2b57613b2a613704565b5b613b34826134ed565b9050602081019050919050565b6000613b54613b4f84613b10565b613764565b905082815260208101848484011115613b7057613b6f6136ff565b5b613b7b8482856137b0565b509392505050565b600082601f830112613b9857613b976136fa565b5b8135613ba8848260208601613b41565b91505092915050565b60008060008060808587031215613bcb57613bca6133d9565b5b6000613bd987828801613625565b9450506020613bea87828801613625565b9350506040613bfb87828801613570565b925050606085013567ffffffffffffffff811115613c1c57613c1b6133de565b5b613c2887828801613b83565b91505092959194509250565b60008060408385031215613c4b57613c4a6133d9565b5b6000613c5985828601613625565b9250506020613c6a85828601613625565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cbb57607f821691505b60208210811415613ccf57613cce613c74565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d31602c836134a9565b9150613d3c82613cd5565b604082019050919050565b60006020820190508181036000830152613d6081613d24565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dc36021836134a9565b9150613dce82613d67565b604082019050919050565b60006020820190508181036000830152613df281613db6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e556038836134a9565b9150613e6082613df9565b604082019050919050565b60006020820190508181036000830152613e8481613e48565b9050919050565b7f5468652070726573616c652068617665204e4f5420737461727465642c20706c60008201527f656173652062652070617469656e742e00000000000000000000000000000000602082015250565b6000613ee76030836134a9565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f596f7520617265206e6f7420696e207468652077686974656c69737420746f2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613f796024836134a9565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fe98261339b565b9150613ff48361339b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402957614028613faf565b5b828201905092915050565b7f4578636565646564207072652d73616c6520737570706c790000000000000000600082015250565b600061406a6018836134a9565b915061407582614034565b602082019050919050565b600060208201905081810360008301526140998161405d565b9050919050565b7f496e73756666696369656e742072657365727665642070726573616c6520717560008201527f616e746974790000000000000000000000000000000000000000000000000000602082015250565b60006140fc6026836134a9565b9150614107826140a0565b604082019050919050565b6000602082019050818103600083015261412b816140ef565b9050919050565b600061413d8261339b565b91506141488361339b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561418157614180613faf565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b60006141e86022836134a9565b91506141f38261418c565b604082019050919050565b60006020820190508181036000830152614217816141db565b9050919050565b60006142298261339b565b91506142348361339b565b92508282101561424757614246613faf565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142886020836134a9565b915061429382614252565b602082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061431a6031836134a9565b9150614325826142be565b604082019050919050565b600060208201905081810360008301526143498161430d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006143ac6029836134a9565b91506143b782614350565b604082019050919050565b600060208201905081810360008301526143db8161439f565b9050919050565b7f546865207075626c696373616c652068617665204e4f5420737461727465642c60008201527f20706c656173652062652070617469656e742e00000000000000000000000000602082015250565b600061443e6033836134a9565b9150614449826143e2565b604082019050919050565b6000602082019050818103600083015261446d81614431565b9050919050565b7f596f752061726520747279696e6720746f206d696e7420746f6f206d616e792060008201527f617420612074696d650000000000000000000000000000000000000000000000602082015250565b60006144d06029836134a9565b91506144db82614474565b604082019050919050565b600060208201905081810360008301526144ff816144c3565b9050919050565b7f457863656564656420746f74616c20737570706c790000000000000000000000600082015250565b600061453c6015836134a9565b915061454782614506565b602082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006145ce602a836134a9565b91506145d982614572565b604082019050919050565b600060208201905081810360008301526145fd816145c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061463e8261339b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561467157614670613faf565b5b600182019050919050565b7f45786365656473207265736572766564206669676874657220737570706c7900600082015250565b60006146b2601f836134a9565b91506146bd8261467c565b602082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061471e6019836134a9565b9150614729826146e8565b602082019050919050565b6000602082019050818103600083015261474d81614711565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147b0602f836134a9565b91506147bb82614754565b604082019050919050565b600060208201905081810360008301526147df816147a3565b9050919050565b600081905092915050565b60006147fc8261349e565b61480681856147e6565b93506148168185602086016134ba565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461484481613ca3565b61484e81866147e6565b94506001821660008114614869576001811461487a576148ad565b60ff198316865281860193506148ad565b61488385614822565b60005b838110156148a557815481890152600182019150602081019050614886565b838801955050505b50505092915050565b60006148c282866147f1565b91506148ce82856147f1565b91506148da8284614837565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149436026836134a9565b915061494e826148e7565b604082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149d5602c836134a9565b91506149e082614979565b604082019050919050565b60006020820190508181036000830152614a04816149c8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614a676029836134a9565b9150614a7282614a0b565b604082019050919050565b60006020820190508181036000830152614a9681614a5a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614af96024836134a9565b9150614b0482614a9d565b604082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b698261339b565b9150614b748361339b565b925082614b8457614b83614b2f565b5b828204905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614beb6032836134a9565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b6000614c2c8261339b565b9150614c378361339b565b925082614c4757614c46614b2f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614c7982614c52565b614c838185614c5d565b9350614c938185602086016134ba565b614c9c816134ed565b840191505092915050565b6000608082019050614cbc60008301876135e4565b614cc960208301866135e4565b614cd660408301856133a5565b8181036060830152614ce88184614c6e565b905095945050505050565b600081519050614d028161340f565b92915050565b600060208284031215614d1e57614d1d6133d9565b5b6000614d2c84828501614cf3565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d6b6020836134a9565b9150614d7682614d35565b602082019050919050565b60006020820190508181036000830152614d9a81614d5e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614dd7601c836134a9565b9150614de282614da1565b602082019050919050565b60006020820190508181036000830152614e0681614dca565b905091905056fea2646970667358221220987b887f2a02f3b546599539f66d51581ae100c69a07f70401adbb165447105764736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d547a314c63594c3957435568717a4d464d71733366694e4777744144376d7a626e454c4278417268574451742f00000000000000000000
Deployed Bytecode
0x6080604052600436106102925760003560e01c8063715018a61161015a578063b3a196e9116100c1578063c87b56dd1161007a578063c87b56dd146109ac578063e985e9c5146109e9578063f2fde38b14610a26578063fb8b51a014610a4f578063fdea8e0b14610a7a578063fe60d12c14610aa557610292565b8063b3a196e9146108b0578063b4269a16146108db578063b88d4fde14610904578063b94805a21461092d578063b96502cb14610958578063c66828621461098157610292565b8063953c802511610113578063953c8025146107b157806395d89b41146107c857806398f1312e146107f35780639abc83201461081e5780639b19251a14610849578063a22cb4651461088757610292565b8063715018a6146106c95780637445968e146106e05780637d7eee4214610709578063819b25ba146107325780638da5cb5b1461075b57806391cca3db1461078657610292565b80633ccfd60b116101fe5780634a079215116101b75780634a079215146105a257806355f804b3146105cd5780635e37af3e146105f65780636352211e1461061f5780636b256fb01461065c57806370a082311461068c57610292565b80633ccfd60b146104bc5780634018d346146104d35780634070a0c9146104fc5780634256dbe31461052557806342842e0e1461054e578063439d8f4e1461057757610292565b80631d0b30cc116102505780631d0b30cc146103bb5780631faf046b146103eb578063214405fc1461042857806323b872dd1461045157806332cb6b0c1461047a57806334393743146104a557610292565b80620e7fa81461029757806301ffc9a7146102c257806306fdde03146102ff578063081812fc1461032a578063095ea7b31461036757806318160ddd14610390575b600080fd5b3480156102a357600080fd5b506102ac610ad0565b6040516102b991906133b4565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e4919061343b565b610ad6565b6040516102f69190613483565b60405180910390f35b34801561030b57600080fd5b50610314610bb8565b6040516103219190613537565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613585565b610c4a565b60405161035e91906135f3565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061363a565b610ccf565b005b34801561039c57600080fd5b506103a5610de7565b6040516103b291906133b4565b60405180910390f35b6103d560048036038101906103d09190613585565b610ded565b6040516103e29190613483565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d919061367a565b611062565b60405161041f91906133b4565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a919061363a565b6110ae565b005b34801561045d57600080fd5b50610478600480360381019061047391906136a7565b6111b2565b005b34801561048657600080fd5b5061048f611212565b60405161049c91906133b4565b60405180910390f35b3480156104b157600080fd5b506104ba611218565b005b3480156104c857600080fd5b506104d16112c0565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613585565b611438565b005b34801561050857600080fd5b50610523600480360381019061051e9190613585565b6114be565b005b34801561053157600080fd5b5061054c60048036038101906105479190613585565b611544565b005b34801561055a57600080fd5b50610575600480360381019061057091906136a7565b6115ca565b005b34801561058357600080fd5b5061058c6115ea565b60405161059991906133b4565b60405180910390f35b3480156105ae57600080fd5b506105b76115f0565b6040516105c491906133b4565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef919061382f565b6115f6565b005b34801561060257600080fd5b5061061d60048036038101906106189190613585565b61168c565b005b34801561062b57600080fd5b5061064660048036038101906106419190613585565b611712565b60405161065391906135f3565b60405180910390f35b61067660048036038101906106719190613585565b6117c4565b6040516106839190613483565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae919061367a565b6119d9565b6040516106c091906133b4565b60405180910390f35b3480156106d557600080fd5b506106de611a91565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613a03565b611b19565b005b34801561071557600080fd5b50610730600480360381019061072b9190613585565b611c71565b005b34801561073e57600080fd5b5061075960048036038101906107549190613585565b611cf7565b005b34801561076757600080fd5b50610770611e2c565b60405161077d91906135f3565b60405180910390f35b34801561079257600080fd5b5061079b611e56565b6040516107a891906135f3565b60405180910390f35b3480156107bd57600080fd5b506107c6611e7c565b005b3480156107d457600080fd5b506107dd611f24565b6040516107ea9190613537565b60405180910390f35b3480156107ff57600080fd5b50610808611fb6565b60405161081591906133b4565b60405180910390f35b34801561082a57600080fd5b50610833611fbc565b6040516108409190613537565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b919061367a565b61204a565b60405161087e929190613a7b565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613ad0565b61207b565b005b3480156108bc57600080fd5b506108c56121fc565b6040516108d291906133b4565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190613585565b612202565b005b34801561091057600080fd5b5061092b60048036038101906109269190613bb1565b612288565b005b34801561093957600080fd5b506109426122ea565b60405161094f9190613483565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a9190613585565b6122fd565b005b34801561098d57600080fd5b50610996612383565b6040516109a39190613537565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190613585565b612411565b6040516109e09190613537565b60405180910390f35b3480156109f557600080fd5b50610a106004803603810190610a0b9190613c34565b6124bb565b604051610a1d9190613483565b60405180910390f35b348015610a3257600080fd5b50610a4d6004803603810190610a48919061367a565b61254f565b005b348015610a5b57600080fd5b50610a64612647565b604051610a7191906133b4565b60405180910390f35b348015610a8657600080fd5b50610a8f61264d565b604051610a9c9190613483565b60405180910390f35b348015610ab157600080fd5b50610aba612660565b604051610ac791906133b4565b60405180910390f35b60095481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ba157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bb15750610bb082612666565b5b9050919050565b606060008054610bc790613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf390613ca3565b8015610c405780601f10610c1557610100808354040283529160200191610c40565b820191906000526020600020905b815481529060010190602001808311610c2357829003601f168201915b5050505050905090565b6000610c55826126d0565b610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613d47565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cda82611712565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290613dd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6a61273c565b73ffffffffffffffffffffffffffffffffffffffff161480610d995750610d9881610d9361273c565b6124bb565b5b610dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcf90613e6b565b60405180910390fd5b610de28383612744565b505050565b600d5481565b600080600d549050601160009054906101000a900460ff16610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b90613efd565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613f8f565b60405180910390fd5b6008548382610ee29190613fde565b1115610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90614080565b60405180910390fd5b82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90614112565b60405180910390fd5b82600954610fb69190614132565b341015610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef906141fe565b60405180910390fd5b82601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825461104a919061421e565b9250508190555061105a836127fd565b915050919050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b6110b661273c565b73ffffffffffffffffffffffffffffffffffffffff166110d4611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061429e565b60405180910390fd5b604051806040016040528060011515815260200182815250601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050505050565b6111c36111bd61273c565b82612871565b611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614330565b60405180910390fd5b61120d83838361294f565b505050565b611e6181565b61122061273c565b73ffffffffffffffffffffffffffffffffffffffff1661123e611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b9061429e565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6112c861273c565b73ffffffffffffffffffffffffffffffffffffffff166112e6611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113339061429e565b60405180910390fd5b6000479050600061136a606461135c600385612bab90919063ffffffff16565b612bc190919063ffffffff16565b905060006113818284612bd790919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113c9573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611432573d6000803e3d6000fd5b50505050565b61144061273c565b73ffffffffffffffffffffffffffffffffffffffff1661145e611e2c565b73ffffffffffffffffffffffffffffffffffffffff16146114b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ab9061429e565b60405180910390fd5b80600c8190555050565b6114c661273c565b73ffffffffffffffffffffffffffffffffffffffff166114e4611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115319061429e565b60405180910390fd5b80600e8190555050565b61154c61273c565b73ffffffffffffffffffffffffffffffffffffffff1661156a611e2c565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b79061429e565b60405180910390fd5b8060078190555050565b6115e583838360405180602001604052806000815250612288565b505050565b600a5481565b600b5481565b6115fe61273c565b73ffffffffffffffffffffffffffffffffffffffff1661161c611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699061429e565b60405180910390fd5b80601290805190602001906116889291906132f8565b5050565b61169461273c565b73ffffffffffffffffffffffffffffffffffffffff166116b2611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff9061429e565b60405180910390fd5b80600a8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906143c2565b60405180910390fd5b80915050919050565b600080600d549050601160019054906101000a900460ff1661181b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181290614454565b60405180910390fd5b600e54831061185f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611856906144e6565b60405180910390fd5b600754611e6161186f919061421e565b838261187b9190613fde565b11156118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b390614552565b60405180910390fd5b600583116119195782600a546118d29190614132565b341015611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906141fe565b60405180910390fd5b6119c8565b600a83116119765782600b5461192f9190614132565b341015611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906141fe565b60405180910390fd5b6119c7565b82600c546119849190614132565b3410156119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd906141fe565b60405180910390fd5b5b5b6119d1836127fd565b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a41906145e4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a9961273c565b73ffffffffffffffffffffffffffffffffffffffff16611ab7611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b049061429e565b60405180910390fd5b611b176000612bed565b565b611b2161273c565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c9061429e565b60405180910390fd5b60005b8251811015611c6c576040518060400160405280600115158152602001838381518110611bc857611bc7614604565b5b602002602001015181525060106000858481518110611bea57611be9614604565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050508080611c6490614633565b915050611b98565b505050565b611c7961273c565b73ffffffffffffffffffffffffffffffffffffffff16611c97611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce49061429e565b60405180910390fd5b8060098190555050565b611cff61273c565b73ffffffffffffffffffffffffffffffffffffffff16611d1d611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a9061429e565b60405180910390fd5b600754811115611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf906146c8565b60405180910390fd5b6000600190505b818111611df657600081600d54611dd69190613fde565b9050611de23382612cb3565b508080611dee90614633565b915050611dbf565b5080600d6000828254611e099190613fde565b925050819055508060076000828254611e22919061421e565b9250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e8461273c565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef9061429e565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b606060018054611f3390613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5f90613ca3565b8015611fac5780601f10611f8157610100808354040283529160200191611fac565b820191906000526020600020905b815481529060010190602001808311611f8f57829003601f168201915b5050505050905090565b600e5481565b60128054611fc990613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff590613ca3565b80156120425780601f1061201757610100808354040283529160200191612042565b820191906000526020600020905b81548152906001019060200180831161202557829003601f168201915b505050505081565b60106020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b61208361273c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e890614734565b60405180910390fd5b80600560006120fe61273c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166121ab61273c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121f09190613483565b60405180910390a35050565b60085481565b61220a61273c565b73ffffffffffffffffffffffffffffffffffffffff16612228611e2c565b73ffffffffffffffffffffffffffffffffffffffff161461227e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122759061429e565b60405180910390fd5b80600b8190555050565b61229961229361273c565b83612871565b6122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614330565b60405180910390fd5b6122e484848484612cd1565b50505050565b601160019054906101000a900460ff1681565b61230561273c565b73ffffffffffffffffffffffffffffffffffffffff16612323611e2c565b73ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123709061429e565b60405180910390fd5b8060088190555050565b6013805461239090613ca3565b80601f01602080910402602001604051908101604052809291908181526020018280546123bc90613ca3565b80156124095780601f106123de57610100808354040283529160200191612409565b820191906000526020600020905b8154815290600101906020018083116123ec57829003601f168201915b505050505081565b606061241c826126d0565b61245b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612452906147c6565b60405180910390fd5b6000612465612d2d565b9050600081511161248557604051806020016040528060008152506124b3565b8061248f84612dbf565b60136040516020016124a3939291906148b6565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61255761273c565b73ffffffffffffffffffffffffffffffffffffffff16612575611e2c565b73ffffffffffffffffffffffffffffffffffffffff16146125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c29061429e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290614959565b60405180910390fd5b61264481612bed565b50565b600c5481565b601160009054906101000a900460ff1681565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127b783611712565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600190505b82811161284e57600081600d5461281c9190613fde565b9050611e6181101561283a5761283961283361273c565b82612cb3565b5b50808061284690614633565b915050612805565b5081600d60008282546128619190613fde565b9250508190555060019050919050565b600061287c826126d0565b6128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b2906149eb565b60405180910390fd5b60006128c683611712565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061293557508373ffffffffffffffffffffffffffffffffffffffff1661291d84610c4a565b73ffffffffffffffffffffffffffffffffffffffff16145b80612946575061294581856124bb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661296f82611712565b73ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90614a7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614b0f565b60405180910390fd5b612a40838383612f20565b612a4b600082612744565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a9b919061421e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612af29190613fde565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183612bb99190614132565b905092915050565b60008183612bcf9190614b5e565b905092915050565b60008183612be5919061421e565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ccd828260405180602001604052806000815250612f25565b5050565b612cdc84848461294f565b612ce884848484612f80565b612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614c01565b60405180910390fd5b50505050565b606060128054612d3c90613ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6890613ca3565b8015612db55780601f10612d8a57610100808354040283529160200191612db5565b820191906000526020600020905b815481529060010190602001808311612d9857829003601f168201915b5050505050905090565b60606000821415612e07576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f1b565b600082905060005b60008214612e39578080612e2290614633565b915050600a82612e329190614b5e565b9150612e0f565b60008167ffffffffffffffff811115612e5557612e54613704565b5b6040519080825280601f01601f191660200182016040528015612e875781602001600182028036833780820191505090505b5090505b60008514612f1457600182612ea0919061421e565b9150600a85612eaf9190614c21565b6030612ebb9190613fde565b60f81b818381518110612ed157612ed0614604565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0d9190614b5e565b9450612e8b565b8093505050505b919050565b505050565b612f2f8383613117565b612f3c6000848484612f80565b612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7290614c01565b60405180910390fd5b505050565b6000612fa18473ffffffffffffffffffffffffffffffffffffffff166132e5565b1561310a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fca61273c565b8786866040518563ffffffff1660e01b8152600401612fec9493929190614ca7565b602060405180830381600087803b15801561300657600080fd5b505af192505050801561303757506040513d601f19601f820116820180604052508101906130349190614d08565b60015b6130ba573d8060008114613067576040519150601f19603f3d011682016040523d82523d6000602084013e61306c565b606091505b506000815114156130b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a990614c01565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061310f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317e90614d81565b60405180910390fd5b613190816126d0565b156131d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c790614ded565b60405180910390fd5b6131dc60008383612f20565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461322c9190613fde565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461330490613ca3565b90600052602060002090601f016020900481019282613326576000855561336d565b82601f1061333f57805160ff191683800117855561336d565b8280016001018555821561336d579182015b8281111561336c578251825591602001919060010190613351565b5b50905061337a919061337e565b5090565b5b8082111561339757600081600090555060010161337f565b5090565b6000819050919050565b6133ae8161339b565b82525050565b60006020820190506133c960008301846133a5565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613418816133e3565b811461342357600080fd5b50565b6000813590506134358161340f565b92915050565b600060208284031215613451576134506133d9565b5b600061345f84828501613426565b91505092915050565b60008115159050919050565b61347d81613468565b82525050565b60006020820190506134986000830184613474565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134d85780820151818401526020810190506134bd565b838111156134e7576000848401525b50505050565b6000601f19601f8301169050919050565b60006135098261349e565b61351381856134a9565b93506135238185602086016134ba565b61352c816134ed565b840191505092915050565b6000602082019050818103600083015261355181846134fe565b905092915050565b6135628161339b565b811461356d57600080fd5b50565b60008135905061357f81613559565b92915050565b60006020828403121561359b5761359a6133d9565b5b60006135a984828501613570565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135dd826135b2565b9050919050565b6135ed816135d2565b82525050565b600060208201905061360860008301846135e4565b92915050565b613617816135d2565b811461362257600080fd5b50565b6000813590506136348161360e565b92915050565b60008060408385031215613651576136506133d9565b5b600061365f85828601613625565b925050602061367085828601613570565b9150509250929050565b6000602082840312156136905761368f6133d9565b5b600061369e84828501613625565b91505092915050565b6000806000606084860312156136c0576136bf6133d9565b5b60006136ce86828701613625565b93505060206136df86828701613625565b92505060406136f086828701613570565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61373c826134ed565b810181811067ffffffffffffffff8211171561375b5761375a613704565b5b80604052505050565b600061376e6133cf565b905061377a8282613733565b919050565b600067ffffffffffffffff82111561379a57613799613704565b5b6137a3826134ed565b9050602081019050919050565b82818337600083830152505050565b60006137d26137cd8461377f565b613764565b9050828152602081018484840111156137ee576137ed6136ff565b5b6137f98482856137b0565b509392505050565b600082601f830112613816576138156136fa565b5b81356138268482602086016137bf565b91505092915050565b600060208284031215613845576138446133d9565b5b600082013567ffffffffffffffff811115613863576138626133de565b5b61386f84828501613801565b91505092915050565b600067ffffffffffffffff82111561389357613892613704565b5b602082029050602081019050919050565b600080fd5b60006138bc6138b784613878565b613764565b905080838252602082019050602084028301858111156138df576138de6138a4565b5b835b8181101561390857806138f48882613625565b8452602084019350506020810190506138e1565b5050509392505050565b600082601f830112613927576139266136fa565b5b81356139378482602086016138a9565b91505092915050565b600067ffffffffffffffff82111561395b5761395a613704565b5b602082029050602081019050919050565b600061397f61397a84613940565b613764565b905080838252602082019050602084028301858111156139a2576139a16138a4565b5b835b818110156139cb57806139b78882613570565b8452602084019350506020810190506139a4565b5050509392505050565b600082601f8301126139ea576139e96136fa565b5b81356139fa84826020860161396c565b91505092915050565b60008060408385031215613a1a57613a196133d9565b5b600083013567ffffffffffffffff811115613a3857613a376133de565b5b613a4485828601613912565b925050602083013567ffffffffffffffff811115613a6557613a646133de565b5b613a71858286016139d5565b9150509250929050565b6000604082019050613a906000830185613474565b613a9d60208301846133a5565b9392505050565b613aad81613468565b8114613ab857600080fd5b50565b600081359050613aca81613aa4565b92915050565b60008060408385031215613ae757613ae66133d9565b5b6000613af585828601613625565b9250506020613b0685828601613abb565b9150509250929050565b600067ffffffffffffffff821115613b2b57613b2a613704565b5b613b34826134ed565b9050602081019050919050565b6000613b54613b4f84613b10565b613764565b905082815260208101848484011115613b7057613b6f6136ff565b5b613b7b8482856137b0565b509392505050565b600082601f830112613b9857613b976136fa565b5b8135613ba8848260208601613b41565b91505092915050565b60008060008060808587031215613bcb57613bca6133d9565b5b6000613bd987828801613625565b9450506020613bea87828801613625565b9350506040613bfb87828801613570565b925050606085013567ffffffffffffffff811115613c1c57613c1b6133de565b5b613c2887828801613b83565b91505092959194509250565b60008060408385031215613c4b57613c4a6133d9565b5b6000613c5985828601613625565b9250506020613c6a85828601613625565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cbb57607f821691505b60208210811415613ccf57613cce613c74565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d31602c836134a9565b9150613d3c82613cd5565b604082019050919050565b60006020820190508181036000830152613d6081613d24565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dc36021836134a9565b9150613dce82613d67565b604082019050919050565b60006020820190508181036000830152613df281613db6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e556038836134a9565b9150613e6082613df9565b604082019050919050565b60006020820190508181036000830152613e8481613e48565b9050919050565b7f5468652070726573616c652068617665204e4f5420737461727465642c20706c60008201527f656173652062652070617469656e742e00000000000000000000000000000000602082015250565b6000613ee76030836134a9565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f596f7520617265206e6f7420696e207468652077686974656c69737420746f2060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613f796024836134a9565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fe98261339b565b9150613ff48361339b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561402957614028613faf565b5b828201905092915050565b7f4578636565646564207072652d73616c6520737570706c790000000000000000600082015250565b600061406a6018836134a9565b915061407582614034565b602082019050919050565b600060208201905081810360008301526140998161405d565b9050919050565b7f496e73756666696369656e742072657365727665642070726573616c6520717560008201527f616e746974790000000000000000000000000000000000000000000000000000602082015250565b60006140fc6026836134a9565b9150614107826140a0565b604082019050919050565b6000602082019050818103600083015261412b816140ef565b9050919050565b600061413d8261339b565b91506141488361339b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561418157614180613faf565b5b828202905092915050565b7f45746865722076616c75652073656e74206973206e6f7420737566666963696560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b60006141e86022836134a9565b91506141f38261418c565b604082019050919050565b60006020820190508181036000830152614217816141db565b9050919050565b60006142298261339b565b91506142348361339b565b92508282101561424757614246613faf565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142886020836134a9565b915061429382614252565b602082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061431a6031836134a9565b9150614325826142be565b604082019050919050565b600060208201905081810360008301526143498161430d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006143ac6029836134a9565b91506143b782614350565b604082019050919050565b600060208201905081810360008301526143db8161439f565b9050919050565b7f546865207075626c696373616c652068617665204e4f5420737461727465642c60008201527f20706c656173652062652070617469656e742e00000000000000000000000000602082015250565b600061443e6033836134a9565b9150614449826143e2565b604082019050919050565b6000602082019050818103600083015261446d81614431565b9050919050565b7f596f752061726520747279696e6720746f206d696e7420746f6f206d616e792060008201527f617420612074696d650000000000000000000000000000000000000000000000602082015250565b60006144d06029836134a9565b91506144db82614474565b604082019050919050565b600060208201905081810360008301526144ff816144c3565b9050919050565b7f457863656564656420746f74616c20737570706c790000000000000000000000600082015250565b600061453c6015836134a9565b915061454782614506565b602082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006145ce602a836134a9565b91506145d982614572565b604082019050919050565b600060208201905081810360008301526145fd816145c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061463e8261339b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561467157614670613faf565b5b600182019050919050565b7f45786365656473207265736572766564206669676874657220737570706c7900600082015250565b60006146b2601f836134a9565b91506146bd8261467c565b602082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061471e6019836134a9565b9150614729826146e8565b602082019050919050565b6000602082019050818103600083015261474d81614711565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147b0602f836134a9565b91506147bb82614754565b604082019050919050565b600060208201905081810360008301526147df816147a3565b9050919050565b600081905092915050565b60006147fc8261349e565b61480681856147e6565b93506148168185602086016134ba565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461484481613ca3565b61484e81866147e6565b94506001821660008114614869576001811461487a576148ad565b60ff198316865281860193506148ad565b61488385614822565b60005b838110156148a557815481890152600182019150602081019050614886565b838801955050505b50505092915050565b60006148c282866147f1565b91506148ce82856147f1565b91506148da8284614837565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149436026836134a9565b915061494e826148e7565b604082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149d5602c836134a9565b91506149e082614979565b604082019050919050565b60006020820190508181036000830152614a04816149c8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614a676029836134a9565b9150614a7282614a0b565b604082019050919050565b60006020820190508181036000830152614a9681614a5a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614af96024836134a9565b9150614b0482614a9d565b604082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b698261339b565b9150614b748361339b565b925082614b8457614b83614b2f565b5b828204905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614beb6032836134a9565b9150614bf682614b8f565b604082019050919050565b60006020820190508181036000830152614c1a81614bde565b9050919050565b6000614c2c8261339b565b9150614c378361339b565b925082614c4757614c46614b2f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614c7982614c52565b614c838185614c5d565b9350614c938185602086016134ba565b614c9c816134ed565b840191505092915050565b6000608082019050614cbc60008301876135e4565b614cc960208301866135e4565b614cd660408301856133a5565b8181036060830152614ce88184614c6e565b905095945050505050565b600081519050614d028161340f565b92915050565b600060208284031215614d1e57614d1d6133d9565b5b6000614d2c84828501614cf3565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d6b6020836134a9565b9150614d7682614d35565b602082019050919050565b60006020820190508181036000830152614d9a81614d5e565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614dd7601c836134a9565b9150614de282614da1565b602082019050919050565b60006020820190508181036000830152614e0681614dca565b905091905056fea2646970667358221220987b887f2a02f3b546599539f66d51581ae100c69a07f70401adbb165447105764736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d547a314c63594c3957435568717a4d464d71733366694e4777744144376d7a626e454c4278417268574451742f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseuri (string): ipfs://QmTz1LcYL9WCUhqzMFMqs3fiNGwtAD7mzbnELBxArhWDQt/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d547a314c63594c3957435568717a4d464d71733366694e
Arg [3] : 4777744144376d7a626e454c4278417268574451742f00000000000000000000
Deployed Bytecode Sourcemap
42157:5774:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42403:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27646:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28591:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30156:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29679:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42585:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43555:672;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45187:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45021:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31046:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42278:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45683:79;;;;;;;;;;;;;:::i;:::-;;46540:297;;;;;;;;;;;;;:::i;:::-;;46331:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46439:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45900:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31456:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42450:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42495;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47188:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28285:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44235:778;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28015:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41424:94;;;;;;;;;;;;;:::i;:::-;;45341:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46003:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46845:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40773:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42653:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45587:88;;;;;;;;;;;;;:::i;:::-;;28760:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42618:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42969:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42846:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30449:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42361:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46223:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31712:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42936:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45776:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42997:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47298:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30815:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41673:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42540:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42910:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42326:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42403:40;;;;:::o;27646:305::-;27748:4;27800:25;27785:40;;;:11;:40;;;;:105;;;;27857:33;27842:48;;;:11;:48;;;;27785:105;:158;;;;27907:36;27931:11;27907:23;:36::i;:::-;27785:158;27765:178;;27646:305;;;:::o;28591:100::-;28645:13;28678:5;28671:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28591:100;:::o;30156:221::-;30232:7;30260:16;30268:7;30260;:16::i;:::-;30252:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30345:15;:24;30361:7;30345:24;;;;;;;;;;;;;;;;;;;;;30338:31;;30156:221;;;:::o;29679:411::-;29760:13;29776:23;29791:7;29776:14;:23::i;:::-;29760:39;;29824:5;29818:11;;:2;:11;;;;29810:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29918:5;29902:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29927:37;29944:5;29951:12;:10;:12::i;:::-;29927:16;:37::i;:::-;29902:62;29880:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30061:21;30070:2;30074:7;30061:8;:21::i;:::-;29749:341;29679:411;;:::o;42585:26::-;;;;:::o;43555:672::-;43617:4;43634:21;43658:11;;43634:35;;43688:7;;;;;;;;;;;43680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43767:9;:21;43777:10;43767:21;;;;;;;;;;;;;;;:32;;;;;;;;;;;;43759:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43890:13;;43883:3;43867:13;:19;;;;:::i;:::-;:36;;43859:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43993:3;43951:9;:21;43961:10;43951:21;;;;;;;;;;;;;;;:38;;;:45;;43943:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;44086:3;44071:12;;:18;;;;:::i;:::-;44058:9;:31;;44050:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44180:3;44138:9;:21;44148:10;44138:21;;;;;;;;;;;;;;;:38;;;:45;;;;;;;:::i;:::-;;;;;;;;44201:18;44215:3;44201:13;:18::i;:::-;44194:25;;;43555:672;;;:::o;45187:146::-;45262:7;45289:9;:19;45299:8;45289:19;;;;;;;;;;;;;;;:36;;;45282:43;;45187:146;;;:::o;45021:154::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45134:33:::1;;;;;;;;45149:4;45134:33;;;;;;45155:11;45134:33;;::::0;45112:9:::1;:19;45122:8;45112:19;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45021:154:::0;;:::o;31046:339::-;31241:41;31260:12;:10;:12::i;:::-;31274:7;31241:18;:41::i;:::-;31233:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31349:28;31359:4;31365:2;31369:7;31349:9;:28::i;:::-;31046:339;;;:::o;42278:41::-;42315:4;42278:41;:::o;45683:79::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45747:7:::1;;;;;;;;;;;45746:8;45736:7;;:18;;;;;;;;;;;;;;;;;;45683:79::o:0;46540:297::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46588:15:::1;46606:21;46588:39;;46638:16;46657:23;46676:3;46657:14;46669:1;46657:7;:11;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;46638:42;;46693:18;46714:21;46726:8;46714:7;:11;;:21;;;;:::i;:::-;46693:42;;46755:10;46747:28;;:40;46776:10;46747:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46806:3;;;;;;;;;;;46798:21;;:31;46820:8;46798:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46577:260;;;46540:297::o:0;46331:100::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46414:9:::1;46401:10;:22;;;;46331:100:::0;:::o;46439:93::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46516:8:::1;46505;:19;;;;46439:93:::0;:::o;45900:95::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45978:9:::1;45967:8;:20;;;;45900:95:::0;:::o;31456:185::-;31594:39;31611:4;31617:2;31621:7;31594:39;;;;;;;;;;;;:16;:39::i;:::-;31456:185;;;:::o;42450:38::-;;;;:::o;42495:::-;;;;:::o;47188:100::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47272:8:::1;47262:7;:18;;;;;;;;;;;;:::i;:::-;;47188:100:::0;:::o;46115:::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46198:9:::1;46185:10;:22;;;;46115:100:::0;:::o;28285:239::-;28357:7;28377:13;28393:7;:16;28401:7;28393:16;;;;;;;;;;;;;;;;;;;;;28377:32;;28445:1;28428:19;;:5;:19;;;;28420:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28511:5;28504:12;;;28285:239;;;:::o;44235:778::-;44300:4;44317:21;44341:11;;44317:35;;44371:10;;;;;;;;;;;44363:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44462:8;;44456:3;:14;44448:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44570:8;;42315:4;44557:21;;;;:::i;:::-;44550:3;44534:13;:19;;;;:::i;:::-;:44;;44526:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44636:1;44629:3;:8;44626:344;;44687:3;44674:10;;:16;;;;:::i;:::-;44661:9;:29;;44653:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44626:344;;;44757:2;44750:3;:9;44746:224;;44809:3;44796:10;;:16;;;;:::i;:::-;44783:9;:29;;44775:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44746:224;;;44917:3;44904:10;;:16;;;;:::i;:::-;44891:9;:29;;44883:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44746:224;44626:344;44987:18;45001:3;44987:13;:18::i;:::-;44980:25;;;44235:778;;;:::o;28015:208::-;28087:7;28132:1;28115:19;;:5;:19;;;;28107:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28199:9;:16;28209:5;28199:16;;;;;;;;;;;;;;;;28192:23;;28015:208;;;:::o;41424:94::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41489:21:::1;41507:1;41489:9;:21::i;:::-;41424:94::o:0;45341:238::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45455:6:::1;45450:122;45471:4;:11;45467:1;:15;45450:122;;;45525:35;;;;;;;;45540:4;45525:35;;;;;;45546:10;45557:1;45546:13;;;;;;;;:::i;:::-;;;;;;;;45525:35;;::::0;45504:9:::1;:18;45514:4;45519:1;45514:7;;;;;;;;:::i;:::-;;;;;;;;45504:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45484:3;;;;;:::i;:::-;;;;45450:122;;;;45341:238:::0;;:::o;46003:104::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46090:9:::1;46075:12;:24;;;;46003:104:::0;:::o;46845:335::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46918:8:::1;;46911:3;:15;;46903:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46979:9;46991:1;46979:13;;46974:144;46999:3;46994:1;:8;46974:144;;47024:17;47058:1;47044:11;;:15;;;;:::i;:::-;47024:35;;47074:32;47084:10;47096:9;47074;:32::i;:::-;47009:109;47004:3;;;;;:::i;:::-;;;;46974:144;;;;47143:3;47128:11;;:18;;;;;;;:::i;:::-;;;;;;;;47169:3;47157:8;;:15;;;;;;;:::i;:::-;;;;;;;;46845:335:::0;:::o;40773:87::-;40819:7;40846:6;;;;;;;;;;;40839:13;;40773:87;:::o;42653:63::-;;;;;;;;;;;;;:::o;45587:88::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45657:10:::1;;;;;;;;;;;45656:11;45643:10;;:24;;;;;;;;;;;;;;;;;;45587:88::o:0;28760:104::-;28816:13;28849:7;28842:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28760:104;:::o;42618:28::-;;;;:::o;42969:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42846:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30449:295::-;30564:12;:10;:12::i;:::-;30552:24;;:8;:24;;;;30544:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30664:8;30619:18;:32;30638:12;:10;:12::i;:::-;30619:32;;;;;;;;;;;;;;;:42;30652:8;30619:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30717:8;30688:48;;30703:12;:10;:12::i;:::-;30688:48;;;30727:8;30688:48;;;;;;:::i;:::-;;;;;;;;30449:295;;:::o;42361:35::-;;;;:::o;46223:100::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46306:9:::1;46293:10;:22;;;;46223:100:::0;:::o;31712:328::-;31887:41;31906:12;:10;:12::i;:::-;31920:7;31887:18;:41::i;:::-;31879:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31993:39;32007:4;32013:2;32017:7;32026:5;31993:13;:39::i;:::-;31712:328;;;;:::o;42936:22::-;;;;;;;;;;;;;:::o;45776:116::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45870:14:::1;45854:13;:30;;;;45776:116:::0;:::o;42997:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47298:483::-;47416:13;47469:16;47477:7;47469;:16::i;:::-;47447:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47573:28;47604:10;:8;:10::i;:::-;47573:41;;47663:1;47638:14;47632:28;:32;:141;;;;;;;;;;;;;;;;;47704:14;47720:18;:7;:16;:18::i;:::-;47740:13;47687:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47632:141;47625:148;;;47298:483;;;:::o;30815:164::-;30912:4;30936:18;:25;30955:5;30936:25;;;;;;;;;;;;;;;:35;30962:8;30936:35;;;;;;;;;;;;;;;;;;;;;;;;;30929:42;;30815:164;;;;:::o;41673:192::-;41004:12;:10;:12::i;:::-;40993:23;;:7;:5;:7::i;:::-;:23;;;40985:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41782:1:::1;41762:22;;:8;:22;;;;41754:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41838:19;41848:8;41838:9;:19::i;:::-;41673:192:::0;:::o;42540:38::-;;;;:::o;42910:19::-;;;;;;;;;;;;;:::o;42326:28::-;;;;:::o;19777:157::-;19862:4;19901:25;19886:40;;;:11;:40;;;;19879:47;;19777:157;;;:::o;33550:127::-;33615:4;33667:1;33639:30;;:7;:16;33647:7;33639:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33632:37;;33550:127;;;:::o;26100:98::-;26153:7;26180:10;26173:17;;26100:98;:::o;37532:174::-;37634:2;37607:15;:24;37623:7;37607:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37690:7;37686:2;37652:46;;37661:23;37676:7;37661:14;:23::i;:::-;37652:46;;;;;;;;;;;;37532:174;;:::o;43241:306::-;43295:4;43317:9;43329:1;43317:13;;43312:177;43337:3;43332:1;:8;43312:177;;43362:18;43397:1;43383:11;;:15;;;;:::i;:::-;43362:36;;42315:4;43417:10;:23;43413:64;;;43442:35;43452:12;:10;:12::i;:::-;43466:10;43442:9;:35::i;:::-;43413:64;43347:142;43342:3;;;;;:::i;:::-;;;;43312:177;;;;43514:3;43499:11;;:18;;;;;;;:::i;:::-;;;;;;;;43535:4;43528:11;;43241:306;;;:::o;33844:348::-;33937:4;33962:16;33970:7;33962;:16::i;:::-;33954:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34038:13;34054:23;34069:7;34054:14;:23::i;:::-;34038:39;;34107:5;34096:16;;:7;:16;;;:51;;;;34140:7;34116:31;;:20;34128:7;34116:11;:20::i;:::-;:31;;;34096:51;:87;;;;34151:32;34168:5;34175:7;34151:16;:32::i;:::-;34096:87;34088:96;;;33844:348;;;;:::o;36836:578::-;36995:4;36968:31;;:23;36983:7;36968:14;:23::i;:::-;:31;;;36960:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37078:1;37064:16;;:2;:16;;;;37056:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37134:39;37155:4;37161:2;37165:7;37134:20;:39::i;:::-;37238:29;37255:1;37259:7;37238:8;:29::i;:::-;37299:1;37280:9;:15;37290:4;37280:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37328:1;37311:9;:13;37321:2;37311:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37359:2;37340:7;:16;37348:7;37340:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37398:7;37394:2;37379:27;;37388:4;37379:27;;;;;;;;;;;;36836:578;;;:::o;5642:98::-;5700:7;5731:1;5727;:5;;;;:::i;:::-;5720:12;;5642:98;;;;:::o;6041:::-;6099:7;6130:1;6126;:5;;;;:::i;:::-;6119:12;;6041:98;;;;:::o;5285:::-;5343:7;5374:1;5370;:5;;;;:::i;:::-;5363:12;;5285:98;;;;:::o;41873:173::-;41929:16;41948:6;;;;;;;;;;;41929:25;;41974:8;41965:6;;:17;;;;;;;;;;;;;;;;;;42029:8;41998:40;;42019:8;41998:40;;;;;;;;;;;;41918:128;41873:173;:::o;34534:110::-;34610:26;34620:2;34624:7;34610:26;;;;;;;;;;;;:9;:26::i;:::-;34534:110;;:::o;32922:315::-;33079:28;33089:4;33095:2;33099:7;33079:9;:28::i;:::-;33126:48;33149:4;33155:2;33159:7;33168:5;33126:22;:48::i;:::-;33118:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32922:315;;;;:::o;47818:108::-;47878:13;47911:7;47904:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47818:108;:::o;382:723::-;438:13;668:1;659:5;:10;655:53;;;686:10;;;;;;;;;;;;;;;;;;;;;655:53;718:12;733:5;718:20;;749:14;774:78;789:1;781:4;:9;774:78;;807:8;;;;;:::i;:::-;;;;838:2;830:10;;;;;:::i;:::-;;;774:78;;;862:19;894:6;884:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;862:39;;912:154;928:1;919:5;:10;912:154;;956:1;946:11;;;;;:::i;:::-;;;1023:2;1015:5;:10;;;;:::i;:::-;1002:2;:24;;;;:::i;:::-;989:39;;972:6;979;972:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1052:2;1043:11;;;;;:::i;:::-;;;912:154;;;1090:6;1076:21;;;;;382:723;;;;:::o;39642:126::-;;;;:::o;34871:321::-;35001:18;35007:2;35011:7;35001:5;:18::i;:::-;35052:54;35083:1;35087:2;35091:7;35100:5;35052:22;:54::i;:::-;35030:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34871:321;;;:::o;38271:799::-;38426:4;38447:15;:2;:13;;;:15::i;:::-;38443:620;;;38499:2;38483:36;;;38520:12;:10;:12::i;:::-;38534:4;38540:7;38549:5;38483:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38479:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38742:1;38725:6;:13;:18;38721:272;;;38768:60;;;;;;;;;;:::i;:::-;;;;;;;;38721:272;38943:6;38937:13;38928:6;38924:2;38920:15;38913:38;38479:529;38616:41;;;38606:51;;;:6;:51;;;;38599:58;;;;;38443:620;39047:4;39040:11;;38271:799;;;;;;;:::o;35528:382::-;35622:1;35608:16;;:2;:16;;;;35600:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35681:16;35689:7;35681;:16::i;:::-;35680:17;35672:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35743:45;35772:1;35776:2;35780:7;35743:20;:45::i;:::-;35818:1;35801:9;:13;35811:2;35801:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35849:2;35830:7;:16;35838:7;35830:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35894:7;35890:2;35869:33;;35886:1;35869:33;;;;;;;;;;;;35528:382;;:::o;9837:387::-;9897:4;10105:12;10172:7;10160:20;10152:28;;10215:1;10208:4;:8;10201:15;;;9837:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:307::-;2301:1;2311:113;2325:6;2322:1;2319:13;2311:113;;;2410:1;2405:3;2401:11;2395:18;2391:1;2386:3;2382:11;2375:39;2347:2;2344:1;2340:10;2335:15;;2311:113;;;2442:6;2439:1;2436:13;2433:101;;;2522:1;2513:6;2508:3;2504:16;2497:27;2433:101;2282:258;2233:307;;;:::o;2546:102::-;2587:6;2638:2;2634:7;2629:2;2622:5;2618:14;2614:28;2604:38;;2546:102;;;:::o;2654:364::-;2742:3;2770:39;2803:5;2770:39;:::i;:::-;2825:71;2889:6;2884:3;2825:71;:::i;:::-;2818:78;;2905:52;2950:6;2945:3;2938:4;2931:5;2927:16;2905:52;:::i;:::-;2982:29;3004:6;2982:29;:::i;:::-;2977:3;2973:39;2966:46;;2746:272;2654:364;;;;:::o;3024:313::-;3137:4;3175:2;3164:9;3160:18;3152:26;;3224:9;3218:4;3214:20;3210:1;3199:9;3195:17;3188:47;3252:78;3325:4;3316:6;3252:78;:::i;:::-;3244:86;;3024:313;;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:329::-;3675:6;3724:2;3712:9;3703:7;3699:23;3695:32;3692:119;;;3730:79;;:::i;:::-;3692:119;3850:1;3875:53;3920:7;3911:6;3900:9;3896:22;3875:53;:::i;:::-;3865:63;;3821:117;3616:329;;;;:::o;3951:126::-;3988:7;4028:42;4021:5;4017:54;4006:65;;3951:126;;;:::o;4083:96::-;4120:7;4149:24;4167:5;4149:24;:::i;:::-;4138:35;;4083:96;;;:::o;4185:118::-;4272:24;4290:5;4272:24;:::i;:::-;4267:3;4260:37;4185:118;;:::o;4309:222::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:71;4521:1;4510:9;4506:17;4497:6;4453:71;:::i;:::-;4309:222;;;;:::o;4537:122::-;4610:24;4628:5;4610:24;:::i;:::-;4603:5;4600:35;4590:63;;4649:1;4646;4639:12;4590:63;4537:122;:::o;4665:139::-;4711:5;4749:6;4736:20;4727:29;;4765:33;4792:5;4765:33;:::i;:::-;4665:139;;;;:::o;4810:474::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:119;;;4941:79;;:::i;:::-;4903:119;5061:1;5086:53;5131:7;5122:6;5111:9;5107:22;5086:53;:::i;:::-;5076:63;;5032:117;5188:2;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5159:118;4810:474;;;;;:::o;5290:329::-;5349:6;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5290:329;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:311::-;8948:4;9038:18;9030:6;9027:30;9024:56;;;9060:18;;:::i;:::-;9024:56;9110:4;9102:6;9098:17;9090:25;;9170:4;9164;9160:15;9152:23;;8871:311;;;:::o;9188:117::-;9297:1;9294;9287:12;9328:710;9424:5;9449:81;9465:64;9522:6;9465:64;:::i;:::-;9449:81;:::i;:::-;9440:90;;9550:5;9579:6;9572:5;9565:21;9613:4;9606:5;9602:16;9595:23;;9666:4;9658:6;9654:17;9646:6;9642:30;9695:3;9687:6;9684:15;9681:122;;;9714:79;;:::i;:::-;9681:122;9829:6;9812:220;9846:6;9841:3;9838:15;9812:220;;;9921:3;9950:37;9983:3;9971:10;9950:37;:::i;:::-;9945:3;9938:50;10017:4;10012:3;10008:14;10001:21;;9888:144;9872:4;9867:3;9863:14;9856:21;;9812:220;;;9816:21;9430:608;;9328:710;;;;;:::o;10061:370::-;10132:5;10181:3;10174:4;10166:6;10162:17;10158:27;10148:122;;10189:79;;:::i;:::-;10148:122;10306:6;10293:20;10331:94;10421:3;10413:6;10406:4;10398:6;10394:17;10331:94;:::i;:::-;10322:103;;10138:293;10061:370;;;;:::o;10437:311::-;10514:4;10604:18;10596:6;10593:30;10590:56;;;10626:18;;:::i;:::-;10590:56;10676:4;10668:6;10664:17;10656:25;;10736:4;10730;10726:15;10718:23;;10437:311;;;:::o;10771:710::-;10867:5;10892:81;10908:64;10965:6;10908:64;:::i;:::-;10892:81;:::i;:::-;10883:90;;10993:5;11022:6;11015:5;11008:21;11056:4;11049:5;11045:16;11038:23;;11109:4;11101:6;11097:17;11089:6;11085:30;11138:3;11130:6;11127:15;11124:122;;;11157:79;;:::i;:::-;11124:122;11272:6;11255:220;11289:6;11284:3;11281:15;11255:220;;;11364:3;11393:37;11426:3;11414:10;11393:37;:::i;:::-;11388:3;11381:50;11460:4;11455:3;11451:14;11444:21;;11331:144;11315:4;11310:3;11306:14;11299:21;;11255:220;;;11259:21;10873:608;;10771:710;;;;;:::o;11504:370::-;11575:5;11624:3;11617:4;11609:6;11605:17;11601:27;11591:122;;11632:79;;:::i;:::-;11591:122;11749:6;11736:20;11774:94;11864:3;11856:6;11849:4;11841:6;11837:17;11774:94;:::i;:::-;11765:103;;11581:293;11504:370;;;;:::o;11880:894::-;11998:6;12006;12055:2;12043:9;12034:7;12030:23;12026:32;12023:119;;;12061:79;;:::i;:::-;12023:119;12209:1;12198:9;12194:17;12181:31;12239:18;12231:6;12228:30;12225:117;;;12261:79;;:::i;:::-;12225:117;12366:78;12436:7;12427:6;12416:9;12412:22;12366:78;:::i;:::-;12356:88;;12152:302;12521:2;12510:9;12506:18;12493:32;12552:18;12544:6;12541:30;12538:117;;;12574:79;;:::i;:::-;12538:117;12679:78;12749:7;12740:6;12729:9;12725:22;12679:78;:::i;:::-;12669:88;;12464:303;11880:894;;;;;:::o;12780:320::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12946:65;13008:1;12997:9;12993:17;12984:6;12946:65;:::i;:::-;13021:72;13089:2;13078:9;13074:18;13065:6;13021:72;:::i;:::-;12780:320;;;;;:::o;13106:116::-;13176:21;13191:5;13176:21;:::i;:::-;13169:5;13166:32;13156:60;;13212:1;13209;13202:12;13156:60;13106:116;:::o;13228:133::-;13271:5;13309:6;13296:20;13287:29;;13325:30;13349:5;13325:30;:::i;:::-;13228:133;;;;:::o;13367:468::-;13432:6;13440;13489:2;13477:9;13468:7;13464:23;13460:32;13457:119;;;13495:79;;:::i;:::-;13457:119;13615:1;13640:53;13685:7;13676:6;13665:9;13661:22;13640:53;:::i;:::-;13630:63;;13586:117;13742:2;13768:50;13810:7;13801:6;13790:9;13786:22;13768:50;:::i;:::-;13758:60;;13713:115;13367:468;;;;;:::o;13841:307::-;13902:4;13992:18;13984:6;13981:30;13978:56;;;14014:18;;:::i;:::-;13978:56;14052:29;14074:6;14052:29;:::i;:::-;14044:37;;14136:4;14130;14126:15;14118:23;;13841:307;;;:::o;14154:410::-;14231:5;14256:65;14272:48;14313:6;14272:48;:::i;:::-;14256:65;:::i;:::-;14247:74;;14344:6;14337:5;14330:21;14382:4;14375:5;14371:16;14420:3;14411:6;14406:3;14402:16;14399:25;14396:112;;;14427:79;;:::i;:::-;14396:112;14517:41;14551:6;14546:3;14541;14517:41;:::i;:::-;14237:327;14154:410;;;;;:::o;14583:338::-;14638:5;14687:3;14680:4;14672:6;14668:17;14664:27;14654:122;;14695:79;;:::i;:::-;14654:122;14812:6;14799:20;14837:78;14911:3;14903:6;14896:4;14888:6;14884:17;14837:78;:::i;:::-;14828:87;;14644:277;14583:338;;;;:::o;14927:943::-;15022:6;15030;15038;15046;15095:3;15083:9;15074:7;15070:23;15066:33;15063:120;;;15102:79;;:::i;:::-;15063:120;15222:1;15247:53;15292:7;15283:6;15272:9;15268:22;15247:53;:::i;:::-;15237:63;;15193:117;15349:2;15375:53;15420:7;15411:6;15400:9;15396:22;15375:53;:::i;:::-;15365:63;;15320:118;15477:2;15503:53;15548:7;15539:6;15528:9;15524:22;15503:53;:::i;:::-;15493:63;;15448:118;15633:2;15622:9;15618:18;15605:32;15664:18;15656:6;15653:30;15650:117;;;15686:79;;:::i;:::-;15650:117;15791:62;15845:7;15836:6;15825:9;15821:22;15791:62;:::i;:::-;15781:72;;15576:287;14927:943;;;;;;;:::o;15876:474::-;15944:6;15952;16001:2;15989:9;15980:7;15976:23;15972:32;15969:119;;;16007:79;;:::i;:::-;15969:119;16127:1;16152:53;16197:7;16188:6;16177:9;16173:22;16152:53;:::i;:::-;16142:63;;16098:117;16254:2;16280:53;16325:7;16316:6;16305:9;16301:22;16280:53;:::i;:::-;16270:63;;16225:118;15876:474;;;;;:::o;16356:180::-;16404:77;16401:1;16394:88;16501:4;16498:1;16491:15;16525:4;16522:1;16515:15;16542:320;16586:6;16623:1;16617:4;16613:12;16603:22;;16670:1;16664:4;16660:12;16691:18;16681:81;;16747:4;16739:6;16735:17;16725:27;;16681:81;16809:2;16801:6;16798:14;16778:18;16775:38;16772:84;;;16828:18;;:::i;:::-;16772:84;16593:269;16542:320;;;:::o;16868:231::-;17008:34;17004:1;16996:6;16992:14;16985:58;17077:14;17072:2;17064:6;17060:15;17053:39;16868:231;:::o;17105:366::-;17247:3;17268:67;17332:2;17327:3;17268:67;:::i;:::-;17261:74;;17344:93;17433:3;17344:93;:::i;:::-;17462:2;17457:3;17453:12;17446:19;;17105:366;;;:::o;17477:419::-;17643:4;17681:2;17670:9;17666:18;17658:26;;17730:9;17724:4;17720:20;17716:1;17705:9;17701:17;17694:47;17758:131;17884:4;17758:131;:::i;:::-;17750:139;;17477:419;;;:::o;17902:220::-;18042:34;18038:1;18030:6;18026:14;18019:58;18111:3;18106:2;18098:6;18094:15;18087:28;17902:220;:::o;18128:366::-;18270:3;18291:67;18355:2;18350:3;18291:67;:::i;:::-;18284:74;;18367:93;18456:3;18367:93;:::i;:::-;18485:2;18480:3;18476:12;18469:19;;18128:366;;;:::o;18500:419::-;18666:4;18704:2;18693:9;18689:18;18681:26;;18753:9;18747:4;18743:20;18739:1;18728:9;18724:17;18717:47;18781:131;18907:4;18781:131;:::i;:::-;18773:139;;18500:419;;;:::o;18925:243::-;19065:34;19061:1;19053:6;19049:14;19042:58;19134:26;19129:2;19121:6;19117:15;19110:51;18925:243;:::o;19174:366::-;19316:3;19337:67;19401:2;19396:3;19337:67;:::i;:::-;19330:74;;19413:93;19502:3;19413:93;:::i;:::-;19531:2;19526:3;19522:12;19515:19;;19174:366;;;:::o;19546:419::-;19712:4;19750:2;19739:9;19735:18;19727:26;;19799:9;19793:4;19789:20;19785:1;19774:9;19770:17;19763:47;19827:131;19953:4;19827:131;:::i;:::-;19819:139;;19546:419;;;:::o;19971:235::-;20111:34;20107:1;20099:6;20095:14;20088:58;20180:18;20175:2;20167:6;20163:15;20156:43;19971:235;:::o;20212:366::-;20354:3;20375:67;20439:2;20434:3;20375:67;:::i;:::-;20368:74;;20451:93;20540:3;20451:93;:::i;:::-;20569:2;20564:3;20560:12;20553:19;;20212:366;;;:::o;20584:419::-;20750:4;20788:2;20777:9;20773:18;20765:26;;20837:9;20831:4;20827:20;20823:1;20812:9;20808:17;20801:47;20865:131;20991:4;20865:131;:::i;:::-;20857:139;;20584:419;;;:::o;21009:223::-;21149:34;21145:1;21137:6;21133:14;21126:58;21218:6;21213:2;21205:6;21201:15;21194:31;21009:223;:::o;21238:366::-;21380:3;21401:67;21465:2;21460:3;21401:67;:::i;:::-;21394:74;;21477:93;21566:3;21477:93;:::i;:::-;21595:2;21590:3;21586:12;21579:19;;21238:366;;;:::o;21610:419::-;21776:4;21814:2;21803:9;21799:18;21791:26;;21863:9;21857:4;21853:20;21849:1;21838:9;21834:17;21827:47;21891:131;22017:4;21891:131;:::i;:::-;21883:139;;21610:419;;;:::o;22035:180::-;22083:77;22080:1;22073:88;22180:4;22177:1;22170:15;22204:4;22201:1;22194:15;22221:305;22261:3;22280:20;22298:1;22280:20;:::i;:::-;22275:25;;22314:20;22332:1;22314:20;:::i;:::-;22309:25;;22468:1;22400:66;22396:74;22393:1;22390:81;22387:107;;;22474:18;;:::i;:::-;22387:107;22518:1;22515;22511:9;22504:16;;22221:305;;;;:::o;22532:174::-;22672:26;22668:1;22660:6;22656:14;22649:50;22532:174;:::o;22712:366::-;22854:3;22875:67;22939:2;22934:3;22875:67;:::i;:::-;22868:74;;22951:93;23040:3;22951:93;:::i;:::-;23069:2;23064:3;23060:12;23053:19;;22712:366;;;:::o;23084:419::-;23250:4;23288:2;23277:9;23273:18;23265:26;;23337:9;23331:4;23327:20;23323:1;23312:9;23308:17;23301:47;23365:131;23491:4;23365:131;:::i;:::-;23357:139;;23084:419;;;:::o;23509:225::-;23649:34;23645:1;23637:6;23633:14;23626:58;23718:8;23713:2;23705:6;23701:15;23694:33;23509:225;:::o;23740:366::-;23882:3;23903:67;23967:2;23962:3;23903:67;:::i;:::-;23896:74;;23979:93;24068:3;23979:93;:::i;:::-;24097:2;24092:3;24088:12;24081:19;;23740:366;;;:::o;24112:419::-;24278:4;24316:2;24305:9;24301:18;24293:26;;24365:9;24359:4;24355:20;24351:1;24340:9;24336:17;24329:47;24393:131;24519:4;24393:131;:::i;:::-;24385:139;;24112:419;;;:::o;24537:348::-;24577:7;24600:20;24618:1;24600:20;:::i;:::-;24595:25;;24634:20;24652:1;24634:20;:::i;:::-;24629:25;;24822:1;24754:66;24750:74;24747:1;24744:81;24739:1;24732:9;24725:17;24721:105;24718:131;;;24829:18;;:::i;:::-;24718:131;24877:1;24874;24870:9;24859:20;;24537:348;;;;:::o;24891:221::-;25031:34;25027:1;25019:6;25015:14;25008:58;25100:4;25095:2;25087:6;25083:15;25076:29;24891:221;:::o;25118:366::-;25260:3;25281:67;25345:2;25340:3;25281:67;:::i;:::-;25274:74;;25357:93;25446:3;25357:93;:::i;:::-;25475:2;25470:3;25466:12;25459:19;;25118:366;;;:::o;25490:419::-;25656:4;25694:2;25683:9;25679:18;25671:26;;25743:9;25737:4;25733:20;25729:1;25718:9;25714:17;25707:47;25771:131;25897:4;25771:131;:::i;:::-;25763:139;;25490:419;;;:::o;25915:191::-;25955:4;25975:20;25993:1;25975:20;:::i;:::-;25970:25;;26009:20;26027:1;26009:20;:::i;:::-;26004:25;;26048:1;26045;26042:8;26039:34;;;26053:18;;:::i;:::-;26039:34;26098:1;26095;26091:9;26083:17;;25915:191;;;;:::o;26112:182::-;26252:34;26248:1;26240:6;26236:14;26229:58;26112:182;:::o;26300:366::-;26442:3;26463:67;26527:2;26522:3;26463:67;:::i;:::-;26456:74;;26539:93;26628:3;26539:93;:::i;:::-;26657:2;26652:3;26648:12;26641:19;;26300:366;;;:::o;26672:419::-;26838:4;26876:2;26865:9;26861:18;26853:26;;26925:9;26919:4;26915:20;26911:1;26900:9;26896:17;26889:47;26953:131;27079:4;26953:131;:::i;:::-;26945:139;;26672:419;;;:::o;27097:236::-;27237:34;27233:1;27225:6;27221:14;27214:58;27306:19;27301:2;27293:6;27289:15;27282:44;27097:236;:::o;27339:366::-;27481:3;27502:67;27566:2;27561:3;27502:67;:::i;:::-;27495:74;;27578:93;27667:3;27578:93;:::i;:::-;27696:2;27691:3;27687:12;27680:19;;27339:366;;;:::o;27711:419::-;27877:4;27915:2;27904:9;27900:18;27892:26;;27964:9;27958:4;27954:20;27950:1;27939:9;27935:17;27928:47;27992:131;28118:4;27992:131;:::i;:::-;27984:139;;27711:419;;;:::o;28136:228::-;28276:34;28272:1;28264:6;28260:14;28253:58;28345:11;28340:2;28332:6;28328:15;28321:36;28136:228;:::o;28370:366::-;28512:3;28533:67;28597:2;28592:3;28533:67;:::i;:::-;28526:74;;28609:93;28698:3;28609:93;:::i;:::-;28727:2;28722:3;28718:12;28711:19;;28370:366;;;:::o;28742:419::-;28908:4;28946:2;28935:9;28931:18;28923:26;;28995:9;28989:4;28985:20;28981:1;28970:9;28966:17;28959:47;29023:131;29149:4;29023:131;:::i;:::-;29015:139;;28742:419;;;:::o;29167:238::-;29307:34;29303:1;29295:6;29291:14;29284:58;29376:21;29371:2;29363:6;29359:15;29352:46;29167:238;:::o;29411:366::-;29553:3;29574:67;29638:2;29633:3;29574:67;:::i;:::-;29567:74;;29650:93;29739:3;29650:93;:::i;:::-;29768:2;29763:3;29759:12;29752:19;;29411:366;;;:::o;29783:419::-;29949:4;29987:2;29976:9;29972:18;29964:26;;30036:9;30030:4;30026:20;30022:1;30011:9;30007:17;30000:47;30064:131;30190:4;30064:131;:::i;:::-;30056:139;;29783:419;;;:::o;30208:228::-;30348:34;30344:1;30336:6;30332:14;30325:58;30417:11;30412:2;30404:6;30400:15;30393:36;30208:228;:::o;30442:366::-;30584:3;30605:67;30669:2;30664:3;30605:67;:::i;:::-;30598:74;;30681:93;30770:3;30681:93;:::i;:::-;30799:2;30794:3;30790:12;30783:19;;30442:366;;;:::o;30814:419::-;30980:4;31018:2;31007:9;31003:18;30995:26;;31067:9;31061:4;31057:20;31053:1;31042:9;31038:17;31031:47;31095:131;31221:4;31095:131;:::i;:::-;31087:139;;30814:419;;;:::o;31239:171::-;31379:23;31375:1;31367:6;31363:14;31356:47;31239:171;:::o;31416:366::-;31558:3;31579:67;31643:2;31638:3;31579:67;:::i;:::-;31572:74;;31655:93;31744:3;31655:93;:::i;:::-;31773:2;31768:3;31764:12;31757:19;;31416:366;;;:::o;31788:419::-;31954:4;31992:2;31981:9;31977:18;31969:26;;32041:9;32035:4;32031:20;32027:1;32016:9;32012:17;32005:47;32069:131;32195:4;32069:131;:::i;:::-;32061:139;;31788:419;;;:::o;32213:229::-;32353:34;32349:1;32341:6;32337:14;32330:58;32422:12;32417:2;32409:6;32405:15;32398:37;32213:229;:::o;32448:366::-;32590:3;32611:67;32675:2;32670:3;32611:67;:::i;:::-;32604:74;;32687:93;32776:3;32687:93;:::i;:::-;32805:2;32800:3;32796:12;32789:19;;32448:366;;;:::o;32820:419::-;32986:4;33024:2;33013:9;33009:18;33001:26;;33073:9;33067:4;33063:20;33059:1;33048:9;33044:17;33037:47;33101:131;33227:4;33101:131;:::i;:::-;33093:139;;32820:419;;;:::o;33245:180::-;33293:77;33290:1;33283:88;33390:4;33387:1;33380:15;33414:4;33411:1;33404:15;33431:233;33470:3;33493:24;33511:5;33493:24;:::i;:::-;33484:33;;33539:66;33532:5;33529:77;33526:103;;;33609:18;;:::i;:::-;33526:103;33656:1;33649:5;33645:13;33638:20;;33431:233;;;:::o;33670:181::-;33810:33;33806:1;33798:6;33794:14;33787:57;33670:181;:::o;33857:366::-;33999:3;34020:67;34084:2;34079:3;34020:67;:::i;:::-;34013:74;;34096:93;34185:3;34096:93;:::i;:::-;34214:2;34209:3;34205:12;34198:19;;33857:366;;;:::o;34229:419::-;34395:4;34433:2;34422:9;34418:18;34410:26;;34482:9;34476:4;34472:20;34468:1;34457:9;34453:17;34446:47;34510:131;34636:4;34510:131;:::i;:::-;34502:139;;34229:419;;;:::o;34654:175::-;34794:27;34790:1;34782:6;34778:14;34771:51;34654:175;:::o;34835:366::-;34977:3;34998:67;35062:2;35057:3;34998:67;:::i;:::-;34991:74;;35074:93;35163:3;35074:93;:::i;:::-;35192:2;35187:3;35183:12;35176:19;;34835:366;;;:::o;35207:419::-;35373:4;35411:2;35400:9;35396:18;35388:26;;35460:9;35454:4;35450:20;35446:1;35435:9;35431:17;35424:47;35488:131;35614:4;35488:131;:::i;:::-;35480:139;;35207:419;;;:::o;35632:234::-;35772:34;35768:1;35760:6;35756:14;35749:58;35841:17;35836:2;35828:6;35824:15;35817:42;35632:234;:::o;35872:366::-;36014:3;36035:67;36099:2;36094:3;36035:67;:::i;:::-;36028:74;;36111:93;36200:3;36111:93;:::i;:::-;36229:2;36224:3;36220:12;36213:19;;35872:366;;;:::o;36244:419::-;36410:4;36448:2;36437:9;36433:18;36425:26;;36497:9;36491:4;36487:20;36483:1;36472:9;36468:17;36461:47;36525:131;36651:4;36525:131;:::i;:::-;36517:139;;36244:419;;;:::o;36669:148::-;36771:11;36808:3;36793:18;;36669:148;;;;:::o;36823:377::-;36929:3;36957:39;36990:5;36957:39;:::i;:::-;37012:89;37094:6;37089:3;37012:89;:::i;:::-;37005:96;;37110:52;37155:6;37150:3;37143:4;37136:5;37132:16;37110:52;:::i;:::-;37187:6;37182:3;37178:16;37171:23;;36933:267;36823:377;;;;:::o;37206:141::-;37255:4;37278:3;37270:11;;37301:3;37298:1;37291:14;37335:4;37332:1;37322:18;37314:26;;37206:141;;;:::o;37377:845::-;37480:3;37517:5;37511:12;37546:36;37572:9;37546:36;:::i;:::-;37598:89;37680:6;37675:3;37598:89;:::i;:::-;37591:96;;37718:1;37707:9;37703:17;37734:1;37729:137;;;;37880:1;37875:341;;;;37696:520;;37729:137;37813:4;37809:9;37798;37794:25;37789:3;37782:38;37849:6;37844:3;37840:16;37833:23;;37729:137;;37875:341;37942:38;37974:5;37942:38;:::i;:::-;38002:1;38016:154;38030:6;38027:1;38024:13;38016:154;;;38104:7;38098:14;38094:1;38089:3;38085:11;38078:35;38154:1;38145:7;38141:15;38130:26;;38052:4;38049:1;38045:12;38040:17;;38016:154;;;38199:6;38194:3;38190:16;38183:23;;37882:334;;37696:520;;37484:738;;37377:845;;;;:::o;38228:589::-;38453:3;38475:95;38566:3;38557:6;38475:95;:::i;:::-;38468:102;;38587:95;38678:3;38669:6;38587:95;:::i;:::-;38580:102;;38699:92;38787:3;38778:6;38699:92;:::i;:::-;38692:99;;38808:3;38801:10;;38228:589;;;;;;:::o;38823:225::-;38963:34;38959:1;38951:6;38947:14;38940:58;39032:8;39027:2;39019:6;39015:15;39008:33;38823:225;:::o;39054:366::-;39196:3;39217:67;39281:2;39276:3;39217:67;:::i;:::-;39210:74;;39293:93;39382:3;39293:93;:::i;:::-;39411:2;39406:3;39402:12;39395:19;;39054:366;;;:::o;39426:419::-;39592:4;39630:2;39619:9;39615:18;39607:26;;39679:9;39673:4;39669:20;39665:1;39654:9;39650:17;39643:47;39707:131;39833:4;39707:131;:::i;:::-;39699:139;;39426:419;;;:::o;39851:231::-;39991:34;39987:1;39979:6;39975:14;39968:58;40060:14;40055:2;40047:6;40043:15;40036:39;39851:231;:::o;40088:366::-;40230:3;40251:67;40315:2;40310:3;40251:67;:::i;:::-;40244:74;;40327:93;40416:3;40327:93;:::i;:::-;40445:2;40440:3;40436:12;40429:19;;40088:366;;;:::o;40460:419::-;40626:4;40664:2;40653:9;40649:18;40641:26;;40713:9;40707:4;40703:20;40699:1;40688:9;40684:17;40677:47;40741:131;40867:4;40741:131;:::i;:::-;40733:139;;40460:419;;;:::o;40885:228::-;41025:34;41021:1;41013:6;41009:14;41002:58;41094:11;41089:2;41081:6;41077:15;41070:36;40885:228;:::o;41119:366::-;41261:3;41282:67;41346:2;41341:3;41282:67;:::i;:::-;41275:74;;41358:93;41447:3;41358:93;:::i;:::-;41476:2;41471:3;41467:12;41460:19;;41119:366;;;:::o;41491:419::-;41657:4;41695:2;41684:9;41680:18;41672:26;;41744:9;41738:4;41734:20;41730:1;41719:9;41715:17;41708:47;41772:131;41898:4;41772:131;:::i;:::-;41764:139;;41491:419;;;:::o;41916:223::-;42056:34;42052:1;42044:6;42040:14;42033:58;42125:6;42120:2;42112:6;42108:15;42101:31;41916:223;:::o;42145:366::-;42287:3;42308:67;42372:2;42367:3;42308:67;:::i;:::-;42301:74;;42384:93;42473:3;42384:93;:::i;:::-;42502:2;42497:3;42493:12;42486:19;;42145:366;;;:::o;42517:419::-;42683:4;42721:2;42710:9;42706:18;42698:26;;42770:9;42764:4;42760:20;42756:1;42745:9;42741:17;42734:47;42798:131;42924:4;42798:131;:::i;:::-;42790:139;;42517:419;;;:::o;42942:180::-;42990:77;42987:1;42980:88;43087:4;43084:1;43077:15;43111:4;43108:1;43101:15;43128:185;43168:1;43185:20;43203:1;43185:20;:::i;:::-;43180:25;;43219:20;43237:1;43219:20;:::i;:::-;43214:25;;43258:1;43248:35;;43263:18;;:::i;:::-;43248:35;43305:1;43302;43298:9;43293:14;;43128:185;;;;:::o;43319:237::-;43459:34;43455:1;43447:6;43443:14;43436:58;43528:20;43523:2;43515:6;43511:15;43504:45;43319:237;:::o;43562:366::-;43704:3;43725:67;43789:2;43784:3;43725:67;:::i;:::-;43718:74;;43801:93;43890:3;43801:93;:::i;:::-;43919:2;43914:3;43910:12;43903:19;;43562:366;;;:::o;43934:419::-;44100:4;44138:2;44127:9;44123:18;44115:26;;44187:9;44181:4;44177:20;44173:1;44162:9;44158:17;44151:47;44215:131;44341:4;44215:131;:::i;:::-;44207:139;;43934:419;;;:::o;44359:176::-;44391:1;44408:20;44426:1;44408:20;:::i;:::-;44403:25;;44442:20;44460:1;44442:20;:::i;:::-;44437:25;;44481:1;44471:35;;44486:18;;:::i;:::-;44471:35;44527:1;44524;44520:9;44515:14;;44359:176;;;;:::o;44541:98::-;44592:6;44626:5;44620:12;44610:22;;44541:98;;;:::o;44645:168::-;44728:11;44762:6;44757:3;44750:19;44802:4;44797:3;44793:14;44778:29;;44645:168;;;;:::o;44819:360::-;44905:3;44933:38;44965:5;44933:38;:::i;:::-;44987:70;45050:6;45045:3;44987:70;:::i;:::-;44980:77;;45066:52;45111:6;45106:3;45099:4;45092:5;45088:16;45066:52;:::i;:::-;45143:29;45165:6;45143:29;:::i;:::-;45138:3;45134:39;45127:46;;44909:270;44819:360;;;;:::o;45185:640::-;45380:4;45418:3;45407:9;45403:19;45395:27;;45432:71;45500:1;45489:9;45485:17;45476:6;45432:71;:::i;:::-;45513:72;45581:2;45570:9;45566:18;45557:6;45513:72;:::i;:::-;45595;45663:2;45652:9;45648:18;45639:6;45595:72;:::i;:::-;45714:9;45708:4;45704:20;45699:2;45688:9;45684:18;45677:48;45742:76;45813:4;45804:6;45742:76;:::i;:::-;45734:84;;45185:640;;;;;;;:::o;45831:141::-;45887:5;45918:6;45912:13;45903:22;;45934:32;45960:5;45934:32;:::i;:::-;45831:141;;;;:::o;45978:349::-;46047:6;46096:2;46084:9;46075:7;46071:23;46067:32;46064:119;;;46102:79;;:::i;:::-;46064:119;46222:1;46247:63;46302:7;46293:6;46282:9;46278:22;46247:63;:::i;:::-;46237:73;;46193:127;45978:349;;;;:::o;46333:182::-;46473:34;46469:1;46461:6;46457:14;46450:58;46333:182;:::o;46521:366::-;46663:3;46684:67;46748:2;46743:3;46684:67;:::i;:::-;46677:74;;46760:93;46849:3;46760:93;:::i;:::-;46878:2;46873:3;46869:12;46862:19;;46521:366;;;:::o;46893:419::-;47059:4;47097:2;47086:9;47082:18;47074:26;;47146:9;47140:4;47136:20;47132:1;47121:9;47117:17;47110:47;47174:131;47300:4;47174:131;:::i;:::-;47166:139;;46893:419;;;:::o;47318:178::-;47458:30;47454:1;47446:6;47442:14;47435:54;47318:178;:::o;47502:366::-;47644:3;47665:67;47729:2;47724:3;47665:67;:::i;:::-;47658:74;;47741:93;47830:3;47741:93;:::i;:::-;47859:2;47854:3;47850:12;47843:19;;47502:366;;;:::o;47874:419::-;48040:4;48078:2;48067:9;48063:18;48055:26;;48127:9;48121:4;48117:20;48113:1;48102:9;48098:17;48091:47;48155:131;48281:4;48155:131;:::i;:::-;48147:139;;47874:419;;;:::o
Swarm Source
ipfs://987b887f2a02f3b546599539f66d51581ae100c69a07f70401adbb1654471057
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
AVAX | 100.00% | $52.17 | 0.03 | $1.57 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.