Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,510 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 62680917 | 58 days ago | IN | 0 POL | 0.00144995 | ||||
Set Approval For... | 61272232 | 93 days ago | IN | 0 POL | 0.00080001 | ||||
Set Approval For... | 61272228 | 93 days ago | IN | 0 POL | 0.00139701 | ||||
Set Approval For... | 49555008 | 394 days ago | IN | 0 POL | 0.0030574 | ||||
Set Approval For... | 46288088 | 476 days ago | IN | 0 POL | 0.00232546 | ||||
Set Approval For... | 44738566 | 516 days ago | IN | 0 POL | 0.00534295 | ||||
Set Approval For... | 40431007 | 627 days ago | IN | 0 POL | 0.00304373 | ||||
Set Approval For... | 40141235 | 634 days ago | IN | 0 POL | 0.00552909 | ||||
Set Approval For... | 40017985 | 638 days ago | IN | 0 POL | 0.00332486 | ||||
Set Approval For... | 38602080 | 675 days ago | IN | 0 POL | 0.00652536 | ||||
Mint | 38601555 | 675 days ago | IN | 0 POL | 0.00563211 | ||||
Mint | 38601446 | 675 days ago | IN | 0 POL | 0.00519548 | ||||
Set Approval For... | 38601421 | 675 days ago | IN | 0 POL | 0.00457476 | ||||
Set Approval For... | 38601400 | 675 days ago | IN | 0 POL | 0.00402155 | ||||
Set Approval For... | 38601052 | 675 days ago | IN | 0 POL | 0.00422265 | ||||
Set Approval For... | 38601024 | 675 days ago | IN | 0 POL | 0.00339953 | ||||
Mint | 38600877 | 675 days ago | IN | 0 POL | 0.00416831 | ||||
Mint | 38600877 | 675 days ago | IN | 0 POL | 0.00438711 | ||||
Mint | 38600875 | 675 days ago | IN | 0 POL | 0.00421491 | ||||
Mint | 38600875 | 675 days ago | IN | 0 POL | 0.00421491 | ||||
Mint | 38600863 | 675 days ago | IN | 0 POL | 0.00433285 | ||||
Mint | 38600859 | 675 days ago | IN | 0 POL | 0.00439992 | ||||
Mint | 38600859 | 675 days ago | IN | 0 POL | 0.00442408 | ||||
Mint | 38600859 | 675 days ago | IN | 0 POL | 0.00442485 | ||||
Mint | 38600859 | 675 days ago | IN | 0 POL | 0.00442562 |
Loading...
Loading
Contract Name:
Fweb3Diamond
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-02-19 */ // File: @openzeppelin/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: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts 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: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts 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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _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: fweb3diamondnft.sol pragma solidity ^0.8.4; contract Fweb3Diamond is ERC721, Ownable { constructor() ERC721("Fweb3 Diamond NFT", "FWEB3DIAMONDNFT") {} function toString(uint256 value) internal pure returns (string memory) { 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); } function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function getHue(uint256 tokenId) public pure returns (string memory) { uint256 rand = random(string(abi.encodePacked(toString(tokenId)))); uint256 hue = rand % 360; return Strings.toString(hue); } function getSaturation(uint256 tokenId) public pure returns (string memory) { uint256 rand = random(string(abi.encodePacked(toString(tokenId)))); uint256 saturation = rand % 100; return Strings.toString(saturation); } function getBackgroundColor(uint256 tokenId) public pure returns (string memory) { uint256 rand = random(string(abi.encodePacked(toString(tokenId)))); bytes32 val = bytes32(rand); bytes memory hx = "0123456789ABCDEF"; bytes memory str = new bytes(6); for (uint i = 0; i < 6; i++) { str[i] = hx[uint8(val[i]) & 0x0f]; } return string(str); } function tokenURI(uint256 tokenId) override public pure returns (string memory) { string[17] memory parts; string memory hueAndSaturation = string(abi.encodePacked(getHue(tokenId), ",", getSaturation(tokenId))); string memory backgroundColor = getBackgroundColor(tokenId); parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 512 512"><rect width="100%" height="100%" fill="#'; parts[1] = backgroundColor; parts[2] = '"/><path d="M256 372.057L378 203.686L331.4 140H180.6L134 203.686L256 372.057Z" fill="hsl('; parts[3] = hueAndSaturation; parts[4] = '%,79%)"/><path d="M180.601 140L215.332 203.689H134L180.601 140Z" fill="hsl('; parts[5] = hueAndSaturation; parts[6] = '%,82%)"/><path d="M331.4 140L296.664 203.689L255.998 140H331.4Z" fill="hsl('; parts[7] = hueAndSaturation; parts[8] = '%,82%)"/><path d="M296.664 203.689L255.998 372.056L215.332 203.689H296.664Z" fill="hsl('; parts[9] = hueAndSaturation; parts[10] = '%,82%)"/><path d="M331.4 140L377.995 203.689H296.664L331.4 140Z" fill="hsl('; parts[11] = hueAndSaturation; parts[12] = '%,94%)"/><path d="M255.998 140L296.664 203.689H215.332L255.998 140Z" fill="hsl('; parts[13] = hueAndSaturation; parts[14] = '%,94%)"/><path d="M215.332 203.689L255.998 372.056L134 203.689H215.332Z" fill="hsl('; parts[15] = hueAndSaturation; parts[16] = '%,94%)"/></svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8])); output = string(abi.encodePacked(output, parts[9], parts[10], parts[11], parts[12], parts[13], parts[14], parts[15], parts[16])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Fweb3 Diamond NFT", "description": "This NFT represents participation in Fweb3 2022.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function mint(uint256 tokenId) public { _safeMint(_msgSender(), tokenId); } } library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
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":"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getBackgroundColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getHue","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSaturation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601181526020017f4677656233204469616d6f6e64204e46540000000000000000000000000000008152506040518060400160405280600f81526020017f46574542334449414d4f4e444e46540000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613bb380620002cb6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a22cb46511610071578063a22cb46514610355578063b88d4fde14610371578063c87b56dd1461038d578063e985e9c5146103bd578063f2fde38b146103ed5761012c565b806370a08231146102c3578063715018a6146102f35780638da5cb5b146102fd57806395d89b411461031b578063a0712d68146103395761012c565b80632fd1c7d7116100f45780632fd1c7d7146101e757806342842e0e146102175780634671059f146102335780635e91b20b146102635780636352211e146102935761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806323b872dd146101cb575b600080fd5b61014b600480360381019061014691906126eb565b610409565b6040516101589190612c56565b60405180910390f35b6101696104eb565b6040516101769190612c71565b60405180910390f35b61019960048036038101906101949190612745565b61057d565b6040516101a69190612bef565b60405180910390f35b6101c960048036038101906101c491906126ab565b610602565b005b6101e560048036038101906101e09190612595565b61071a565b005b61020160048036038101906101fc9190612745565b61077a565b60405161020e9190612c71565b60405180910390f35b610231600480360381019061022c9190612595565b6107d4565b005b61024d60048036038101906102489190612745565b6107f4565b60405161025a9190612c71565b60405180910390f35b61027d60048036038101906102789190612745565b610969565b60405161028a9190612c71565b60405180910390f35b6102ad60048036038101906102a89190612745565b6109c2565b6040516102ba9190612bef565b60405180910390f35b6102dd60048036038101906102d89190612528565b610a74565b6040516102ea9190612e73565b60405180910390f35b6102fb610b2c565b005b610305610bb4565b6040516103129190612bef565b60405180910390f35b610323610bde565b6040516103309190612c71565b60405180910390f35b610353600480360381019061034e9190612745565b610c70565b005b61036f600480360381019061036a919061266b565b610c84565b005b61038b600480360381019061038691906125e8565b610c9a565b005b6103a760048036038101906103a29190612745565b610cfc565b6040516103b49190612c71565b60405180910390f35b6103d760048036038101906103d29190612555565b61128c565b6040516103e49190612c56565b60405180910390f35b61040760048036038101906104029190612528565b611320565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e457506104e382611418565b5b9050919050565b6060600080546104fa906130f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610526906130f2565b80156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b5050505050905090565b600061058882611482565b6105c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be90612df3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061060d826109c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590612e33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661069d6114ee565b73ffffffffffffffffffffffffffffffffffffffff1614806106cc57506106cb816106c66114ee565b61128c565b5b61070b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070290612d73565b60405180910390fd5b61071583836114f6565b505050565b61072b6107256114ee565b826115af565b61076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076190612e53565b60405180910390fd5b61077583838361168d565b505050565b606060006107ae61078a846118f4565b60405160200161079a9190612adb565b604051602081830303815290604052611a55565b90506000610168826107c0919061319e565b90506107cb81611a88565b92505050919050565b6107ef83838360405180602001604052806000815250610c9a565b505050565b60606000610828610804846118f4565b6040516020016108149190612adb565b604051602081830303815290604052611a55565b905060008160001b905060006040518060400160405280601081526020017f303132333435363738394142434445460000000000000000000000000000000081525090506000600667ffffffffffffffff8111156108895761088861328b565b5b6040519080825280601f01601f1916602001820160405280156108bb5781602001600182028036833780820191505090505b50905060005b600681101561095c5782600f8583602081106108e0576108df61325c565b5b1a60f81b60f81c1660ff16815181106108fc576108fb61325c565b5b602001015160f81c60f81b82828151811061091a5761091961325c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061095490613155565b9150506108c1565b5080945050505050919050565b6060600061099d610979846118f4565b6040516020016109899190612adb565b604051602081830303815290604052611a55565b905060006064826109ae919061319e565b90506109b981611a88565b92505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290612db3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc90612d93565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b346114ee565b73ffffffffffffffffffffffffffffffffffffffff16610b52610bb4565b73ffffffffffffffffffffffffffffffffffffffff1614610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90612e13565b60405180910390fd5b610bb26000611be9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610bed906130f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c19906130f2565b8015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b5050505050905090565b610c81610c7b6114ee565b82611caf565b50565b610c96610c8f6114ee565b8383611ccd565b5050565b610cab610ca56114ee565b836115af565b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190612e53565b60405180910390fd5b610cf684848484611e3a565b50505050565b6060610d06612427565b6000610d118461077a565b610d1a85610969565b604051602001610d2b929190612b71565b60405160208183030381529060405290506000610d47856107f4565b90506040518060c00160405280608a815260200161391f608a913983600060118110610d7657610d7561325c565b5b60200201819052508083600160118110610d9357610d9261325c565b5b6020020181905250604051806080016040528060598152602001613ace6059913983600260118110610dc857610dc761325c565b5b60200201819052508183600360118110610de557610de461325c565b5b60200201819052506040518060800160405280604b8152602001613881604b913983600460118110610e1a57610e1961325c565b5b60200201819052508183600560118110610e3757610e3661325c565b5b60200201819052506040518060800160405280604b81526020016139a9604b913983600660118110610e6c57610e6b61325c565b5b60200201819052508183600760118110610e8957610e8861325c565b5b6020020181905250604051806080016040528060578152602001613b276057913983600860118110610ebe57610ebd61325c565b5b60200201819052508183600960118110610edb57610eda61325c565b5b60200201819052506040518060800160405280604b8152602001613a83604b913983600a60118110610f1057610f0f61325c565b5b60200201819052508183600b60118110610f2d57610f2c61325c565b5b60200201819052506040518060800160405280604f81526020016139f4604f913983600c60118110610f6257610f6161325c565b5b60200201819052508183600d60118110610f7f57610f7e61325c565b5b60200201819052506040518060800160405280605381526020016138cc6053913983600e60118110610fb457610fb361325c565b5b60200201819052508183600f60118110610fd157610fd061325c565b5b60200201819052506040518060400160405280600f81526020017f252c39342529222f3e3c2f7376673e0000000000000000000000000000000000815250836010601181106110235761102261325c565b5b60200201819052506000836000601181106110415761104061325c565b5b60200201518460016011811061105a5761105961325c565b5b6020020151856002601181106110735761107261325c565b5b60200201518660036011811061108c5761108b61325c565b5b6020020151876004601181106110a5576110a461325c565b5b6020020151886005601181106110be576110bd61325c565b5b6020020151896006601181106110d7576110d661325c565b5b60200201518a6007601181106110f0576110ef61325c565b5b60200201518b6008601181106111095761110861325c565b5b602002015160405160200161112699989796959493929190612af2565b6040516020818303038152906040529050808460096011811061114c5761114b61325c565b5b602002015185600a601181106111655761116461325c565b5b602002015186600b6011811061117e5761117d61325c565b5b602002015187600c601181106111975761119661325c565b5b602002015188600d601181106111b0576111af61325c565b5b602002015189600e601181106111c9576111c861325c565b5b60200201518a600f601181106111e2576111e161325c565b5b60200201518b6010601181106111fb576111fa61325c565b5b602002015160405160200161121899989796959493929190612af2565b6040516020818303038152906040529050600061125b61123783611e96565b6040516020016112479190612ba0565b604051602081830303815290604052611e96565b90508060405160200161126e9190612bcd565b60405160208183030381529060405291508195505050505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113286114ee565b73ffffffffffffffffffffffffffffffffffffffff16611346610bb4565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390612e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612cb3565b60405180910390fd5b61141581611be9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611569836109c2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115ba82611482565b6115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090612d53565b60405180910390fd5b6000611604836109c2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061167357508373ffffffffffffffffffffffffffffffffffffffff1661165b8461057d565b73ffffffffffffffffffffffffffffffffffffffff16145b806116845750611683818561128c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116ad826109c2565b73ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90612cd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90612d13565b60405180910390fd5b61177e83838361202e565b6117896000826114f6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d99190613008565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118309190612f27565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118ef838383612033565b505050565b6060600082141561193c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a50565b600082905060005b6000821461196e57808061195790613155565b915050600a826119679190612f7d565b9150611944565b60008167ffffffffffffffff81111561198a5761198961328b565b5b6040519080825280601f01601f1916602001820160405280156119bc5781602001600182028036833780820191505090505b5090505b60008514611a49576001826119d59190613008565b9150600a856119e4919061319e565b60306119f09190612f27565b60f81b818381518110611a0657611a0561325c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a429190612f7d565b94506119c0565b8093505050505b919050565b600081604051602001611a689190612adb565b6040516020818303038152906040528051906020012060001c9050919050565b60606000821415611ad0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611be4565b600082905060005b60008214611b02578080611aeb90613155565b915050600a82611afb9190612f7d565b9150611ad8565b60008167ffffffffffffffff811115611b1e57611b1d61328b565b5b6040519080825280601f01601f191660200182016040528015611b505781602001600182028036833780820191505090505b5090505b60008514611bdd57600182611b699190613008565b9150600a85611b78919061319e565b6030611b849190612f27565b60f81b818381518110611b9a57611b9961325c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bd69190612f7d565b9450611b54565b8093505050505b919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611cc9828260405180602001604052806000815250612038565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390612d33565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2d9190612c56565b60405180910390a3505050565b611e4584848461168d565b611e5184848484612093565b611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790612c93565b60405180910390fd5b50505050565b60606000825190506000811415611ebf5760405180602001604052806000815250915050612029565b60006003600283611ed09190612f27565b611eda9190612f7d565b6004611ee69190612fae565b90506000602082611ef79190612f27565b67ffffffffffffffff811115611f1057611f0f61328b565b5b6040519080825280601f01601f191660200182016040528015611f425781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001613a43604091399050600181016020830160005b86811015611fe65760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050611f6d565b50600386066001811461200057600281146120105761201b565b613d3d60f01b600283035261201b565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b505050565b612042838361222a565b61204f6000848484612093565b61208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590612c93565b60405180910390fd5b505050565b60006120b48473ffffffffffffffffffffffffffffffffffffffff16612404565b1561221d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120dd6114ee565b8786866040518563ffffffff1660e01b81526004016120ff9493929190612c0a565b602060405180830381600087803b15801561211957600080fd5b505af192505050801561214a57506040513d601f19601f820116820180604052508101906121479190612718565b60015b6121cd573d806000811461217a576040519150601f19603f3d011682016040523d82523d6000602084013e61217f565b606091505b506000815114156121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90612c93565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612222565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190612dd3565b60405180910390fd5b6122a381611482565b156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90612cf3565b60405180910390fd5b6122ef6000838361202e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461233f9190612f27565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461240060008383612033565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518061022001604052806011905b60608152602001906001900390816124375790505090565b600061246261245d84612eb3565b612e8e565b90508281526020810184848401111561247e5761247d6132bf565b5b6124898482856130b0565b509392505050565b6000813590506124a081613824565b92915050565b6000813590506124b58161383b565b92915050565b6000813590506124ca81613852565b92915050565b6000815190506124df81613852565b92915050565b600082601f8301126124fa576124f96132ba565b5b813561250a84826020860161244f565b91505092915050565b60008135905061252281613869565b92915050565b60006020828403121561253e5761253d6132c9565b5b600061254c84828501612491565b91505092915050565b6000806040838503121561256c5761256b6132c9565b5b600061257a85828601612491565b925050602061258b85828601612491565b9150509250929050565b6000806000606084860312156125ae576125ad6132c9565b5b60006125bc86828701612491565b93505060206125cd86828701612491565b92505060406125de86828701612513565b9150509250925092565b60008060008060808587031215612602576126016132c9565b5b600061261087828801612491565b945050602061262187828801612491565b935050604061263287828801612513565b925050606085013567ffffffffffffffff811115612653576126526132c4565b5b61265f878288016124e5565b91505092959194509250565b60008060408385031215612682576126816132c9565b5b600061269085828601612491565b92505060206126a1858286016124a6565b9150509250929050565b600080604083850312156126c2576126c16132c9565b5b60006126d085828601612491565b92505060206126e185828601612513565b9150509250929050565b600060208284031215612701576127006132c9565b5b600061270f848285016124bb565b91505092915050565b60006020828403121561272e5761272d6132c9565b5b600061273c848285016124d0565b91505092915050565b60006020828403121561275b5761275a6132c9565b5b600061276984828501612513565b91505092915050565b61277b8161303c565b82525050565b61278a8161304e565b82525050565b600061279b82612ee4565b6127a58185612efa565b93506127b58185602086016130bf565b6127be816132ce565b840191505092915050565b60006127d482612eef565b6127de8185612f0b565b93506127ee8185602086016130bf565b6127f7816132ce565b840191505092915050565b600061280d82612eef565b6128178185612f1c565b93506128278185602086016130bf565b80840191505092915050565b6000612840603283612f0b565b915061284b826132df565b604082019050919050565b6000612863602683612f0b565b915061286e8261332e565b604082019050919050565b6000612886602583612f0b565b91506128918261337d565b604082019050919050565b60006128a9601c83612f0b565b91506128b4826133cc565b602082019050919050565b60006128cc600183612f1c565b91506128d7826133f5565b600182019050919050565b60006128ef602483612f0b565b91506128fa8261341e565b604082019050919050565b6000612912601983612f0b565b915061291d8261346d565b602082019050919050565b6000612935602c83612f0b565b915061294082613496565b604082019050919050565b6000612958603883612f0b565b9150612963826134e5565b604082019050919050565b600061297b602a83612f0b565b915061298682613534565b604082019050919050565b600061299e602983612f0b565b91506129a982613583565b604082019050919050565b60006129c1608583612f1c565b91506129cc826135d2565b608582019050919050565b60006129e4600283612f1c565b91506129ef82613693565b600282019050919050565b6000612a07602083612f0b565b9150612a12826136bc565b602082019050919050565b6000612a2a602c83612f0b565b9150612a35826136e5565b604082019050919050565b6000612a4d602083612f0b565b9150612a5882613734565b602082019050919050565b6000612a70602183612f0b565b9150612a7b8261375d565b604082019050919050565b6000612a93601d83612f1c565b9150612a9e826137ac565b601d82019050919050565b6000612ab6603183612f0b565b9150612ac1826137d5565b604082019050919050565b612ad5816130a6565b82525050565b6000612ae78284612802565b915081905092915050565b6000612afe828c612802565b9150612b0a828b612802565b9150612b16828a612802565b9150612b228289612802565b9150612b2e8288612802565b9150612b3a8287612802565b9150612b468286612802565b9150612b528285612802565b9150612b5e8284612802565b91508190509a9950505050505050505050565b6000612b7d8285612802565b9150612b88826128bf565b9150612b948284612802565b91508190509392505050565b6000612bab826129b4565b9150612bb78284612802565b9150612bc2826129d7565b915081905092915050565b6000612bd882612a86565b9150612be48284612802565b915081905092915050565b6000602082019050612c046000830184612772565b92915050565b6000608082019050612c1f6000830187612772565b612c2c6020830186612772565b612c396040830185612acc565b8181036060830152612c4b8184612790565b905095945050505050565b6000602082019050612c6b6000830184612781565b92915050565b60006020820190508181036000830152612c8b81846127c9565b905092915050565b60006020820190508181036000830152612cac81612833565b9050919050565b60006020820190508181036000830152612ccc81612856565b9050919050565b60006020820190508181036000830152612cec81612879565b9050919050565b60006020820190508181036000830152612d0c8161289c565b9050919050565b60006020820190508181036000830152612d2c816128e2565b9050919050565b60006020820190508181036000830152612d4c81612905565b9050919050565b60006020820190508181036000830152612d6c81612928565b9050919050565b60006020820190508181036000830152612d8c8161294b565b9050919050565b60006020820190508181036000830152612dac8161296e565b9050919050565b60006020820190508181036000830152612dcc81612991565b9050919050565b60006020820190508181036000830152612dec816129fa565b9050919050565b60006020820190508181036000830152612e0c81612a1d565b9050919050565b60006020820190508181036000830152612e2c81612a40565b9050919050565b60006020820190508181036000830152612e4c81612a63565b9050919050565b60006020820190508181036000830152612e6c81612aa9565b9050919050565b6000602082019050612e886000830184612acc565b92915050565b6000612e98612ea9565b9050612ea48282613124565b919050565b6000604051905090565b600067ffffffffffffffff821115612ece57612ecd61328b565b5b612ed7826132ce565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f32826130a6565b9150612f3d836130a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f7257612f716131cf565b5b828201905092915050565b6000612f88826130a6565b9150612f93836130a6565b925082612fa357612fa26131fe565b5b828204905092915050565b6000612fb9826130a6565b9150612fc4836130a6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ffd57612ffc6131cf565b5b828202905092915050565b6000613013826130a6565b915061301e836130a6565b925082821015613031576130306131cf565b5b828203905092915050565b600061304782613086565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156130dd5780820151818401526020810190506130c2565b838111156130ec576000848401525b50505050565b6000600282049050600182168061310a57607f821691505b6020821081141561311e5761311d61322d565b5b50919050565b61312d826132ce565b810181811067ffffffffffffffff8211171561314c5761314b61328b565b5b80604052505050565b6000613160826130a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613193576131926131cf565b5b600182019050919050565b60006131a9826130a6565b91506131b4836130a6565b9250826131c4576131c36131fe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20224677656233204469616d6f6e64204e4654222c20226460008201527f65736372697074696f6e223a202254686973204e465420726570726573656e7460208201527f732070617274696369706174696f6e20696e20467765623320323032322e222c60408201527f2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b626160608201527f736536342c000000000000000000000000000000000000000000000000000000608082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61382d8161303c565b811461383857600080fd5b50565b6138448161304e565b811461384f57600080fd5b50565b61385b8161305a565b811461386657600080fd5b50565b613872816130a6565b811461387d57600080fd5b5056fe252c37392529222f3e3c7061746820643d224d3138302e363031203134304c3231352e333332203230332e363839483133344c3138302e363031203134305a222066696c6c3d2268736c28252c39342529222f3e3c7061746820643d224d3231352e333332203230332e3638394c3235352e393938203337322e3035364c313334203230332e363839483231352e3333325a222066696c6c3d2268736c283c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302035313220353132223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223252c38322529222f3e3c7061746820643d224d3333312e34203134304c3239362e363634203230332e3638394c3235352e39393820313430483333312e345a222066696c6c3d2268736c28252c39342529222f3e3c7061746820643d224d3235352e393938203134304c3239362e363634203230332e363839483231352e3333324c3235352e393938203134305a222066696c6c3d2268736c284142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f252c38322529222f3e3c7061746820643d224d3333312e34203134304c3337372e393935203230332e363839483239362e3636344c3333312e34203134305a222066696c6c3d2268736c28222f3e3c7061746820643d224d323536203337322e3035374c333738203230332e3638364c3333312e3420313430483138302e364c313334203230332e3638364c323536203337322e3035375a222066696c6c3d2268736c28252c38322529222f3e3c7061746820643d224d3239362e363634203230332e3638394c3235352e393938203337322e3035364c3231352e333332203230332e363839483239362e3636345a222066696c6c3d2268736c28a2646970667358221220d7e8757e51a463cdd5f6cbf91d6129fabca36dba4c579d340be636fe68ea18ab64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a22cb46511610071578063a22cb46514610355578063b88d4fde14610371578063c87b56dd1461038d578063e985e9c5146103bd578063f2fde38b146103ed5761012c565b806370a08231146102c3578063715018a6146102f35780638da5cb5b146102fd57806395d89b411461031b578063a0712d68146103395761012c565b80632fd1c7d7116100f45780632fd1c7d7146101e757806342842e0e146102175780634671059f146102335780635e91b20b146102635780636352211e146102935761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806323b872dd146101cb575b600080fd5b61014b600480360381019061014691906126eb565b610409565b6040516101589190612c56565b60405180910390f35b6101696104eb565b6040516101769190612c71565b60405180910390f35b61019960048036038101906101949190612745565b61057d565b6040516101a69190612bef565b60405180910390f35b6101c960048036038101906101c491906126ab565b610602565b005b6101e560048036038101906101e09190612595565b61071a565b005b61020160048036038101906101fc9190612745565b61077a565b60405161020e9190612c71565b60405180910390f35b610231600480360381019061022c9190612595565b6107d4565b005b61024d60048036038101906102489190612745565b6107f4565b60405161025a9190612c71565b60405180910390f35b61027d60048036038101906102789190612745565b610969565b60405161028a9190612c71565b60405180910390f35b6102ad60048036038101906102a89190612745565b6109c2565b6040516102ba9190612bef565b60405180910390f35b6102dd60048036038101906102d89190612528565b610a74565b6040516102ea9190612e73565b60405180910390f35b6102fb610b2c565b005b610305610bb4565b6040516103129190612bef565b60405180910390f35b610323610bde565b6040516103309190612c71565b60405180910390f35b610353600480360381019061034e9190612745565b610c70565b005b61036f600480360381019061036a919061266b565b610c84565b005b61038b600480360381019061038691906125e8565b610c9a565b005b6103a760048036038101906103a29190612745565b610cfc565b6040516103b49190612c71565b60405180910390f35b6103d760048036038101906103d29190612555565b61128c565b6040516103e49190612c56565b60405180910390f35b61040760048036038101906104029190612528565b611320565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e457506104e382611418565b5b9050919050565b6060600080546104fa906130f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610526906130f2565b80156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b5050505050905090565b600061058882611482565b6105c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105be90612df3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061060d826109c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590612e33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661069d6114ee565b73ffffffffffffffffffffffffffffffffffffffff1614806106cc57506106cb816106c66114ee565b61128c565b5b61070b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070290612d73565b60405180910390fd5b61071583836114f6565b505050565b61072b6107256114ee565b826115af565b61076a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076190612e53565b60405180910390fd5b61077583838361168d565b505050565b606060006107ae61078a846118f4565b60405160200161079a9190612adb565b604051602081830303815290604052611a55565b90506000610168826107c0919061319e565b90506107cb81611a88565b92505050919050565b6107ef83838360405180602001604052806000815250610c9a565b505050565b60606000610828610804846118f4565b6040516020016108149190612adb565b604051602081830303815290604052611a55565b905060008160001b905060006040518060400160405280601081526020017f303132333435363738394142434445460000000000000000000000000000000081525090506000600667ffffffffffffffff8111156108895761088861328b565b5b6040519080825280601f01601f1916602001820160405280156108bb5781602001600182028036833780820191505090505b50905060005b600681101561095c5782600f8583602081106108e0576108df61325c565b5b1a60f81b60f81c1660ff16815181106108fc576108fb61325c565b5b602001015160f81c60f81b82828151811061091a5761091961325c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061095490613155565b9150506108c1565b5080945050505050919050565b6060600061099d610979846118f4565b6040516020016109899190612adb565b604051602081830303815290604052611a55565b905060006064826109ae919061319e565b90506109b981611a88565b92505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290612db3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc90612d93565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b346114ee565b73ffffffffffffffffffffffffffffffffffffffff16610b52610bb4565b73ffffffffffffffffffffffffffffffffffffffff1614610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90612e13565b60405180910390fd5b610bb26000611be9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610bed906130f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c19906130f2565b8015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b5050505050905090565b610c81610c7b6114ee565b82611caf565b50565b610c96610c8f6114ee565b8383611ccd565b5050565b610cab610ca56114ee565b836115af565b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190612e53565b60405180910390fd5b610cf684848484611e3a565b50505050565b6060610d06612427565b6000610d118461077a565b610d1a85610969565b604051602001610d2b929190612b71565b60405160208183030381529060405290506000610d47856107f4565b90506040518060c00160405280608a815260200161391f608a913983600060118110610d7657610d7561325c565b5b60200201819052508083600160118110610d9357610d9261325c565b5b6020020181905250604051806080016040528060598152602001613ace6059913983600260118110610dc857610dc761325c565b5b60200201819052508183600360118110610de557610de461325c565b5b60200201819052506040518060800160405280604b8152602001613881604b913983600460118110610e1a57610e1961325c565b5b60200201819052508183600560118110610e3757610e3661325c565b5b60200201819052506040518060800160405280604b81526020016139a9604b913983600660118110610e6c57610e6b61325c565b5b60200201819052508183600760118110610e8957610e8861325c565b5b6020020181905250604051806080016040528060578152602001613b276057913983600860118110610ebe57610ebd61325c565b5b60200201819052508183600960118110610edb57610eda61325c565b5b60200201819052506040518060800160405280604b8152602001613a83604b913983600a60118110610f1057610f0f61325c565b5b60200201819052508183600b60118110610f2d57610f2c61325c565b5b60200201819052506040518060800160405280604f81526020016139f4604f913983600c60118110610f6257610f6161325c565b5b60200201819052508183600d60118110610f7f57610f7e61325c565b5b60200201819052506040518060800160405280605381526020016138cc6053913983600e60118110610fb457610fb361325c565b5b60200201819052508183600f60118110610fd157610fd061325c565b5b60200201819052506040518060400160405280600f81526020017f252c39342529222f3e3c2f7376673e0000000000000000000000000000000000815250836010601181106110235761102261325c565b5b60200201819052506000836000601181106110415761104061325c565b5b60200201518460016011811061105a5761105961325c565b5b6020020151856002601181106110735761107261325c565b5b60200201518660036011811061108c5761108b61325c565b5b6020020151876004601181106110a5576110a461325c565b5b6020020151886005601181106110be576110bd61325c565b5b6020020151896006601181106110d7576110d661325c565b5b60200201518a6007601181106110f0576110ef61325c565b5b60200201518b6008601181106111095761110861325c565b5b602002015160405160200161112699989796959493929190612af2565b6040516020818303038152906040529050808460096011811061114c5761114b61325c565b5b602002015185600a601181106111655761116461325c565b5b602002015186600b6011811061117e5761117d61325c565b5b602002015187600c601181106111975761119661325c565b5b602002015188600d601181106111b0576111af61325c565b5b602002015189600e601181106111c9576111c861325c565b5b60200201518a600f601181106111e2576111e161325c565b5b60200201518b6010601181106111fb576111fa61325c565b5b602002015160405160200161121899989796959493929190612af2565b6040516020818303038152906040529050600061125b61123783611e96565b6040516020016112479190612ba0565b604051602081830303815290604052611e96565b90508060405160200161126e9190612bcd565b60405160208183030381529060405291508195505050505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113286114ee565b73ffffffffffffffffffffffffffffffffffffffff16611346610bb4565b73ffffffffffffffffffffffffffffffffffffffff161461139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390612e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612cb3565b60405180910390fd5b61141581611be9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611569836109c2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115ba82611482565b6115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090612d53565b60405180910390fd5b6000611604836109c2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061167357508373ffffffffffffffffffffffffffffffffffffffff1661165b8461057d565b73ffffffffffffffffffffffffffffffffffffffff16145b806116845750611683818561128c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116ad826109c2565b73ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90612cd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90612d13565b60405180910390fd5b61177e83838361202e565b6117896000826114f6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d99190613008565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118309190612f27565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118ef838383612033565b505050565b6060600082141561193c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a50565b600082905060005b6000821461196e57808061195790613155565b915050600a826119679190612f7d565b9150611944565b60008167ffffffffffffffff81111561198a5761198961328b565b5b6040519080825280601f01601f1916602001820160405280156119bc5781602001600182028036833780820191505090505b5090505b60008514611a49576001826119d59190613008565b9150600a856119e4919061319e565b60306119f09190612f27565b60f81b818381518110611a0657611a0561325c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a429190612f7d565b94506119c0565b8093505050505b919050565b600081604051602001611a689190612adb565b6040516020818303038152906040528051906020012060001c9050919050565b60606000821415611ad0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611be4565b600082905060005b60008214611b02578080611aeb90613155565b915050600a82611afb9190612f7d565b9150611ad8565b60008167ffffffffffffffff811115611b1e57611b1d61328b565b5b6040519080825280601f01601f191660200182016040528015611b505781602001600182028036833780820191505090505b5090505b60008514611bdd57600182611b699190613008565b9150600a85611b78919061319e565b6030611b849190612f27565b60f81b818381518110611b9a57611b9961325c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bd69190612f7d565b9450611b54565b8093505050505b919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611cc9828260405180602001604052806000815250612038565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390612d33565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2d9190612c56565b60405180910390a3505050565b611e4584848461168d565b611e5184848484612093565b611e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8790612c93565b60405180910390fd5b50505050565b60606000825190506000811415611ebf5760405180602001604052806000815250915050612029565b60006003600283611ed09190612f27565b611eda9190612f7d565b6004611ee69190612fae565b90506000602082611ef79190612f27565b67ffffffffffffffff811115611f1057611f0f61328b565b5b6040519080825280601f01601f191660200182016040528015611f425781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001613a43604091399050600181016020830160005b86811015611fe65760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050611f6d565b50600386066001811461200057600281146120105761201b565b613d3d60f01b600283035261201b565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b505050565b612042838361222a565b61204f6000848484612093565b61208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590612c93565b60405180910390fd5b505050565b60006120b48473ffffffffffffffffffffffffffffffffffffffff16612404565b1561221d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120dd6114ee565b8786866040518563ffffffff1660e01b81526004016120ff9493929190612c0a565b602060405180830381600087803b15801561211957600080fd5b505af192505050801561214a57506040513d601f19601f820116820180604052508101906121479190612718565b60015b6121cd573d806000811461217a576040519150601f19603f3d011682016040523d82523d6000602084013e61217f565b606091505b506000815114156121c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bc90612c93565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612222565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190612dd3565b60405180910390fd5b6122a381611482565b156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da90612cf3565b60405180910390fd5b6122ef6000838361202e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461233f9190612f27565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461240060008383612033565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518061022001604052806011905b60608152602001906001900390816124375790505090565b600061246261245d84612eb3565b612e8e565b90508281526020810184848401111561247e5761247d6132bf565b5b6124898482856130b0565b509392505050565b6000813590506124a081613824565b92915050565b6000813590506124b58161383b565b92915050565b6000813590506124ca81613852565b92915050565b6000815190506124df81613852565b92915050565b600082601f8301126124fa576124f96132ba565b5b813561250a84826020860161244f565b91505092915050565b60008135905061252281613869565b92915050565b60006020828403121561253e5761253d6132c9565b5b600061254c84828501612491565b91505092915050565b6000806040838503121561256c5761256b6132c9565b5b600061257a85828601612491565b925050602061258b85828601612491565b9150509250929050565b6000806000606084860312156125ae576125ad6132c9565b5b60006125bc86828701612491565b93505060206125cd86828701612491565b92505060406125de86828701612513565b9150509250925092565b60008060008060808587031215612602576126016132c9565b5b600061261087828801612491565b945050602061262187828801612491565b935050604061263287828801612513565b925050606085013567ffffffffffffffff811115612653576126526132c4565b5b61265f878288016124e5565b91505092959194509250565b60008060408385031215612682576126816132c9565b5b600061269085828601612491565b92505060206126a1858286016124a6565b9150509250929050565b600080604083850312156126c2576126c16132c9565b5b60006126d085828601612491565b92505060206126e185828601612513565b9150509250929050565b600060208284031215612701576127006132c9565b5b600061270f848285016124bb565b91505092915050565b60006020828403121561272e5761272d6132c9565b5b600061273c848285016124d0565b91505092915050565b60006020828403121561275b5761275a6132c9565b5b600061276984828501612513565b91505092915050565b61277b8161303c565b82525050565b61278a8161304e565b82525050565b600061279b82612ee4565b6127a58185612efa565b93506127b58185602086016130bf565b6127be816132ce565b840191505092915050565b60006127d482612eef565b6127de8185612f0b565b93506127ee8185602086016130bf565b6127f7816132ce565b840191505092915050565b600061280d82612eef565b6128178185612f1c565b93506128278185602086016130bf565b80840191505092915050565b6000612840603283612f0b565b915061284b826132df565b604082019050919050565b6000612863602683612f0b565b915061286e8261332e565b604082019050919050565b6000612886602583612f0b565b91506128918261337d565b604082019050919050565b60006128a9601c83612f0b565b91506128b4826133cc565b602082019050919050565b60006128cc600183612f1c565b91506128d7826133f5565b600182019050919050565b60006128ef602483612f0b565b91506128fa8261341e565b604082019050919050565b6000612912601983612f0b565b915061291d8261346d565b602082019050919050565b6000612935602c83612f0b565b915061294082613496565b604082019050919050565b6000612958603883612f0b565b9150612963826134e5565b604082019050919050565b600061297b602a83612f0b565b915061298682613534565b604082019050919050565b600061299e602983612f0b565b91506129a982613583565b604082019050919050565b60006129c1608583612f1c565b91506129cc826135d2565b608582019050919050565b60006129e4600283612f1c565b91506129ef82613693565b600282019050919050565b6000612a07602083612f0b565b9150612a12826136bc565b602082019050919050565b6000612a2a602c83612f0b565b9150612a35826136e5565b604082019050919050565b6000612a4d602083612f0b565b9150612a5882613734565b602082019050919050565b6000612a70602183612f0b565b9150612a7b8261375d565b604082019050919050565b6000612a93601d83612f1c565b9150612a9e826137ac565b601d82019050919050565b6000612ab6603183612f0b565b9150612ac1826137d5565b604082019050919050565b612ad5816130a6565b82525050565b6000612ae78284612802565b915081905092915050565b6000612afe828c612802565b9150612b0a828b612802565b9150612b16828a612802565b9150612b228289612802565b9150612b2e8288612802565b9150612b3a8287612802565b9150612b468286612802565b9150612b528285612802565b9150612b5e8284612802565b91508190509a9950505050505050505050565b6000612b7d8285612802565b9150612b88826128bf565b9150612b948284612802565b91508190509392505050565b6000612bab826129b4565b9150612bb78284612802565b9150612bc2826129d7565b915081905092915050565b6000612bd882612a86565b9150612be48284612802565b915081905092915050565b6000602082019050612c046000830184612772565b92915050565b6000608082019050612c1f6000830187612772565b612c2c6020830186612772565b612c396040830185612acc565b8181036060830152612c4b8184612790565b905095945050505050565b6000602082019050612c6b6000830184612781565b92915050565b60006020820190508181036000830152612c8b81846127c9565b905092915050565b60006020820190508181036000830152612cac81612833565b9050919050565b60006020820190508181036000830152612ccc81612856565b9050919050565b60006020820190508181036000830152612cec81612879565b9050919050565b60006020820190508181036000830152612d0c8161289c565b9050919050565b60006020820190508181036000830152612d2c816128e2565b9050919050565b60006020820190508181036000830152612d4c81612905565b9050919050565b60006020820190508181036000830152612d6c81612928565b9050919050565b60006020820190508181036000830152612d8c8161294b565b9050919050565b60006020820190508181036000830152612dac8161296e565b9050919050565b60006020820190508181036000830152612dcc81612991565b9050919050565b60006020820190508181036000830152612dec816129fa565b9050919050565b60006020820190508181036000830152612e0c81612a1d565b9050919050565b60006020820190508181036000830152612e2c81612a40565b9050919050565b60006020820190508181036000830152612e4c81612a63565b9050919050565b60006020820190508181036000830152612e6c81612aa9565b9050919050565b6000602082019050612e886000830184612acc565b92915050565b6000612e98612ea9565b9050612ea48282613124565b919050565b6000604051905090565b600067ffffffffffffffff821115612ece57612ecd61328b565b5b612ed7826132ce565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f32826130a6565b9150612f3d836130a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f7257612f716131cf565b5b828201905092915050565b6000612f88826130a6565b9150612f93836130a6565b925082612fa357612fa26131fe565b5b828204905092915050565b6000612fb9826130a6565b9150612fc4836130a6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ffd57612ffc6131cf565b5b828202905092915050565b6000613013826130a6565b915061301e836130a6565b925082821015613031576130306131cf565b5b828203905092915050565b600061304782613086565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156130dd5780820151818401526020810190506130c2565b838111156130ec576000848401525b50505050565b6000600282049050600182168061310a57607f821691505b6020821081141561311e5761311d61322d565b5b50919050565b61312d826132ce565b810181811067ffffffffffffffff8211171561314c5761314b61328b565b5b80604052505050565b6000613160826130a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613193576131926131cf565b5b600182019050919050565b60006131a9826130a6565b91506131b4836130a6565b9250826131c4576131c36131fe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7b226e616d65223a20224677656233204469616d6f6e64204e4654222c20226460008201527f65736372697074696f6e223a202254686973204e465420726570726573656e7460208201527f732070617274696369706174696f6e20696e20467765623320323032322e222c60408201527f2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b626160608201527f736536342c000000000000000000000000000000000000000000000000000000608082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61382d8161303c565b811461383857600080fd5b50565b6138448161304e565b811461384f57600080fd5b50565b61385b8161305a565b811461386657600080fd5b50565b613872816130a6565b811461387d57600080fd5b5056fe252c37392529222f3e3c7061746820643d224d3138302e363031203134304c3231352e333332203230332e363839483133344c3138302e363031203134305a222066696c6c3d2268736c28252c39342529222f3e3c7061746820643d224d3231352e333332203230332e3638394c3235352e393938203337322e3035364c313334203230332e363839483231352e3333325a222066696c6c3d2268736c283c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302035313220353132223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223252c38322529222f3e3c7061746820643d224d3333312e34203134304c3239362e363634203230332e3638394c3235352e39393820313430483333312e345a222066696c6c3d2268736c28252c39342529222f3e3c7061746820643d224d3235352e393938203134304c3239362e363634203230332e363839483231352e3333324c3235352e393938203134305a222066696c6c3d2268736c284142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f252c38322529222f3e3c7061746820643d224d3333312e34203134304c3337372e393935203230332e363839483239362e3636344c3333312e34203134305a222066696c6c3d2268736c28222f3e3c7061746820643d224d323536203337322e3035374c333738203230332e3638364c3333312e3420313430483138302e364c313334203230332e3638364c323536203337322e3035375a222066696c6c3d2268736c28252c38322529222f3e3c7061746820643d224d3239362e363634203230332e3638394c3235352e393938203337322e3035364c3231352e333332203230332e363839483239362e3636345a222066696c6c3d2268736c28a2646970667358221220d7e8757e51a463cdd5f6cbf91d6129fabca36dba4c579d340be636fe68ea18ab64736f6c63430008070033
Deployed Bytecode Sourcemap
37290:3772:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24109:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25054:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26613:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26136:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27363:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38015:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27773:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38476:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38235:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24748:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24478:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25223:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40976:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26906:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28029:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38871:2099;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27132:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24109:305;24211:4;24263:25;24248:40;;;:11;:40;;;;:105;;;;24320:33;24305:48;;;:11;:48;;;;24248:105;:158;;;;24370:36;24394:11;24370:23;:36::i;:::-;24248:158;24228:178;;24109:305;;;:::o;25054:100::-;25108:13;25141:5;25134:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25054:100;:::o;26613:221::-;26689:7;26717:16;26725:7;26717;:16::i;:::-;26709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26802:15;:24;26818:7;26802:24;;;;;;;;;;;;;;;;;;;;;26795:31;;26613:221;;;:::o;26136:411::-;26217:13;26233:23;26248:7;26233:14;:23::i;:::-;26217:39;;26281:5;26275:11;;:2;:11;;;;26267:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26375:5;26359:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26384:37;26401:5;26408:12;:10;:12::i;:::-;26384:16;:37::i;:::-;26359:62;26337:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26518:21;26527:2;26531:7;26518:8;:21::i;:::-;26206:341;26136:411;;:::o;27363:339::-;27558:41;27577:12;:10;:12::i;:::-;27591:7;27558:18;:41::i;:::-;27550:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27666:28;27676:4;27682:2;27686:7;27666:9;:28::i;:::-;27363:339;;;:::o;38015:214::-;38069:13;38091:12;38106:51;38137:17;38146:7;38137:8;:17::i;:::-;38120:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;38106:6;:51::i;:::-;38091:66;;38164:11;38185:3;38178:4;:10;;;;:::i;:::-;38164:24;;38202:21;38219:3;38202:16;:21::i;:::-;38195:28;;;;38015:214;;;:::o;27773:185::-;27911:39;27928:4;27934:2;27938:7;27911:39;;;;;;;;;;;;:16;:39::i;:::-;27773:185;;;:::o;38476:389::-;38542:13;38564:12;38579:51;38610:17;38619:7;38610:8;:17::i;:::-;38593:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;38579:6;:51::i;:::-;38564:66;;38637:11;38659:4;38651:13;;38637:27;;38671:15;:36;;;;;;;;;;;;;;;;;;;38714:16;38743:1;38733:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38714:31;;38759:6;38754:79;38775:1;38771;:5;38754:79;;;38801:2;38820:4;38810:3;38814:1;38810:6;;;;;;;:::i;:::-;;;;;38804:13;;:20;38801:24;;;;;;;;;;:::i;:::-;;;;;;;;;;38792:3;38796:1;38792:6;;;;;;;;:::i;:::-;;;;;:33;;;;;;;;;;;38778:3;;;;;:::i;:::-;;;;38754:79;;;;38855:3;38841:18;;;;;;38476:389;;;:::o;38235:235::-;38296:13;38318:12;38333:51;38364:17;38373:7;38364:8;:17::i;:::-;38347:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;38333:6;:51::i;:::-;38318:66;;38391:18;38419:3;38412:4;:10;;;;:::i;:::-;38391:31;;38436:28;38453:10;38436:16;:28::i;:::-;38429:35;;;;38235:235;;;:::o;24748:239::-;24820:7;24840:13;24856:7;:16;24864:7;24856:16;;;;;;;;;;;;;;;;;;;;;24840:32;;24908:1;24891:19;;:5;:19;;;;24883:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24974:5;24967:12;;;24748:239;;;:::o;24478:208::-;24550:7;24595:1;24578:19;;:5;:19;;;;24570:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24662:9;:16;24672:5;24662:16;;;;;;;;;;;;;;;;24655:23;;24478:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25223:104::-;25279:13;25312:7;25305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25223:104;:::o;40976:83::-;41021:32;41031:12;:10;:12::i;:::-;41045:7;41021:9;:32::i;:::-;40976:83;:::o;26906:155::-;27001:52;27020:12;:10;:12::i;:::-;27034:8;27044;27001:18;:52::i;:::-;26906:155;;:::o;28029:328::-;28204:41;28223:12;:10;:12::i;:::-;28237:7;28204:18;:41::i;:::-;28196:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28310:39;28324:4;28330:2;28334:7;28343:5;28310:13;:39::i;:::-;28029:328;;;;:::o;38871:2099::-;38936:13;38958:23;;:::i;:::-;38988:30;39045:15;39052:7;39045:6;:15::i;:::-;39067:22;39081:7;39067:13;:22::i;:::-;39028:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38988:103;;39098:29;39130:27;39149:7;39130:18;:27::i;:::-;39098:59;;39166:151;;;;;;;;;;;;;;;;;:5;39172:1;39166:8;;;;;;;:::i;:::-;;;;;:151;;;;39335:15;39324:5;39330:1;39324:8;;;;;;;:::i;:::-;;;;;:26;;;;39357:102;;;;;;;;;;;;;;;;;:5;39363:1;39357:8;;;;;;;:::i;:::-;;;;;:102;;;;39477:16;39466:5;39472:1;39466:8;;;;;;;:::i;:::-;;;;;:27;;;;39500:88;;;;;;;;;;;;;;;;;:5;39506:1;39500:8;;;;;;;:::i;:::-;;;;;:88;;;;39606:16;39595:5;39601:1;39595:8;;;;;;;:::i;:::-;;;;;:27;;;;39629:88;;;;;;;;;;;;;;;;;:5;39635:1;39629:8;;;;;;;:::i;:::-;;;;;:88;;;;39735:16;39724:5;39730:1;39724:8;;;;;;;:::i;:::-;;;;;:27;;;;39758:100;;;;;;;;;;;;;;;;;:5;39764:1;39758:8;;;;;;;:::i;:::-;;;;;:100;;;;39876:16;39865:5;39871:1;39865:8;;;;;;;:::i;:::-;;;;;:27;;;;39899:89;;;;;;;;;;;;;;;;;:5;39905:2;39899:9;;;;;;;:::i;:::-;;;;;:89;;;;40007:16;39995:5;40001:2;39995:9;;;;;;;:::i;:::-;;;;;:28;;;;40030:93;;;;;;;;;;;;;;;;;:5;40036:2;40030:9;;;;;;;:::i;:::-;;;;;:93;;;;40142:16;40130:5;40136:2;40130:9;;;;;;;:::i;:::-;;;;;:28;;;;40165:97;;;;;;;;;;;;;;;;;:5;40171:2;40165:9;;;;;;;:::i;:::-;;;;;:97;;;;40281:16;40269:5;40275:2;40269:9;;;;;;;:::i;:::-;;;;;:28;;;;40304:29;;;;;;;;;;;;;;;;;:5;40310:2;40304:9;;;;;;;:::i;:::-;;;;;:29;;;;40342:20;40389:5;40395:1;40389:8;;;;;;;:::i;:::-;;;;;;40399:5;40405:1;40399:8;;;;;;;:::i;:::-;;;;;;40409:5;40415:1;40409:8;;;;;;;:::i;:::-;;;;;;40419:5;40425:1;40419:8;;;;;;;:::i;:::-;;;;;;40429:5;40435:1;40429:8;;;;;;;:::i;:::-;;;;;;40439:5;40445:1;40439:8;;;;;;;:::i;:::-;;;;;;40449:5;40455:1;40449:8;;;;;;;:::i;:::-;;;;;;40459:5;40465:1;40459:8;;;;;;;:::i;:::-;;;;;;40469:5;40475:1;40469:8;;;;;;;:::i;:::-;;;;;;40372:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40342:137;;40519:6;40527:5;40533:1;40527:8;;;;;;;:::i;:::-;;;;;;40537:5;40543:2;40537:9;;;;;;;:::i;:::-;;;;;;40548:5;40554:2;40548:9;;;;;;;:::i;:::-;;;;;;40559:5;40565:2;40559:9;;;;;;;:::i;:::-;;;;;;40570:5;40576:2;40570:9;;;;;;;:::i;:::-;;;;;;40581:5;40587:2;40581:9;;;;;;;:::i;:::-;;;;;;40592:5;40598:2;40592:9;;;;;;;:::i;:::-;;;;;;40603:5;40609:2;40603:9;;;;;;;:::i;:::-;;;;;;40502:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40486:128;;40623:18;40644:219;40825:28;40845:6;40825:13;:28::i;:::-;40671:189;;;;;;;;:::i;:::-;;;;;;;;;;;;;40644:13;:219::i;:::-;40623:240;;40936:4;40886:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;40870:72;;40958:6;40951:13;;;;;;;38871:2099;;;:::o;27132:164::-;27229:4;27253:18;:25;27272:5;27253:25;;;;;;;;;;;;;;;:35;27279:8;27253:35;;;;;;;;;;;;;;;;;;;;;;;;;27246:42;;27132:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;29867:127::-;29932:4;29984:1;29956:30;;:7;:16;29964:7;29956:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29949:37;;29867:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;34013:174::-;34115:2;34088:15;:24;34104:7;34088:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34171:7;34167:2;34133:46;;34142:23;34157:7;34142:14;:23::i;:::-;34133:46;;;;;;;;;;;;34013:174;;:::o;30161:348::-;30254:4;30279:16;30287:7;30279;:16::i;:::-;30271:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30355:13;30371:23;30386:7;30371:14;:23::i;:::-;30355:39;;30424:5;30413:16;;:7;:16;;;:51;;;;30457:7;30433:31;;:20;30445:7;30433:11;:20::i;:::-;:31;;;30413:51;:87;;;;30468:32;30485:5;30492:7;30468:16;:32::i;:::-;30413:87;30405:96;;;30161:348;;;;:::o;33270:625::-;33429:4;33402:31;;:23;33417:7;33402:14;:23::i;:::-;:31;;;33394:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33508:1;33494:16;;:2;:16;;;;33486:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:39;33585:4;33591:2;33595:7;33564:20;:39::i;:::-;33668:29;33685:1;33689:7;33668:8;:29::i;:::-;33729:1;33710:9;:15;33720:4;33710:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33758:1;33741:9;:13;33751:2;33741:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33789:2;33770:7;:16;33778:7;33770:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33828:7;33824:2;33809:27;;33818:4;33809:27;;;;;;;;;;;;33849:38;33869:4;33875:2;33879:7;33849:19;:38::i;:::-;33270:625;;;:::o;37405:466::-;37461:13;37496:1;37487:5;:10;37483:45;;;37510:10;;;;;;;;;;;;;;;;;;;;;37483:45;37534:12;37549:5;37534:20;;37561:14;37582:66;37597:1;37589:4;:9;37582:66;;37611:8;;;;;:::i;:::-;;;;37638:2;37630:10;;;;;:::i;:::-;;;37582:66;;;37654:19;37686:6;37676:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37654:39;;37700:138;37716:1;37707:5;:10;37700:138;;37740:1;37730:11;;;;;:::i;:::-;;;37803:2;37795:5;:10;;;;:::i;:::-;37782:2;:24;;;;:::i;:::-;37769:39;;37752:6;37759;37752:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;37828:2;37819:11;;;;;:::i;:::-;;;37700:138;;;37858:6;37844:21;;;;;37405:466;;;;:::o;37877:132::-;37937:7;37995:5;37978:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;37968:34;;;;;;37960:43;;37953:50;;37877:132;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;30851:110::-;30927:26;30937:2;30941:7;30927:26;;;;;;;;;;;;:9;:26::i;:::-;30851:110;;:::o;34329:315::-;34484:8;34475:17;;:5;:17;;;;34467:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34571:8;34533:18;:25;34552:5;34533:25;;;;;;;;;;;;;;;:35;34559:8;34533:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34617:8;34595:41;;34610:5;34595:41;;;34627:8;34595:41;;;;;;:::i;:::-;;;;;;;;34329:315;;;:::o;29239:::-;29396:28;29406:4;29412:2;29416:7;29396:9;:28::i;:::-;29443:48;29466:4;29472:2;29476:7;29485:5;29443:22;:48::i;:::-;29435:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29239:315;;;;:::o;41260:1607::-;41318:13;41344:11;41358:4;:11;41344:25;;41391:1;41384:3;:8;41380:23;;;41394:9;;;;;;;;;;;;;;;;;41380:23;41455:18;41493:1;41488;41482:3;:7;;;;:::i;:::-;41481:13;;;;:::i;:::-;41476:1;:19;;;;:::i;:::-;41455:40;;41553:19;41598:2;41585:10;:15;;;;:::i;:::-;41575:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41553:48;;41614:18;41635:5;;;;;;;;;;;;;;;;;41614:26;;41704:1;41697:5;41693:13;41749:2;41741:6;41737:15;41800:1;41768:777;41823:3;41820:1;41817:10;41768:777;;;41878:1;41875;41871:9;41866:14;;41936:8;41931:1;41925:4;41921:12;41915:19;41911:34;42016:4;42008:5;42004:2;42000:14;41996:25;41986:8;41982:40;41976:47;42055:3;42052:1;42048:11;42041:18;;42146:4;42137;42129:5;42125:2;42121:14;42117:25;42107:8;42103:40;42097:47;42093:58;42088:3;42084:68;42077:75;;42184:3;42181:1;42177:11;42170:18;;42274:4;42265;42257:5;42254:1;42250:13;42246:24;42236:8;42232:39;42226:46;42222:57;42217:3;42213:67;42206:74;;42312:3;42309:1;42305:11;42298:18;;42394:4;42385;42378:5;42374:16;42364:8;42360:31;42354:38;42350:49;42345:3;42341:59;42334:66;;42434:3;42429;42425:13;42418:20;;42476:3;42465:9;42458:22;42528:1;42517:9;42513:17;42500:30;;41847:698;;41768:777;;;41772:44;42577:1;42572:3;42568:11;42598:1;42593:84;;;;42696:1;42691:82;;;;42561:212;;42593:84;42654:6;42649:3;42645:16;42641:1;42630:9;42626:17;42619:43;42593:84;;42691:82;42752:4;42747:3;42743:14;42739:1;42728:9;42724:17;42717:41;42561:212;;42804:10;42796:6;42789:26;41662:1164;;42852:6;42838:21;;;;;;41260:1607;;;;:::o;36580:126::-;;;;:::o;37091:125::-;;;;:::o;31188:321::-;31318:18;31324:2;31328:7;31318:5;:18::i;:::-;31369:54;31400:1;31404:2;31408:7;31417:5;31369:22;:54::i;:::-;31347:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31188:321;;;:::o;35209:799::-;35364:4;35385:15;:2;:13;;;:15::i;:::-;35381:620;;;35437:2;35421:36;;;35458:12;:10;:12::i;:::-;35472:4;35478:7;35487:5;35421:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35680:1;35663:6;:13;:18;35659:272;;;35706:60;;;;;;;;;;:::i;:::-;;;;;;;;35659:272;35881:6;35875:13;35866:6;35862:2;35858:15;35851:38;35417:529;35554:41;;;35544:51;;;:6;:51;;;;35537:58;;;;;35381:620;35985:4;35978:11;;35209:799;;;;;;;:::o;31845:439::-;31939:1;31925:16;;:2;:16;;;;31917:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31998:16;32006:7;31998;:16::i;:::-;31997:17;31989:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:45;32089:1;32093:2;32097:7;32060:20;:45::i;:::-;32135:1;32118:9;:13;32128:2;32118:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32166:2;32147:7;:16;32155:7;32147:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32211:7;32207:2;32186:33;;32203:1;32186:33;;;;;;;;;;;;32232:44;32260:1;32264:2;32268:7;32232:19;:44::i;:::-;31845:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7595:366;;;:::o;7967:::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;7967:366;;;:::o;8339:::-;8481:3;8502:67;8566:2;8561:3;8502:67;:::i;:::-;8495:74;;8578:93;8667:3;8578:93;:::i;:::-;8696:2;8691:3;8687:12;8680:19;;8339:366;;;:::o;8711:400::-;8871:3;8892:84;8974:1;8969:3;8892:84;:::i;:::-;8885:91;;8985:93;9074:3;8985:93;:::i;:::-;9103:1;9098:3;9094:11;9087:18;;8711:400;;;:::o;9117:366::-;9259:3;9280:67;9344:2;9339:3;9280:67;:::i;:::-;9273:74;;9356:93;9445:3;9356:93;:::i;:::-;9474:2;9469:3;9465:12;9458:19;;9117:366;;;:::o;9489:::-;9631:3;9652:67;9716:2;9711:3;9652:67;:::i;:::-;9645:74;;9728:93;9817:3;9728:93;:::i;:::-;9846:2;9841:3;9837:12;9830:19;;9489:366;;;:::o;9861:::-;10003:3;10024:67;10088:2;10083:3;10024:67;:::i;:::-;10017:74;;10100:93;10189:3;10100:93;:::i;:::-;10218:2;10213:3;10209:12;10202:19;;9861:366;;;:::o;10233:::-;10375:3;10396:67;10460:2;10455:3;10396:67;:::i;:::-;10389:74;;10472:93;10561:3;10472:93;:::i;:::-;10590:2;10585:3;10581:12;10574:19;;10233:366;;;:::o;10605:::-;10747:3;10768:67;10832:2;10827:3;10768:67;:::i;:::-;10761:74;;10844:93;10933:3;10844:93;:::i;:::-;10962:2;10957:3;10953:12;10946:19;;10605:366;;;:::o;10977:::-;11119:3;11140:67;11204:2;11199:3;11140:67;:::i;:::-;11133:74;;11216:93;11305:3;11216:93;:::i;:::-;11334:2;11329:3;11325:12;11318:19;;10977:366;;;:::o;11349:404::-;11509:3;11530:86;11612:3;11607;11530:86;:::i;:::-;11523:93;;11625;11714:3;11625:93;:::i;:::-;11743:3;11738;11734:13;11727:20;;11349:404;;;:::o;11759:400::-;11919:3;11940:84;12022:1;12017:3;11940:84;:::i;:::-;11933:91;;12033:93;12122:3;12033:93;:::i;:::-;12151:1;12146:3;12142:11;12135:18;;11759:400;;;:::o;12165:366::-;12307:3;12328:67;12392:2;12387:3;12328:67;:::i;:::-;12321:74;;12404:93;12493:3;12404:93;:::i;:::-;12522:2;12517:3;12513:12;12506:19;;12165:366;;;:::o;12537:::-;12679:3;12700:67;12764:2;12759:3;12700:67;:::i;:::-;12693:74;;12776:93;12865:3;12776:93;:::i;:::-;12894:2;12889:3;12885:12;12878:19;;12537:366;;;:::o;12909:::-;13051:3;13072:67;13136:2;13131:3;13072:67;:::i;:::-;13065:74;;13148:93;13237:3;13148:93;:::i;:::-;13266:2;13261:3;13257:12;13250:19;;12909:366;;;:::o;13281:::-;13423:3;13444:67;13508:2;13503:3;13444:67;:::i;:::-;13437:74;;13520:93;13609:3;13520:93;:::i;:::-;13638:2;13633:3;13629:12;13622:19;;13281:366;;;:::o;13653:402::-;13813:3;13834:85;13916:2;13911:3;13834:85;:::i;:::-;13827:92;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13653:402;;;:::o;14061:366::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:118::-;14520:24;14538:5;14520:24;:::i;:::-;14515:3;14508:37;14433:118;;:::o;14557:275::-;14689:3;14711:95;14802:3;14793:6;14711:95;:::i;:::-;14704:102;;14823:3;14816:10;;14557:275;;;;:::o;14838:1555::-;15354:3;15376:95;15467:3;15458:6;15376:95;:::i;:::-;15369:102;;15488:95;15579:3;15570:6;15488:95;:::i;:::-;15481:102;;15600:95;15691:3;15682:6;15600:95;:::i;:::-;15593:102;;15712:95;15803:3;15794:6;15712:95;:::i;:::-;15705:102;;15824:95;15915:3;15906:6;15824:95;:::i;:::-;15817:102;;15936:95;16027:3;16018:6;15936:95;:::i;:::-;15929:102;;16048:95;16139:3;16130:6;16048:95;:::i;:::-;16041:102;;16160:95;16251:3;16242:6;16160:95;:::i;:::-;16153:102;;16272:95;16363:3;16354:6;16272:95;:::i;:::-;16265:102;;16384:3;16377:10;;14838:1555;;;;;;;;;;;;:::o;16399:701::-;16680:3;16702:95;16793:3;16784:6;16702:95;:::i;:::-;16695:102;;16814:148;16958:3;16814:148;:::i;:::-;16807:155;;16979:95;17070:3;17061:6;16979:95;:::i;:::-;16972:102;;17091:3;17084:10;;16399:701;;;;;:::o;17106:807::-;17440:3;17462:148;17606:3;17462:148;:::i;:::-;17455:155;;17627:95;17718:3;17709:6;17627:95;:::i;:::-;17620:102;;17739:148;17883:3;17739:148;:::i;:::-;17732:155;;17904:3;17897:10;;17106:807;;;;:::o;17919:541::-;18152:3;18174:148;18318:3;18174:148;:::i;:::-;18167:155;;18339:95;18430:3;18421:6;18339:95;:::i;:::-;18332:102;;18451:3;18444:10;;17919:541;;;;:::o;18466:222::-;18559:4;18597:2;18586:9;18582:18;18574:26;;18610:71;18678:1;18667:9;18663:17;18654:6;18610:71;:::i;:::-;18466:222;;;;:::o;18694:640::-;18889:4;18927:3;18916:9;18912:19;18904:27;;18941:71;19009:1;18998:9;18994:17;18985:6;18941:71;:::i;:::-;19022:72;19090:2;19079:9;19075:18;19066:6;19022:72;:::i;:::-;19104;19172:2;19161:9;19157:18;19148:6;19104:72;:::i;:::-;19223:9;19217:4;19213:20;19208:2;19197:9;19193:18;19186:48;19251:76;19322:4;19313:6;19251:76;:::i;:::-;19243:84;;18694:640;;;;;;;:::o;19340:210::-;19427:4;19465:2;19454:9;19450:18;19442:26;;19478:65;19540:1;19529:9;19525:17;19516:6;19478:65;:::i;:::-;19340:210;;;;:::o;19556:313::-;19669:4;19707:2;19696:9;19692:18;19684:26;;19756:9;19750:4;19746:20;19742:1;19731:9;19727:17;19720:47;19784:78;19857:4;19848:6;19784:78;:::i;:::-;19776:86;;19556:313;;;;:::o;19875:419::-;20041:4;20079:2;20068:9;20064:18;20056:26;;20128:9;20122:4;20118:20;20114:1;20103:9;20099:17;20092:47;20156:131;20282:4;20156:131;:::i;:::-;20148:139;;19875:419;;;:::o;20300:::-;20466:4;20504:2;20493:9;20489:18;20481:26;;20553:9;20547:4;20543:20;20539:1;20528:9;20524:17;20517:47;20581:131;20707:4;20581:131;:::i;:::-;20573:139;;20300:419;;;:::o;20725:::-;20891:4;20929:2;20918:9;20914:18;20906:26;;20978:9;20972:4;20968:20;20964:1;20953:9;20949:17;20942:47;21006:131;21132:4;21006:131;:::i;:::-;20998:139;;20725:419;;;:::o;21150:::-;21316:4;21354:2;21343:9;21339:18;21331:26;;21403:9;21397:4;21393:20;21389:1;21378:9;21374:17;21367:47;21431:131;21557:4;21431:131;:::i;:::-;21423:139;;21150:419;;;:::o;21575:::-;21741:4;21779:2;21768:9;21764:18;21756:26;;21828:9;21822:4;21818:20;21814:1;21803:9;21799:17;21792:47;21856:131;21982:4;21856:131;:::i;:::-;21848:139;;21575:419;;;:::o;22000:::-;22166:4;22204:2;22193:9;22189:18;22181:26;;22253:9;22247:4;22243:20;22239:1;22228:9;22224:17;22217:47;22281:131;22407:4;22281:131;:::i;:::-;22273:139;;22000:419;;;:::o;22425:::-;22591:4;22629:2;22618:9;22614:18;22606:26;;22678:9;22672:4;22668:20;22664:1;22653:9;22649:17;22642:47;22706:131;22832:4;22706:131;:::i;:::-;22698:139;;22425:419;;;:::o;22850:::-;23016:4;23054:2;23043:9;23039:18;23031:26;;23103:9;23097:4;23093:20;23089:1;23078:9;23074:17;23067:47;23131:131;23257:4;23131:131;:::i;:::-;23123:139;;22850:419;;;:::o;23275:::-;23441:4;23479:2;23468:9;23464:18;23456:26;;23528:9;23522:4;23518:20;23514:1;23503:9;23499:17;23492:47;23556:131;23682:4;23556:131;:::i;:::-;23548:139;;23275:419;;;:::o;23700:::-;23866:4;23904:2;23893:9;23889:18;23881:26;;23953:9;23947:4;23943:20;23939:1;23928:9;23924:17;23917:47;23981:131;24107:4;23981:131;:::i;:::-;23973:139;;23700:419;;;:::o;24125:::-;24291:4;24329:2;24318:9;24314:18;24306:26;;24378:9;24372:4;24368:20;24364:1;24353:9;24349:17;24342:47;24406:131;24532:4;24406:131;:::i;:::-;24398:139;;24125:419;;;:::o;24550:::-;24716:4;24754:2;24743:9;24739:18;24731:26;;24803:9;24797:4;24793:20;24789:1;24778:9;24774:17;24767:47;24831:131;24957:4;24831:131;:::i;:::-;24823:139;;24550:419;;;:::o;24975:::-;25141:4;25179:2;25168:9;25164:18;25156:26;;25228:9;25222:4;25218:20;25214:1;25203:9;25199:17;25192:47;25256:131;25382:4;25256:131;:::i;:::-;25248:139;;24975:419;;;:::o;25400:::-;25566:4;25604:2;25593:9;25589:18;25581:26;;25653:9;25647:4;25643:20;25639:1;25628:9;25624:17;25617:47;25681:131;25807:4;25681:131;:::i;:::-;25673:139;;25400:419;;;:::o;25825:::-;25991:4;26029:2;26018:9;26014:18;26006:26;;26078:9;26072:4;26068:20;26064:1;26053:9;26049:17;26042:47;26106:131;26232:4;26106:131;:::i;:::-;26098:139;;25825:419;;;:::o;26250:222::-;26343:4;26381:2;26370:9;26366:18;26358:26;;26394:71;26462:1;26451:9;26447:17;26438:6;26394:71;:::i;:::-;26250:222;;;;:::o;26478:129::-;26512:6;26539:20;;:::i;:::-;26529:30;;26568:33;26596:4;26588:6;26568:33;:::i;:::-;26478:129;;;:::o;26613:75::-;26646:6;26679:2;26673:9;26663:19;;26613:75;:::o;26694:307::-;26755:4;26845:18;26837:6;26834:30;26831:56;;;26867:18;;:::i;:::-;26831:56;26905:29;26927:6;26905:29;:::i;:::-;26897:37;;26989:4;26983;26979:15;26971:23;;26694:307;;;:::o;27007:98::-;27058:6;27092:5;27086:12;27076:22;;27007:98;;;:::o;27111:99::-;27163:6;27197:5;27191:12;27181:22;;27111:99;;;:::o;27216:168::-;27299:11;27333:6;27328:3;27321:19;27373:4;27368:3;27364:14;27349:29;;27216:168;;;;:::o;27390:169::-;27474:11;27508:6;27503:3;27496:19;27548:4;27543:3;27539:14;27524:29;;27390:169;;;;:::o;27565:148::-;27667:11;27704:3;27689:18;;27565:148;;;;:::o;27719:305::-;27759:3;27778:20;27796:1;27778:20;:::i;:::-;27773:25;;27812:20;27830:1;27812:20;:::i;:::-;27807:25;;27966:1;27898:66;27894:74;27891:1;27888:81;27885:107;;;27972:18;;:::i;:::-;27885:107;28016:1;28013;28009:9;28002:16;;27719:305;;;;:::o;28030:185::-;28070:1;28087:20;28105:1;28087:20;:::i;:::-;28082:25;;28121:20;28139:1;28121:20;:::i;:::-;28116:25;;28160:1;28150:35;;28165:18;;:::i;:::-;28150:35;28207:1;28204;28200:9;28195:14;;28030:185;;;;:::o;28221:348::-;28261:7;28284:20;28302:1;28284:20;:::i;:::-;28279:25;;28318:20;28336:1;28318:20;:::i;:::-;28313:25;;28506:1;28438:66;28434:74;28431:1;28428:81;28423:1;28416:9;28409:17;28405:105;28402:131;;;28513:18;;:::i;:::-;28402:131;28561:1;28558;28554:9;28543:20;;28221:348;;;;:::o;28575:191::-;28615:4;28635:20;28653:1;28635:20;:::i;:::-;28630:25;;28669:20;28687:1;28669:20;:::i;:::-;28664:25;;28708:1;28705;28702:8;28699:34;;;28713:18;;:::i;:::-;28699:34;28758:1;28755;28751:9;28743:17;;28575:191;;;;:::o;28772:96::-;28809:7;28838:24;28856:5;28838:24;:::i;:::-;28827:35;;28772:96;;;:::o;28874:90::-;28908:7;28951:5;28944:13;28937:21;28926:32;;28874:90;;;:::o;28970:149::-;29006:7;29046:66;29039:5;29035:78;29024:89;;28970:149;;;:::o;29125:126::-;29162:7;29202:42;29195:5;29191:54;29180:65;;29125:126;;;:::o;29257:77::-;29294:7;29323:5;29312:16;;29257:77;;;:::o;29340:154::-;29424:6;29419:3;29414;29401:30;29486:1;29477:6;29472:3;29468:16;29461:27;29340:154;;;:::o;29500:307::-;29568:1;29578:113;29592:6;29589:1;29586:13;29578:113;;;29677:1;29672:3;29668:11;29662:18;29658:1;29653:3;29649:11;29642:39;29614:2;29611:1;29607:10;29602:15;;29578:113;;;29709:6;29706:1;29703:13;29700:101;;;29789:1;29780:6;29775:3;29771:16;29764:27;29700:101;29549:258;29500:307;;;:::o;29813:320::-;29857:6;29894:1;29888:4;29884:12;29874:22;;29941:1;29935:4;29931:12;29962:18;29952:81;;30018:4;30010:6;30006:17;29996:27;;29952:81;30080:2;30072:6;30069:14;30049:18;30046:38;30043:84;;;30099:18;;:::i;:::-;30043:84;29864:269;29813:320;;;:::o;30139:281::-;30222:27;30244:4;30222:27;:::i;:::-;30214:6;30210:40;30352:6;30340:10;30337:22;30316:18;30304:10;30301:34;30298:62;30295:88;;;30363:18;;:::i;:::-;30295:88;30403:10;30399:2;30392:22;30182:238;30139:281;;:::o;30426:233::-;30465:3;30488:24;30506:5;30488:24;:::i;:::-;30479:33;;30534:66;30527:5;30524:77;30521:103;;;30604:18;;:::i;:::-;30521:103;30651:1;30644:5;30640:13;30633:20;;30426:233;;;:::o;30665:176::-;30697:1;30714:20;30732:1;30714:20;:::i;:::-;30709:25;;30748:20;30766:1;30748:20;:::i;:::-;30743:25;;30787:1;30777:35;;30792:18;;:::i;:::-;30777:35;30833:1;30830;30826:9;30821:14;;30665:176;;;;:::o;30847:180::-;30895:77;30892:1;30885:88;30992:4;30989:1;30982:15;31016:4;31013:1;31006:15;31033:180;31081:77;31078:1;31071:88;31178:4;31175:1;31168:15;31202:4;31199:1;31192:15;31219:180;31267:77;31264:1;31257:88;31364:4;31361:1;31354:15;31388:4;31385:1;31378:15;31405:180;31453:77;31450:1;31443:88;31550:4;31547:1;31540:15;31574:4;31571:1;31564:15;31591:180;31639:77;31636:1;31629:88;31736:4;31733:1;31726:15;31760:4;31757:1;31750:15;31777:117;31886:1;31883;31876:12;31900:117;32009:1;32006;31999:12;32023:117;32132:1;32129;32122:12;32146:117;32255:1;32252;32245:12;32269:102;32310:6;32361:2;32357:7;32352:2;32345:5;32341:14;32337:28;32327:38;;32269:102;;;:::o;32377:237::-;32517:34;32513:1;32505:6;32501:14;32494:58;32586:20;32581:2;32573:6;32569:15;32562:45;32377:237;:::o;32620:225::-;32760:34;32756:1;32748:6;32744:14;32737:58;32829:8;32824:2;32816:6;32812:15;32805:33;32620:225;:::o;32851:224::-;32991:34;32987:1;32979:6;32975:14;32968:58;33060:7;33055:2;33047:6;33043:15;33036:32;32851:224;:::o;33081:178::-;33221:30;33217:1;33209:6;33205:14;33198:54;33081:178;:::o;33265:151::-;33405:3;33401:1;33393:6;33389:14;33382:27;33265:151;:::o;33422:223::-;33562:34;33558:1;33550:6;33546:14;33539:58;33631:6;33626:2;33618:6;33614:15;33607:31;33422:223;:::o;33651:175::-;33791:27;33787:1;33779:6;33775:14;33768:51;33651:175;:::o;33832:231::-;33972:34;33968:1;33960:6;33956:14;33949:58;34041:14;34036:2;34028:6;34024:15;34017:39;33832:231;:::o;34069:243::-;34209:34;34205:1;34197:6;34193:14;34186:58;34278:26;34273:2;34265:6;34261:15;34254:51;34069:243;:::o;34318:229::-;34458:34;34454:1;34446:6;34442:14;34435:58;34527:12;34522:2;34514:6;34510:15;34503:37;34318:229;:::o;34553:228::-;34693:34;34689:1;34681:6;34677:14;34670:58;34762:11;34757:2;34749:6;34745:15;34738:36;34553:228;:::o;34787:560::-;34927:66;34923:1;34915:6;34911:14;34904:90;35028:66;35023:2;35015:6;35011:15;35004:91;35129:66;35124:2;35116:6;35112:15;35105:91;35230:66;35225:2;35217:6;35213:15;35206:91;35332:7;35326:3;35318:6;35314:16;35307:33;34787:560;:::o;35353:214::-;35493:66;35489:1;35481:6;35477:14;35470:90;35353:214;:::o;35573:182::-;35713:34;35709:1;35701:6;35697:14;35690:58;35573:182;:::o;35761:231::-;35901:34;35897:1;35889:6;35885:14;35878:58;35970:14;35965:2;35957:6;35953:15;35946:39;35761:231;:::o;35998:182::-;36138:34;36134:1;36126:6;36122:14;36115:58;35998:182;:::o;36186:220::-;36326:34;36322:1;36314:6;36310:14;36303:58;36395:3;36390:2;36382:6;36378:15;36371:28;36186:220;:::o;36412:179::-;36552:31;36548:1;36540:6;36536:14;36529:55;36412:179;:::o;36597:236::-;36737:34;36733:1;36725:6;36721:14;36714:58;36806:19;36801:2;36793:6;36789:15;36782:44;36597:236;:::o;36839:122::-;36912:24;36930:5;36912:24;:::i;:::-;36905:5;36902:35;36892:63;;36951:1;36948;36941:12;36892:63;36839:122;:::o;36967:116::-;37037:21;37052:5;37037:21;:::i;:::-;37030:5;37027:32;37017:60;;37073:1;37070;37063:12;37017:60;36967:116;:::o;37089:120::-;37161:23;37178:5;37161:23;:::i;:::-;37154:5;37151:34;37141:62;;37199:1;37196;37189:12;37141:62;37089:120;:::o;37215:122::-;37288:24;37306:5;37288:24;:::i;:::-;37281:5;37278:35;37268:63;;37327:1;37324;37317:12;37268:63;37215:122;:::o
Swarm Source
ipfs://d7e8757e51a463cdd5f6cbf91d6129fabca36dba4c579d340be636fe68ea18ab
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.