ERC-721
Overview
Max Total Supply
2,500 CBunch
Holders
177
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 CBunchLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CartoonBunch
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-12-02 */ // $$\ $$\ $$\ $$\ // $$ | $$ | $$ | $$ | // $$ |$$ / $$$$$$\ $$$$$$\ $$\ $$\ $$\ $$$$$$$\ $$ | $$$$$$\ $$$$$$$\ $$$$$$$\ // $$$$$ / $$ __$$\ $$ __$$\ $$ | $$ | $$ |$$ __$$\ $$ | \____$$\ $$ __$$\ $$ _____| // $$ $$< $$ | \__|$$ / $$ |$$ | $$ | $$ |$$ | $$ | $$ | $$$$$$$ |$$ | $$ |\$$$$$$\ // $$ |\$$\ $$ | $$ | $$ |$$ | $$ | $$ |$$ | $$ | $$ | $$ __$$ |$$ | $$ | \____$$\ // $$ | \$$\ $$ | \$$$$$$ |\$$$$$\$$$$ |$$ | $$ | $$$$$$$$\\$$$$$$$ |$$$$$$$ |$$$$$$$ | // \__| \__|\__| \______/ \_____\____/ \__| \__| \________|\_______|\_______/ \_______/ // Join us; // Twitter @krownlabs // Discord discord.com/invite/8D4HaCcFHs // Website https://krownlabs.app/ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (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 // OpenZeppelin Contracts (last updated v4.7.0) (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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (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/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: CartoonBunch.sol // $$\ $$\ $$\ $$\ // $$ | $$ | $$ | $$ | // $$ |$$ / $$$$$$\ $$$$$$\ $$\ $$\ $$\ $$$$$$$\ $$ | $$$$$$\ $$$$$$$\ $$$$$$$\ // $$$$$ / $$ __$$\ $$ __$$\ $$ | $$ | $$ |$$ __$$\ $$ | \____$$\ $$ __$$\ $$ _____| // $$ $$< $$ | \__|$$ / $$ |$$ | $$ | $$ |$$ | $$ | $$ | $$$$$$$ |$$ | $$ |\$$$$$$\ // $$ |\$$\ $$ | $$ | $$ |$$ | $$ | $$ |$$ | $$ | $$ | $$ __$$ |$$ | $$ | \____$$\ // $$ | \$$\ $$ | \$$$$$$ |\$$$$$\$$$$ |$$ | $$ | $$$$$$$$\\$$$$$$$ |$$$$$$$ |$$$$$$$ | // \__| \__|\__| \______/ \_____\____/ \__| \__| \________|\_______|\_______/ \_______/ // Join us; // Twitter @krownlabs // Discord discord.com/invite/8D4HaCcFHs // Website https://krownlabs.app/ pragma solidity ^0.8.15; contract CartoonBunch is ERC721Enumerable, Ownable { using Strings for uint256; struct UserData {uint256 minted; } string baseURI; string public baseExtension = ".json"; uint256 public cost = 10 ether; // Self explanatory. uint256 public ukrownCost = 20000 ether; // ERC20 uKrown cost. uint256 public maxSupply = 2500; uint256 public maxMintAmount = 10; address private burnAddress = 0x000000000000000000000000000000000000dEaD; // uKrown burn address. bool public paused = true; address private _ukrownAddress; // uKrown ERC20 address. uint256 private _scopeIndex = 0; // Clamping cache for random TokenID generation in the anti-sniping algo uint256 private immutable _scopeCap; // Size of initial randomized number pool & max generated value (zero indexed) mapping(uint256 => uint256) _swappedIDs; // TokenID cache for random TokenID generation in the anti-sniping algo mapping(address => UserData) private userData; // Mapping to save how many tokens each address mints address public royaltyAddress = msg.sender; uint public royalty = 500; // 5% constructor( string memory _initBaseURI, address ukrownAddress ) ERC721("Cartoon Bunch", "CBunch") { setBaseURI(_initBaseURI); _ukrownAddress = ukrownAddress; _scopeCap = maxSupply; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _genClampedNonce() internal virtual returns (uint256) { uint256 scope = _scopeCap - _scopeIndex; uint256 swap; uint256 result; uint256 i = randomNumber() % scope; if (_swappedIDs[scope - 1] == 0) { swap = scope - 1; } else { swap = _swappedIDs[scope - 1]; } if (_swappedIDs[i] == 0) { result = i; _swappedIDs[i] = swap; } else { result = _swappedIDs[i]; _swappedIDs[i] = swap; } _scopeIndex++; return result; } function randomNumber() internal view returns (uint256) { return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } function ukrownMint(uint256 _mintAmount) public { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); require(userData[msg.sender].minted + _mintAmount <= maxMintAmount, "You are trying to mint more NFTs than allowed"); if (msg.sender != owner()) { IERC20(_ukrownAddress).transferFrom(msg.sender, address(burnAddress), ukrownCost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { uint tokenId = _genClampedNonce() + 1; _safeMint(msg.sender, tokenId); userData[msg.sender].minted += 1; } } function ftmMint(uint256 _mintAmount) public payable{ uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); require(userData[msg.sender].minted + _mintAmount <= maxMintAmount, "You are trying to mint more NFTs than allowed"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { uint tokenId = _genClampedNonce() + 1; _safeMint(msg.sender, tokenId); userData[msg.sender].minted += 1; } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } 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)) : ""; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setUkrownCost(uint256 _newUkrownCost) public onlyOwner { ukrownCost = _newUkrownCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setMaxMintableQuantity(uint256 value) public onlyOwner { maxMintAmount = value; } function setRoyaltyAddress(address _royaltyAddress) external onlyOwner { royaltyAddress = _royaltyAddress; } function setRoyalty(uint16 _royalty) external onlyOwner { require(_royalty <= 800, "Royalty must be lower than or equal to 8%"); royalty = _royalty; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"ukrownAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ftmMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxMintableQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_royalty","type":"uint16"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyAddress","type":"address"}],"name":"setRoyaltyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newUkrownCost","type":"uint256"}],"name":"setUkrownCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ukrownCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ukrownMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a91906200068b565b50678ac7230489e80000600d5569043c33c1937564800000600e556109c4600f55600a60105561dead601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601160146101000a81548160ff021916908315150217905550600060135533601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f46017553480156200012757600080fd5b50604051620051c6380380620051c683398181016040528101906200014d91906200093b565b6040518060400160405280600d81526020017f436172746f6f6e2042756e6368000000000000000000000000000000000000008152506040518060400160405280600681526020017f4342756e636800000000000000000000000000000000000000000000000000008152508160009081620001ca91906200068b565b508060019081620001dc91906200068b565b505050620001ff620001f36200026360201b60201c565b6200026b60201b60201c565b62000210826200033160201b60201c565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5460808181525050505062000a24565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003416200035660201b60201c565b80600b90816200035291906200068b565b5050565b620003666200026360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200038c620003e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003dc9062000a02565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049357607f821691505b602082108103620004a957620004a86200044b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d4565b6200051f8683620004d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200056c62000566620005608462000537565b62000541565b62000537565b9050919050565b6000819050919050565b62000588836200054b565b620005a0620005978262000573565b848454620004e1565b825550505050565b600090565b620005b7620005a8565b620005c48184846200057d565b505050565b5b81811015620005ec57620005e0600082620005ad565b600181019050620005ca565b5050565b601f8211156200063b576200060581620004af565b6200061084620004c4565b8101602085101562000620578190505b620006386200062f85620004c4565b830182620005c9565b50505b505050565b600082821c905092915050565b6000620006606000198460080262000640565b1980831691505092915050565b60006200067b83836200064d565b9150826002028217905092915050565b620006968262000411565b67ffffffffffffffff811115620006b257620006b16200041c565b5b620006be82546200047a565b620006cb828285620005f0565b600060209050601f831160018114620007035760008415620006ee578287015190505b620006fa85826200066d565b8655506200076a565b601f1984166200071386620004af565b60005b828110156200073d5784890151825560018201915060208501945060208101905062000716565b868310156200075d578489015162000759601f8916826200064d565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620007ac8262000790565b810181811067ffffffffffffffff82111715620007ce57620007cd6200041c565b5b80604052505050565b6000620007e362000772565b9050620007f18282620007a1565b919050565b600067ffffffffffffffff8211156200081457620008136200041c565b5b6200081f8262000790565b9050602081019050919050565b60005b838110156200084c5780820151818401526020810190506200082f565b60008484015250505050565b60006200086f6200086984620007f6565b620007d7565b9050828152602081018484840111156200088e576200088d6200078b565b5b6200089b8482856200082c565b509392505050565b600082601f830112620008bb57620008ba62000786565b5b8151620008cd84826020860162000858565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200090382620008d6565b9050919050565b6200091581620008f6565b81146200092157600080fd5b50565b60008151905062000935816200090a565b92915050565b600080604083850312156200095557620009546200077c565b5b600083015167ffffffffffffffff81111562000976576200097562000781565b5b6200098485828601620008a3565b9250506020620009978582860162000924565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620009ea602083620009a1565b9150620009f782620009b2565b602082019050919050565b6000602082019050818103600083015262000a1d81620009db565b9050919050565b60805161478662000a406000396000611c1401526147866000f3fe60806040526004361061023b5760003560e01c806355f804b31161012e578063ad2f852a116100ab578063d5abeb011161006f578063d5abeb0114610853578063da3ef23f1461087e578063e985e9c5146108a7578063f2fde38b146108e4578063f334323b1461090d5761023b565b8063ad2f852a1461076e578063b88d4fde14610799578063c6682862146107c2578063c87b56dd146107ed578063d0e55eb31461082a5761023b565b80637f00c7a6116100f25780637f00c7a61461069d5780638da5cb5b146106c657806395d89b41146106f157806397c6c7651461071c578063a22cb465146107455761023b565b806355f804b3146105b85780635c975abb146105e15780636352211e1461060c57806370a0823114610649578063715018a6146106865761023b565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b146104e257806342842e0e146104ec578063438b63001461051557806344a0d68a146105525780634f6ccce71461057b5761023b565b806323b872dd146103fd57806329ee566c146104265780632a925a26146104515780632f745c591461047c57806336e79a5a146104b95761023b565b8063095ea7b311610203578063095ea7b31461033757806313faede61461036057806318160ddd1461038b5780631c365672146103b6578063239c70ae146103d25761023b565b806301ffc9a71461024057806302329a291461027d57806306d254da146102a657806306fdde03146102cf578063081812fc146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612e51565b610936565b6040516102749190612e99565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612ee0565b6109b0565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612f6b565b6109d5565b005b3480156102db57600080fd5b506102e4610a21565b6040516102f19190613028565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613080565b610ab3565b60405161032e91906130bc565b60405180910390f35b34801561034357600080fd5b5061035e600480360381019061035991906130d7565b610af9565b005b34801561036c57600080fd5b50610375610c10565b6040516103829190613126565b60405180910390f35b34801561039757600080fd5b506103a0610c16565b6040516103ad9190613126565b60405180910390f35b6103d060048036038101906103cb9190613080565b610c23565b005b3480156103de57600080fd5b506103e7610e09565b6040516103f49190613126565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190613141565b610e0f565b005b34801561043257600080fd5b5061043b610e6f565b6040516104489190613126565b60405180910390f35b34801561045d57600080fd5b50610466610e75565b6040516104739190613126565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906130d7565b610e7b565b6040516104b09190613126565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db91906131ce565b610f20565b005b6104ea610f7f565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613141565b611007565b005b34801561052157600080fd5b5061053c60048036038101906105379190612f6b565b611027565b60405161054991906132b9565b60405180910390f35b34801561055e57600080fd5b5061057960048036038101906105749190613080565b6110d5565b005b34801561058757600080fd5b506105a2600480360381019061059d9190613080565b6110e7565b6040516105af9190613126565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613410565b611158565b005b3480156105ed57600080fd5b506105f6611173565b6040516106039190612e99565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613080565b611186565b60405161064091906130bc565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612f6b565b611237565b60405161067d9190613126565b60405180910390f35b34801561069257600080fd5b5061069b6112ee565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613080565b611302565b005b3480156106d257600080fd5b506106db611314565b6040516106e891906130bc565b60405180910390f35b3480156106fd57600080fd5b5061070661133e565b6040516107139190613028565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190613080565b6113d0565b005b34801561075157600080fd5b5061076c60048036038101906107679190613459565b6113e2565b005b34801561077a57600080fd5b506107836113f8565b60405161079091906130bc565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb919061353a565b61141e565b005b3480156107ce57600080fd5b506107d7611480565b6040516107e49190613028565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f9190613080565b61150e565b6040516108219190613028565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c9190613080565b6115b8565b005b34801561085f57600080fd5b506108686115ca565b6040516108759190613126565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613410565b6115d0565b005b3480156108b357600080fd5b506108ce60048036038101906108c991906135bd565b6115eb565b6040516108db9190612e99565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190612f6b565b61167f565b005b34801561091957600080fd5b50610934600480360381019061092f9190613080565b611702565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a957506109a8826119a0565b5b9050919050565b6109b8611a82565b80601160146101000a81548160ff02191690831515021790555050565b6109dd611a82565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610a309061362c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c9061362c565b8015610aa95780601f10610a7e57610100808354040283529160200191610aa9565b820191906000526020600020905b815481529060010190602001808311610a8c57829003601f168201915b5050505050905090565b6000610abe82611b00565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0482611186565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b906136cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b93611b4b565b73ffffffffffffffffffffffffffffffffffffffff161480610bc25750610bc181610bbc611b4b565b6115eb565b5b610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613761565b60405180910390fd5b610c0b8383611b53565b505050565b600d5481565b6000600880549050905090565b6000610c2d610c16565b9050601160149054906101000a900460ff1615610c4957600080fd5b60008211610c5657600080fd5b601054821115610c6557600080fd5b600f548282610c7491906137b0565b1115610c7f57600080fd5b60105482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610cd091906137b0565b1115610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890613856565b60405180910390fd5b610d19611314565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d665781600d54610d599190613876565b341015610d6557600080fd5b5b6000600190505b828111610e045760006001610d80611c0c565b610d8a91906137b0565b9050610d963382611d43565b6001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610de991906137b0565b92505081905550508080610dfc906138b8565b915050610d6d565b505050565b60105481565b610e20610e1a611b4b565b82611d61565b610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690613972565b60405180910390fd5b610e6a838383611df6565b505050565b60175481565b600e5481565b6000610e8683611237565b8210610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613a04565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f28611a82565b6103208161ffff161115610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613a96565b60405180910390fd5b8061ffff1660178190555050565b610f87611a82565b6000610f91611314565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fb490613ae7565b60006040518083038185875af1925050503d8060008114610ff1576040519150601f19603f3d011682016040523d82523d6000602084013e610ff6565b606091505b505090508061100457600080fd5b50565b6110228383836040518060200160405280600081525061141e565b505050565b6060600061103483611237565b905060008167ffffffffffffffff811115611052576110516132e5565b5b6040519080825280602002602001820160405280156110805781602001602082028036833780820191505090505b50905060005b828110156110ca576110988582610e7b565b8282815181106110ab576110aa613afc565b5b60200260200101818152505080806110c2906138b8565b915050611086565b508092505050919050565b6110dd611a82565b80600d8190555050565b60006110f1610c16565b8210611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613b9d565b60405180910390fd5b6008828154811061114657611145613afc565b5b90600052602060002001549050919050565b611160611a82565b80600b908161116f9190613d69565b5050565b601160149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613e87565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90613f19565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f6611a82565b611300600061205c565b565b61130a611a82565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461134d9061362c565b80601f01602080910402602001604051908101604052809291908181526020018280546113799061362c565b80156113c65780601f1061139b576101008083540402835291602001916113c6565b820191906000526020600020905b8154815290600101906020018083116113a957829003601f168201915b5050505050905090565b6113d8611a82565b8060108190555050565b6113f46113ed611b4b565b8383612122565b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61142f611429611b4b565b83611d61565b61146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613972565b60405180910390fd5b61147a8484848461228e565b50505050565b600c805461148d9061362c565b80601f01602080910402602001604051908101604052809291908181526020018280546114b99061362c565b80156115065780601f106114db57610100808354040283529160200191611506565b820191906000526020600020905b8154815290600101906020018083116114e957829003601f168201915b505050505081565b6060611519826122ea565b611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90613fab565b60405180910390fd5b6000611562612356565b9050600081511161158257604051806020016040528060008152506115b0565b8061158c846123e8565b600c6040516020016115a09392919061408a565b6040516020818303038152906040525b915050919050565b6115c0611a82565b80600e8190555050565b600f5481565b6115d8611a82565b80600c90816115e79190613d69565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611687611a82565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed9061412d565b60405180910390fd5b6116ff8161205c565b50565b600061170c610c16565b9050601160149054906101000a900460ff161561172857600080fd5b6000821161173557600080fd5b60105482111561174457600080fd5b600f54828261175391906137b0565b111561175e57600080fd5b60105482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117af91906137b0565b11156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613856565b60405180910390fd5b6117f8611314565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600e5461189a9190613876565b6040518463ffffffff1660e01b81526004016118b89392919061414d565b6020604051808303816000875af11580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb9190614199565b505b6000600190505b82811161199b5760006001611917611c0c565b61192191906137b0565b905061192d3382611d43565b6001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461198091906137b0565b92505081905550508080611993906138b8565b915050611904565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a6b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a7b5750611a7a82612548565b5b9050919050565b611a8a611b4b565b73ffffffffffffffffffffffffffffffffffffffff16611aa8611314565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614212565b60405180910390fd5b565b611b09816122ea565b611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90613e87565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bc683611186565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806013547f0000000000000000000000000000000000000000000000000000000000000000611c3d9190614232565b9050600080600083611c4d6125b2565b611c579190614295565b9050600060146000600187611c6c9190614232565b81526020019081526020016000205403611c9457600184611c8d9190614232565b9250611cb7565b60146000600186611ca59190614232565b81526020019081526020016000205492505b6000601460008381526020019081526020016000205403611cf257809150826014600083815260200190815260200160002081905550611d21565b601460008281526020019081526020016000205491508260146000838152602001908152602001600020819055505b60136000815480929190611d34906138b8565b91905055508194505050505090565b611d5d8282604051806020016040528060008152506125e5565b5050565b600080611d6d83611186565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611daf5750611dae81856115eb565b5b80611ded57508373ffffffffffffffffffffffffffffffffffffffff16611dd584610ab3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e1682611186565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390614338565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed2906143ca565b60405180910390fd5b611ee6838383612640565b611ef1600082611b53565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f419190614232565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9891906137b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612057838383612752565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614436565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122819190612e99565b60405180910390a3505050565b612299848484611df6565b6122a584848484612757565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db906144c8565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546123659061362c565b80601f01602080910402602001604051908101604052809291908181526020018280546123919061362c565b80156123de5780601f106123b3576101008083540402835291602001916123de565b820191906000526020600020905b8154815290600101906020018083116123c157829003601f168201915b5050505050905090565b60606000820361242f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612543565b600082905060005b6000821461246157808061244a906138b8565b915050600a8261245a91906144e8565b9150612437565b60008167ffffffffffffffff81111561247d5761247c6132e5565b5b6040519080825280601f01601f1916602001820160405280156124af5781602001600182028036833780820191505090505b5090505b6000851461253c576001826124c89190614232565b9150600a856124d79190614295565b60306124e391906137b0565b60f81b8183815181106124f9576124f8613afc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253591906144e8565b94506124b3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600044426040516020016125c792919061453a565b6040516020818303038152906040528051906020012060001c905090565b6125ef83836128de565b6125fc6000848484612757565b61263b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612632906144c8565b60405180910390fd5b505050565b61264b838383612ab7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361268d5761268881612abc565b6126cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126cb576126ca8382612b05565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361270e5761270981612c72565b61274d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461274c5761274b8282612d43565b5b5b505050565b505050565b60006127788473ffffffffffffffffffffffffffffffffffffffff16612dc2565b156128d1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a1611b4b565b8786866040518563ffffffff1660e01b81526004016127c394939291906145bb565b6020604051808303816000875af19250505080156127ff57506040513d601f19601f820116820180604052508101906127fc919061461c565b60015b612881573d806000811461282f576040519150601f19603f3d011682016040523d82523d6000602084013e612834565b606091505b506000815103612879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612870906144c8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490614695565b60405180910390fd5b612956816122ea565b15612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614701565b60405180910390fd5b6129a260008383612640565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f291906137b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ab360008383612752565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b1284611237565b612b1c9190614232565b9050600060076000848152602001908152602001600020549050818114612c01576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c869190614232565b9050600060096000848152602001908152602001600020549050600060088381548110612cb657612cb5613afc565b5b906000526020600020015490508060088381548110612cd857612cd7613afc565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d2757612d26614721565b5b6001900381819060005260206000200160009055905550505050565b6000612d4e83611237565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2e81612df9565b8114612e3957600080fd5b50565b600081359050612e4b81612e25565b92915050565b600060208284031215612e6757612e66612def565b5b6000612e7584828501612e3c565b91505092915050565b60008115159050919050565b612e9381612e7e565b82525050565b6000602082019050612eae6000830184612e8a565b92915050565b612ebd81612e7e565b8114612ec857600080fd5b50565b600081359050612eda81612eb4565b92915050565b600060208284031215612ef657612ef5612def565b5b6000612f0484828501612ecb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f3882612f0d565b9050919050565b612f4881612f2d565b8114612f5357600080fd5b50565b600081359050612f6581612f3f565b92915050565b600060208284031215612f8157612f80612def565b5b6000612f8f84828501612f56565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fd2578082015181840152602081019050612fb7565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ffa82612f98565b6130048185612fa3565b9350613014818560208601612fb4565b61301d81612fde565b840191505092915050565b600060208201905081810360008301526130428184612fef565b905092915050565b6000819050919050565b61305d8161304a565b811461306857600080fd5b50565b60008135905061307a81613054565b92915050565b60006020828403121561309657613095612def565b5b60006130a48482850161306b565b91505092915050565b6130b681612f2d565b82525050565b60006020820190506130d160008301846130ad565b92915050565b600080604083850312156130ee576130ed612def565b5b60006130fc85828601612f56565b925050602061310d8582860161306b565b9150509250929050565b6131208161304a565b82525050565b600060208201905061313b6000830184613117565b92915050565b60008060006060848603121561315a57613159612def565b5b600061316886828701612f56565b935050602061317986828701612f56565b925050604061318a8682870161306b565b9150509250925092565b600061ffff82169050919050565b6131ab81613194565b81146131b657600080fd5b50565b6000813590506131c8816131a2565b92915050565b6000602082840312156131e4576131e3612def565b5b60006131f2848285016131b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132308161304a565b82525050565b60006132428383613227565b60208301905092915050565b6000602082019050919050565b6000613266826131fb565b6132708185613206565b935061327b83613217565b8060005b838110156132ac5781516132938882613236565b975061329e8361324e565b92505060018101905061327f565b5085935050505092915050565b600060208201905081810360008301526132d3818461325b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61331d82612fde565b810181811067ffffffffffffffff8211171561333c5761333b6132e5565b5b80604052505050565b600061334f612de5565b905061335b8282613314565b919050565b600067ffffffffffffffff82111561337b5761337a6132e5565b5b61338482612fde565b9050602081019050919050565b82818337600083830152505050565b60006133b36133ae84613360565b613345565b9050828152602081018484840111156133cf576133ce6132e0565b5b6133da848285613391565b509392505050565b600082601f8301126133f7576133f66132db565b5b81356134078482602086016133a0565b91505092915050565b60006020828403121561342657613425612def565b5b600082013567ffffffffffffffff81111561344457613443612df4565b5b613450848285016133e2565b91505092915050565b600080604083850312156134705761346f612def565b5b600061347e85828601612f56565b925050602061348f85828601612ecb565b9150509250929050565b600067ffffffffffffffff8211156134b4576134b36132e5565b5b6134bd82612fde565b9050602081019050919050565b60006134dd6134d884613499565b613345565b9050828152602081018484840111156134f9576134f86132e0565b5b613504848285613391565b509392505050565b600082601f830112613521576135206132db565b5b81356135318482602086016134ca565b91505092915050565b6000806000806080858703121561355457613553612def565b5b600061356287828801612f56565b945050602061357387828801612f56565b93505060406135848782880161306b565b925050606085013567ffffffffffffffff8111156135a5576135a4612df4565b5b6135b18782880161350c565b91505092959194509250565b600080604083850312156135d4576135d3612def565b5b60006135e285828601612f56565b92505060206135f385828601612f56565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061364457607f821691505b602082108103613657576136566135fd565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136b9602183612fa3565b91506136c48261365d565b604082019050919050565b600060208201905081810360008301526136e8816136ac565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061374b603e83612fa3565b9150613756826136ef565b604082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137bb8261304a565b91506137c68361304a565b92508282019050808211156137de576137dd613781565b5b92915050565b7f596f752061726520747279696e6720746f206d696e74206d6f7265204e46547360008201527f207468616e20616c6c6f77656400000000000000000000000000000000000000602082015250565b6000613840602d83612fa3565b915061384b826137e4565b604082019050919050565b6000602082019050818103600083015261386f81613833565b9050919050565b60006138818261304a565b915061388c8361304a565b925082820261389a8161304a565b915082820484148315176138b1576138b0613781565b5b5092915050565b60006138c38261304a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138f5576138f4613781565b5b600182019050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061395c602e83612fa3565b915061396782613900565b604082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006139ee602b83612fa3565b91506139f982613992565b604082019050919050565b60006020820190508181036000830152613a1d816139e1565b9050919050565b7f526f79616c7479206d757374206265206c6f776572207468616e206f7220657160008201527f75616c20746f2038250000000000000000000000000000000000000000000000602082015250565b6000613a80602983612fa3565b9150613a8b82613a24565b604082019050919050565b60006020820190508181036000830152613aaf81613a73565b9050919050565b600081905092915050565b50565b6000613ad1600083613ab6565b9150613adc82613ac1565b600082019050919050565b6000613af282613ac4565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613b87602c83612fa3565b9150613b9282613b2b565b604082019050919050565b60006020820190508181036000830152613bb681613b7a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c1f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613be2565b613c298683613be2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c66613c61613c5c8461304a565b613c41565b61304a565b9050919050565b6000819050919050565b613c8083613c4b565b613c94613c8c82613c6d565b848454613bef565b825550505050565b600090565b613ca9613c9c565b613cb4818484613c77565b505050565b5b81811015613cd857613ccd600082613ca1565b600181019050613cba565b5050565b601f821115613d1d57613cee81613bbd565b613cf784613bd2565b81016020851015613d06578190505b613d1a613d1285613bd2565b830182613cb9565b50505b505050565b600082821c905092915050565b6000613d4060001984600802613d22565b1980831691505092915050565b6000613d598383613d2f565b9150826002028217905092915050565b613d7282612f98565b67ffffffffffffffff811115613d8b57613d8a6132e5565b5b613d95825461362c565b613da0828285613cdc565b600060209050601f831160018114613dd35760008415613dc1578287015190505b613dcb8582613d4d565b865550613e33565b601f198416613de186613bbd565b60005b82811015613e0957848901518255600182019150602085019450602081019050613de4565b86831015613e265784890151613e22601f891682613d2f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613e71601883612fa3565b9150613e7c82613e3b565b602082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613f03602983612fa3565b9150613f0e82613ea7565b604082019050919050565b60006020820190508181036000830152613f3281613ef6565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f95602f83612fa3565b9150613fa082613f39565b604082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b600081905092915050565b6000613fe182612f98565b613feb8185613fcb565b9350613ffb818560208601612fb4565b80840191505092915050565b600081546140148161362c565b61401e8186613fcb565b94506001821660008114614039576001811461404e57614081565b60ff1983168652811515820286019350614081565b61405785613bbd565b60005b838110156140795781548189015260018201915060208101905061405a565b838801955050505b50505092915050565b60006140968286613fd6565b91506140a28285613fd6565b91506140ae8284614007565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614117602683612fa3565b9150614122826140bb565b604082019050919050565b600060208201905081810360008301526141468161410a565b9050919050565b600060608201905061416260008301866130ad565b61416f60208301856130ad565b61417c6040830184613117565b949350505050565b60008151905061419381612eb4565b92915050565b6000602082840312156141af576141ae612def565b5b60006141bd84828501614184565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141fc602083612fa3565b9150614207826141c6565b602082019050919050565b6000602082019050818103600083015261422b816141ef565b9050919050565b600061423d8261304a565b91506142488361304a565b92508282039050818111156142605761425f613781565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142a08261304a565b91506142ab8361304a565b9250826142bb576142ba614266565b5b828206905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614322602583612fa3565b915061432d826142c6565b604082019050919050565b6000602082019050818103600083015261435181614315565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143b4602483612fa3565b91506143bf82614358565b604082019050919050565b600060208201905081810360008301526143e3816143a7565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614420601983612fa3565b915061442b826143ea565b602082019050919050565b6000602082019050818103600083015261444f81614413565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006144b2603283612fa3565b91506144bd82614456565b604082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b60006144f38261304a565b91506144fe8361304a565b92508261450e5761450d614266565b5b828204905092915050565b6000819050919050565b61453461452f8261304a565b614519565b82525050565b60006145468285614523565b6020820191506145568284614523565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061458d82614566565b6145978185614571565b93506145a7818560208601612fb4565b6145b081612fde565b840191505092915050565b60006080820190506145d060008301876130ad565b6145dd60208301866130ad565b6145ea6040830185613117565b81810360608301526145fc8184614582565b905095945050505050565b60008151905061461681612e25565b92915050565b60006020828403121561463257614631612def565b5b600061464084828501614607565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061467f602083612fa3565b915061468a82614649565b602082019050919050565b600060208201905081810360008301526146ae81614672565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006146eb601c83612fa3565b91506146f6826146b5565b602082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220073d6187fe04d701effadc1c575fa414909a5d22a5694849c6201cd595e6c49064736f6c634300081100330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a68561c0c8b103d74b83081e6ce0c3d2fd0dedb50000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656965626f657137766f75656b743264623368647a357479343634667562677132796a7a6c677975723275727470366f6c376f3365712f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806355f804b31161012e578063ad2f852a116100ab578063d5abeb011161006f578063d5abeb0114610853578063da3ef23f1461087e578063e985e9c5146108a7578063f2fde38b146108e4578063f334323b1461090d5761023b565b8063ad2f852a1461076e578063b88d4fde14610799578063c6682862146107c2578063c87b56dd146107ed578063d0e55eb31461082a5761023b565b80637f00c7a6116100f25780637f00c7a61461069d5780638da5cb5b146106c657806395d89b41146106f157806397c6c7651461071c578063a22cb465146107455761023b565b806355f804b3146105b85780635c975abb146105e15780636352211e1461060c57806370a0823114610649578063715018a6146106865761023b565b806323b872dd116101bc5780633ccfd60b116101805780633ccfd60b146104e257806342842e0e146104ec578063438b63001461051557806344a0d68a146105525780634f6ccce71461057b5761023b565b806323b872dd146103fd57806329ee566c146104265780632a925a26146104515780632f745c591461047c57806336e79a5a146104b95761023b565b8063095ea7b311610203578063095ea7b31461033757806313faede61461036057806318160ddd1461038b5780631c365672146103b6578063239c70ae146103d25761023b565b806301ffc9a71461024057806302329a291461027d57806306d254da146102a657806306fdde03146102cf578063081812fc146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612e51565b610936565b6040516102749190612e99565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612ee0565b6109b0565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612f6b565b6109d5565b005b3480156102db57600080fd5b506102e4610a21565b6040516102f19190613028565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613080565b610ab3565b60405161032e91906130bc565b60405180910390f35b34801561034357600080fd5b5061035e600480360381019061035991906130d7565b610af9565b005b34801561036c57600080fd5b50610375610c10565b6040516103829190613126565b60405180910390f35b34801561039757600080fd5b506103a0610c16565b6040516103ad9190613126565b60405180910390f35b6103d060048036038101906103cb9190613080565b610c23565b005b3480156103de57600080fd5b506103e7610e09565b6040516103f49190613126565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190613141565b610e0f565b005b34801561043257600080fd5b5061043b610e6f565b6040516104489190613126565b60405180910390f35b34801561045d57600080fd5b50610466610e75565b6040516104739190613126565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906130d7565b610e7b565b6040516104b09190613126565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db91906131ce565b610f20565b005b6104ea610f7f565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613141565b611007565b005b34801561052157600080fd5b5061053c60048036038101906105379190612f6b565b611027565b60405161054991906132b9565b60405180910390f35b34801561055e57600080fd5b5061057960048036038101906105749190613080565b6110d5565b005b34801561058757600080fd5b506105a2600480360381019061059d9190613080565b6110e7565b6040516105af9190613126565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613410565b611158565b005b3480156105ed57600080fd5b506105f6611173565b6040516106039190612e99565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613080565b611186565b60405161064091906130bc565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612f6b565b611237565b60405161067d9190613126565b60405180910390f35b34801561069257600080fd5b5061069b6112ee565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613080565b611302565b005b3480156106d257600080fd5b506106db611314565b6040516106e891906130bc565b60405180910390f35b3480156106fd57600080fd5b5061070661133e565b6040516107139190613028565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190613080565b6113d0565b005b34801561075157600080fd5b5061076c60048036038101906107679190613459565b6113e2565b005b34801561077a57600080fd5b506107836113f8565b60405161079091906130bc565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb919061353a565b61141e565b005b3480156107ce57600080fd5b506107d7611480565b6040516107e49190613028565b60405180910390f35b3480156107f957600080fd5b50610814600480360381019061080f9190613080565b61150e565b6040516108219190613028565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c9190613080565b6115b8565b005b34801561085f57600080fd5b506108686115ca565b6040516108759190613126565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a09190613410565b6115d0565b005b3480156108b357600080fd5b506108ce60048036038101906108c991906135bd565b6115eb565b6040516108db9190612e99565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190612f6b565b61167f565b005b34801561091957600080fd5b50610934600480360381019061092f9190613080565b611702565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a957506109a8826119a0565b5b9050919050565b6109b8611a82565b80601160146101000a81548160ff02191690831515021790555050565b6109dd611a82565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610a309061362c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c9061362c565b8015610aa95780601f10610a7e57610100808354040283529160200191610aa9565b820191906000526020600020905b815481529060010190602001808311610a8c57829003601f168201915b5050505050905090565b6000610abe82611b00565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0482611186565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b906136cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b93611b4b565b73ffffffffffffffffffffffffffffffffffffffff161480610bc25750610bc181610bbc611b4b565b6115eb565b5b610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613761565b60405180910390fd5b610c0b8383611b53565b505050565b600d5481565b6000600880549050905090565b6000610c2d610c16565b9050601160149054906101000a900460ff1615610c4957600080fd5b60008211610c5657600080fd5b601054821115610c6557600080fd5b600f548282610c7491906137b0565b1115610c7f57600080fd5b60105482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610cd091906137b0565b1115610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0890613856565b60405180910390fd5b610d19611314565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d665781600d54610d599190613876565b341015610d6557600080fd5b5b6000600190505b828111610e045760006001610d80611c0c565b610d8a91906137b0565b9050610d963382611d43565b6001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254610de991906137b0565b92505081905550508080610dfc906138b8565b915050610d6d565b505050565b60105481565b610e20610e1a611b4b565b82611d61565b610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690613972565b60405180910390fd5b610e6a838383611df6565b505050565b60175481565b600e5481565b6000610e8683611237565b8210610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613a04565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f28611a82565b6103208161ffff161115610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613a96565b60405180910390fd5b8061ffff1660178190555050565b610f87611a82565b6000610f91611314565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fb490613ae7565b60006040518083038185875af1925050503d8060008114610ff1576040519150601f19603f3d011682016040523d82523d6000602084013e610ff6565b606091505b505090508061100457600080fd5b50565b6110228383836040518060200160405280600081525061141e565b505050565b6060600061103483611237565b905060008167ffffffffffffffff811115611052576110516132e5565b5b6040519080825280602002602001820160405280156110805781602001602082028036833780820191505090505b50905060005b828110156110ca576110988582610e7b565b8282815181106110ab576110aa613afc565b5b60200260200101818152505080806110c2906138b8565b915050611086565b508092505050919050565b6110dd611a82565b80600d8190555050565b60006110f1610c16565b8210611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613b9d565b60405180910390fd5b6008828154811061114657611145613afc565b5b90600052602060002001549050919050565b611160611a82565b80600b908161116f9190613d69565b5050565b601160149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613e87565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90613f19565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f6611a82565b611300600061205c565b565b61130a611a82565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461134d9061362c565b80601f01602080910402602001604051908101604052809291908181526020018280546113799061362c565b80156113c65780601f1061139b576101008083540402835291602001916113c6565b820191906000526020600020905b8154815290600101906020018083116113a957829003601f168201915b5050505050905090565b6113d8611a82565b8060108190555050565b6113f46113ed611b4b565b8383612122565b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61142f611429611b4b565b83611d61565b61146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613972565b60405180910390fd5b61147a8484848461228e565b50505050565b600c805461148d9061362c565b80601f01602080910402602001604051908101604052809291908181526020018280546114b99061362c565b80156115065780601f106114db57610100808354040283529160200191611506565b820191906000526020600020905b8154815290600101906020018083116114e957829003601f168201915b505050505081565b6060611519826122ea565b611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90613fab565b60405180910390fd5b6000611562612356565b9050600081511161158257604051806020016040528060008152506115b0565b8061158c846123e8565b600c6040516020016115a09392919061408a565b6040516020818303038152906040525b915050919050565b6115c0611a82565b80600e8190555050565b600f5481565b6115d8611a82565b80600c90816115e79190613d69565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611687611a82565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed9061412d565b60405180910390fd5b6116ff8161205c565b50565b600061170c610c16565b9050601160149054906101000a900460ff161561172857600080fd5b6000821161173557600080fd5b60105482111561174457600080fd5b600f54828261175391906137b0565b111561175e57600080fd5b60105482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546117af91906137b0565b11156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790613856565b60405180910390fd5b6117f8611314565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fd57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600e5461189a9190613876565b6040518463ffffffff1660e01b81526004016118b89392919061414d565b6020604051808303816000875af11580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb9190614199565b505b6000600190505b82811161199b5760006001611917611c0c565b61192191906137b0565b905061192d3382611d43565b6001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461198091906137b0565b92505081905550508080611993906138b8565b915050611904565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a6b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a7b5750611a7a82612548565b5b9050919050565b611a8a611b4b565b73ffffffffffffffffffffffffffffffffffffffff16611aa8611314565b73ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614212565b60405180910390fd5b565b611b09816122ea565b611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f90613e87565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bc683611186565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806013547f00000000000000000000000000000000000000000000000000000000000009c4611c3d9190614232565b9050600080600083611c4d6125b2565b611c579190614295565b9050600060146000600187611c6c9190614232565b81526020019081526020016000205403611c9457600184611c8d9190614232565b9250611cb7565b60146000600186611ca59190614232565b81526020019081526020016000205492505b6000601460008381526020019081526020016000205403611cf257809150826014600083815260200190815260200160002081905550611d21565b601460008281526020019081526020016000205491508260146000838152602001908152602001600020819055505b60136000815480929190611d34906138b8565b91905055508194505050505090565b611d5d8282604051806020016040528060008152506125e5565b5050565b600080611d6d83611186565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611daf5750611dae81856115eb565b5b80611ded57508373ffffffffffffffffffffffffffffffffffffffff16611dd584610ab3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e1682611186565b73ffffffffffffffffffffffffffffffffffffffff1614611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6390614338565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed2906143ca565b60405180910390fd5b611ee6838383612640565b611ef1600082611b53565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f419190614232565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9891906137b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612057838383612752565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218790614436565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122819190612e99565b60405180910390a3505050565b612299848484611df6565b6122a584848484612757565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db906144c8565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546123659061362c565b80601f01602080910402602001604051908101604052809291908181526020018280546123919061362c565b80156123de5780601f106123b3576101008083540402835291602001916123de565b820191906000526020600020905b8154815290600101906020018083116123c157829003601f168201915b5050505050905090565b60606000820361242f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612543565b600082905060005b6000821461246157808061244a906138b8565b915050600a8261245a91906144e8565b9150612437565b60008167ffffffffffffffff81111561247d5761247c6132e5565b5b6040519080825280601f01601f1916602001820160405280156124af5781602001600182028036833780820191505090505b5090505b6000851461253c576001826124c89190614232565b9150600a856124d79190614295565b60306124e391906137b0565b60f81b8183815181106124f9576124f8613afc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253591906144e8565b94506124b3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600044426040516020016125c792919061453a565b6040516020818303038152906040528051906020012060001c905090565b6125ef83836128de565b6125fc6000848484612757565b61263b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612632906144c8565b60405180910390fd5b505050565b61264b838383612ab7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361268d5761268881612abc565b6126cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126cb576126ca8382612b05565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361270e5761270981612c72565b61274d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461274c5761274b8282612d43565b5b5b505050565b505050565b60006127788473ffffffffffffffffffffffffffffffffffffffff16612dc2565b156128d1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a1611b4b565b8786866040518563ffffffff1660e01b81526004016127c394939291906145bb565b6020604051808303816000875af19250505080156127ff57506040513d601f19601f820116820180604052508101906127fc919061461c565b60015b612881573d806000811461282f576040519150601f19603f3d011682016040523d82523d6000602084013e612834565b606091505b506000815103612879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612870906144c8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294490614695565b60405180910390fd5b612956816122ea565b15612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614701565b60405180910390fd5b6129a260008383612640565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f291906137b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ab360008383612752565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b1284611237565b612b1c9190614232565b9050600060076000848152602001908152602001600020549050818114612c01576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c869190614232565b9050600060096000848152602001908152602001600020549050600060088381548110612cb657612cb5613afc565b5b906000526020600020015490508060088381548110612cd857612cd7613afc565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d2757612d26614721565b5b6001900381819060005260206000200160009055905550505050565b6000612d4e83611237565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2e81612df9565b8114612e3957600080fd5b50565b600081359050612e4b81612e25565b92915050565b600060208284031215612e6757612e66612def565b5b6000612e7584828501612e3c565b91505092915050565b60008115159050919050565b612e9381612e7e565b82525050565b6000602082019050612eae6000830184612e8a565b92915050565b612ebd81612e7e565b8114612ec857600080fd5b50565b600081359050612eda81612eb4565b92915050565b600060208284031215612ef657612ef5612def565b5b6000612f0484828501612ecb565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f3882612f0d565b9050919050565b612f4881612f2d565b8114612f5357600080fd5b50565b600081359050612f6581612f3f565b92915050565b600060208284031215612f8157612f80612def565b5b6000612f8f84828501612f56565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fd2578082015181840152602081019050612fb7565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ffa82612f98565b6130048185612fa3565b9350613014818560208601612fb4565b61301d81612fde565b840191505092915050565b600060208201905081810360008301526130428184612fef565b905092915050565b6000819050919050565b61305d8161304a565b811461306857600080fd5b50565b60008135905061307a81613054565b92915050565b60006020828403121561309657613095612def565b5b60006130a48482850161306b565b91505092915050565b6130b681612f2d565b82525050565b60006020820190506130d160008301846130ad565b92915050565b600080604083850312156130ee576130ed612def565b5b60006130fc85828601612f56565b925050602061310d8582860161306b565b9150509250929050565b6131208161304a565b82525050565b600060208201905061313b6000830184613117565b92915050565b60008060006060848603121561315a57613159612def565b5b600061316886828701612f56565b935050602061317986828701612f56565b925050604061318a8682870161306b565b9150509250925092565b600061ffff82169050919050565b6131ab81613194565b81146131b657600080fd5b50565b6000813590506131c8816131a2565b92915050565b6000602082840312156131e4576131e3612def565b5b60006131f2848285016131b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132308161304a565b82525050565b60006132428383613227565b60208301905092915050565b6000602082019050919050565b6000613266826131fb565b6132708185613206565b935061327b83613217565b8060005b838110156132ac5781516132938882613236565b975061329e8361324e565b92505060018101905061327f565b5085935050505092915050565b600060208201905081810360008301526132d3818461325b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61331d82612fde565b810181811067ffffffffffffffff8211171561333c5761333b6132e5565b5b80604052505050565b600061334f612de5565b905061335b8282613314565b919050565b600067ffffffffffffffff82111561337b5761337a6132e5565b5b61338482612fde565b9050602081019050919050565b82818337600083830152505050565b60006133b36133ae84613360565b613345565b9050828152602081018484840111156133cf576133ce6132e0565b5b6133da848285613391565b509392505050565b600082601f8301126133f7576133f66132db565b5b81356134078482602086016133a0565b91505092915050565b60006020828403121561342657613425612def565b5b600082013567ffffffffffffffff81111561344457613443612df4565b5b613450848285016133e2565b91505092915050565b600080604083850312156134705761346f612def565b5b600061347e85828601612f56565b925050602061348f85828601612ecb565b9150509250929050565b600067ffffffffffffffff8211156134b4576134b36132e5565b5b6134bd82612fde565b9050602081019050919050565b60006134dd6134d884613499565b613345565b9050828152602081018484840111156134f9576134f86132e0565b5b613504848285613391565b509392505050565b600082601f830112613521576135206132db565b5b81356135318482602086016134ca565b91505092915050565b6000806000806080858703121561355457613553612def565b5b600061356287828801612f56565b945050602061357387828801612f56565b93505060406135848782880161306b565b925050606085013567ffffffffffffffff8111156135a5576135a4612df4565b5b6135b18782880161350c565b91505092959194509250565b600080604083850312156135d4576135d3612def565b5b60006135e285828601612f56565b92505060206135f385828601612f56565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061364457607f821691505b602082108103613657576136566135fd565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136b9602183612fa3565b91506136c48261365d565b604082019050919050565b600060208201905081810360008301526136e8816136ac565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061374b603e83612fa3565b9150613756826136ef565b604082019050919050565b6000602082019050818103600083015261377a8161373e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137bb8261304a565b91506137c68361304a565b92508282019050808211156137de576137dd613781565b5b92915050565b7f596f752061726520747279696e6720746f206d696e74206d6f7265204e46547360008201527f207468616e20616c6c6f77656400000000000000000000000000000000000000602082015250565b6000613840602d83612fa3565b915061384b826137e4565b604082019050919050565b6000602082019050818103600083015261386f81613833565b9050919050565b60006138818261304a565b915061388c8361304a565b925082820261389a8161304a565b915082820484148315176138b1576138b0613781565b5b5092915050565b60006138c38261304a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138f5576138f4613781565b5b600182019050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061395c602e83612fa3565b915061396782613900565b604082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006139ee602b83612fa3565b91506139f982613992565b604082019050919050565b60006020820190508181036000830152613a1d816139e1565b9050919050565b7f526f79616c7479206d757374206265206c6f776572207468616e206f7220657160008201527f75616c20746f2038250000000000000000000000000000000000000000000000602082015250565b6000613a80602983612fa3565b9150613a8b82613a24565b604082019050919050565b60006020820190508181036000830152613aaf81613a73565b9050919050565b600081905092915050565b50565b6000613ad1600083613ab6565b9150613adc82613ac1565b600082019050919050565b6000613af282613ac4565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613b87602c83612fa3565b9150613b9282613b2b565b604082019050919050565b60006020820190508181036000830152613bb681613b7a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c1f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613be2565b613c298683613be2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c66613c61613c5c8461304a565b613c41565b61304a565b9050919050565b6000819050919050565b613c8083613c4b565b613c94613c8c82613c6d565b848454613bef565b825550505050565b600090565b613ca9613c9c565b613cb4818484613c77565b505050565b5b81811015613cd857613ccd600082613ca1565b600181019050613cba565b5050565b601f821115613d1d57613cee81613bbd565b613cf784613bd2565b81016020851015613d06578190505b613d1a613d1285613bd2565b830182613cb9565b50505b505050565b600082821c905092915050565b6000613d4060001984600802613d22565b1980831691505092915050565b6000613d598383613d2f565b9150826002028217905092915050565b613d7282612f98565b67ffffffffffffffff811115613d8b57613d8a6132e5565b5b613d95825461362c565b613da0828285613cdc565b600060209050601f831160018114613dd35760008415613dc1578287015190505b613dcb8582613d4d565b865550613e33565b601f198416613de186613bbd565b60005b82811015613e0957848901518255600182019150602085019450602081019050613de4565b86831015613e265784890151613e22601f891682613d2f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613e71601883612fa3565b9150613e7c82613e3b565b602082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613f03602983612fa3565b9150613f0e82613ea7565b604082019050919050565b60006020820190508181036000830152613f3281613ef6565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f95602f83612fa3565b9150613fa082613f39565b604082019050919050565b60006020820190508181036000830152613fc481613f88565b9050919050565b600081905092915050565b6000613fe182612f98565b613feb8185613fcb565b9350613ffb818560208601612fb4565b80840191505092915050565b600081546140148161362c565b61401e8186613fcb565b94506001821660008114614039576001811461404e57614081565b60ff1983168652811515820286019350614081565b61405785613bbd565b60005b838110156140795781548189015260018201915060208101905061405a565b838801955050505b50505092915050565b60006140968286613fd6565b91506140a28285613fd6565b91506140ae8284614007565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614117602683612fa3565b9150614122826140bb565b604082019050919050565b600060208201905081810360008301526141468161410a565b9050919050565b600060608201905061416260008301866130ad565b61416f60208301856130ad565b61417c6040830184613117565b949350505050565b60008151905061419381612eb4565b92915050565b6000602082840312156141af576141ae612def565b5b60006141bd84828501614184565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141fc602083612fa3565b9150614207826141c6565b602082019050919050565b6000602082019050818103600083015261422b816141ef565b9050919050565b600061423d8261304a565b91506142488361304a565b92508282039050818111156142605761425f613781565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142a08261304a565b91506142ab8361304a565b9250826142bb576142ba614266565b5b828206905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614322602583612fa3565b915061432d826142c6565b604082019050919050565b6000602082019050818103600083015261435181614315565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143b4602483612fa3565b91506143bf82614358565b604082019050919050565b600060208201905081810360008301526143e3816143a7565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614420601983612fa3565b915061442b826143ea565b602082019050919050565b6000602082019050818103600083015261444f81614413565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006144b2603283612fa3565b91506144bd82614456565b604082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b60006144f38261304a565b91506144fe8361304a565b92508261450e5761450d614266565b5b828204905092915050565b6000819050919050565b61453461452f8261304a565b614519565b82525050565b60006145468285614523565b6020820191506145568284614523565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061458d82614566565b6145978185614571565b93506145a7818560208601612fb4565b6145b081612fde565b840191505092915050565b60006080820190506145d060008301876130ad565b6145dd60208301866130ad565b6145ea6040830185613117565b81810360608301526145fc8184614582565b905095945050505050565b60008151905061461681612e25565b92915050565b60006020828403121561463257614631612def565b5b600061464084828501614607565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061467f602083612fa3565b915061468a82614649565b602082019050919050565b600060208201905081810360008301526146ae81614672565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006146eb601c83612fa3565b91506146f6826146b5565b602082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220073d6187fe04d701effadc1c575fa414909a5d22a5694849c6201cd595e6c49064736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a68561c0c8b103d74b83081e6ce0c3d2fd0dedb50000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656965626f657137766f75656b743264623368647a357479343634667562677132796a7a6c677975723275727470366f6c376f3365712f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://bafybeieboeq7vouekt2db3hdz5ty464fubgq2yjzlgyur2urtp6ol7o3eq/
Arg [1] : ukrownAddress (address): 0xa68561c0c8B103d74B83081E6ce0c3d2Fd0DeDb5
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a68561c0c8b103d74b83081e6ce0c3d2fd0dedb5
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [3] : 697066733a2f2f6261667962656965626f657137766f75656b74326462336864
Arg [4] : 7a357479343634667562677132796a7a6c677975723275727470366f6c376f33
Arg [5] : 65712f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
51909:5488:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44755:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56771:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56958:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31489:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33002:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32519:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52103:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45395:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54858:643;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52282:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33702:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53055:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52174:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45063:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57080:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57249:145;;;:::i;:::-;;34109:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55507:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56219:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45585:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56539:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52421:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31200:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30931:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9132:103;;;;;;;;;;;;;:::i;:::-;;56415:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8484:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31658:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56854:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33245:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53004:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34365:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52052:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55843:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56305:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52246:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56643:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33471:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9390:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54158:694;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44755:224;44857:4;44896:35;44881:50;;;:11;:50;;;;:90;;;;44935:36;44959:11;44935:23;:36::i;:::-;44881:90;44874:97;;44755:224;;;:::o;56771:73::-;8370:13;:11;:13::i;:::-;56832:6:::1;56823;;:15;;;;;;;;;;;;;;;;;;56771:73:::0;:::o;56958:116::-;8370:13;:11;:13::i;:::-;57053:15:::1;57036:14;;:32;;;;;;;;;;;;;;;;;;56958:116:::0;:::o;31489:100::-;31543:13;31576:5;31569:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31489:100;:::o;33002:171::-;33078:7;33098:23;33113:7;33098:14;:23::i;:::-;33141:15;:24;33157:7;33141:24;;;;;;;;;;;;;;;;;;;;;33134:31;;33002:171;;;:::o;32519:417::-;32600:13;32616:23;32631:7;32616:14;:23::i;:::-;32600:39;;32664:5;32658:11;;:2;:11;;;32650:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32758:5;32742:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32767:37;32784:5;32791:12;:10;:12::i;:::-;32767:16;:37::i;:::-;32742:62;32720:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;32907:21;32916:2;32920:7;32907:8;:21::i;:::-;32589:347;32519:417;;:::o;52103:30::-;;;;:::o;45395:113::-;45456:7;45483:10;:17;;;;45476:24;;45395:113;:::o;54858:643::-;54917:14;54934:13;:11;:13::i;:::-;54917:30;;54963:6;;;;;;;;;;;54962:7;54954:16;;;;;;54999:1;54985:11;:15;54977:24;;;;;;55031:13;;55016:11;:28;;55008:37;;;;;;55084:9;;55069:11;55060:6;:20;;;;:::i;:::-;:33;;55052:42;;;;;;55154:13;;55139:11;55109:8;:20;55118:10;55109:20;;;;;;;;;;;;;;;:27;;;:41;;;;:::i;:::-;:58;;55101:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;55245:7;:5;:7::i;:::-;55231:21;;:10;:21;;;55227:84;;55291:11;55284:4;;:18;;;;:::i;:::-;55271:9;:31;;55263:40;;;;;;55227:84;55324:9;55336:1;55324:13;;55319:177;55344:11;55339:1;:16;55319:177;;55371:12;55407:1;55386:18;:16;:18::i;:::-;:22;;;;:::i;:::-;55371:37;;55417:30;55427:10;55439:7;55417:9;:30::i;:::-;55487:1;55456:8;:20;55465:10;55456:20;;;;;;;;;;;;;;;:27;;;:32;;;;;;;:::i;:::-;;;;;;;;55362:134;55357:3;;;;;:::i;:::-;;;;55319:177;;;;54910:591;54858:643;:::o;52282:33::-;;;;:::o;33702:336::-;33897:41;33916:12;:10;:12::i;:::-;33930:7;33897:18;:41::i;:::-;33889:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34002:28;34012:4;34018:2;34022:7;34002:9;:28::i;:::-;33702:336;;;:::o;53055:25::-;;;;:::o;52174:39::-;;;;:::o;45063:256::-;45160:7;45196:23;45213:5;45196:16;:23::i;:::-;45188:5;:31;45180:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45285:12;:19;45298:5;45285:19;;;;;;;;;;;;;;;:26;45305:5;45285:26;;;;;;;;;;;;45278:33;;45063:256;;;;:::o;57080:163::-;8370:13;:11;:13::i;:::-;57163:3:::1;57151:8;:15;;;;57143:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;57229:8;57219:18;;:7;:18;;;;57080:163:::0;:::o;57249:145::-;8370:13;:11;:13::i;:::-;57302:7:::1;57323;:5;:7::i;:::-;57315:21;;57344;57315:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57301:69;;;57385:2;57377:11;;;::::0;::::1;;57294:100;57249:145::o:0;34109:185::-;34247:39;34264:4;34270:2;34274:7;34247:39;;;;;;;;;;;;:16;:39::i;:::-;34109:185;;;:::o;55507:330::-;55567:16;55592:23;55618:17;55628:6;55618:9;:17::i;:::-;55592:43;;55642:25;55684:15;55670:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55642:58;;55712:9;55707:103;55727:15;55723:1;:19;55707:103;;;55772:30;55792:6;55800:1;55772:19;:30::i;:::-;55758:8;55767:1;55758:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;55744:3;;;;;:::i;:::-;;;;55707:103;;;;55823:8;55816:15;;;;55507:330;;;:::o;56219:80::-;8370:13;:11;:13::i;:::-;56285:8:::1;56278:4;:15;;;;56219:80:::0;:::o;45585:233::-;45660:7;45696:30;:28;:30::i;:::-;45688:5;:38;45680:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;45793:10;45804:5;45793:17;;;;;;;;:::i;:::-;;;;;;;;;;45786:24;;45585:233;;;:::o;56539:98::-;8370:13;:11;:13::i;:::-;56620:11:::1;56610:7;:21;;;;;;:::i;:::-;;56539:98:::0;:::o;52421:25::-;;;;;;;;;;;;;:::o;31200:222::-;31272:7;31292:13;31308:7;:16;31316:7;31308:16;;;;;;;;;;;;;;;;;;;;;31292:32;;31360:1;31343:19;;:5;:19;;;31335:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31409:5;31402:12;;;31200:222;;;:::o;30931:207::-;31003:7;31048:1;31031:19;;:5;:19;;;31023:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31114:9;:16;31124:5;31114:16;;;;;;;;;;;;;;;;31107:23;;30931:207;;;:::o;9132:103::-;8370:13;:11;:13::i;:::-;9197:30:::1;9224:1;9197:18;:30::i;:::-;9132:103::o:0;56415:116::-;8370:13;:11;:13::i;:::-;56508:17:::1;56492:13;:33;;;;56415:116:::0;:::o;8484:87::-;8530:7;8557:6;;;;;;;;;;;8550:13;;8484:87;:::o;31658:104::-;31714:13;31747:7;31740:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31658:104;:::o;56854:98::-;8370:13;:11;:13::i;:::-;56941:5:::1;56925:13;:21;;;;56854:98:::0;:::o;33245:155::-;33340:52;33359:12;:10;:12::i;:::-;33373:8;33383;33340:18;:52::i;:::-;33245:155;;:::o;53004:42::-;;;;;;;;;;;;;:::o;34365:323::-;34539:41;34558:12;:10;:12::i;:::-;34572:7;34539:18;:41::i;:::-;34531:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34642:38;34656:4;34662:2;34666:7;34675:4;34642:13;:38::i;:::-;34365:323;;;;:::o;52052:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;55843:368::-;55916:13;55946:16;55954:7;55946;:16::i;:::-;55938:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;56021:28;56052:10;:8;:10::i;:::-;56021:41;;56107:1;56082:14;56076:28;:32;:129;;;;;;;;;;;;;;;;;56142:14;56158:18;:7;:16;:18::i;:::-;56178:13;56125:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56076:129;56069:136;;;55843:368;;;:::o;56305:104::-;8370:13;:11;:13::i;:::-;56389:14:::1;56376:10;:27;;;;56305:104:::0;:::o;52246:31::-;;;;:::o;56643:122::-;8370:13;:11;:13::i;:::-;56742:17:::1;56726:13;:33;;;;;;:::i;:::-;;56643:122:::0;:::o;33471:164::-;33568:4;33592:18;:25;33611:5;33592:25;;;;;;;;;;;;;;;:35;33618:8;33592:35;;;;;;;;;;;;;;;;;;;;;;;;;33585:42;;33471:164;;;;:::o;9390:201::-;8370:13;:11;:13::i;:::-;9499:1:::1;9479:22;;:8;:22;;::::0;9471:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9555:28;9574:8;9555:18;:28::i;:::-;9390:201:::0;:::o;54158:694::-;54213:14;54230:13;:11;:13::i;:::-;54213:30;;54259:6;;;;;;;;;;;54258:7;54250:16;;;;;;54295:1;54281:11;:15;54273:24;;;;;;54327:13;;54312:11;:28;;54304:37;;;;;;54380:9;;54365:11;54356:6;:20;;;;:::i;:::-;:33;;54348:42;;;;;;54450:13;;54435:11;54405:8;:20;54414:10;54405:20;;;;;;;;;;;;;;;:27;;;:41;;;;:::i;:::-;:58;;54397:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;54541:7;:5;:7::i;:::-;54527:21;;:10;:21;;;54523:139;;54566:14;;;;;;;;;;;54559:35;;;54595:10;54615:11;;;;;;;;;;;54642;54629:10;;:24;;;;:::i;:::-;54559:95;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54523:139;54675:9;54687:1;54675:13;;54670:177;54695:11;54690:1;:16;54670:177;;54722:12;54758:1;54737:18;:16;:18::i;:::-;:22;;;;:::i;:::-;54722:37;;54768:30;54778:10;54790:7;54768:9;:30::i;:::-;54838:1;54807:8;:20;54816:10;54807:20;;;;;;;;;;;;;;;:27;;;:32;;;;;;;:::i;:::-;;;;;;;;54713:134;54708:3;;;;;:::i;:::-;;;;54670:177;;;;54206:646;54158:694;:::o;30562:305::-;30664:4;30716:25;30701:40;;;:11;:40;;;;:105;;;;30773:33;30758:48;;;:11;:48;;;;30701:105;:158;;;;30823:36;30847:11;30823:23;:36::i;:::-;30701:158;30681:178;;30562:305;;;:::o;8649:132::-;8724:12;:10;:12::i;:::-;8713:23;;:7;:5;:7::i;:::-;:23;;;8705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8649:132::o;40977:135::-;41059:16;41067:7;41059;:16::i;:::-;41051:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40977:135;:::o;7035:98::-;7088:7;7115:10;7108:17;;7035:98;:::o;40256:174::-;40358:2;40331:15;:24;40347:7;40331:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40414:7;40410:2;40376:46;;40385:23;40400:7;40385:14;:23::i;:::-;40376:46;;;;;;;;;;;;40256:174;;:::o;53438:558::-;53492:7;53508:13;53536:11;;53524:9;:23;;;;:::i;:::-;53508:39;;53554:12;53573:14;53594:9;53623:5;53606:14;:12;:14::i;:::-;:22;;;;:::i;:::-;53594:34;;53667:1;53641:11;:22;53661:1;53653:5;:9;;;;:::i;:::-;53641:22;;;;;;;;;;;;:27;53637:122;;53696:1;53688:5;:9;;;;:::i;:::-;53681:16;;53637:122;;;53729:11;:22;53749:1;53741:5;:9;;;;:::i;:::-;53729:22;;;;;;;;;;;;53722:29;;53637:122;53791:1;53773:11;:14;53785:1;53773:14;;;;;;;;;;;;:19;53769:178;;53816:1;53807:10;;53847:4;53830:11;:14;53842:1;53830:14;;;;;;;;;;;:21;;;;53769:178;;;53889:11;:14;53901:1;53889:14;;;;;;;;;;;;53880:23;;53933:4;53916:11;:14;53928:1;53916:14;;;;;;;;;;;:21;;;;53769:178;53955:11;;:13;;;;;;;;;:::i;:::-;;;;;;53984:6;53977:13;;;;;;53438:558;:::o;37095:110::-;37171:26;37181:2;37185:7;37171:26;;;;;;;;;;;;:9;:26::i;:::-;37095:110;;:::o;36489:264::-;36582:4;36599:13;36615:23;36630:7;36615:14;:23::i;:::-;36599:39;;36668:5;36657:16;;:7;:16;;;:52;;;;36677:32;36694:5;36701:7;36677:16;:32::i;:::-;36657:52;:87;;;;36737:7;36713:31;;:20;36725:7;36713:11;:20::i;:::-;:31;;;36657:87;36649:96;;;36489:264;;;;:::o;39512:625::-;39671:4;39644:31;;:23;39659:7;39644:14;:23::i;:::-;:31;;;39636:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39750:1;39736:16;;:2;:16;;;39728:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39806:39;39827:4;39833:2;39837:7;39806:20;:39::i;:::-;39910:29;39927:1;39931:7;39910:8;:29::i;:::-;39971:1;39952:9;:15;39962:4;39952:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40000:1;39983:9;:13;39993:2;39983:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40031:2;40012:7;:16;40020:7;40012:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40070:7;40066:2;40051:27;;40060:4;40051:27;;;;;;;;;;;;40091:38;40111:4;40117:2;40121:7;40091:19;:38::i;:::-;39512:625;;;:::o;9751:191::-;9825:16;9844:6;;;;;;;;;;;9825:25;;9870:8;9861:6;;:17;;;;;;;;;;;;;;;;;;9925:8;9894:40;;9915:8;9894:40;;;;;;;;;;;;9814:128;9751:191;:::o;40573:315::-;40728:8;40719:17;;:5;:17;;;40711:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40815:8;40777:18;:25;40796:5;40777:25;;;;;;;;;;;;;;;:35;40803:8;40777:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40861:8;40839:41;;40854:5;40839:41;;;40871:8;40839:41;;;;;;:::i;:::-;;;;;;;;40573:315;;;:::o;35569:313::-;35725:28;35735:4;35741:2;35745:7;35725:9;:28::i;:::-;35772:47;35795:4;35801:2;35805:7;35814:4;35772:22;:47::i;:::-;35764:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35569:313;;;;:::o;36195:127::-;36260:4;36312:1;36284:30;;:7;:16;36292:7;36284:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36277:37;;36195:127;;;:::o;53328:102::-;53388:13;53417:7;53410:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53328:102;:::o;4289:723::-;4345:13;4575:1;4566:5;:10;4562:53;;4593:10;;;;;;;;;;;;;;;;;;;;;4562:53;4625:12;4640:5;4625:20;;4656:14;4681:78;4696:1;4688:4;:9;4681:78;;4714:8;;;;;:::i;:::-;;;;4745:2;4737:10;;;;;:::i;:::-;;;4681:78;;;4769:19;4801:6;4791:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4769:39;;4819:154;4835:1;4826:5;:10;4819:154;;4863:1;4853:11;;;;;:::i;:::-;;;4930:2;4922:5;:10;;;;:::i;:::-;4909:2;:24;;;;:::i;:::-;4896:39;;4879:6;4886;4879:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4959:2;4950:11;;;;;:::i;:::-;;;4819:154;;;4997:6;4983:21;;;;;4289:723;;;;:::o;22236:157::-;22321:4;22360:25;22345:40;;;:11;:40;;;;22338:47;;22236:157;;;:::o;54002:149::-;54049:7;54109:16;54127:15;54092:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54082:62;;;;;;54074:71;;54067:78;;54002:149;:::o;37432:319::-;37561:18;37567:2;37571:7;37561:5;:18::i;:::-;37612:53;37643:1;37647:2;37651:7;37660:4;37612:22;:53::i;:::-;37590:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;37432:319;;;:::o;46431:589::-;46575:45;46602:4;46608:2;46612:7;46575:26;:45::i;:::-;46653:1;46637:18;;:4;:18;;;46633:187;;46672:40;46704:7;46672:31;:40::i;:::-;46633:187;;;46742:2;46734:10;;:4;:10;;;46730:90;;46761:47;46794:4;46800:7;46761:32;:47::i;:::-;46730:90;46633:187;46848:1;46834:16;;:2;:16;;;46830:183;;46867:45;46904:7;46867:36;:45::i;:::-;46830:183;;;46940:4;46934:10;;:2;:10;;;46930:83;;46961:40;46989:2;46993:7;46961:27;:40::i;:::-;46930:83;46830:183;46431:589;;;:::o;43612:125::-;;;;:::o;41676:853::-;41830:4;41851:15;:2;:13;;;:15::i;:::-;41847:675;;;41903:2;41887:36;;;41924:12;:10;:12::i;:::-;41938:4;41944:7;41953:4;41887:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41883:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42145:1;42128:6;:13;:18;42124:328;;42171:60;;;;;;;;;;:::i;:::-;;;;;;;;42124:328;42402:6;42396:13;42387:6;42383:2;42379:15;42372:38;41883:584;42019:41;;;42009:51;;;:6;:51;;;;42002:58;;;;;41847:675;42506:4;42499:11;;41676:853;;;;;;;:::o;38087:439::-;38181:1;38167:16;;:2;:16;;;38159:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38240:16;38248:7;38240;:16::i;:::-;38239:17;38231:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38302:45;38331:1;38335:2;38339:7;38302:20;:45::i;:::-;38377:1;38360:9;:13;38370:2;38360:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38408:2;38389:7;:16;38397:7;38389:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38453:7;38449:2;38428:33;;38445:1;38428:33;;;;;;;;;;;;38474:44;38502:1;38506:2;38510:7;38474:19;:44::i;:::-;38087:439;;:::o;43101:126::-;;;;:::o;47743:164::-;47847:10;:17;;;;47820:15;:24;47836:7;47820:24;;;;;;;;;;;:44;;;;47875:10;47891:7;47875:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47743:164;:::o;48534:988::-;48800:22;48850:1;48825:22;48842:4;48825:16;:22::i;:::-;:26;;;;:::i;:::-;48800:51;;48862:18;48883:17;:26;48901:7;48883:26;;;;;;;;;;;;48862:47;;49030:14;49016:10;:28;49012:328;;49061:19;49083:12;:18;49096:4;49083:18;;;;;;;;;;;;;;;:34;49102:14;49083:34;;;;;;;;;;;;49061:56;;49167:11;49134:12;:18;49147:4;49134:18;;;;;;;;;;;;;;;:30;49153:10;49134:30;;;;;;;;;;;:44;;;;49284:10;49251:17;:30;49269:11;49251:30;;;;;;;;;;;:43;;;;49046:294;49012:328;49436:17;:26;49454:7;49436:26;;;;;;;;;;;49429:33;;;49480:12;:18;49493:4;49480:18;;;;;;;;;;;;;;;:34;49499:14;49480:34;;;;;;;;;;;49473:41;;;48615:907;;48534:988;;:::o;49817:1079::-;50070:22;50115:1;50095:10;:17;;;;:21;;;;:::i;:::-;50070:46;;50127:18;50148:15;:24;50164:7;50148:24;;;;;;;;;;;;50127:45;;50499:19;50521:10;50532:14;50521:26;;;;;;;;:::i;:::-;;;;;;;;;;50499:48;;50585:11;50560:10;50571;50560:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;50696:10;50665:15;:28;50681:11;50665:28;;;;;;;;;;;:41;;;;50837:15;:24;50853:7;50837:24;;;;;;;;;;;50830:31;;;50872:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49888:1008;;;49817:1079;:::o;47321:221::-;47406:14;47423:20;47440:2;47423:16;:20::i;:::-;47406:37;;47481:7;47454:12;:16;47467:2;47454:16;;;;;;;;;;;;;;;:24;47471:6;47454:24;;;;;;;;;;;:34;;;;47528:6;47499:17;:26;47517:7;47499:26;;;;;;;;;;;:35;;;;47395:147;47321:221;;:::o;11182:326::-;11242:4;11499:1;11477:7;:19;;;:23;11470:30;;11182:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:126::-;2145:7;2185:42;2178:5;2174:54;2163:65;;2108:126;;;:::o;2240:96::-;2277:7;2306:24;2324:5;2306:24;:::i;:::-;2295:35;;2240:96;;;:::o;2342:122::-;2415:24;2433:5;2415:24;:::i;:::-;2408:5;2405:35;2395:63;;2454:1;2451;2444:12;2395:63;2342:122;:::o;2470:139::-;2516:5;2554:6;2541:20;2532:29;;2570:33;2597:5;2570:33;:::i;:::-;2470:139;;;;:::o;2615:329::-;2674:6;2723:2;2711:9;2702:7;2698:23;2694:32;2691:119;;;2729:79;;:::i;:::-;2691:119;2849:1;2874:53;2919:7;2910:6;2899:9;2895:22;2874:53;:::i;:::-;2864:63;;2820:117;2615:329;;;;:::o;2950:99::-;3002:6;3036:5;3030:12;3020:22;;2950:99;;;:::o;3055:169::-;3139:11;3173:6;3168:3;3161:19;3213:4;3208:3;3204:14;3189:29;;3055:169;;;;:::o;3230:246::-;3311:1;3321:113;3335:6;3332:1;3329:13;3321:113;;;3420:1;3415:3;3411:11;3405:18;3401:1;3396:3;3392:11;3385:39;3357:2;3354:1;3350:10;3345:15;;3321:113;;;3468:1;3459:6;3454:3;3450:16;3443:27;3292:184;3230:246;;;:::o;3482:102::-;3523:6;3574:2;3570:7;3565:2;3558:5;3554:14;3550:28;3540:38;;3482:102;;;:::o;3590:377::-;3678:3;3706:39;3739:5;3706:39;:::i;:::-;3761:71;3825:6;3820:3;3761:71;:::i;:::-;3754:78;;3841:65;3899:6;3894:3;3887:4;3880:5;3876:16;3841:65;:::i;:::-;3931:29;3953:6;3931:29;:::i;:::-;3926:3;3922:39;3915:46;;3682:285;3590:377;;;;:::o;3973:313::-;4086:4;4124:2;4113:9;4109:18;4101:26;;4173:9;4167:4;4163:20;4159:1;4148:9;4144:17;4137:47;4201:78;4274:4;4265:6;4201:78;:::i;:::-;4193:86;;3973:313;;;;:::o;4292:77::-;4329:7;4358:5;4347:16;;4292:77;;;:::o;4375:122::-;4448:24;4466:5;4448:24;:::i;:::-;4441:5;4438:35;4428:63;;4487:1;4484;4477:12;4428:63;4375:122;:::o;4503:139::-;4549:5;4587:6;4574:20;4565:29;;4603:33;4630:5;4603:33;:::i;:::-;4503:139;;;;:::o;4648:329::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4882:1;4907:53;4952:7;4943:6;4932:9;4928:22;4907:53;:::i;:::-;4897:63;;4853:117;4648:329;;;;:::o;4983:118::-;5070:24;5088:5;5070:24;:::i;:::-;5065:3;5058:37;4983:118;;:::o;5107:222::-;5200:4;5238:2;5227:9;5223:18;5215:26;;5251:71;5319:1;5308:9;5304:17;5295:6;5251:71;:::i;:::-;5107:222;;;;:::o;5335:474::-;5403:6;5411;5460:2;5448:9;5439:7;5435:23;5431:32;5428:119;;;5466:79;;:::i;:::-;5428:119;5586:1;5611:53;5656:7;5647:6;5636:9;5632:22;5611:53;:::i;:::-;5601:63;;5557:117;5713:2;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5684:118;5335:474;;;;;:::o;5815:118::-;5902:24;5920:5;5902:24;:::i;:::-;5897:3;5890:37;5815:118;;:::o;5939:222::-;6032:4;6070:2;6059:9;6055:18;6047:26;;6083:71;6151:1;6140:9;6136:17;6127:6;6083:71;:::i;:::-;5939:222;;;;:::o;6167:619::-;6244:6;6252;6260;6309:2;6297:9;6288:7;6284:23;6280:32;6277:119;;;6315:79;;:::i;:::-;6277:119;6435:1;6460:53;6505:7;6496:6;6485:9;6481:22;6460:53;:::i;:::-;6450:63;;6406:117;6562:2;6588:53;6633:7;6624:6;6613:9;6609:22;6588:53;:::i;:::-;6578:63;;6533:118;6690:2;6716:53;6761:7;6752:6;6741:9;6737:22;6716:53;:::i;:::-;6706:63;;6661:118;6167:619;;;;;:::o;6792:89::-;6828:7;6868:6;6861:5;6857:18;6846:29;;6792:89;;;:::o;6887:120::-;6959:23;6976:5;6959:23;:::i;:::-;6952:5;6949:34;6939:62;;6997:1;6994;6987:12;6939:62;6887:120;:::o;7013:137::-;7058:5;7096:6;7083:20;7074:29;;7112:32;7138:5;7112:32;:::i;:::-;7013:137;;;;:::o;7156:327::-;7214:6;7263:2;7251:9;7242:7;7238:23;7234:32;7231:119;;;7269:79;;:::i;:::-;7231:119;7389:1;7414:52;7458:7;7449:6;7438:9;7434:22;7414:52;:::i;:::-;7404:62;;7360:116;7156:327;;;;:::o;7489:114::-;7556:6;7590:5;7584:12;7574:22;;7489:114;;;:::o;7609:184::-;7708:11;7742:6;7737:3;7730:19;7782:4;7777:3;7773:14;7758:29;;7609:184;;;;:::o;7799:132::-;7866:4;7889:3;7881:11;;7919:4;7914:3;7910:14;7902:22;;7799:132;;;:::o;7937:108::-;8014:24;8032:5;8014:24;:::i;:::-;8009:3;8002:37;7937:108;;:::o;8051:179::-;8120:10;8141:46;8183:3;8175:6;8141:46;:::i;:::-;8219:4;8214:3;8210:14;8196:28;;8051:179;;;;:::o;8236:113::-;8306:4;8338;8333:3;8329:14;8321:22;;8236:113;;;:::o;8385:732::-;8504:3;8533:54;8581:5;8533:54;:::i;:::-;8603:86;8682:6;8677:3;8603:86;:::i;:::-;8596:93;;8713:56;8763:5;8713:56;:::i;:::-;8792:7;8823:1;8808:284;8833:6;8830:1;8827:13;8808:284;;;8909:6;8903:13;8936:63;8995:3;8980:13;8936:63;:::i;:::-;8929:70;;9022:60;9075:6;9022:60;:::i;:::-;9012:70;;8868:224;8855:1;8852;8848:9;8843:14;;8808:284;;;8812:14;9108:3;9101:10;;8509:608;;;8385:732;;;;:::o;9123:373::-;9266:4;9304:2;9293:9;9289:18;9281:26;;9353:9;9347:4;9343:20;9339:1;9328:9;9324:17;9317:47;9381:108;9484:4;9475:6;9381:108;:::i;:::-;9373:116;;9123:373;;;;:::o;9502:117::-;9611:1;9608;9601:12;9625:117;9734:1;9731;9724:12;9748:180;9796:77;9793:1;9786:88;9893:4;9890:1;9883:15;9917:4;9914:1;9907:15;9934:281;10017:27;10039:4;10017:27;:::i;:::-;10009:6;10005:40;10147:6;10135:10;10132:22;10111:18;10099:10;10096:34;10093:62;10090:88;;;10158:18;;:::i;:::-;10090:88;10198:10;10194:2;10187:22;9977:238;9934:281;;:::o;10221:129::-;10255:6;10282:20;;:::i;:::-;10272:30;;10311:33;10339:4;10331:6;10311:33;:::i;:::-;10221:129;;;:::o;10356:308::-;10418:4;10508:18;10500:6;10497:30;10494:56;;;10530:18;;:::i;:::-;10494:56;10568:29;10590:6;10568:29;:::i;:::-;10560:37;;10652:4;10646;10642:15;10634:23;;10356:308;;;:::o;10670:146::-;10767:6;10762:3;10757;10744:30;10808:1;10799:6;10794:3;10790:16;10783:27;10670:146;;;:::o;10822:425::-;10900:5;10925:66;10941:49;10983:6;10941:49;:::i;:::-;10925:66;:::i;:::-;10916:75;;11014:6;11007:5;11000:21;11052:4;11045:5;11041:16;11090:3;11081:6;11076:3;11072:16;11069:25;11066:112;;;11097:79;;:::i;:::-;11066:112;11187:54;11234:6;11229:3;11224;11187:54;:::i;:::-;10906:341;10822:425;;;;;:::o;11267:340::-;11323:5;11372:3;11365:4;11357:6;11353:17;11349:27;11339:122;;11380:79;;:::i;:::-;11339:122;11497:6;11484:20;11522:79;11597:3;11589:6;11582:4;11574:6;11570:17;11522:79;:::i;:::-;11513:88;;11329:278;11267:340;;;;:::o;11613:509::-;11682:6;11731:2;11719:9;11710:7;11706:23;11702:32;11699:119;;;11737:79;;:::i;:::-;11699:119;11885:1;11874:9;11870:17;11857:31;11915:18;11907:6;11904:30;11901:117;;;11937:79;;:::i;:::-;11901:117;12042:63;12097:7;12088:6;12077:9;12073:22;12042:63;:::i;:::-;12032:73;;11828:287;11613:509;;;;:::o;12128:468::-;12193:6;12201;12250:2;12238:9;12229:7;12225:23;12221:32;12218:119;;;12256:79;;:::i;:::-;12218:119;12376:1;12401:53;12446:7;12437:6;12426:9;12422:22;12401:53;:::i;:::-;12391:63;;12347:117;12503:2;12529:50;12571:7;12562:6;12551:9;12547:22;12529:50;:::i;:::-;12519:60;;12474:115;12128:468;;;;;:::o;12602:307::-;12663:4;12753:18;12745:6;12742:30;12739:56;;;12775:18;;:::i;:::-;12739:56;12813:29;12835:6;12813:29;:::i;:::-;12805:37;;12897:4;12891;12887:15;12879:23;;12602:307;;;:::o;12915:423::-;12992:5;13017:65;13033:48;13074:6;13033:48;:::i;:::-;13017:65;:::i;:::-;13008:74;;13105:6;13098:5;13091:21;13143:4;13136:5;13132:16;13181:3;13172:6;13167:3;13163:16;13160:25;13157:112;;;13188:79;;:::i;:::-;13157:112;13278:54;13325:6;13320:3;13315;13278:54;:::i;:::-;12998:340;12915:423;;;;;:::o;13357:338::-;13412:5;13461:3;13454:4;13446:6;13442:17;13438:27;13428:122;;13469:79;;:::i;:::-;13428:122;13586:6;13573:20;13611:78;13685:3;13677:6;13670:4;13662:6;13658:17;13611:78;:::i;:::-;13602:87;;13418:277;13357:338;;;;:::o;13701:943::-;13796:6;13804;13812;13820;13869:3;13857:9;13848:7;13844:23;13840:33;13837:120;;;13876:79;;:::i;:::-;13837:120;13996:1;14021:53;14066:7;14057:6;14046:9;14042:22;14021:53;:::i;:::-;14011:63;;13967:117;14123:2;14149:53;14194:7;14185:6;14174:9;14170:22;14149:53;:::i;:::-;14139:63;;14094:118;14251:2;14277:53;14322:7;14313:6;14302:9;14298:22;14277:53;:::i;:::-;14267:63;;14222:118;14407:2;14396:9;14392:18;14379:32;14438:18;14430:6;14427:30;14424:117;;;14460:79;;:::i;:::-;14424:117;14565:62;14619:7;14610:6;14599:9;14595:22;14565:62;:::i;:::-;14555:72;;14350:287;13701:943;;;;;;;:::o;14650:474::-;14718:6;14726;14775:2;14763:9;14754:7;14750:23;14746:32;14743:119;;;14781:79;;:::i;:::-;14743:119;14901:1;14926:53;14971:7;14962:6;14951:9;14947:22;14926:53;:::i;:::-;14916:63;;14872:117;15028:2;15054:53;15099:7;15090:6;15079:9;15075:22;15054:53;:::i;:::-;15044:63;;14999:118;14650:474;;;;;:::o;15130:180::-;15178:77;15175:1;15168:88;15275:4;15272:1;15265:15;15299:4;15296:1;15289:15;15316:320;15360:6;15397:1;15391:4;15387:12;15377:22;;15444:1;15438:4;15434:12;15465:18;15455:81;;15521:4;15513:6;15509:17;15499:27;;15455:81;15583:2;15575:6;15572:14;15552:18;15549:38;15546:84;;15602:18;;:::i;:::-;15546:84;15367:269;15316:320;;;:::o;15642:220::-;15782:34;15778:1;15770:6;15766:14;15759:58;15851:3;15846:2;15838:6;15834:15;15827:28;15642:220;:::o;15868:366::-;16010:3;16031:67;16095:2;16090:3;16031:67;:::i;:::-;16024:74;;16107:93;16196:3;16107:93;:::i;:::-;16225:2;16220:3;16216:12;16209:19;;15868:366;;;:::o;16240:419::-;16406:4;16444:2;16433:9;16429:18;16421:26;;16493:9;16487:4;16483:20;16479:1;16468:9;16464:17;16457:47;16521:131;16647:4;16521:131;:::i;:::-;16513:139;;16240:419;;;:::o;16665:249::-;16805:34;16801:1;16793:6;16789:14;16782:58;16874:32;16869:2;16861:6;16857:15;16850:57;16665:249;:::o;16920:366::-;17062:3;17083:67;17147:2;17142:3;17083:67;:::i;:::-;17076:74;;17159:93;17248:3;17159:93;:::i;:::-;17277:2;17272:3;17268:12;17261:19;;16920:366;;;:::o;17292:419::-;17458:4;17496:2;17485:9;17481:18;17473:26;;17545:9;17539:4;17535:20;17531:1;17520:9;17516:17;17509:47;17573:131;17699:4;17573:131;:::i;:::-;17565:139;;17292:419;;;:::o;17717:180::-;17765:77;17762:1;17755:88;17862:4;17859:1;17852:15;17886:4;17883:1;17876:15;17903:191;17943:3;17962:20;17980:1;17962:20;:::i;:::-;17957:25;;17996:20;18014:1;17996:20;:::i;:::-;17991:25;;18039:1;18036;18032:9;18025:16;;18060:3;18057:1;18054:10;18051:36;;;18067:18;;:::i;:::-;18051:36;17903:191;;;;:::o;18100:232::-;18240:34;18236:1;18228:6;18224:14;18217:58;18309:15;18304:2;18296:6;18292:15;18285:40;18100:232;:::o;18338:366::-;18480:3;18501:67;18565:2;18560:3;18501:67;:::i;:::-;18494:74;;18577:93;18666:3;18577:93;:::i;:::-;18695:2;18690:3;18686:12;18679:19;;18338:366;;;:::o;18710:419::-;18876:4;18914:2;18903:9;18899:18;18891:26;;18963:9;18957:4;18953:20;18949:1;18938:9;18934:17;18927:47;18991:131;19117:4;18991:131;:::i;:::-;18983:139;;18710:419;;;:::o;19135:410::-;19175:7;19198:20;19216:1;19198:20;:::i;:::-;19193:25;;19232:20;19250:1;19232:20;:::i;:::-;19227:25;;19287:1;19284;19280:9;19309:30;19327:11;19309:30;:::i;:::-;19298:41;;19488:1;19479:7;19475:15;19472:1;19469:22;19449:1;19442:9;19422:83;19399:139;;19518:18;;:::i;:::-;19399:139;19183:362;19135:410;;;;:::o;19551:233::-;19590:3;19613:24;19631:5;19613:24;:::i;:::-;19604:33;;19659:66;19652:5;19649:77;19646:103;;19729:18;;:::i;:::-;19646:103;19776:1;19769:5;19765:13;19758:20;;19551:233;;;:::o;19790:::-;19930:34;19926:1;19918:6;19914:14;19907:58;19999:16;19994:2;19986:6;19982:15;19975:41;19790:233;:::o;20029:366::-;20171:3;20192:67;20256:2;20251:3;20192:67;:::i;:::-;20185:74;;20268:93;20357:3;20268:93;:::i;:::-;20386:2;20381:3;20377:12;20370:19;;20029:366;;;:::o;20401:419::-;20567:4;20605:2;20594:9;20590:18;20582:26;;20654:9;20648:4;20644:20;20640:1;20629:9;20625:17;20618:47;20682:131;20808:4;20682:131;:::i;:::-;20674:139;;20401:419;;;:::o;20826:230::-;20966:34;20962:1;20954:6;20950:14;20943:58;21035:13;21030:2;21022:6;21018:15;21011:38;20826:230;:::o;21062:366::-;21204:3;21225:67;21289:2;21284:3;21225:67;:::i;:::-;21218:74;;21301:93;21390:3;21301:93;:::i;:::-;21419:2;21414:3;21410:12;21403:19;;21062:366;;;:::o;21434:419::-;21600:4;21638:2;21627:9;21623:18;21615:26;;21687:9;21681:4;21677:20;21673:1;21662:9;21658:17;21651:47;21715:131;21841:4;21715:131;:::i;:::-;21707:139;;21434:419;;;:::o;21859:228::-;21999:34;21995:1;21987:6;21983:14;21976:58;22068:11;22063:2;22055:6;22051:15;22044:36;21859:228;:::o;22093:366::-;22235:3;22256:67;22320:2;22315:3;22256:67;:::i;:::-;22249:74;;22332:93;22421:3;22332:93;:::i;:::-;22450:2;22445:3;22441:12;22434:19;;22093:366;;;:::o;22465:419::-;22631:4;22669:2;22658:9;22654:18;22646:26;;22718:9;22712:4;22708:20;22704:1;22693:9;22689:17;22682:47;22746:131;22872:4;22746:131;:::i;:::-;22738:139;;22465:419;;;:::o;22890:147::-;22991:11;23028:3;23013:18;;22890:147;;;;:::o;23043:114::-;;:::o;23163:398::-;23322:3;23343:83;23424:1;23419:3;23343:83;:::i;:::-;23336:90;;23435:93;23524:3;23435:93;:::i;:::-;23553:1;23548:3;23544:11;23537:18;;23163:398;;;:::o;23567:379::-;23751:3;23773:147;23916:3;23773:147;:::i;:::-;23766:154;;23937:3;23930:10;;23567:379;;;:::o;23952:180::-;24000:77;23997:1;23990:88;24097:4;24094:1;24087:15;24121:4;24118:1;24111:15;24138:231;24278:34;24274:1;24266:6;24262:14;24255:58;24347:14;24342:2;24334:6;24330:15;24323:39;24138:231;:::o;24375:366::-;24517:3;24538:67;24602:2;24597:3;24538:67;:::i;:::-;24531:74;;24614:93;24703:3;24614:93;:::i;:::-;24732:2;24727:3;24723:12;24716:19;;24375:366;;;:::o;24747:419::-;24913:4;24951:2;24940:9;24936:18;24928:26;;25000:9;24994:4;24990:20;24986:1;24975:9;24971:17;24964:47;25028:131;25154:4;25028:131;:::i;:::-;25020:139;;24747:419;;;:::o;25172:141::-;25221:4;25244:3;25236:11;;25267:3;25264:1;25257:14;25301:4;25298:1;25288:18;25280:26;;25172:141;;;:::o;25319:93::-;25356:6;25403:2;25398;25391:5;25387:14;25383:23;25373:33;;25319:93;;;:::o;25418:107::-;25462:8;25512:5;25506:4;25502:16;25481:37;;25418:107;;;;:::o;25531:393::-;25600:6;25650:1;25638:10;25634:18;25673:97;25703:66;25692:9;25673:97;:::i;:::-;25791:39;25821:8;25810:9;25791:39;:::i;:::-;25779:51;;25863:4;25859:9;25852:5;25848:21;25839:30;;25912:4;25902:8;25898:19;25891:5;25888:30;25878:40;;25607:317;;25531:393;;;;;:::o;25930:60::-;25958:3;25979:5;25972:12;;25930:60;;;:::o;25996:142::-;26046:9;26079:53;26097:34;26106:24;26124:5;26106:24;:::i;:::-;26097:34;:::i;:::-;26079:53;:::i;:::-;26066:66;;25996:142;;;:::o;26144:75::-;26187:3;26208:5;26201:12;;26144:75;;;:::o;26225:269::-;26335:39;26366:7;26335:39;:::i;:::-;26396:91;26445:41;26469:16;26445:41;:::i;:::-;26437:6;26430:4;26424:11;26396:91;:::i;:::-;26390:4;26383:105;26301:193;26225:269;;;:::o;26500:73::-;26545:3;26500:73;:::o;26579:189::-;26656:32;;:::i;:::-;26697:65;26755:6;26747;26741:4;26697:65;:::i;:::-;26632:136;26579:189;;:::o;26774:186::-;26834:120;26851:3;26844:5;26841:14;26834:120;;;26905:39;26942:1;26935:5;26905:39;:::i;:::-;26878:1;26871:5;26867:13;26858:22;;26834:120;;;26774:186;;:::o;26966:543::-;27067:2;27062:3;27059:11;27056:446;;;27101:38;27133:5;27101:38;:::i;:::-;27185:29;27203:10;27185:29;:::i;:::-;27175:8;27171:44;27368:2;27356:10;27353:18;27350:49;;;27389:8;27374:23;;27350:49;27412:80;27468:22;27486:3;27468:22;:::i;:::-;27458:8;27454:37;27441:11;27412:80;:::i;:::-;27071:431;;27056:446;26966:543;;;:::o;27515:117::-;27569:8;27619:5;27613:4;27609:16;27588:37;;27515:117;;;;:::o;27638:169::-;27682:6;27715:51;27763:1;27759:6;27751:5;27748:1;27744:13;27715:51;:::i;:::-;27711:56;27796:4;27790;27786:15;27776:25;;27689:118;27638:169;;;;:::o;27812:295::-;27888:4;28034:29;28059:3;28053:4;28034:29;:::i;:::-;28026:37;;28096:3;28093:1;28089:11;28083:4;28080:21;28072:29;;27812:295;;;;:::o;28112:1395::-;28229:37;28262:3;28229:37;:::i;:::-;28331:18;28323:6;28320:30;28317:56;;;28353:18;;:::i;:::-;28317:56;28397:38;28429:4;28423:11;28397:38;:::i;:::-;28482:67;28542:6;28534;28528:4;28482:67;:::i;:::-;28576:1;28600:4;28587:17;;28632:2;28624:6;28621:14;28649:1;28644:618;;;;29306:1;29323:6;29320:77;;;29372:9;29367:3;29363:19;29357:26;29348:35;;29320:77;29423:67;29483:6;29476:5;29423:67;:::i;:::-;29417:4;29410:81;29279:222;28614:887;;28644:618;28696:4;28692:9;28684:6;28680:22;28730:37;28762:4;28730:37;:::i;:::-;28789:1;28803:208;28817:7;28814:1;28811:14;28803:208;;;28896:9;28891:3;28887:19;28881:26;28873:6;28866:42;28947:1;28939:6;28935:14;28925:24;;28994:2;28983:9;28979:18;28966:31;;28840:4;28837:1;28833:12;28828:17;;28803:208;;;29039:6;29030:7;29027:19;29024:179;;;29097:9;29092:3;29088:19;29082:26;29140:48;29182:4;29174:6;29170:17;29159:9;29140:48;:::i;:::-;29132:6;29125:64;29047:156;29024:179;29249:1;29245;29237:6;29233:14;29229:22;29223:4;29216:36;28651:611;;;28614:887;;28204:1303;;;28112:1395;;:::o;29513:174::-;29653:26;29649:1;29641:6;29637:14;29630:50;29513:174;:::o;29693:366::-;29835:3;29856:67;29920:2;29915:3;29856:67;:::i;:::-;29849:74;;29932:93;30021:3;29932:93;:::i;:::-;30050:2;30045:3;30041:12;30034:19;;29693:366;;;:::o;30065:419::-;30231:4;30269:2;30258:9;30254:18;30246:26;;30318:9;30312:4;30308:20;30304:1;30293:9;30289:17;30282:47;30346:131;30472:4;30346:131;:::i;:::-;30338:139;;30065:419;;;:::o;30490:228::-;30630:34;30626:1;30618:6;30614:14;30607:58;30699:11;30694:2;30686:6;30682:15;30675:36;30490:228;:::o;30724:366::-;30866:3;30887:67;30951:2;30946:3;30887:67;:::i;:::-;30880:74;;30963:93;31052:3;30963:93;:::i;:::-;31081:2;31076:3;31072:12;31065:19;;30724:366;;;:::o;31096:419::-;31262:4;31300:2;31289:9;31285:18;31277:26;;31349:9;31343:4;31339:20;31335:1;31324:9;31320:17;31313:47;31377:131;31503:4;31377:131;:::i;:::-;31369:139;;31096:419;;;:::o;31521:234::-;31661:34;31657:1;31649:6;31645:14;31638:58;31730:17;31725:2;31717:6;31713:15;31706:42;31521:234;:::o;31761:366::-;31903:3;31924:67;31988:2;31983:3;31924:67;:::i;:::-;31917:74;;32000:93;32089:3;32000:93;:::i;:::-;32118:2;32113:3;32109:12;32102:19;;31761:366;;;:::o;32133:419::-;32299:4;32337:2;32326:9;32322:18;32314:26;;32386:9;32380:4;32376:20;32372:1;32361:9;32357:17;32350:47;32414:131;32540:4;32414:131;:::i;:::-;32406:139;;32133:419;;;:::o;32558:148::-;32660:11;32697:3;32682:18;;32558:148;;;;:::o;32712:390::-;32818:3;32846:39;32879:5;32846:39;:::i;:::-;32901:89;32983:6;32978:3;32901:89;:::i;:::-;32894:96;;32999:65;33057:6;33052:3;33045:4;33038:5;33034:16;32999:65;:::i;:::-;33089:6;33084:3;33080:16;33073:23;;32822:280;32712:390;;;;:::o;33132:874::-;33235:3;33272:5;33266:12;33301:36;33327:9;33301:36;:::i;:::-;33353:89;33435:6;33430:3;33353:89;:::i;:::-;33346:96;;33473:1;33462:9;33458:17;33489:1;33484:166;;;;33664:1;33659:341;;;;33451:549;;33484:166;33568:4;33564:9;33553;33549:25;33544:3;33537:38;33630:6;33623:14;33616:22;33608:6;33604:35;33599:3;33595:45;33588:52;;33484:166;;33659:341;33726:38;33758:5;33726:38;:::i;:::-;33786:1;33800:154;33814:6;33811:1;33808:13;33800:154;;;33888:7;33882:14;33878:1;33873:3;33869:11;33862:35;33938:1;33929:7;33925:15;33914:26;;33836:4;33833:1;33829:12;33824:17;;33800:154;;;33983:6;33978:3;33974:16;33967:23;;33666:334;;33451:549;;33239:767;;33132:874;;;;:::o;34012:589::-;34237:3;34259:95;34350:3;34341:6;34259:95;:::i;:::-;34252:102;;34371:95;34462:3;34453:6;34371:95;:::i;:::-;34364:102;;34483:92;34571:3;34562:6;34483:92;:::i;:::-;34476:99;;34592:3;34585:10;;34012:589;;;;;;:::o;34607:225::-;34747:34;34743:1;34735:6;34731:14;34724:58;34816:8;34811:2;34803:6;34799:15;34792:33;34607:225;:::o;34838:366::-;34980:3;35001:67;35065:2;35060:3;35001:67;:::i;:::-;34994:74;;35077:93;35166:3;35077:93;:::i;:::-;35195:2;35190:3;35186:12;35179:19;;34838:366;;;:::o;35210:419::-;35376:4;35414:2;35403:9;35399:18;35391:26;;35463:9;35457:4;35453:20;35449:1;35438:9;35434:17;35427:47;35491:131;35617:4;35491:131;:::i;:::-;35483:139;;35210:419;;;:::o;35635:442::-;35784:4;35822:2;35811:9;35807:18;35799:26;;35835:71;35903:1;35892:9;35888:17;35879:6;35835:71;:::i;:::-;35916:72;35984:2;35973:9;35969:18;35960:6;35916:72;:::i;:::-;35998;36066:2;36055:9;36051:18;36042:6;35998:72;:::i;:::-;35635:442;;;;;;:::o;36083:137::-;36137:5;36168:6;36162:13;36153:22;;36184:30;36208:5;36184:30;:::i;:::-;36083:137;;;;:::o;36226:345::-;36293:6;36342:2;36330:9;36321:7;36317:23;36313:32;36310:119;;;36348:79;;:::i;:::-;36310:119;36468:1;36493:61;36546:7;36537:6;36526:9;36522:22;36493:61;:::i;:::-;36483:71;;36439:125;36226:345;;;;:::o;36577:182::-;36717:34;36713:1;36705:6;36701:14;36694:58;36577:182;:::o;36765:366::-;36907:3;36928:67;36992:2;36987:3;36928:67;:::i;:::-;36921:74;;37004:93;37093:3;37004:93;:::i;:::-;37122:2;37117:3;37113:12;37106:19;;36765:366;;;:::o;37137:419::-;37303:4;37341:2;37330:9;37326:18;37318:26;;37390:9;37384:4;37380:20;37376:1;37365:9;37361:17;37354:47;37418:131;37544:4;37418:131;:::i;:::-;37410:139;;37137:419;;;:::o;37562:194::-;37602:4;37622:20;37640:1;37622:20;:::i;:::-;37617:25;;37656:20;37674:1;37656:20;:::i;:::-;37651:25;;37700:1;37697;37693:9;37685:17;;37724:1;37718:4;37715:11;37712:37;;;37729:18;;:::i;:::-;37712:37;37562:194;;;;:::o;37762:180::-;37810:77;37807:1;37800:88;37907:4;37904:1;37897:15;37931:4;37928:1;37921:15;37948:176;37980:1;37997:20;38015:1;37997:20;:::i;:::-;37992:25;;38031:20;38049:1;38031:20;:::i;:::-;38026:25;;38070:1;38060:35;;38075:18;;:::i;:::-;38060:35;38116:1;38113;38109:9;38104:14;;37948:176;;;;:::o;38130:224::-;38270:34;38266:1;38258:6;38254:14;38247:58;38339:7;38334:2;38326:6;38322:15;38315:32;38130:224;:::o;38360:366::-;38502:3;38523:67;38587:2;38582:3;38523:67;:::i;:::-;38516:74;;38599:93;38688:3;38599:93;:::i;:::-;38717:2;38712:3;38708:12;38701:19;;38360:366;;;:::o;38732:419::-;38898:4;38936:2;38925:9;38921:18;38913:26;;38985:9;38979:4;38975:20;38971:1;38960:9;38956:17;38949:47;39013:131;39139:4;39013:131;:::i;:::-;39005:139;;38732:419;;;:::o;39157:223::-;39297:34;39293:1;39285:6;39281:14;39274:58;39366:6;39361:2;39353:6;39349:15;39342:31;39157:223;:::o;39386:366::-;39528:3;39549:67;39613:2;39608:3;39549:67;:::i;:::-;39542:74;;39625:93;39714:3;39625:93;:::i;:::-;39743:2;39738:3;39734:12;39727:19;;39386:366;;;:::o;39758:419::-;39924:4;39962:2;39951:9;39947:18;39939:26;;40011:9;40005:4;40001:20;39997:1;39986:9;39982:17;39975:47;40039:131;40165:4;40039:131;:::i;:::-;40031:139;;39758:419;;;:::o;40183:175::-;40323:27;40319:1;40311:6;40307:14;40300:51;40183:175;:::o;40364:366::-;40506:3;40527:67;40591:2;40586:3;40527:67;:::i;:::-;40520:74;;40603:93;40692:3;40603:93;:::i;:::-;40721:2;40716:3;40712:12;40705:19;;40364:366;;;:::o;40736:419::-;40902:4;40940:2;40929:9;40925:18;40917:26;;40989:9;40983:4;40979:20;40975:1;40964:9;40960:17;40953:47;41017:131;41143:4;41017:131;:::i;:::-;41009:139;;40736:419;;;:::o;41161:237::-;41301:34;41297:1;41289:6;41285:14;41278:58;41370:20;41365:2;41357:6;41353:15;41346:45;41161:237;:::o;41404:366::-;41546:3;41567:67;41631:2;41626:3;41567:67;:::i;:::-;41560:74;;41643:93;41732:3;41643:93;:::i;:::-;41761:2;41756:3;41752:12;41745:19;;41404:366;;;:::o;41776:419::-;41942:4;41980:2;41969:9;41965:18;41957:26;;42029:9;42023:4;42019:20;42015:1;42004:9;42000:17;41993:47;42057:131;42183:4;42057:131;:::i;:::-;42049:139;;41776:419;;;:::o;42201:185::-;42241:1;42258:20;42276:1;42258:20;:::i;:::-;42253:25;;42292:20;42310:1;42292:20;:::i;:::-;42287:25;;42331:1;42321:35;;42336:18;;:::i;:::-;42321:35;42378:1;42375;42371:9;42366:14;;42201:185;;;;:::o;42392:79::-;42431:7;42460:5;42449:16;;42392:79;;;:::o;42477:157::-;42582:45;42602:24;42620:5;42602:24;:::i;:::-;42582:45;:::i;:::-;42577:3;42570:58;42477:157;;:::o;42640:397::-;42780:3;42795:75;42866:3;42857:6;42795:75;:::i;:::-;42895:2;42890:3;42886:12;42879:19;;42908:75;42979:3;42970:6;42908:75;:::i;:::-;43008:2;43003:3;42999:12;42992:19;;43028:3;43021:10;;42640:397;;;;;:::o;43043:98::-;43094:6;43128:5;43122:12;43112:22;;43043:98;;;:::o;43147:168::-;43230:11;43264:6;43259:3;43252:19;43304:4;43299:3;43295:14;43280:29;;43147:168;;;;:::o;43321:373::-;43407:3;43435:38;43467:5;43435:38;:::i;:::-;43489:70;43552:6;43547:3;43489:70;:::i;:::-;43482:77;;43568:65;43626:6;43621:3;43614:4;43607:5;43603:16;43568:65;:::i;:::-;43658:29;43680:6;43658:29;:::i;:::-;43653:3;43649:39;43642:46;;43411:283;43321:373;;;;:::o;43700:640::-;43895:4;43933:3;43922:9;43918:19;43910:27;;43947:71;44015:1;44004:9;44000:17;43991:6;43947:71;:::i;:::-;44028:72;44096:2;44085:9;44081:18;44072:6;44028:72;:::i;:::-;44110;44178:2;44167:9;44163:18;44154:6;44110:72;:::i;:::-;44229:9;44223:4;44219:20;44214:2;44203:9;44199:18;44192:48;44257:76;44328:4;44319:6;44257:76;:::i;:::-;44249:84;;43700:640;;;;;;;:::o;44346:141::-;44402:5;44433:6;44427:13;44418:22;;44449:32;44475:5;44449:32;:::i;:::-;44346:141;;;;:::o;44493:349::-;44562:6;44611:2;44599:9;44590:7;44586:23;44582:32;44579:119;;;44617:79;;:::i;:::-;44579:119;44737:1;44762:63;44817:7;44808:6;44797:9;44793:22;44762:63;:::i;:::-;44752:73;;44708:127;44493:349;;;;:::o;44848:182::-;44988:34;44984:1;44976:6;44972:14;44965:58;44848:182;:::o;45036:366::-;45178:3;45199:67;45263:2;45258:3;45199:67;:::i;:::-;45192:74;;45275:93;45364:3;45275:93;:::i;:::-;45393:2;45388:3;45384:12;45377:19;;45036:366;;;:::o;45408:419::-;45574:4;45612:2;45601:9;45597:18;45589:26;;45661:9;45655:4;45651:20;45647:1;45636:9;45632:17;45625:47;45689:131;45815:4;45689:131;:::i;:::-;45681:139;;45408:419;;;:::o;45833:178::-;45973:30;45969:1;45961:6;45957:14;45950:54;45833:178;:::o;46017:366::-;46159:3;46180:67;46244:2;46239:3;46180:67;:::i;:::-;46173:74;;46256:93;46345:3;46256:93;:::i;:::-;46374:2;46369:3;46365:12;46358:19;;46017:366;;;:::o;46389:419::-;46555:4;46593:2;46582:9;46578:18;46570:26;;46642:9;46636:4;46632:20;46628:1;46617:9;46613:17;46606:47;46670:131;46796:4;46670:131;:::i;:::-;46662:139;;46389:419;;;:::o;46814:180::-;46862:77;46859:1;46852:88;46959:4;46956:1;46949:15;46983:4;46980:1;46973:15
Swarm Source
ipfs://073d6187fe04d701effadc1c575fa414909a5d22a5694849c6201cd595e6c490
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.