Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 DNFM
Holders
161
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 DNFMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DONOTFCKINGMINT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-03 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be 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 owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _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 a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @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: DONOTFCKINGMINT.sol pragma solidity ^0.8.2; contract DONOTFCKINGMINT is ERC721, Ownable { using Counters for Counters.Counter; using SafeMath for uint256; using Strings for uint256; Counters.Counter private tokenSupply; uint256 public constant MAX_SUPPLY = 10000; uint256 private THE_FCKING_PRICE = 0 ether; string public tokenBaseURI; string public unrevealedURI; bool public mintActive = false; constructor() ERC721("DO NOT FCKING MINT", "DNFM") { tokenSupply.increment(); } function ENABLEFCKINGMINT() external onlyOwner { mintActive = !mintActive; } function SETFCKINGURI(string memory _baseURI) external onlyOwner { tokenBaseURI = _baseURI; } function SETUNREVEALEDFCKINGURI(string memory _unrevealedUri) external onlyOwner { unrevealedURI = _unrevealedUri; } function tokenURI(uint256 _tokenId) override public view returns (string memory) { bool revealed = bytes(tokenBaseURI).length > 0; if (!revealed) { return unrevealedURI; } require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(tokenBaseURI, _tokenId.toString())); } /******************************** * GET THE CURRENT FCKING PRICE * ********************************/ function GETFCKINGPRICE(uint256 _quantity) public view returns (uint256) { uint256 returnPrice; if (tokenSupply.current().add(_quantity) > 1000) { returnPrice = 0.05 ether; } return returnPrice; } function GETFCKINGTOKENSUPPLY() public view returns (uint256) { return tokenSupply.current(); } /****************************************** * DO NOT FCKING MINT!!! * * https://twitter.com/DONOTFCKINGMINT ;) * ******************************************/ /****************************** * 1-1000 FCKING FREE * * 1001-10000 FCKING .05 ETH * ******************************/ function DO_NOT_FCKING_CALL_THIS_MINT_FUNCTION(uint256 _quantity) external payable { require(mintActive, "WE'RE NOT FCKING MINTING"); _FCKINGSAFEMINT(_quantity); } function _FCKINGSAFEMINT(uint256 _quantity) internal { if (tokenSupply.current().add(_quantity) > 1000) { THE_FCKING_PRICE = 0.05 ether; } require(_quantity > 0, "YOU CAN'T MINT LESS THAN FCKING 0"); require(tokenSupply.current().add(_quantity) <= MAX_SUPPLY, "YOU CAN'T EXCEED THE FCKING SUPPLY"); require(msg.value >= THE_FCKING_PRICE.mul(_quantity), "THE PRICE IS 0.05 FCKING ETH"); for (uint256 i = 0; i < _quantity; i++) { uint256 mintIndex = tokenSupply.current(); if (mintIndex < MAX_SUPPLY) { tokenSupply.increment(); _safeMint(msg.sender, mintIndex); } } } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(0x49fdAfD52B36A62E02825f3417f08A923c4C3ce2).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"DO_NOT_FCKING_CALL_THIS_MINT_FUNCTION","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ENABLEFCKINGMINT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"GETFCKINGPRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GETFCKINGTOKENSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"SETFCKINGURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_unrevealedUri","type":"string"}],"name":"SETUNREVEALEDFCKINGURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006008556000600b60006101000a81548160ff0219169083151502179055503480156200003157600080fd5b506040518060400160405280601281526020017f444f204e4f542046434b494e47204d494e5400000000000000000000000000008152506040518060400160405280600481526020017f444e464d000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000b6929190620001f3565b508060019080519060200190620000cf929190620001f3565b505050620000f2620000e66200010f60201b60201c565b6200011760201b60201c565b620001096007620001dd60201b6200144b1760201c565b62000308565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b8280546200020190620002a3565b90600052602060002090601f01602090048101928262000225576000855562000271565b82601f106200024057805160ff191683800117855562000271565b8280016001018555821562000271579182015b828111156200027057825182559160200191906001019062000253565b5b50905062000280919062000284565b5090565b5b808211156200029f57600081600090555060010162000285565b5090565b60006002820490506001821680620002bc57607f821691505b60208210811415620002d357620002d2620002d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61395a80620003186000396000f3fe60806040526004361061019c5760003560e01c80636431f7ac116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd1461058e578063ce6485e3146105cb578063e985e9c5146105e7578063f2fde38b146106245761019c565b8063a22cb465146104ff578063b88d4fde14610528578063c5b0fac9146105515761019c565b8063715018a6116100c6578063715018a614610469578063749762eb146104805780638da5cb5b146104a957806395d89b41146104d45761019c565b80636431f7ac146103d65780637035bf181461040157806370a082311461042c5761019c565b806325fd90f3116101595780633dc550f3116101335780633dc550f31461032e57806342842e0e146103455780634e99b8001461036e5780636352211e146103995761019c565b806325fd90f3146102c157806332cb6b0c146102ec5780633ccfd60b146103175761019c565b806301ffc9a7146101a1578063038eb60a146101de57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806323b872dd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906126ab565b61064d565b6040516101d59190612c11565b60405180910390f35b3480156101ea57600080fd5b5061020560048036038101906102009190612705565b61072f565b005b34801561021357600080fd5b5061021c6107c5565b6040516102299190612c2c565b60405180910390f35b34801561023e57600080fd5b506102596004803603810190610254919061274e565b610857565b6040516102669190612baa565b60405180910390f35b34801561027b57600080fd5b506102966004803603810190610291919061266b565b6108dc565b005b3480156102a457600080fd5b506102bf60048036038101906102ba9190612555565b6109f4565b005b3480156102cd57600080fd5b506102d6610a54565b6040516102e39190612c11565b60405180910390f35b3480156102f857600080fd5b50610301610a67565b60405161030e9190612ece565b60405180910390f35b34801561032357600080fd5b5061032c610a6d565b005b34801561033a57600080fd5b50610343610b4c565b005b34801561035157600080fd5b5061036c60048036038101906103679190612555565b610bf4565b005b34801561037a57600080fd5b50610383610c14565b6040516103909190612c2c565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb919061274e565b610ca2565b6040516103cd9190612baa565b60405180910390f35b3480156103e257600080fd5b506103eb610d54565b6040516103f89190612ece565b60405180910390f35b34801561040d57600080fd5b50610416610d65565b6040516104239190612c2c565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e91906124e8565b610df3565b6040516104609190612ece565b60405180910390f35b34801561047557600080fd5b5061047e610eab565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612705565b610f33565b005b3480156104b557600080fd5b506104be610fc9565b6040516104cb9190612baa565b60405180910390f35b3480156104e057600080fd5b506104e9610ff3565b6040516104f69190612c2c565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061262b565b611085565b005b34801561053457600080fd5b5061054f600480360381019061054a91906125a8565b61109b565b005b34801561055d57600080fd5b506105786004803603810190610573919061274e565b6110fd565b6040516105859190612ece565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061274e565b611139565b6040516105c29190612c2c565b60405180910390f35b6105e560048036038101906105e0919061274e565b611264565b005b3480156105f357600080fd5b5061060e60048036038101906106099190612515565b6112bf565b60405161061b9190612c11565b60405180910390f35b34801561063057600080fd5b5061064b600480360381019061064691906124e8565b611353565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610728575061072782611461565b5b9050919050565b6107376114cb565b73ffffffffffffffffffffffffffffffffffffffff16610755610fc9565b73ffffffffffffffffffffffffffffffffffffffff16146107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290612e4e565b60405180910390fd5b80600990805190602001906107c19291906122fc565b5050565b6060600080546107d490613193565b80601f016020809104026020016040519081016040528092919081815260200182805461080090613193565b801561084d5780601f106108225761010080835404028352916020019161084d565b820191906000526020600020905b81548152906001019060200180831161083057829003601f168201915b5050505050905090565b6000610862826114d3565b6108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890612e2e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e782610ca2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f90612e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109776114cb565b73ffffffffffffffffffffffffffffffffffffffff1614806109a657506109a5816109a06114cb565b6112bf565b5b6109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90612d8e565b60405180910390fd5b6109ef838361153f565b505050565b610a056109ff6114cb565b826115f8565b610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b90612eae565b60405180910390fd5b610a4f8383836116d6565b505050565b600b60009054906101000a900460ff1681565b61271081565b610a756114cb565b73ffffffffffffffffffffffffffffffffffffffff16610a93610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090612e4e565b60405180910390fd5b60004790507349fdafd52b36a62e02825f3417f08a923c4c3ce273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b48573d6000803e3d6000fd5b5050565b610b546114cb565b73ffffffffffffffffffffffffffffffffffffffff16610b72610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612e4e565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610c0f8383836040518060200160405280600081525061109b565b505050565b60098054610c2190613193565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4d90613193565b8015610c9a5780601f10610c6f57610100808354040283529160200191610c9a565b820191906000526020600020905b815481529060010190602001808311610c7d57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290612dee565b60405180910390fd5b80915050919050565b6000610d60600761193d565b905090565b600a8054610d7290613193565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9e90613193565b8015610deb5780601f10610dc057610100808354040283529160200191610deb565b820191906000526020600020905b815481529060010190602001808311610dce57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90612dce565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eb36114cb565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90612e4e565b60405180910390fd5b610f31600061194b565b565b610f3b6114cb565b73ffffffffffffffffffffffffffffffffffffffff16610f59610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690612e4e565b60405180910390fd5b80600a9080519060200190610fc59291906122fc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461100290613193565b80601f016020809104026020016040519081016040528092919081815260200182805461102e90613193565b801561107b5780601f106110505761010080835404028352916020019161107b565b820191906000526020600020905b81548152906001019060200180831161105e57829003601f168201915b5050505050905090565b6110976110906114cb565b8383611a11565b5050565b6110ac6110a66114cb565b836115f8565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612eae565b60405180910390fd5b6110f784848484611b7e565b50505050565b6000806103e861111f84611111600761193d565b611bda90919063ffffffff16565b11156111305766b1a2bc2ec5000090505b80915050919050565b60606000806009805461114b90613193565b9050119050806111e857600a805461116290613193565b80601f016020809104026020016040519081016040528092919081815260200182805461118e90613193565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b505050505091505061125f565b6111f1836114d3565b611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790612e6e565b60405180910390fd5b600961123b84611bf0565b60405160200161124c929190612b86565b6040516020818303038152906040529150505b919050565b600b60009054906101000a900460ff166112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90612dae565b60405180910390fd5b6112bc81611d51565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61135b6114cb565b73ffffffffffffffffffffffffffffffffffffffff16611379610fc9565b73ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690612c6e565b60405180910390fd5b6114488161194b565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115b283610ca2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611603826114d3565b611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990612d4e565b60405180910390fd5b600061164d83610ca2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116bc57508373ffffffffffffffffffffffffffffffffffffffff166116a484610857565b73ffffffffffffffffffffffffffffffffffffffff16145b806116cd57506116cc81856112bf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116f682610ca2565b73ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390612c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390612cee565b60405180910390fd5b6117c7838383611ecf565b6117d260008261153f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182291906130a9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118799190612fc8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611938838383611ed4565b505050565b600081600001549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790612d0e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b719190612c11565b60405180910390a3505050565b611b898484846116d6565b611b9584848484611ed9565b611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90612c4e565b60405180910390fd5b50505050565b60008183611be89190612fc8565b905092915050565b60606000821415611c38576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d4c565b600082905060005b60008214611c6a578080611c53906131f6565b915050600a82611c63919061301e565b9150611c40565b60008167ffffffffffffffff811115611c8657611c8561332c565b5b6040519080825280601f01601f191660200182016040528015611cb85781602001600182028036833780820191505090505b5090505b60008514611d4557600182611cd191906130a9565b9150600a85611ce0919061323f565b6030611cec9190612fc8565b60f81b818381518110611d0257611d016132fd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d3e919061301e565b9450611cbc565b8093505050505b919050565b6103e8611d7082611d62600761193d565b611bda90919063ffffffff16565b1115611d855766b1a2bc2ec500006008819055505b60008111611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf90612d2e565b60405180910390fd5b612710611de782611dd9600761193d565b611bda90919063ffffffff16565b1115611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90612cae565b60405180910390fd5b611e3d8160085461207090919063ffffffff16565b341015611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7690612d6e565b60405180910390fd5b60005b81811015611ecb576000611e96600761193d565b9050612710811015611eb757611eac600761144b565b611eb63382612086565b5b508080611ec3906131f6565b915050611e82565b5050565b505050565b505050565b6000611efa8473ffffffffffffffffffffffffffffffffffffffff166120a4565b15612063578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f236114cb565b8786866040518563ffffffff1660e01b8152600401611f459493929190612bc5565b602060405180830381600087803b158015611f5f57600080fd5b505af1925050508015611f9057506040513d601f19601f82011682018060405250810190611f8d91906126d8565b60015b612013573d8060008114611fc0576040519150601f19603f3d011682016040523d82523d6000602084013e611fc5565b606091505b5060008151141561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200290612c4e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612068565b600190505b949350505050565b6000818361207e919061304f565b905092915050565b6120a08282604051806020016040528060008152506120c7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6120d18383612122565b6120de6000848484611ed9565b61211d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211490612c4e565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218990612e0e565b60405180910390fd5b61219b816114d3565b156121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290612cce565b60405180910390fd5b6121e760008383611ecf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122379190612fc8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122f860008383611ed4565b5050565b82805461230890613193565b90600052602060002090601f01602090048101928261232a5760008555612371565b82601f1061234357805160ff1916838001178555612371565b82800160010185558215612371579182015b82811115612370578251825591602001919060010190612355565b5b50905061237e9190612382565b5090565b5b8082111561239b576000816000905550600101612383565b5090565b60006123b26123ad84612f0e565b612ee9565b9050828152602081018484840111156123ce576123cd613360565b5b6123d9848285613151565b509392505050565b60006123f46123ef84612f3f565b612ee9565b9050828152602081018484840111156124105761240f613360565b5b61241b848285613151565b509392505050565b600081359050612432816138c8565b92915050565b600081359050612447816138df565b92915050565b60008135905061245c816138f6565b92915050565b600081519050612471816138f6565b92915050565b600082601f83011261248c5761248b61335b565b5b813561249c84826020860161239f565b91505092915050565b600082601f8301126124ba576124b961335b565b5b81356124ca8482602086016123e1565b91505092915050565b6000813590506124e28161390d565b92915050565b6000602082840312156124fe576124fd61336a565b5b600061250c84828501612423565b91505092915050565b6000806040838503121561252c5761252b61336a565b5b600061253a85828601612423565b925050602061254b85828601612423565b9150509250929050565b60008060006060848603121561256e5761256d61336a565b5b600061257c86828701612423565b935050602061258d86828701612423565b925050604061259e868287016124d3565b9150509250925092565b600080600080608085870312156125c2576125c161336a565b5b60006125d087828801612423565b94505060206125e187828801612423565b93505060406125f2878288016124d3565b925050606085013567ffffffffffffffff81111561261357612612613365565b5b61261f87828801612477565b91505092959194509250565b600080604083850312156126425761264161336a565b5b600061265085828601612423565b925050602061266185828601612438565b9150509250929050565b600080604083850312156126825761268161336a565b5b600061269085828601612423565b92505060206126a1858286016124d3565b9150509250929050565b6000602082840312156126c1576126c061336a565b5b60006126cf8482850161244d565b91505092915050565b6000602082840312156126ee576126ed61336a565b5b60006126fc84828501612462565b91505092915050565b60006020828403121561271b5761271a61336a565b5b600082013567ffffffffffffffff81111561273957612738613365565b5b612745848285016124a5565b91505092915050565b6000602082840312156127645761276361336a565b5b6000612772848285016124d3565b91505092915050565b612784816130dd565b82525050565b612793816130ef565b82525050565b60006127a482612f85565b6127ae8185612f9b565b93506127be818560208601613160565b6127c78161336f565b840191505092915050565b60006127dd82612f90565b6127e78185612fac565b93506127f7818560208601613160565b6128008161336f565b840191505092915050565b600061281682612f90565b6128208185612fbd565b9350612830818560208601613160565b80840191505092915050565b6000815461284981613193565b6128538186612fbd565b9450600182166000811461286e576001811461287f576128b2565b60ff198316865281860193506128b2565b61288885612f70565b60005b838110156128aa5781548189015260018201915060208101905061288b565b838801955050505b50505092915050565b60006128c8603283612fac565b91506128d382613380565b604082019050919050565b60006128eb602683612fac565b91506128f6826133cf565b604082019050919050565b600061290e602583612fac565b91506129198261341e565b604082019050919050565b6000612931602283612fac565b915061293c8261346d565b604082019050919050565b6000612954601c83612fac565b915061295f826134bc565b602082019050919050565b6000612977602483612fac565b9150612982826134e5565b604082019050919050565b600061299a601983612fac565b91506129a582613534565b602082019050919050565b60006129bd602183612fac565b91506129c88261355d565b604082019050919050565b60006129e0602c83612fac565b91506129eb826135ac565b604082019050919050565b6000612a03601c83612fac565b9150612a0e826135fb565b602082019050919050565b6000612a26603883612fac565b9150612a3182613624565b604082019050919050565b6000612a49601883612fac565b9150612a5482613673565b602082019050919050565b6000612a6c602a83612fac565b9150612a778261369c565b604082019050919050565b6000612a8f602983612fac565b9150612a9a826136eb565b604082019050919050565b6000612ab2602083612fac565b9150612abd8261373a565b602082019050919050565b6000612ad5602c83612fac565b9150612ae082613763565b604082019050919050565b6000612af8602083612fac565b9150612b03826137b2565b602082019050919050565b6000612b1b602f83612fac565b9150612b26826137db565b604082019050919050565b6000612b3e602183612fac565b9150612b498261382a565b604082019050919050565b6000612b61603183612fac565b9150612b6c82613879565b604082019050919050565b612b8081613147565b82525050565b6000612b92828561283c565b9150612b9e828461280b565b91508190509392505050565b6000602082019050612bbf600083018461277b565b92915050565b6000608082019050612bda600083018761277b565b612be7602083018661277b565b612bf46040830185612b77565b8181036060830152612c068184612799565b905095945050505050565b6000602082019050612c26600083018461278a565b92915050565b60006020820190508181036000830152612c4681846127d2565b905092915050565b60006020820190508181036000830152612c67816128bb565b9050919050565b60006020820190508181036000830152612c87816128de565b9050919050565b60006020820190508181036000830152612ca781612901565b9050919050565b60006020820190508181036000830152612cc781612924565b9050919050565b60006020820190508181036000830152612ce781612947565b9050919050565b60006020820190508181036000830152612d078161296a565b9050919050565b60006020820190508181036000830152612d278161298d565b9050919050565b60006020820190508181036000830152612d47816129b0565b9050919050565b60006020820190508181036000830152612d67816129d3565b9050919050565b60006020820190508181036000830152612d87816129f6565b9050919050565b60006020820190508181036000830152612da781612a19565b9050919050565b60006020820190508181036000830152612dc781612a3c565b9050919050565b60006020820190508181036000830152612de781612a5f565b9050919050565b60006020820190508181036000830152612e0781612a82565b9050919050565b60006020820190508181036000830152612e2781612aa5565b9050919050565b60006020820190508181036000830152612e4781612ac8565b9050919050565b60006020820190508181036000830152612e6781612aeb565b9050919050565b60006020820190508181036000830152612e8781612b0e565b9050919050565b60006020820190508181036000830152612ea781612b31565b9050919050565b60006020820190508181036000830152612ec781612b54565b9050919050565b6000602082019050612ee36000830184612b77565b92915050565b6000612ef3612f04565b9050612eff82826131c5565b919050565b6000604051905090565b600067ffffffffffffffff821115612f2957612f2861332c565b5b612f328261336f565b9050602081019050919050565b600067ffffffffffffffff821115612f5a57612f5961332c565b5b612f638261336f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612fd382613147565b9150612fde83613147565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561301357613012613270565b5b828201905092915050565b600061302982613147565b915061303483613147565b9250826130445761304361329f565b5b828204905092915050565b600061305a82613147565b915061306583613147565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561309e5761309d613270565b5b828202905092915050565b60006130b482613147565b91506130bf83613147565b9250828210156130d2576130d1613270565b5b828203905092915050565b60006130e882613127565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561317e578082015181840152602081019050613163565b8381111561318d576000848401525b50505050565b600060028204905060018216806131ab57607f821691505b602082108114156131bf576131be6132ce565b5b50919050565b6131ce8261336f565b810181811067ffffffffffffffff821117156131ed576131ec61332c565b5b80604052505050565b600061320182613147565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561323457613233613270565b5b600182019050919050565b600061324a82613147565b915061325583613147565b9250826132655761326461329f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f594f552043414e275420455843454544205448452046434b494e47205355505060008201527f4c59000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f594f552043414e2754204d494e54204c455353205448414e2046434b494e472060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54484520505249434520495320302e30352046434b494e472045544800000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f5745275245204e4f542046434b494e47204d494e54494e470000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6138d1816130dd565b81146138dc57600080fd5b50565b6138e8816130ef565b81146138f357600080fd5b50565b6138ff816130fb565b811461390a57600080fd5b50565b61391681613147565b811461392157600080fd5b5056fea2646970667358221220177095c1fa0f4f285de800dc4e7aee31d8565e135830c2377e21ac18c9274b1564736f6c63430008070033
Deployed Bytecode
0x60806040526004361061019c5760003560e01c80636431f7ac116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd1461058e578063ce6485e3146105cb578063e985e9c5146105e7578063f2fde38b146106245761019c565b8063a22cb465146104ff578063b88d4fde14610528578063c5b0fac9146105515761019c565b8063715018a6116100c6578063715018a614610469578063749762eb146104805780638da5cb5b146104a957806395d89b41146104d45761019c565b80636431f7ac146103d65780637035bf181461040157806370a082311461042c5761019c565b806325fd90f3116101595780633dc550f3116101335780633dc550f31461032e57806342842e0e146103455780634e99b8001461036e5780636352211e146103995761019c565b806325fd90f3146102c157806332cb6b0c146102ec5780633ccfd60b146103175761019c565b806301ffc9a7146101a1578063038eb60a146101de57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806323b872dd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906126ab565b61064d565b6040516101d59190612c11565b60405180910390f35b3480156101ea57600080fd5b5061020560048036038101906102009190612705565b61072f565b005b34801561021357600080fd5b5061021c6107c5565b6040516102299190612c2c565b60405180910390f35b34801561023e57600080fd5b506102596004803603810190610254919061274e565b610857565b6040516102669190612baa565b60405180910390f35b34801561027b57600080fd5b506102966004803603810190610291919061266b565b6108dc565b005b3480156102a457600080fd5b506102bf60048036038101906102ba9190612555565b6109f4565b005b3480156102cd57600080fd5b506102d6610a54565b6040516102e39190612c11565b60405180910390f35b3480156102f857600080fd5b50610301610a67565b60405161030e9190612ece565b60405180910390f35b34801561032357600080fd5b5061032c610a6d565b005b34801561033a57600080fd5b50610343610b4c565b005b34801561035157600080fd5b5061036c60048036038101906103679190612555565b610bf4565b005b34801561037a57600080fd5b50610383610c14565b6040516103909190612c2c565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb919061274e565b610ca2565b6040516103cd9190612baa565b60405180910390f35b3480156103e257600080fd5b506103eb610d54565b6040516103f89190612ece565b60405180910390f35b34801561040d57600080fd5b50610416610d65565b6040516104239190612c2c565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e91906124e8565b610df3565b6040516104609190612ece565b60405180910390f35b34801561047557600080fd5b5061047e610eab565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612705565b610f33565b005b3480156104b557600080fd5b506104be610fc9565b6040516104cb9190612baa565b60405180910390f35b3480156104e057600080fd5b506104e9610ff3565b6040516104f69190612c2c565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061262b565b611085565b005b34801561053457600080fd5b5061054f600480360381019061054a91906125a8565b61109b565b005b34801561055d57600080fd5b506105786004803603810190610573919061274e565b6110fd565b6040516105859190612ece565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061274e565b611139565b6040516105c29190612c2c565b60405180910390f35b6105e560048036038101906105e0919061274e565b611264565b005b3480156105f357600080fd5b5061060e60048036038101906106099190612515565b6112bf565b60405161061b9190612c11565b60405180910390f35b34801561063057600080fd5b5061064b600480360381019061064691906124e8565b611353565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610728575061072782611461565b5b9050919050565b6107376114cb565b73ffffffffffffffffffffffffffffffffffffffff16610755610fc9565b73ffffffffffffffffffffffffffffffffffffffff16146107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290612e4e565b60405180910390fd5b80600990805190602001906107c19291906122fc565b5050565b6060600080546107d490613193565b80601f016020809104026020016040519081016040528092919081815260200182805461080090613193565b801561084d5780601f106108225761010080835404028352916020019161084d565b820191906000526020600020905b81548152906001019060200180831161083057829003601f168201915b5050505050905090565b6000610862826114d3565b6108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890612e2e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e782610ca2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f90612e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109776114cb565b73ffffffffffffffffffffffffffffffffffffffff1614806109a657506109a5816109a06114cb565b6112bf565b5b6109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90612d8e565b60405180910390fd5b6109ef838361153f565b505050565b610a056109ff6114cb565b826115f8565b610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b90612eae565b60405180910390fd5b610a4f8383836116d6565b505050565b600b60009054906101000a900460ff1681565b61271081565b610a756114cb565b73ffffffffffffffffffffffffffffffffffffffff16610a93610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090612e4e565b60405180910390fd5b60004790507349fdafd52b36a62e02825f3417f08a923c4c3ce273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b48573d6000803e3d6000fd5b5050565b610b546114cb565b73ffffffffffffffffffffffffffffffffffffffff16610b72610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90612e4e565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b610c0f8383836040518060200160405280600081525061109b565b505050565b60098054610c2190613193565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4d90613193565b8015610c9a5780601f10610c6f57610100808354040283529160200191610c9a565b820191906000526020600020905b815481529060010190602001808311610c7d57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290612dee565b60405180910390fd5b80915050919050565b6000610d60600761193d565b905090565b600a8054610d7290613193565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9e90613193565b8015610deb5780601f10610dc057610100808354040283529160200191610deb565b820191906000526020600020905b815481529060010190602001808311610dce57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90612dce565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eb36114cb565b73ffffffffffffffffffffffffffffffffffffffff16610ed1610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90612e4e565b60405180910390fd5b610f31600061194b565b565b610f3b6114cb565b73ffffffffffffffffffffffffffffffffffffffff16610f59610fc9565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690612e4e565b60405180910390fd5b80600a9080519060200190610fc59291906122fc565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461100290613193565b80601f016020809104026020016040519081016040528092919081815260200182805461102e90613193565b801561107b5780601f106110505761010080835404028352916020019161107b565b820191906000526020600020905b81548152906001019060200180831161105e57829003601f168201915b5050505050905090565b6110976110906114cb565b8383611a11565b5050565b6110ac6110a66114cb565b836115f8565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612eae565b60405180910390fd5b6110f784848484611b7e565b50505050565b6000806103e861111f84611111600761193d565b611bda90919063ffffffff16565b11156111305766b1a2bc2ec5000090505b80915050919050565b60606000806009805461114b90613193565b9050119050806111e857600a805461116290613193565b80601f016020809104026020016040519081016040528092919081815260200182805461118e90613193565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b505050505091505061125f565b6111f1836114d3565b611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790612e6e565b60405180910390fd5b600961123b84611bf0565b60405160200161124c929190612b86565b6040516020818303038152906040529150505b919050565b600b60009054906101000a900460ff166112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90612dae565b60405180910390fd5b6112bc81611d51565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61135b6114cb565b73ffffffffffffffffffffffffffffffffffffffff16611379610fc9565b73ffffffffffffffffffffffffffffffffffffffff16146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690612c6e565b60405180910390fd5b6114488161194b565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115b283610ca2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611603826114d3565b611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990612d4e565b60405180910390fd5b600061164d83610ca2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116bc57508373ffffffffffffffffffffffffffffffffffffffff166116a484610857565b73ffffffffffffffffffffffffffffffffffffffff16145b806116cd57506116cc81856112bf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116f682610ca2565b73ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390612c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390612cee565b60405180910390fd5b6117c7838383611ecf565b6117d260008261153f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182291906130a9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118799190612fc8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611938838383611ed4565b505050565b600081600001549050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790612d0e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b719190612c11565b60405180910390a3505050565b611b898484846116d6565b611b9584848484611ed9565b611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90612c4e565b60405180910390fd5b50505050565b60008183611be89190612fc8565b905092915050565b60606000821415611c38576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611d4c565b600082905060005b60008214611c6a578080611c53906131f6565b915050600a82611c63919061301e565b9150611c40565b60008167ffffffffffffffff811115611c8657611c8561332c565b5b6040519080825280601f01601f191660200182016040528015611cb85781602001600182028036833780820191505090505b5090505b60008514611d4557600182611cd191906130a9565b9150600a85611ce0919061323f565b6030611cec9190612fc8565b60f81b818381518110611d0257611d016132fd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d3e919061301e565b9450611cbc565b8093505050505b919050565b6103e8611d7082611d62600761193d565b611bda90919063ffffffff16565b1115611d855766b1a2bc2ec500006008819055505b60008111611dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbf90612d2e565b60405180910390fd5b612710611de782611dd9600761193d565b611bda90919063ffffffff16565b1115611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f90612cae565b60405180910390fd5b611e3d8160085461207090919063ffffffff16565b341015611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7690612d6e565b60405180910390fd5b60005b81811015611ecb576000611e96600761193d565b9050612710811015611eb757611eac600761144b565b611eb63382612086565b5b508080611ec3906131f6565b915050611e82565b5050565b505050565b505050565b6000611efa8473ffffffffffffffffffffffffffffffffffffffff166120a4565b15612063578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f236114cb565b8786866040518563ffffffff1660e01b8152600401611f459493929190612bc5565b602060405180830381600087803b158015611f5f57600080fd5b505af1925050508015611f9057506040513d601f19601f82011682018060405250810190611f8d91906126d8565b60015b612013573d8060008114611fc0576040519150601f19603f3d011682016040523d82523d6000602084013e611fc5565b606091505b5060008151141561200b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200290612c4e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612068565b600190505b949350505050565b6000818361207e919061304f565b905092915050565b6120a08282604051806020016040528060008152506120c7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6120d18383612122565b6120de6000848484611ed9565b61211d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211490612c4e565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218990612e0e565b60405180910390fd5b61219b816114d3565b156121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290612cce565b60405180910390fd5b6121e760008383611ecf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122379190612fc8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122f860008383611ed4565b5050565b82805461230890613193565b90600052602060002090601f01602090048101928261232a5760008555612371565b82601f1061234357805160ff1916838001178555612371565b82800160010185558215612371579182015b82811115612370578251825591602001919060010190612355565b5b50905061237e9190612382565b5090565b5b8082111561239b576000816000905550600101612383565b5090565b60006123b26123ad84612f0e565b612ee9565b9050828152602081018484840111156123ce576123cd613360565b5b6123d9848285613151565b509392505050565b60006123f46123ef84612f3f565b612ee9565b9050828152602081018484840111156124105761240f613360565b5b61241b848285613151565b509392505050565b600081359050612432816138c8565b92915050565b600081359050612447816138df565b92915050565b60008135905061245c816138f6565b92915050565b600081519050612471816138f6565b92915050565b600082601f83011261248c5761248b61335b565b5b813561249c84826020860161239f565b91505092915050565b600082601f8301126124ba576124b961335b565b5b81356124ca8482602086016123e1565b91505092915050565b6000813590506124e28161390d565b92915050565b6000602082840312156124fe576124fd61336a565b5b600061250c84828501612423565b91505092915050565b6000806040838503121561252c5761252b61336a565b5b600061253a85828601612423565b925050602061254b85828601612423565b9150509250929050565b60008060006060848603121561256e5761256d61336a565b5b600061257c86828701612423565b935050602061258d86828701612423565b925050604061259e868287016124d3565b9150509250925092565b600080600080608085870312156125c2576125c161336a565b5b60006125d087828801612423565b94505060206125e187828801612423565b93505060406125f2878288016124d3565b925050606085013567ffffffffffffffff81111561261357612612613365565b5b61261f87828801612477565b91505092959194509250565b600080604083850312156126425761264161336a565b5b600061265085828601612423565b925050602061266185828601612438565b9150509250929050565b600080604083850312156126825761268161336a565b5b600061269085828601612423565b92505060206126a1858286016124d3565b9150509250929050565b6000602082840312156126c1576126c061336a565b5b60006126cf8482850161244d565b91505092915050565b6000602082840312156126ee576126ed61336a565b5b60006126fc84828501612462565b91505092915050565b60006020828403121561271b5761271a61336a565b5b600082013567ffffffffffffffff81111561273957612738613365565b5b612745848285016124a5565b91505092915050565b6000602082840312156127645761276361336a565b5b6000612772848285016124d3565b91505092915050565b612784816130dd565b82525050565b612793816130ef565b82525050565b60006127a482612f85565b6127ae8185612f9b565b93506127be818560208601613160565b6127c78161336f565b840191505092915050565b60006127dd82612f90565b6127e78185612fac565b93506127f7818560208601613160565b6128008161336f565b840191505092915050565b600061281682612f90565b6128208185612fbd565b9350612830818560208601613160565b80840191505092915050565b6000815461284981613193565b6128538186612fbd565b9450600182166000811461286e576001811461287f576128b2565b60ff198316865281860193506128b2565b61288885612f70565b60005b838110156128aa5781548189015260018201915060208101905061288b565b838801955050505b50505092915050565b60006128c8603283612fac565b91506128d382613380565b604082019050919050565b60006128eb602683612fac565b91506128f6826133cf565b604082019050919050565b600061290e602583612fac565b91506129198261341e565b604082019050919050565b6000612931602283612fac565b915061293c8261346d565b604082019050919050565b6000612954601c83612fac565b915061295f826134bc565b602082019050919050565b6000612977602483612fac565b9150612982826134e5565b604082019050919050565b600061299a601983612fac565b91506129a582613534565b602082019050919050565b60006129bd602183612fac565b91506129c88261355d565b604082019050919050565b60006129e0602c83612fac565b91506129eb826135ac565b604082019050919050565b6000612a03601c83612fac565b9150612a0e826135fb565b602082019050919050565b6000612a26603883612fac565b9150612a3182613624565b604082019050919050565b6000612a49601883612fac565b9150612a5482613673565b602082019050919050565b6000612a6c602a83612fac565b9150612a778261369c565b604082019050919050565b6000612a8f602983612fac565b9150612a9a826136eb565b604082019050919050565b6000612ab2602083612fac565b9150612abd8261373a565b602082019050919050565b6000612ad5602c83612fac565b9150612ae082613763565b604082019050919050565b6000612af8602083612fac565b9150612b03826137b2565b602082019050919050565b6000612b1b602f83612fac565b9150612b26826137db565b604082019050919050565b6000612b3e602183612fac565b9150612b498261382a565b604082019050919050565b6000612b61603183612fac565b9150612b6c82613879565b604082019050919050565b612b8081613147565b82525050565b6000612b92828561283c565b9150612b9e828461280b565b91508190509392505050565b6000602082019050612bbf600083018461277b565b92915050565b6000608082019050612bda600083018761277b565b612be7602083018661277b565b612bf46040830185612b77565b8181036060830152612c068184612799565b905095945050505050565b6000602082019050612c26600083018461278a565b92915050565b60006020820190508181036000830152612c4681846127d2565b905092915050565b60006020820190508181036000830152612c67816128bb565b9050919050565b60006020820190508181036000830152612c87816128de565b9050919050565b60006020820190508181036000830152612ca781612901565b9050919050565b60006020820190508181036000830152612cc781612924565b9050919050565b60006020820190508181036000830152612ce781612947565b9050919050565b60006020820190508181036000830152612d078161296a565b9050919050565b60006020820190508181036000830152612d278161298d565b9050919050565b60006020820190508181036000830152612d47816129b0565b9050919050565b60006020820190508181036000830152612d67816129d3565b9050919050565b60006020820190508181036000830152612d87816129f6565b9050919050565b60006020820190508181036000830152612da781612a19565b9050919050565b60006020820190508181036000830152612dc781612a3c565b9050919050565b60006020820190508181036000830152612de781612a5f565b9050919050565b60006020820190508181036000830152612e0781612a82565b9050919050565b60006020820190508181036000830152612e2781612aa5565b9050919050565b60006020820190508181036000830152612e4781612ac8565b9050919050565b60006020820190508181036000830152612e6781612aeb565b9050919050565b60006020820190508181036000830152612e8781612b0e565b9050919050565b60006020820190508181036000830152612ea781612b31565b9050919050565b60006020820190508181036000830152612ec781612b54565b9050919050565b6000602082019050612ee36000830184612b77565b92915050565b6000612ef3612f04565b9050612eff82826131c5565b919050565b6000604051905090565b600067ffffffffffffffff821115612f2957612f2861332c565b5b612f328261336f565b9050602081019050919050565b600067ffffffffffffffff821115612f5a57612f5961332c565b5b612f638261336f565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612fd382613147565b9150612fde83613147565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561301357613012613270565b5b828201905092915050565b600061302982613147565b915061303483613147565b9250826130445761304361329f565b5b828204905092915050565b600061305a82613147565b915061306583613147565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561309e5761309d613270565b5b828202905092915050565b60006130b482613147565b91506130bf83613147565b9250828210156130d2576130d1613270565b5b828203905092915050565b60006130e882613127565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561317e578082015181840152602081019050613163565b8381111561318d576000848401525b50505050565b600060028204905060018216806131ab57607f821691505b602082108114156131bf576131be6132ce565b5b50919050565b6131ce8261336f565b810181811067ffffffffffffffff821117156131ed576131ec61332c565b5b80604052505050565b600061320182613147565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561323457613233613270565b5b600182019050919050565b600061324a82613147565b915061325583613147565b9250826132655761326461329f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f594f552043414e275420455843454544205448452046434b494e47205355505060008201527f4c59000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f594f552043414e2754204d494e54204c455353205448414e2046434b494e472060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f54484520505249434520495320302e30352046434b494e472045544800000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f5745275245204e4f542046434b494e47204d494e54494e470000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6138d1816130dd565b81146138dc57600080fd5b50565b6138e8816130ef565b81146138f357600080fd5b50565b6138ff816130fb565b811461390a57600080fd5b50565b61391681613147565b811461392157600080fd5b5056fea2646970667358221220177095c1fa0f4f285de800dc4e7aee31d8565e135830c2377e21ac18c9274b1564736f6c63430008070033
Deployed Bytecode Sourcemap
46403:3317:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33215:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47028:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34160:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35720:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35243:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36470:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46777:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46608:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49534:181;;;;;;;;;;;;;:::i;:::-;;46925:95;;;;;;;;;;;;;:::i;:::-;;36880:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46710:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33854:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48086:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46743:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33584:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13487:103;;;;;;;;;;;;;:::i;:::-;;47149:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12836:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34329:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36013:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37136:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47810:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47291:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48556:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36239:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13745:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33215:305;33317:4;33369:25;33354:40;;;:11;:40;;;;:105;;;;33426:33;33411:48;;;:11;:48;;;;33354:105;:158;;;;33476:36;33500:11;33476:23;:36::i;:::-;33354:158;33334:178;;33215:305;;;:::o;47028:113::-;13067:12;:10;:12::i;:::-;13056:23;;:7;:5;:7::i;:::-;:23;;;13048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47125:8:::1;47110:12;:23;;;;;;;;;;;;:::i;:::-;;47028:113:::0;:::o;34160:100::-;34214:13;34247:5;34240:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34160:100;:::o;35720:221::-;35796:7;35824:16;35832:7;35824;:16::i;:::-;35816:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35909:15;:24;35925:7;35909:24;;;;;;;;;;;;;;;;;;;;;35902:31;;35720:221;;;:::o;35243:411::-;35324:13;35340:23;35355:7;35340:14;:23::i;:::-;35324:39;;35388:5;35382:11;;:2;:11;;;;35374:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35482:5;35466:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35491:37;35508:5;35515:12;:10;:12::i;:::-;35491:16;:37::i;:::-;35466:62;35444:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;35625:21;35634:2;35638:7;35625:8;:21::i;:::-;35313:341;35243:411;;:::o;36470:339::-;36665:41;36684:12;:10;:12::i;:::-;36698:7;36665:18;:41::i;:::-;36657:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36773:28;36783:4;36789:2;36793:7;36773:9;:28::i;:::-;36470:339;;;:::o;46777:30::-;;;;;;;;;;;;;:::o;46608:42::-;46645:5;46608:42;:::o;49534:181::-;13067:12;:10;:12::i;:::-;13056:23;;:7;:5;:7::i;:::-;:23;;;13048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49588:15:::1;49606:21;49588:39;;49646:42;49638:60;;:69;49699:7;49638:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49577:138;49534:181::o:0;46925:95::-;13067:12;:10;:12::i;:::-;13056:23;;:7;:5;:7::i;:::-;:23;;;13048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47002:10:::1;;;;;;;;;;;47001:11;46988:10;;:24;;;;;;;;;;;;;;;;;;46925:95::o:0;36880:185::-;37018:39;37035:4;37041:2;37045:7;37018:39;;;;;;;;;;;;:16;:39::i;:::-;36880:185;;;:::o;46710:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33854:239::-;33926:7;33946:13;33962:7;:16;33970:7;33962:16;;;;;;;;;;;;;;;;;;;;;33946:32;;34014:1;33997:19;;:5;:19;;;;33989:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34080:5;34073:12;;;33854:239;;;:::o;48086:114::-;48139:7;48171:21;:11;:19;:21::i;:::-;48164:28;;48086:114;:::o;46743:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33584:208::-;33656:7;33701:1;33684:19;;:5;:19;;;;33676:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33768:9;:16;33778:5;33768:16;;;;;;;;;;;;;;;;33761:23;;33584:208;;;:::o;13487:103::-;13067:12;:10;:12::i;:::-;13056:23;;:7;:5;:7::i;:::-;:23;;;13048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13552:30:::1;13579:1;13552:18;:30::i;:::-;13487:103::o:0;47149:136::-;13067:12;:10;:12::i;:::-;13056:23;;:7;:5;:7::i;:::-;:23;;;13048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47263:14:::1;47247:13;:30;;;;;;;;;;;;:::i;:::-;;47149:136:::0;:::o;12836:87::-;12882:7;12909:6;;;;;;;;;;;12902:13;;12836:87;:::o;34329:104::-;34385:13;34418:7;34411:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34329:104;:::o;36013:155::-;36108:52;36127:12;:10;:12::i;:::-;36141:8;36151;36108:18;:52::i;:::-;36013:155;;:::o;37136:328::-;37311:41;37330:12;:10;:12::i;:::-;37344:7;37311:18;:41::i;:::-;37303:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;37417:39;37431:4;37437:2;37441:7;37450:5;37417:13;:39::i;:::-;37136:328;;;;:::o;47810:268::-;47874:7;47899:19;47974:4;47935:36;47961:9;47935:21;:11;:19;:21::i;:::-;:25;;:36;;;;:::i;:::-;:43;47931:109;;;48018:10;48004:24;;47931:109;48059:11;48052:18;;;47810:268;;;:::o;47291:391::-;47357:13;47389;47434:1;47411:12;47405:26;;;;;:::i;:::-;;;:30;47389:46;;47453:8;47448:58;;47481:13;47474:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47448:58;47526:17;47534:8;47526:7;:17::i;:::-;47518:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47639:12;47653:19;:8;:17;:19::i;:::-;47622:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47608:66;;;47291:391;;;;:::o;48556:194::-;48664:10;;;;;;;;;;;48656:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;48716:26;48732:9;48716:15;:26::i;:::-;48556:194;:::o;36239:164::-;36336:4;36360:18;:25;36379:5;36360:25;;;;;;;;;;;;;;;:35;36386:8;36360:35;;;;;;;;;;;;;;;;;;;;;;;;;36353:42;;36239:164;;;;:::o;13745:201::-;13067:12;:10;:12::i;:::-;13056:23;;:7;:5;:7::i;:::-;:23;;;13048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13854:1:::1;13834:22;;:8;:22;;;;13826:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13910:28;13929:8;13910:18;:28::i;:::-;13745:201:::0;:::o;8127:127::-;8234:1;8216:7;:14;;;:19;;;;;;;;;;;8127:127;:::o;25825:157::-;25910:4;25949:25;25934:40;;;:11;:40;;;;25927:47;;25825:157;;;:::o;11507:98::-;11560:7;11587:10;11580:17;;11507:98;:::o;38974:127::-;39039:4;39091:1;39063:30;;:7;:16;39071:7;39063:16;;;;;;;;;;;;;;;;;;;;;:30;;;;39056:37;;38974:127;;;:::o;43120:174::-;43222:2;43195:15;:24;43211:7;43195:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43278:7;43274:2;43240:46;;43249:23;43264:7;43249:14;:23::i;:::-;43240:46;;;;;;;;;;;;43120:174;;:::o;39268:348::-;39361:4;39386:16;39394:7;39386;:16::i;:::-;39378:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39462:13;39478:23;39493:7;39478:14;:23::i;:::-;39462:39;;39531:5;39520:16;;:7;:16;;;:51;;;;39564:7;39540:31;;:20;39552:7;39540:11;:20::i;:::-;:31;;;39520:51;:87;;;;39575:32;39592:5;39599:7;39575:16;:32::i;:::-;39520:87;39512:96;;;39268:348;;;;:::o;42377:625::-;42536:4;42509:31;;:23;42524:7;42509:14;:23::i;:::-;:31;;;42501:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42615:1;42601:16;;:2;:16;;;;42593:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42671:39;42692:4;42698:2;42702:7;42671:20;:39::i;:::-;42775:29;42792:1;42796:7;42775:8;:29::i;:::-;42836:1;42817:9;:15;42827:4;42817:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;42865:1;42848:9;:13;42858:2;42848:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42896:2;42877:7;:16;42885:7;42877:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42935:7;42931:2;42916:27;;42925:4;42916:27;;;;;;;;;;;;42956:38;42976:4;42982:2;42986:7;42956:19;:38::i;:::-;42377:625;;;:::o;8005:114::-;8070:7;8097;:14;;;8090:21;;8005:114;;;:::o;14106:191::-;14180:16;14199:6;;;;;;;;;;;14180:25;;14225:8;14216:6;;:17;;;;;;;;;;;;;;;;;;14280:8;14249:40;;14270:8;14249:40;;;;;;;;;;;;14169:128;14106:191;:::o;43436:315::-;43591:8;43582:17;;:5;:17;;;;43574:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43678:8;43640:18;:25;43659:5;43640:25;;;;;;;;;;;;;;;:35;43666:8;43640:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;43724:8;43702:41;;43717:5;43702:41;;;43734:8;43702:41;;;;;;:::i;:::-;;;;;;;;43436:315;;;:::o;38346:::-;38503:28;38513:4;38519:2;38523:7;38503:9;:28::i;:::-;38550:48;38573:4;38579:2;38583:7;38592:5;38550:22;:48::i;:::-;38542:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;38346:315;;;;:::o;2915:98::-;2973:7;3004:1;3000;:5;;;;:::i;:::-;2993:12;;2915:98;;;;:::o;9016:723::-;9072:13;9302:1;9293:5;:10;9289:53;;;9320:10;;;;;;;;;;;;;;;;;;;;;9289:53;9352:12;9367:5;9352:20;;9383:14;9408:78;9423:1;9415:4;:9;9408:78;;9441:8;;;;;:::i;:::-;;;;9472:2;9464:10;;;;;:::i;:::-;;;9408:78;;;9496:19;9528:6;9518:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9496:39;;9546:154;9562:1;9553:5;:10;9546:154;;9590:1;9580:11;;;;;:::i;:::-;;;9657:2;9649:5;:10;;;;:::i;:::-;9636:2;:24;;;;:::i;:::-;9623:39;;9606:6;9613;9606:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9686:2;9677:11;;;;;:::i;:::-;;;9546:154;;;9724:6;9710:21;;;;;9016:723;;;;:::o;48760:766::-;48873:4;48834:36;48860:9;48834:21;:11;:19;:21::i;:::-;:25;;:36;;;;:::i;:::-;:43;48830:114;;;48922:10;48903:16;:29;;;;48830:114;48978:1;48966:9;:13;48958:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46645:5;49036:36;49062:9;49036:21;:11;:19;:21::i;:::-;:25;;:36;;;;:::i;:::-;:50;;49028:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49157:31;49178:9;49157:16;;:20;;:31;;;;:::i;:::-;49144:9;:44;;49136:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;49239:9;49234:285;49258:9;49254:1;:13;49234:285;;;49299:17;49319:21;:11;:19;:21::i;:::-;49299:41;;46645:5;49361:9;:22;49357:151;;;49418:23;:11;:21;:23::i;:::-;49460:32;49470:10;49482:9;49460;:32::i;:::-;49357:151;49284:235;49269:3;;;;;:::i;:::-;;;;49234:285;;;;48760:766;:::o;45687:126::-;;;;:::o;46198:125::-;;;;:::o;44316:799::-;44471:4;44492:15;:2;:13;;;:15::i;:::-;44488:620;;;44544:2;44528:36;;;44565:12;:10;:12::i;:::-;44579:4;44585:7;44594:5;44528:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44524:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44787:1;44770:6;:13;:18;44766:272;;;44813:60;;;;;;;;;;:::i;:::-;;;;;;;;44766:272;44988:6;44982:13;44973:6;44969:2;44965:15;44958:38;44524:529;44661:41;;;44651:51;;;:6;:51;;;;44644:58;;;;;44488:620;45092:4;45085:11;;44316:799;;;;;;;:::o;3653:98::-;3711:7;3742:1;3738;:5;;;;:::i;:::-;3731:12;;3653:98;;;;:::o;39958:110::-;40034:26;40044:2;40048:7;40034:26;;;;;;;;;;;;:9;:26::i;:::-;39958:110;;:::o;15575:326::-;15635:4;15892:1;15870:7;:19;;;:23;15863:30;;15575:326;;;:::o;40295:321::-;40425:18;40431:2;40435:7;40425:5;:18::i;:::-;40476:54;40507:1;40511:2;40515:7;40524:5;40476:22;:54::i;:::-;40454:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;40295:321;;;:::o;40952:439::-;41046:1;41032:16;;:2;:16;;;;41024:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41105:16;41113:7;41105;:16::i;:::-;41104:17;41096:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41167:45;41196:1;41200:2;41204:7;41167:20;:45::i;:::-;41242:1;41225:9;:13;41235:2;41225:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41273:2;41254:7;:16;41262:7;41254:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41318:7;41314:2;41293:33;;41310:1;41293:33;;;;;;;;;;;;41339:44;41367:1;41371:2;41375:7;41339:19;:44::i;:::-;40952:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:::-;10277:3;10298:67;10362:2;10357:3;10298:67;:::i;:::-;10291:74;;10374:93;10463:3;10374:93;:::i;:::-;10492:2;10487:3;10483:12;10476:19;;10135:366;;;:::o;10507:::-;10649:3;10670:67;10734:2;10729:3;10670:67;:::i;:::-;10663:74;;10746:93;10835:3;10746:93;:::i;:::-;10864:2;10859:3;10855:12;10848:19;;10507:366;;;:::o;10879:::-;11021:3;11042:67;11106:2;11101:3;11042:67;:::i;:::-;11035:74;;11118:93;11207:3;11118:93;:::i;:::-;11236:2;11231:3;11227:12;11220:19;;10879:366;;;:::o;11251:::-;11393:3;11414:67;11478:2;11473:3;11414:67;:::i;:::-;11407:74;;11490:93;11579:3;11490:93;:::i;:::-;11608:2;11603:3;11599:12;11592:19;;11251:366;;;:::o;11623:::-;11765:3;11786:67;11850:2;11845:3;11786:67;:::i;:::-;11779:74;;11862:93;11951:3;11862:93;:::i;:::-;11980:2;11975:3;11971:12;11964:19;;11623:366;;;:::o;11995:::-;12137:3;12158:67;12222:2;12217:3;12158:67;:::i;:::-;12151:74;;12234:93;12323:3;12234:93;:::i;:::-;12352:2;12347:3;12343:12;12336:19;;11995:366;;;:::o;12367:::-;12509:3;12530:67;12594:2;12589:3;12530:67;:::i;:::-;12523:74;;12606:93;12695:3;12606:93;:::i;:::-;12724:2;12719:3;12715:12;12708:19;;12367:366;;;:::o;12739:::-;12881:3;12902:67;12966:2;12961:3;12902:67;:::i;:::-;12895:74;;12978:93;13067:3;12978:93;:::i;:::-;13096:2;13091:3;13087:12;13080:19;;12739:366;;;:::o;13111:::-;13253:3;13274:67;13338:2;13333:3;13274:67;:::i;:::-;13267:74;;13350:93;13439:3;13350:93;:::i;:::-;13468:2;13463:3;13459:12;13452:19;;13111:366;;;:::o;13483:::-;13625:3;13646:67;13710:2;13705:3;13646:67;:::i;:::-;13639:74;;13722:93;13811:3;13722:93;:::i;:::-;13840:2;13835:3;13831:12;13824:19;;13483:366;;;:::o;13855:::-;13997:3;14018:67;14082:2;14077:3;14018:67;:::i;:::-;14011:74;;14094:93;14183:3;14094:93;:::i;:::-;14212:2;14207:3;14203:12;14196:19;;13855:366;;;:::o;14227:::-;14369:3;14390:67;14454:2;14449:3;14390:67;:::i;:::-;14383:74;;14466:93;14555:3;14466:93;:::i;:::-;14584:2;14579:3;14575:12;14568:19;;14227:366;;;:::o;14599:::-;14741:3;14762:67;14826:2;14821:3;14762:67;:::i;:::-;14755:74;;14838:93;14927:3;14838:93;:::i;:::-;14956:2;14951:3;14947:12;14940:19;;14599:366;;;:::o;14971:::-;15113:3;15134:67;15198:2;15193:3;15134:67;:::i;:::-;15127:74;;15210:93;15299:3;15210:93;:::i;:::-;15328:2;15323:3;15319:12;15312:19;;14971:366;;;:::o;15343:::-;15485:3;15506:67;15570:2;15565:3;15506:67;:::i;:::-;15499:74;;15582:93;15671:3;15582:93;:::i;:::-;15700:2;15695:3;15691:12;15684:19;;15343:366;;;:::o;15715:::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:::-;16229:3;16250:67;16314:2;16309:3;16250:67;:::i;:::-;16243:74;;16326:93;16415:3;16326:93;:::i;:::-;16444:2;16439:3;16435:12;16428:19;;16087:366;;;:::o;16459:::-;16601:3;16622:67;16686:2;16681:3;16622:67;:::i;:::-;16615:74;;16698:93;16787:3;16698:93;:::i;:::-;16816:2;16811:3;16807:12;16800:19;;16459:366;;;:::o;16831:118::-;16918:24;16936:5;16918:24;:::i;:::-;16913:3;16906:37;16831:118;;:::o;16955:429::-;17132:3;17154:92;17242:3;17233:6;17154:92;:::i;:::-;17147:99;;17263:95;17354:3;17345:6;17263:95;:::i;:::-;17256:102;;17375:3;17368:10;;16955:429;;;;;:::o;17390:222::-;17483:4;17521:2;17510:9;17506:18;17498:26;;17534:71;17602:1;17591:9;17587:17;17578:6;17534:71;:::i;:::-;17390:222;;;;:::o;17618:640::-;17813:4;17851:3;17840:9;17836:19;17828:27;;17865:71;17933:1;17922:9;17918:17;17909:6;17865:71;:::i;:::-;17946:72;18014:2;18003:9;17999:18;17990:6;17946:72;:::i;:::-;18028;18096:2;18085:9;18081:18;18072:6;18028:72;:::i;:::-;18147:9;18141:4;18137:20;18132:2;18121:9;18117:18;18110:48;18175:76;18246:4;18237:6;18175:76;:::i;:::-;18167:84;;17618:640;;;;;;;:::o;18264:210::-;18351:4;18389:2;18378:9;18374:18;18366:26;;18402:65;18464:1;18453:9;18449:17;18440:6;18402:65;:::i;:::-;18264:210;;;;:::o;18480:313::-;18593:4;18631:2;18620:9;18616:18;18608:26;;18680:9;18674:4;18670:20;18666:1;18655:9;18651:17;18644:47;18708:78;18781:4;18772:6;18708:78;:::i;:::-;18700:86;;18480:313;;;;:::o;18799:419::-;18965:4;19003:2;18992:9;18988:18;18980:26;;19052:9;19046:4;19042:20;19038:1;19027:9;19023:17;19016:47;19080:131;19206:4;19080:131;:::i;:::-;19072:139;;18799:419;;;:::o;19224:::-;19390:4;19428:2;19417:9;19413:18;19405:26;;19477:9;19471:4;19467:20;19463:1;19452:9;19448:17;19441:47;19505:131;19631:4;19505:131;:::i;:::-;19497:139;;19224:419;;;:::o;19649:::-;19815:4;19853:2;19842:9;19838:18;19830:26;;19902:9;19896:4;19892:20;19888:1;19877:9;19873:17;19866:47;19930:131;20056:4;19930:131;:::i;:::-;19922:139;;19649:419;;;:::o;20074:::-;20240:4;20278:2;20267:9;20263:18;20255:26;;20327:9;20321:4;20317:20;20313:1;20302:9;20298:17;20291:47;20355:131;20481:4;20355:131;:::i;:::-;20347:139;;20074:419;;;:::o;20499:::-;20665:4;20703:2;20692:9;20688:18;20680:26;;20752:9;20746:4;20742:20;20738:1;20727:9;20723:17;20716:47;20780:131;20906:4;20780:131;:::i;:::-;20772:139;;20499:419;;;:::o;20924:::-;21090:4;21128:2;21117:9;21113:18;21105:26;;21177:9;21171:4;21167:20;21163:1;21152:9;21148:17;21141:47;21205:131;21331:4;21205:131;:::i;:::-;21197:139;;20924:419;;;:::o;21349:::-;21515:4;21553:2;21542:9;21538:18;21530:26;;21602:9;21596:4;21592:20;21588:1;21577:9;21573:17;21566:47;21630:131;21756:4;21630:131;:::i;:::-;21622:139;;21349:419;;;:::o;21774:::-;21940:4;21978:2;21967:9;21963:18;21955:26;;22027:9;22021:4;22017:20;22013:1;22002:9;21998:17;21991:47;22055:131;22181:4;22055:131;:::i;:::-;22047:139;;21774:419;;;:::o;22199:::-;22365:4;22403:2;22392:9;22388:18;22380:26;;22452:9;22446:4;22442:20;22438:1;22427:9;22423:17;22416:47;22480:131;22606:4;22480:131;:::i;:::-;22472:139;;22199:419;;;:::o;22624:::-;22790:4;22828:2;22817:9;22813:18;22805:26;;22877:9;22871:4;22867:20;22863:1;22852:9;22848:17;22841:47;22905:131;23031:4;22905:131;:::i;:::-;22897:139;;22624:419;;;:::o;23049:::-;23215:4;23253:2;23242:9;23238:18;23230:26;;23302:9;23296:4;23292:20;23288:1;23277:9;23273:17;23266:47;23330:131;23456:4;23330:131;:::i;:::-;23322:139;;23049:419;;;:::o;23474:::-;23640:4;23678:2;23667:9;23663:18;23655:26;;23727:9;23721:4;23717:20;23713:1;23702:9;23698:17;23691:47;23755:131;23881:4;23755:131;:::i;:::-;23747:139;;23474:419;;;:::o;23899:::-;24065:4;24103:2;24092:9;24088:18;24080:26;;24152:9;24146:4;24142:20;24138:1;24127:9;24123:17;24116:47;24180:131;24306:4;24180:131;:::i;:::-;24172:139;;23899:419;;;:::o;24324:::-;24490:4;24528:2;24517:9;24513:18;24505:26;;24577:9;24571:4;24567:20;24563:1;24552:9;24548:17;24541:47;24605:131;24731:4;24605:131;:::i;:::-;24597:139;;24324:419;;;:::o;24749:::-;24915:4;24953:2;24942:9;24938:18;24930:26;;25002:9;24996:4;24992:20;24988:1;24977:9;24973:17;24966:47;25030:131;25156:4;25030:131;:::i;:::-;25022:139;;24749:419;;;:::o;25174:::-;25340:4;25378:2;25367:9;25363:18;25355:26;;25427:9;25421:4;25417:20;25413:1;25402:9;25398:17;25391:47;25455:131;25581:4;25455:131;:::i;:::-;25447:139;;25174:419;;;:::o;25599:::-;25765:4;25803:2;25792:9;25788:18;25780:26;;25852:9;25846:4;25842:20;25838:1;25827:9;25823:17;25816:47;25880:131;26006:4;25880:131;:::i;:::-;25872:139;;25599:419;;;:::o;26024:::-;26190:4;26228:2;26217:9;26213:18;26205:26;;26277:9;26271:4;26267:20;26263:1;26252:9;26248:17;26241:47;26305:131;26431:4;26305:131;:::i;:::-;26297:139;;26024:419;;;:::o;26449:::-;26615:4;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26449:419;;;:::o;26874:::-;27040:4;27078:2;27067:9;27063:18;27055:26;;27127:9;27121:4;27117:20;27113:1;27102:9;27098:17;27091:47;27155:131;27281:4;27155:131;:::i;:::-;27147:139;;26874:419;;;:::o;27299:222::-;27392:4;27430:2;27419:9;27415:18;27407:26;;27443:71;27511:1;27500:9;27496:17;27487:6;27443:71;:::i;:::-;27299:222;;;;:::o;27527:129::-;27561:6;27588:20;;:::i;:::-;27578:30;;27617:33;27645:4;27637:6;27617:33;:::i;:::-;27527:129;;;:::o;27662:75::-;27695:6;27728:2;27722:9;27712:19;;27662:75;:::o;27743:307::-;27804:4;27894:18;27886:6;27883:30;27880:56;;;27916:18;;:::i;:::-;27880:56;27954:29;27976:6;27954:29;:::i;:::-;27946:37;;28038:4;28032;28028:15;28020:23;;27743:307;;;:::o;28056:308::-;28118:4;28208:18;28200:6;28197:30;28194:56;;;28230:18;;:::i;:::-;28194:56;28268:29;28290:6;28268:29;:::i;:::-;28260:37;;28352:4;28346;28342:15;28334:23;;28056:308;;;:::o;28370:141::-;28419:4;28442:3;28434:11;;28465:3;28462:1;28455:14;28499:4;28496:1;28486:18;28478:26;;28370:141;;;:::o;28517:98::-;28568:6;28602:5;28596:12;28586:22;;28517:98;;;:::o;28621:99::-;28673:6;28707:5;28701:12;28691:22;;28621:99;;;:::o;28726:168::-;28809:11;28843:6;28838:3;28831:19;28883:4;28878:3;28874:14;28859:29;;28726:168;;;;:::o;28900:169::-;28984:11;29018:6;29013:3;29006:19;29058:4;29053:3;29049:14;29034:29;;28900:169;;;;:::o;29075:148::-;29177:11;29214:3;29199:18;;29075:148;;;;:::o;29229:305::-;29269:3;29288:20;29306:1;29288:20;:::i;:::-;29283:25;;29322:20;29340:1;29322:20;:::i;:::-;29317:25;;29476:1;29408:66;29404:74;29401:1;29398:81;29395:107;;;29482:18;;:::i;:::-;29395:107;29526:1;29523;29519:9;29512:16;;29229:305;;;;:::o;29540:185::-;29580:1;29597:20;29615:1;29597:20;:::i;:::-;29592:25;;29631:20;29649:1;29631:20;:::i;:::-;29626:25;;29670:1;29660:35;;29675:18;;:::i;:::-;29660:35;29717:1;29714;29710:9;29705:14;;29540:185;;;;:::o;29731:348::-;29771:7;29794:20;29812:1;29794:20;:::i;:::-;29789:25;;29828:20;29846:1;29828:20;:::i;:::-;29823:25;;30016:1;29948:66;29944:74;29941:1;29938:81;29933:1;29926:9;29919:17;29915:105;29912:131;;;30023:18;;:::i;:::-;29912:131;30071:1;30068;30064:9;30053:20;;29731:348;;;;:::o;30085:191::-;30125:4;30145:20;30163:1;30145:20;:::i;:::-;30140:25;;30179:20;30197:1;30179:20;:::i;:::-;30174:25;;30218:1;30215;30212:8;30209:34;;;30223:18;;:::i;:::-;30209:34;30268:1;30265;30261:9;30253:17;;30085:191;;;;:::o;30282:96::-;30319:7;30348:24;30366:5;30348:24;:::i;:::-;30337:35;;30282:96;;;:::o;30384:90::-;30418:7;30461:5;30454:13;30447:21;30436:32;;30384:90;;;:::o;30480:149::-;30516:7;30556:66;30549:5;30545:78;30534:89;;30480:149;;;:::o;30635:126::-;30672:7;30712:42;30705:5;30701:54;30690:65;;30635:126;;;:::o;30767:77::-;30804:7;30833:5;30822:16;;30767:77;;;:::o;30850:154::-;30934:6;30929:3;30924;30911:30;30996:1;30987:6;30982:3;30978:16;30971:27;30850:154;;;:::o;31010:307::-;31078:1;31088:113;31102:6;31099:1;31096:13;31088:113;;;31187:1;31182:3;31178:11;31172:18;31168:1;31163:3;31159:11;31152:39;31124:2;31121:1;31117:10;31112:15;;31088:113;;;31219:6;31216:1;31213:13;31210:101;;;31299:1;31290:6;31285:3;31281:16;31274:27;31210:101;31059:258;31010:307;;;:::o;31323:320::-;31367:6;31404:1;31398:4;31394:12;31384:22;;31451:1;31445:4;31441:12;31472:18;31462:81;;31528:4;31520:6;31516:17;31506:27;;31462:81;31590:2;31582:6;31579:14;31559:18;31556:38;31553:84;;;31609:18;;:::i;:::-;31553:84;31374:269;31323:320;;;:::o;31649:281::-;31732:27;31754:4;31732:27;:::i;:::-;31724:6;31720:40;31862:6;31850:10;31847:22;31826:18;31814:10;31811:34;31808:62;31805:88;;;31873:18;;:::i;:::-;31805:88;31913:10;31909:2;31902:22;31692:238;31649:281;;:::o;31936:233::-;31975:3;31998:24;32016:5;31998:24;:::i;:::-;31989:33;;32044:66;32037:5;32034:77;32031:103;;;32114:18;;:::i;:::-;32031:103;32161:1;32154:5;32150:13;32143:20;;31936:233;;;:::o;32175:176::-;32207:1;32224:20;32242:1;32224:20;:::i;:::-;32219:25;;32258:20;32276:1;32258:20;:::i;:::-;32253:25;;32297:1;32287:35;;32302:18;;:::i;:::-;32287:35;32343:1;32340;32336:9;32331:14;;32175:176;;;;:::o;32357:180::-;32405:77;32402:1;32395:88;32502:4;32499:1;32492:15;32526:4;32523:1;32516:15;32543:180;32591:77;32588:1;32581:88;32688:4;32685:1;32678:15;32712:4;32709:1;32702:15;32729:180;32777:77;32774:1;32767:88;32874:4;32871:1;32864:15;32898:4;32895:1;32888:15;32915:180;32963:77;32960:1;32953:88;33060:4;33057:1;33050:15;33084:4;33081:1;33074:15;33101:180;33149:77;33146:1;33139:88;33246:4;33243:1;33236:15;33270:4;33267:1;33260:15;33287:117;33396:1;33393;33386:12;33410:117;33519:1;33516;33509:12;33533:117;33642:1;33639;33632:12;33656:117;33765:1;33762;33755:12;33779:102;33820:6;33871:2;33867:7;33862:2;33855:5;33851:14;33847:28;33837:38;;33779:102;;;:::o;33887:237::-;34027:34;34023:1;34015:6;34011:14;34004:58;34096:20;34091:2;34083:6;34079:15;34072:45;33887:237;:::o;34130:225::-;34270:34;34266:1;34258:6;34254:14;34247:58;34339:8;34334:2;34326:6;34322:15;34315:33;34130:225;:::o;34361:224::-;34501:34;34497:1;34489:6;34485:14;34478:58;34570:7;34565:2;34557:6;34553:15;34546:32;34361:224;:::o;34591:221::-;34731:34;34727:1;34719:6;34715:14;34708:58;34800:4;34795:2;34787:6;34783:15;34776:29;34591:221;:::o;34818:178::-;34958:30;34954:1;34946:6;34942:14;34935:54;34818:178;:::o;35002:223::-;35142:34;35138:1;35130:6;35126:14;35119:58;35211:6;35206:2;35198:6;35194:15;35187:31;35002:223;:::o;35231:175::-;35371:27;35367:1;35359:6;35355:14;35348:51;35231:175;:::o;35412:220::-;35552:34;35548:1;35540:6;35536:14;35529:58;35621:3;35616:2;35608:6;35604:15;35597:28;35412:220;:::o;35638:231::-;35778:34;35774:1;35766:6;35762:14;35755:58;35847:14;35842:2;35834:6;35830:15;35823:39;35638:231;:::o;35875:178::-;36015:30;36011:1;36003:6;35999:14;35992:54;35875:178;:::o;36059:243::-;36199:34;36195:1;36187:6;36183:14;36176:58;36268:26;36263:2;36255:6;36251:15;36244:51;36059:243;:::o;36308:174::-;36448:26;36444:1;36436:6;36432:14;36425:50;36308:174;:::o;36488:229::-;36628:34;36624:1;36616:6;36612:14;36605:58;36697:12;36692:2;36684:6;36680:15;36673:37;36488:229;:::o;36723:228::-;36863:34;36859:1;36851:6;36847:14;36840:58;36932:11;36927:2;36919:6;36915:15;36908:36;36723:228;:::o;36957:182::-;37097:34;37093:1;37085:6;37081:14;37074:58;36957:182;:::o;37145:231::-;37285:34;37281:1;37273:6;37269:14;37262:58;37354:14;37349:2;37341:6;37337:15;37330:39;37145:231;:::o;37382:182::-;37522:34;37518:1;37510:6;37506:14;37499:58;37382:182;:::o;37570:234::-;37710:34;37706:1;37698:6;37694:14;37687:58;37779:17;37774:2;37766:6;37762:15;37755:42;37570:234;:::o;37810:220::-;37950:34;37946:1;37938:6;37934:14;37927:58;38019:3;38014:2;38006:6;38002:15;37995:28;37810:220;:::o;38036:236::-;38176:34;38172:1;38164:6;38160:14;38153:58;38245:19;38240:2;38232:6;38228:15;38221:44;38036:236;:::o;38278:122::-;38351:24;38369:5;38351:24;:::i;:::-;38344:5;38341:35;38331:63;;38390:1;38387;38380:12;38331:63;38278:122;:::o;38406:116::-;38476:21;38491:5;38476:21;:::i;:::-;38469:5;38466:32;38456:60;;38512:1;38509;38502:12;38456:60;38406:116;:::o;38528:120::-;38600:23;38617:5;38600:23;:::i;:::-;38593:5;38590:34;38580:62;;38638:1;38635;38628:12;38580:62;38528:120;:::o;38654:122::-;38727:24;38745:5;38727:24;:::i;:::-;38720:5;38717:35;38707:63;;38766:1;38763;38756:12;38707:63;38654:122;:::o
Swarm Source
ipfs://177095c1fa0f4f285de800dc4e7aee31d8565e135830c2377e21ac18c9274b15
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.