Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 109 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21341975 | 14 days ago | IN | 0 ETH | 0.00061697 | ||||
Safe Transfer Fr... | 20273801 | 163 days ago | IN | 0 ETH | 0.00019509 | ||||
Set Approval For... | 19922608 | 212 days ago | IN | 0 ETH | 0.00034031 | ||||
Set Approval For... | 16289608 | 722 days ago | IN | 0 ETH | 0.00080783 | ||||
Set Approval For... | 15953275 | 769 days ago | IN | 0 ETH | 0.00072179 | ||||
Set Approval For... | 14945757 | 923 days ago | IN | 0 ETH | 0.0009977 | ||||
Set Approval For... | 14920676 | 927 days ago | IN | 0 ETH | 0.00129683 | ||||
Set Approval For... | 14877822 | 934 days ago | IN | 0 ETH | 0.00172214 | ||||
Safe Transfer Fr... | 14668729 | 967 days ago | IN | 0 ETH | 0.00391676 | ||||
Safe Transfer Fr... | 14640732 | 972 days ago | IN | 0 ETH | 0.0013887 | ||||
Safe Transfer Fr... | 14634151 | 973 days ago | IN | 0 ETH | 0.00195403 | ||||
Safe Transfer Fr... | 14634146 | 973 days ago | IN | 0 ETH | 0.00204865 | ||||
Withdraw | 14634025 | 973 days ago | IN | 0 ETH | 0.00115075 | ||||
Safe Transfer Fr... | 14630734 | 973 days ago | IN | 0 ETH | 0.00360055 | ||||
Safe Transfer Fr... | 14627592 | 974 days ago | IN | 0 ETH | 0.00180502 | ||||
Set Approval For... | 14622077 | 975 days ago | IN | 0 ETH | 0.00213916 | ||||
Set Approval For... | 14614606 | 976 days ago | IN | 0 ETH | 0.00542788 | ||||
Safe Transfer Fr... | 14583903 | 981 days ago | IN | 0 ETH | 0.00341788 | ||||
Safe Transfer Fr... | 14583897 | 981 days ago | IN | 0 ETH | 0.00372975 | ||||
Mint | 14546346 | 987 days ago | IN | 0 ETH | 0.00422284 | ||||
Mint | 14546343 | 987 days ago | IN | 0 ETH | 0.00431199 | ||||
Safe Transfer Fr... | 14544783 | 987 days ago | IN | 0 ETH | 0.00257857 | ||||
Batch Mint | 14533443 | 989 days ago | IN | 0 ETH | 0.0037433 | ||||
Batch Mint | 14533437 | 989 days ago | IN | 0 ETH | 0.004271 | ||||
Mint | 14533263 | 989 days ago | IN | 0.15 ETH | 0.00545438 |
Loading...
Loading
Contract Name:
NafstarsAvatarsNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-01 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.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); } /** * @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; } } /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } /** * @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); } } } } /** * @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; } } /** * @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); } } /** * @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); } } /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI, Ownable { using Address for address; using Strings for uint256; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } contract NafstarsAvatarsNFT is ERC1155("https://nafstars.nft4all.com/metadata/avatars/presale/{id}.json") { uint256 public mintPrice = 0.15 ether; uint256 public supplyCount = 0; uint256 public supplyMax = 500; address public withdrawAddress; string public name = "Nafstars Avatars NFT"; string public symbol = "NAVATARS"; function setURI(string memory newURI) public virtual onlyOwner { _setURI(newURI); } function setMintPrice(uint256 mintPrice_) public onlyOwner { mintPrice = mintPrice_; } function setWithdrawAddress(address withdrawAddress_) public onlyOwner { withdrawAddress = withdrawAddress_; } function mint(address to) public payable { require(supplyCount + 1 <= supplyMax, "Supply reached."); if (_msgSender() != owner()) { require(msg.value >= mintPrice, "Insufficient funds."); } supplyCount = supplyCount + 1; _mint(to, 1, 1, ""); } function batchMint(address to, uint256 amount) public payable { require(amount > 0, "Invalid amount."); require(supplyCount + amount <= supplyMax, "Supply reached."); if (_msgSender() != owner()) { require(msg.value >= mintPrice * amount, "Insufficient funds."); } supplyCount = supplyCount + amount; _mint(to, 1, amount, ""); } function withdraw() external payable { require(_msgSender() == owner() || _msgSender() == withdrawAddress, "Ownable: caller not authorized"); (bool payment, ) = payable(withdrawAddress).call{value: address(this).balance}(""); require(payment); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"batchMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"mintPrice_","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawAddress_","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052670214e8348c4f000060045560006005556101f46006556040518060400160405280601481526020017f4e616673746172732041766174617273204e46540000000000000000000000008152506008908051906020019062000068929190620001ff565b506040518060400160405280600881526020017f4e4156415441525300000000000000000000000000000000000000000000000081525060099080519060200190620000b6929190620001ff565b50348015620000c457600080fd5b506040518060600160405280603f815260200162003d07603f9139620000ff620000f36200011760201b60201c565b6200011f60201b60201c565b6200011081620001e360201b60201c565b5062000314565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060039080519060200190620001fb929190620001ff565b5050565b8280546200020d90620002af565b90600052602060002090601f0160209004810192826200023157600085556200027d565b82601f106200024c57805160ff19168380011785556200027d565b828001600101855582156200027d579182015b828111156200027c5782518255916020019190600101906200025f565b5b5090506200028c919062000290565b5090565b5b80821115620002ab57600081600090555060010162000291565b5090565b60006002820490506001821680620002c857607f821691505b60208210811415620002df57620002de620002e5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6139e380620003246000396000f3fe60806040526004361061013f5760003560e01c80634e1273f4116100b6578063a22cb4651161006f578063a22cb4651461040e578063e985e9c514610437578063eb9fea3b14610474578063f242432a1461049f578063f2fde38b146104c8578063f4a0a528146104f15761013f565b80634e1273f41461031d5780636817c76c1461035a5780636a62784214610385578063715018a6146103a15780638da5cb5b146103b857806395d89b41146103e35761013f565b80630e89341c116101085780630e89341c1461023d5780631581b6001461027a5780632eb2c2d6146102a55780633ab1a494146102ce5780633ccfd60b146102f757806343508b05146103015761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806304e27582146101e757806306fdde0314610212575b600080fd5b34801561015057600080fd5b5061016b600480360381019061016691906126a7565b61051a565b6040516101789190612f71565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a3919061275f565b6105e4565b6040516101b59190612d14565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e091906127b9565b6106c6565b005b3480156101f357600080fd5b506101fc61074e565b6040516102099190612f71565b60405180910390f35b34801561021e57600080fd5b50610227610754565b6040516102349190612d2f565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612802565b6107e2565b6040516102719190612d2f565b60405180910390f35b34801561028657600080fd5b5061028f610876565b60405161029c9190612bde565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612501565b61089c565b005b3480156102da57600080fd5b506102f560048036038101906102f09190612494565b61093d565b005b6102ff6109fd565b005b61031b600480360381019061031691906126a7565b610b73565b005b34801561032957600080fd5b50610344600480360381019061033f91906126e7565b610cce565b6040516103519190612cbb565b60405180910390f35b34801561036657600080fd5b5061036f610de7565b60405161037c9190612f71565b60405180910390f35b61039f600480360381019061039a9190612494565b610ded565b005b3480156103ad57600080fd5b506103b6610efb565b005b3480156103c457600080fd5b506103cd610f83565b6040516103da9190612bde565b60405180910390f35b3480156103ef57600080fd5b506103f8610fac565b6040516104059190612d2f565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190612667565b61103a565b005b34801561044357600080fd5b5061045e600480360381019061045991906124c1565b611050565b60405161046b9190612d14565b60405180910390f35b34801561048057600080fd5b506104896110e4565b6040516104969190612f71565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906125d0565b6110ea565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190612494565b61118b565b005b3480156104fd57600080fd5b5061051860048036038101906105139190612802565b611283565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561058b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058290612db1565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106bf57506106be82611309565b5b9050919050565b6106ce611373565b73ffffffffffffffffffffffffffffffffffffffff166106ec610f83565b73ffffffffffffffffffffffffffffffffffffffff1614610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612e71565b60405180910390fd5b61074b8161137b565b50565b60065481565b6008805461076190613276565b80601f016020809104026020016040519081016040528092919081815260200182805461078d90613276565b80156107da5780601f106107af576101008083540402835291602001916107da565b820191906000526020600020905b8154815290600101906020018083116107bd57829003601f168201915b505050505081565b6060600380546107f190613276565b80601f016020809104026020016040519081016040528092919081815260200182805461081d90613276565b801561086a5780601f1061083f5761010080835404028352916020019161086a565b820191906000526020600020905b81548152906001019060200180831161084d57829003601f168201915b50505050509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108a4611373565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108ea57506108e9856108e4611373565b611050565b5b610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090612e31565b60405180910390fd5b6109368585858585611395565b5050505050565b610945611373565b73ffffffffffffffffffffffffffffffffffffffff16610963610f83565b73ffffffffffffffffffffffffffffffffffffffff16146109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b090612e71565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a05610f83565b73ffffffffffffffffffffffffffffffffffffffff16610a23611373565b73ffffffffffffffffffffffffffffffffffffffff161480610a995750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a81611373565b73ffffffffffffffffffffffffffffffffffffffff16145b610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90612eb1565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610b2090612bc9565b60006040518083038185875af1925050503d8060008114610b5d576040519150601f19603f3d011682016040523d82523d6000602084013e610b62565b606091505b5050905080610b7057600080fd5b50565b60008111610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90612d71565b60405180910390fd5b60065481600554610bc79190613110565b1115610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90612e91565b60405180910390fd5b610c10610f83565b73ffffffffffffffffffffffffffffffffffffffff16610c2e611373565b73ffffffffffffffffffffffffffffffffffffffff1614610c9a5780600454610c579190613166565b341015610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090612f51565b60405180910390fd5b5b80600554610ca89190613110565b600581905550610cca82600183604051806020016040528060008152506116ac565b5050565b60608151835114610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90612ef1565b60405180910390fd5b6000835167ffffffffffffffff811115610d3157610d306133af565b5b604051908082528060200260200182016040528015610d5f5781602001602082028036833780820191505090505b50905060005b8451811015610ddc57610dac858281518110610d8457610d83613380565b5b6020026020010151858381518110610d9f57610d9e613380565b5b602002602001015161051a565b828281518110610dbf57610dbe613380565b5b60200260200101818152505080610dd5906132d9565b9050610d65565b508091505092915050565b60045481565b6006546001600554610dff9190613110565b1115610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790612e91565b60405180910390fd5b610e48610f83565b73ffffffffffffffffffffffffffffffffffffffff16610e66611373565b73ffffffffffffffffffffffffffffffffffffffff1614610ec757600454341015610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90612f51565b60405180910390fd5b5b6001600554610ed69190613110565b600581905550610ef881600180604051806020016040528060008152506116ac565b50565b610f03611373565b73ffffffffffffffffffffffffffffffffffffffff16610f21610f83565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90612e71565b60405180910390fd5b610f816000611843565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098054610fb990613276565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe590613276565b80156110325780601f1061100757610100808354040283529160200191611032565b820191906000526020600020905b81548152906001019060200180831161101557829003601f168201915b505050505081565b61104c611045611373565b8383611907565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60055481565b6110f2611373565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611138575061113785611132611373565b611050565b5b611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90612df1565b60405180910390fd5b6111848585858585611a74565b5050505050565b611193611373565b73ffffffffffffffffffffffffffffffffffffffff166111b1610f83565b73ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90612dd1565b60405180910390fd5b61128081611843565b50565b61128b611373565b73ffffffffffffffffffffffffffffffffffffffff166112a9610f83565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690612e71565b60405180910390fd5b8060048190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806003908051906020019061139192919061216c565b5050565b81518351146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090612f11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090612e11565b60405180910390fd5b6000611453611373565b9050611463818787878787611cf9565b60005b845181101561161757600085828151811061148457611483613380565b5b6020026020010151905060008583815181106114a3576114a2613380565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612e51565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115fc9190613110565b9250508190555050505080611610906132d9565b9050611466565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161168e929190612cdd565b60405180910390a46116a4818787878787611d01565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390612f31565b60405180910390fd5b6000611726611373565b90506117478160008761173888611ee8565b61174188611ee8565b87611cf9565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a79190613110565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611825929190612f8c565b60405180910390a461183c81600087878787611f62565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90612ed1565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a679190612d14565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612e11565b60405180910390fd5b6000611aee611373565b9050611b0e818787611aff88611ee8565b611b0888611ee8565b87611cf9565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90612e51565b60405180910390fd5b8381036001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5d9190613110565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611cda929190612f8c565b60405180910390a4611cf0828888888888611f62565b50505050505050565b505050505050565b611d208473ffffffffffffffffffffffffffffffffffffffff16612149565b15611ee0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d66959493929190612bf9565b602060405180830381600087803b158015611d8057600080fd5b505af1925050508015611db157506040513d601f19601f82011682018060405250810190611dae919061278c565b60015b611e5757611dbd6133de565b806308c379a01415611e1a5750611dd26138bb565b80611ddd5750611e1c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e119190612d2f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90612d51565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590612d91565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611f0757611f066133af565b5b604051908082528060200260200182016040528015611f355781602001602082028036833780820191505090505b5090508281600081518110611f4d57611f4c613380565b5b60200260200101818152505080915050919050565b611f818473ffffffffffffffffffffffffffffffffffffffff16612149565b15612141578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611fc7959493929190612c61565b602060405180830381600087803b158015611fe157600080fd5b505af192505050801561201257506040513d601f19601f8201168201806040525081019061200f919061278c565b60015b6120b85761201e6133de565b806308c379a0141561207b57506120336138bb565b8061203e575061207d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120729190612d2f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90612d51565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690612d91565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461217890613276565b90600052602060002090601f01602090048101928261219a57600085556121e1565b82601f106121b357805160ff19168380011785556121e1565b828001600101855582156121e1579182015b828111156121e05782518255916020019190600101906121c5565b5b5090506121ee91906121f2565b5090565b5b8082111561220b5760008160009055506001016121f3565b5090565b600061222261221d84612fda565b612fb5565b9050808382526020820190508285602086028201111561224557612244613405565b5b60005b85811015612275578161225b8882612373565b845260208401935060208301925050600181019050612248565b5050509392505050565b600061229261228d84613006565b612fb5565b905080838252602082019050828560208602820111156122b5576122b4613405565b5b60005b858110156122e557816122cb888261247f565b8452602084019350602083019250506001810190506122b8565b5050509392505050565b60006123026122fd84613032565b612fb5565b90508281526020810184848401111561231e5761231d61340a565b5b612329848285613234565b509392505050565b600061234461233f84613063565b612fb5565b9050828152602081018484840111156123605761235f61340a565b5b61236b848285613234565b509392505050565b60008135905061238281613951565b92915050565b600082601f83011261239d5761239c613400565b5b81356123ad84826020860161220f565b91505092915050565b600082601f8301126123cb576123ca613400565b5b81356123db84826020860161227f565b91505092915050565b6000813590506123f381613968565b92915050565b6000813590506124088161397f565b92915050565b60008151905061241d8161397f565b92915050565b600082601f83011261243857612437613400565b5b81356124488482602086016122ef565b91505092915050565b600082601f83011261246657612465613400565b5b8135612476848260208601612331565b91505092915050565b60008135905061248e81613996565b92915050565b6000602082840312156124aa576124a9613414565b5b60006124b884828501612373565b91505092915050565b600080604083850312156124d8576124d7613414565b5b60006124e685828601612373565b92505060206124f785828601612373565b9150509250929050565b600080600080600060a0868803121561251d5761251c613414565b5b600061252b88828901612373565b955050602061253c88828901612373565b945050604086013567ffffffffffffffff81111561255d5761255c61340f565b5b612569888289016123b6565b935050606086013567ffffffffffffffff81111561258a5761258961340f565b5b612596888289016123b6565b925050608086013567ffffffffffffffff8111156125b7576125b661340f565b5b6125c388828901612423565b9150509295509295909350565b600080600080600060a086880312156125ec576125eb613414565b5b60006125fa88828901612373565b955050602061260b88828901612373565b945050604061261c8882890161247f565b935050606061262d8882890161247f565b925050608086013567ffffffffffffffff81111561264e5761264d61340f565b5b61265a88828901612423565b9150509295509295909350565b6000806040838503121561267e5761267d613414565b5b600061268c85828601612373565b925050602061269d858286016123e4565b9150509250929050565b600080604083850312156126be576126bd613414565b5b60006126cc85828601612373565b92505060206126dd8582860161247f565b9150509250929050565b600080604083850312156126fe576126fd613414565b5b600083013567ffffffffffffffff81111561271c5761271b61340f565b5b61272885828601612388565b925050602083013567ffffffffffffffff8111156127495761274861340f565b5b612755858286016123b6565b9150509250929050565b60006020828403121561277557612774613414565b5b6000612783848285016123f9565b91505092915050565b6000602082840312156127a2576127a1613414565b5b60006127b08482850161240e565b91505092915050565b6000602082840312156127cf576127ce613414565b5b600082013567ffffffffffffffff8111156127ed576127ec61340f565b5b6127f984828501612451565b91505092915050565b60006020828403121561281857612817613414565b5b60006128268482850161247f565b91505092915050565b600061283b8383612bab565b60208301905092915050565b612850816131c0565b82525050565b6000612861826130a4565b61286b81856130d2565b935061287683613094565b8060005b838110156128a757815161288e888261282f565b9750612899836130c5565b92505060018101905061287a565b5085935050505092915050565b6128bd816131d2565b82525050565b60006128ce826130af565b6128d881856130e3565b93506128e8818560208601613243565b6128f181613419565b840191505092915050565b6000612907826130ba565b61291181856130ff565b9350612921818560208601613243565b61292a81613419565b840191505092915050565b60006129426034836130ff565b915061294d82613437565b604082019050919050565b6000612965600f836130ff565b915061297082613486565b602082019050919050565b60006129886028836130ff565b9150612993826134af565b604082019050919050565b60006129ab602b836130ff565b91506129b6826134fe565b604082019050919050565b60006129ce6026836130ff565b91506129d98261354d565b604082019050919050565b60006129f16029836130ff565b91506129fc8261359c565b604082019050919050565b6000612a146025836130ff565b9150612a1f826135eb565b604082019050919050565b6000612a376032836130ff565b9150612a428261363a565b604082019050919050565b6000612a5a602a836130ff565b9150612a6582613689565b604082019050919050565b6000612a7d6020836130ff565b9150612a88826136d8565b602082019050919050565b6000612aa0600f836130ff565b9150612aab82613701565b602082019050919050565b6000612ac3601e836130ff565b9150612ace8261372a565b602082019050919050565b6000612ae66000836130f4565b9150612af182613753565b600082019050919050565b6000612b096029836130ff565b9150612b1482613756565b604082019050919050565b6000612b2c6029836130ff565b9150612b37826137a5565b604082019050919050565b6000612b4f6028836130ff565b9150612b5a826137f4565b604082019050919050565b6000612b726021836130ff565b9150612b7d82613843565b604082019050919050565b6000612b956013836130ff565b9150612ba082613892565b602082019050919050565b612bb48161322a565b82525050565b612bc38161322a565b82525050565b6000612bd482612ad9565b9150819050919050565b6000602082019050612bf36000830184612847565b92915050565b600060a082019050612c0e6000830188612847565b612c1b6020830187612847565b8181036040830152612c2d8186612856565b90508181036060830152612c418185612856565b90508181036080830152612c5581846128c3565b90509695505050505050565b600060a082019050612c766000830188612847565b612c836020830187612847565b612c906040830186612bba565b612c9d6060830185612bba565b8181036080830152612caf81846128c3565b90509695505050505050565b60006020820190508181036000830152612cd58184612856565b905092915050565b60006040820190508181036000830152612cf78185612856565b90508181036020830152612d0b8184612856565b90509392505050565b6000602082019050612d2960008301846128b4565b92915050565b60006020820190508181036000830152612d4981846128fc565b905092915050565b60006020820190508181036000830152612d6a81612935565b9050919050565b60006020820190508181036000830152612d8a81612958565b9050919050565b60006020820190508181036000830152612daa8161297b565b9050919050565b60006020820190508181036000830152612dca8161299e565b9050919050565b60006020820190508181036000830152612dea816129c1565b9050919050565b60006020820190508181036000830152612e0a816129e4565b9050919050565b60006020820190508181036000830152612e2a81612a07565b9050919050565b60006020820190508181036000830152612e4a81612a2a565b9050919050565b60006020820190508181036000830152612e6a81612a4d565b9050919050565b60006020820190508181036000830152612e8a81612a70565b9050919050565b60006020820190508181036000830152612eaa81612a93565b9050919050565b60006020820190508181036000830152612eca81612ab6565b9050919050565b60006020820190508181036000830152612eea81612afc565b9050919050565b60006020820190508181036000830152612f0a81612b1f565b9050919050565b60006020820190508181036000830152612f2a81612b42565b9050919050565b60006020820190508181036000830152612f4a81612b65565b9050919050565b60006020820190508181036000830152612f6a81612b88565b9050919050565b6000602082019050612f866000830184612bba565b92915050565b6000604082019050612fa16000830185612bba565b612fae6020830184612bba565b9392505050565b6000612fbf612fd0565b9050612fcb82826132a8565b919050565b6000604051905090565b600067ffffffffffffffff821115612ff557612ff46133af565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613021576130206133af565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561304d5761304c6133af565b5b61305682613419565b9050602081019050919050565b600067ffffffffffffffff82111561307e5761307d6133af565b5b61308782613419565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061311b8261322a565b91506131268361322a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561315b5761315a613322565b5b828201905092915050565b60006131718261322a565b915061317c8361322a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131b5576131b4613322565b5b828202905092915050565b60006131cb8261320a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613261578082015181840152602081019050613246565b83811115613270576000848401525b50505050565b6000600282049050600182168061328e57607f821691505b602082108114156132a2576132a1613351565b5b50919050565b6132b182613419565b810181811067ffffffffffffffff821117156132d0576132cf6133af565b5b80604052505050565b60006132e48261322a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561331757613316613322565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156133fd5760046000803e6133fa60005161342a565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f496e76616c696420616d6f756e742e0000000000000000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f537570706c7920726561636865642e0000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206e6f7420617574686f72697a65640000600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b600060443d10156138cb5761394e565b6138d3612fd0565b60043d036004823e80513d602482011167ffffffffffffffff821117156138fb57505061394e565b808201805167ffffffffffffffff811115613919575050505061394e565b80602083010160043d03850181111561393657505050505061394e565b613945826020018501866132a8565b82955050505050505b90565b61395a816131c0565b811461396557600080fd5b50565b613971816131d2565b811461397c57600080fd5b50565b613988816131de565b811461399357600080fd5b50565b61399f8161322a565b81146139aa57600080fd5b5056fea26469706673582212208cf5e3316800eb1354a70d9bb1deda452c2387a3d95b21014918b3665a8d111b64736f6c6343000807003368747470733a2f2f6e616673746172732e6e667434616c6c2e636f6d2f6d657461646174612f617661746172732f70726573616c652f7b69647d2e6a736f6e
Deployed Bytecode
0x60806040526004361061013f5760003560e01c80634e1273f4116100b6578063a22cb4651161006f578063a22cb4651461040e578063e985e9c514610437578063eb9fea3b14610474578063f242432a1461049f578063f2fde38b146104c8578063f4a0a528146104f15761013f565b80634e1273f41461031d5780636817c76c1461035a5780636a62784214610385578063715018a6146103a15780638da5cb5b146103b857806395d89b41146103e35761013f565b80630e89341c116101085780630e89341c1461023d5780631581b6001461027a5780632eb2c2d6146102a55780633ab1a494146102ce5780633ccfd60b146102f757806343508b05146103015761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806304e27582146101e757806306fdde0314610212575b600080fd5b34801561015057600080fd5b5061016b600480360381019061016691906126a7565b61051a565b6040516101789190612f71565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a3919061275f565b6105e4565b6040516101b59190612d14565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e091906127b9565b6106c6565b005b3480156101f357600080fd5b506101fc61074e565b6040516102099190612f71565b60405180910390f35b34801561021e57600080fd5b50610227610754565b6040516102349190612d2f565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612802565b6107e2565b6040516102719190612d2f565b60405180910390f35b34801561028657600080fd5b5061028f610876565b60405161029c9190612bde565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612501565b61089c565b005b3480156102da57600080fd5b506102f560048036038101906102f09190612494565b61093d565b005b6102ff6109fd565b005b61031b600480360381019061031691906126a7565b610b73565b005b34801561032957600080fd5b50610344600480360381019061033f91906126e7565b610cce565b6040516103519190612cbb565b60405180910390f35b34801561036657600080fd5b5061036f610de7565b60405161037c9190612f71565b60405180910390f35b61039f600480360381019061039a9190612494565b610ded565b005b3480156103ad57600080fd5b506103b6610efb565b005b3480156103c457600080fd5b506103cd610f83565b6040516103da9190612bde565b60405180910390f35b3480156103ef57600080fd5b506103f8610fac565b6040516104059190612d2f565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190612667565b61103a565b005b34801561044357600080fd5b5061045e600480360381019061045991906124c1565b611050565b60405161046b9190612d14565b60405180910390f35b34801561048057600080fd5b506104896110e4565b6040516104969190612f71565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906125d0565b6110ea565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190612494565b61118b565b005b3480156104fd57600080fd5b5061051860048036038101906105139190612802565b611283565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561058b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058290612db1565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106af57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106bf57506106be82611309565b5b9050919050565b6106ce611373565b73ffffffffffffffffffffffffffffffffffffffff166106ec610f83565b73ffffffffffffffffffffffffffffffffffffffff1614610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990612e71565b60405180910390fd5b61074b8161137b565b50565b60065481565b6008805461076190613276565b80601f016020809104026020016040519081016040528092919081815260200182805461078d90613276565b80156107da5780601f106107af576101008083540402835291602001916107da565b820191906000526020600020905b8154815290600101906020018083116107bd57829003601f168201915b505050505081565b6060600380546107f190613276565b80601f016020809104026020016040519081016040528092919081815260200182805461081d90613276565b801561086a5780601f1061083f5761010080835404028352916020019161086a565b820191906000526020600020905b81548152906001019060200180831161084d57829003601f168201915b50505050509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108a4611373565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108ea57506108e9856108e4611373565b611050565b5b610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090612e31565b60405180910390fd5b6109368585858585611395565b5050505050565b610945611373565b73ffffffffffffffffffffffffffffffffffffffff16610963610f83565b73ffffffffffffffffffffffffffffffffffffffff16146109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b090612e71565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a05610f83565b73ffffffffffffffffffffffffffffffffffffffff16610a23611373565b73ffffffffffffffffffffffffffffffffffffffff161480610a995750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a81611373565b73ffffffffffffffffffffffffffffffffffffffff16145b610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf90612eb1565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610b2090612bc9565b60006040518083038185875af1925050503d8060008114610b5d576040519150601f19603f3d011682016040523d82523d6000602084013e610b62565b606091505b5050905080610b7057600080fd5b50565b60008111610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90612d71565b60405180910390fd5b60065481600554610bc79190613110565b1115610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90612e91565b60405180910390fd5b610c10610f83565b73ffffffffffffffffffffffffffffffffffffffff16610c2e611373565b73ffffffffffffffffffffffffffffffffffffffff1614610c9a5780600454610c579190613166565b341015610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090612f51565b60405180910390fd5b5b80600554610ca89190613110565b600581905550610cca82600183604051806020016040528060008152506116ac565b5050565b60608151835114610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90612ef1565b60405180910390fd5b6000835167ffffffffffffffff811115610d3157610d306133af565b5b604051908082528060200260200182016040528015610d5f5781602001602082028036833780820191505090505b50905060005b8451811015610ddc57610dac858281518110610d8457610d83613380565b5b6020026020010151858381518110610d9f57610d9e613380565b5b602002602001015161051a565b828281518110610dbf57610dbe613380565b5b60200260200101818152505080610dd5906132d9565b9050610d65565b508091505092915050565b60045481565b6006546001600554610dff9190613110565b1115610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790612e91565b60405180910390fd5b610e48610f83565b73ffffffffffffffffffffffffffffffffffffffff16610e66611373565b73ffffffffffffffffffffffffffffffffffffffff1614610ec757600454341015610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd90612f51565b60405180910390fd5b5b6001600554610ed69190613110565b600581905550610ef881600180604051806020016040528060008152506116ac565b50565b610f03611373565b73ffffffffffffffffffffffffffffffffffffffff16610f21610f83565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90612e71565b60405180910390fd5b610f816000611843565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098054610fb990613276565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe590613276565b80156110325780601f1061100757610100808354040283529160200191611032565b820191906000526020600020905b81548152906001019060200180831161101557829003601f168201915b505050505081565b61104c611045611373565b8383611907565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60055481565b6110f2611373565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611138575061113785611132611373565b611050565b5b611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90612df1565b60405180910390fd5b6111848585858585611a74565b5050505050565b611193611373565b73ffffffffffffffffffffffffffffffffffffffff166111b1610f83565b73ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90612dd1565b60405180910390fd5b61128081611843565b50565b61128b611373565b73ffffffffffffffffffffffffffffffffffffffff166112a9610f83565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690612e71565b60405180910390fd5b8060048190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806003908051906020019061139192919061216c565b5050565b81518351146113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090612f11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090612e11565b60405180910390fd5b6000611453611373565b9050611463818787878787611cf9565b60005b845181101561161757600085828151811061148457611483613380565b5b6020026020010151905060008583815181106114a3576114a2613380565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612e51565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115fc9190613110565b9250508190555050505080611610906132d9565b9050611466565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161168e929190612cdd565b60405180910390a46116a4818787878787611d01565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390612f31565b60405180910390fd5b6000611726611373565b90506117478160008761173888611ee8565b61174188611ee8565b87611cf9565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a79190613110565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611825929190612f8c565b60405180910390a461183c81600087878787611f62565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90612ed1565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a679190612d14565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612e11565b60405180910390fd5b6000611aee611373565b9050611b0e818787611aff88611ee8565b611b0888611ee8565b87611cf9565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90612e51565b60405180910390fd5b8381036001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5d9190613110565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611cda929190612f8c565b60405180910390a4611cf0828888888888611f62565b50505050505050565b505050505050565b611d208473ffffffffffffffffffffffffffffffffffffffff16612149565b15611ee0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d66959493929190612bf9565b602060405180830381600087803b158015611d8057600080fd5b505af1925050508015611db157506040513d601f19601f82011682018060405250810190611dae919061278c565b60015b611e5757611dbd6133de565b806308c379a01415611e1a5750611dd26138bb565b80611ddd5750611e1c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e119190612d2f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90612d51565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590612d91565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611f0757611f066133af565b5b604051908082528060200260200182016040528015611f355781602001602082028036833780820191505090505b5090508281600081518110611f4d57611f4c613380565b5b60200260200101818152505080915050919050565b611f818473ffffffffffffffffffffffffffffffffffffffff16612149565b15612141578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611fc7959493929190612c61565b602060405180830381600087803b158015611fe157600080fd5b505af192505050801561201257506040513d601f19601f8201168201806040525081019061200f919061278c565b60015b6120b85761201e6133de565b806308c379a0141561207b57506120336138bb565b8061203e575061207d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120729190612d2f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90612d51565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690612d91565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461217890613276565b90600052602060002090601f01602090048101928261219a57600085556121e1565b82601f106121b357805160ff19168380011785556121e1565b828001600101855582156121e1579182015b828111156121e05782518255916020019190600101906121c5565b5b5090506121ee91906121f2565b5090565b5b8082111561220b5760008160009055506001016121f3565b5090565b600061222261221d84612fda565b612fb5565b9050808382526020820190508285602086028201111561224557612244613405565b5b60005b85811015612275578161225b8882612373565b845260208401935060208301925050600181019050612248565b5050509392505050565b600061229261228d84613006565b612fb5565b905080838252602082019050828560208602820111156122b5576122b4613405565b5b60005b858110156122e557816122cb888261247f565b8452602084019350602083019250506001810190506122b8565b5050509392505050565b60006123026122fd84613032565b612fb5565b90508281526020810184848401111561231e5761231d61340a565b5b612329848285613234565b509392505050565b600061234461233f84613063565b612fb5565b9050828152602081018484840111156123605761235f61340a565b5b61236b848285613234565b509392505050565b60008135905061238281613951565b92915050565b600082601f83011261239d5761239c613400565b5b81356123ad84826020860161220f565b91505092915050565b600082601f8301126123cb576123ca613400565b5b81356123db84826020860161227f565b91505092915050565b6000813590506123f381613968565b92915050565b6000813590506124088161397f565b92915050565b60008151905061241d8161397f565b92915050565b600082601f83011261243857612437613400565b5b81356124488482602086016122ef565b91505092915050565b600082601f83011261246657612465613400565b5b8135612476848260208601612331565b91505092915050565b60008135905061248e81613996565b92915050565b6000602082840312156124aa576124a9613414565b5b60006124b884828501612373565b91505092915050565b600080604083850312156124d8576124d7613414565b5b60006124e685828601612373565b92505060206124f785828601612373565b9150509250929050565b600080600080600060a0868803121561251d5761251c613414565b5b600061252b88828901612373565b955050602061253c88828901612373565b945050604086013567ffffffffffffffff81111561255d5761255c61340f565b5b612569888289016123b6565b935050606086013567ffffffffffffffff81111561258a5761258961340f565b5b612596888289016123b6565b925050608086013567ffffffffffffffff8111156125b7576125b661340f565b5b6125c388828901612423565b9150509295509295909350565b600080600080600060a086880312156125ec576125eb613414565b5b60006125fa88828901612373565b955050602061260b88828901612373565b945050604061261c8882890161247f565b935050606061262d8882890161247f565b925050608086013567ffffffffffffffff81111561264e5761264d61340f565b5b61265a88828901612423565b9150509295509295909350565b6000806040838503121561267e5761267d613414565b5b600061268c85828601612373565b925050602061269d858286016123e4565b9150509250929050565b600080604083850312156126be576126bd613414565b5b60006126cc85828601612373565b92505060206126dd8582860161247f565b9150509250929050565b600080604083850312156126fe576126fd613414565b5b600083013567ffffffffffffffff81111561271c5761271b61340f565b5b61272885828601612388565b925050602083013567ffffffffffffffff8111156127495761274861340f565b5b612755858286016123b6565b9150509250929050565b60006020828403121561277557612774613414565b5b6000612783848285016123f9565b91505092915050565b6000602082840312156127a2576127a1613414565b5b60006127b08482850161240e565b91505092915050565b6000602082840312156127cf576127ce613414565b5b600082013567ffffffffffffffff8111156127ed576127ec61340f565b5b6127f984828501612451565b91505092915050565b60006020828403121561281857612817613414565b5b60006128268482850161247f565b91505092915050565b600061283b8383612bab565b60208301905092915050565b612850816131c0565b82525050565b6000612861826130a4565b61286b81856130d2565b935061287683613094565b8060005b838110156128a757815161288e888261282f565b9750612899836130c5565b92505060018101905061287a565b5085935050505092915050565b6128bd816131d2565b82525050565b60006128ce826130af565b6128d881856130e3565b93506128e8818560208601613243565b6128f181613419565b840191505092915050565b6000612907826130ba565b61291181856130ff565b9350612921818560208601613243565b61292a81613419565b840191505092915050565b60006129426034836130ff565b915061294d82613437565b604082019050919050565b6000612965600f836130ff565b915061297082613486565b602082019050919050565b60006129886028836130ff565b9150612993826134af565b604082019050919050565b60006129ab602b836130ff565b91506129b6826134fe565b604082019050919050565b60006129ce6026836130ff565b91506129d98261354d565b604082019050919050565b60006129f16029836130ff565b91506129fc8261359c565b604082019050919050565b6000612a146025836130ff565b9150612a1f826135eb565b604082019050919050565b6000612a376032836130ff565b9150612a428261363a565b604082019050919050565b6000612a5a602a836130ff565b9150612a6582613689565b604082019050919050565b6000612a7d6020836130ff565b9150612a88826136d8565b602082019050919050565b6000612aa0600f836130ff565b9150612aab82613701565b602082019050919050565b6000612ac3601e836130ff565b9150612ace8261372a565b602082019050919050565b6000612ae66000836130f4565b9150612af182613753565b600082019050919050565b6000612b096029836130ff565b9150612b1482613756565b604082019050919050565b6000612b2c6029836130ff565b9150612b37826137a5565b604082019050919050565b6000612b4f6028836130ff565b9150612b5a826137f4565b604082019050919050565b6000612b726021836130ff565b9150612b7d82613843565b604082019050919050565b6000612b956013836130ff565b9150612ba082613892565b602082019050919050565b612bb48161322a565b82525050565b612bc38161322a565b82525050565b6000612bd482612ad9565b9150819050919050565b6000602082019050612bf36000830184612847565b92915050565b600060a082019050612c0e6000830188612847565b612c1b6020830187612847565b8181036040830152612c2d8186612856565b90508181036060830152612c418185612856565b90508181036080830152612c5581846128c3565b90509695505050505050565b600060a082019050612c766000830188612847565b612c836020830187612847565b612c906040830186612bba565b612c9d6060830185612bba565b8181036080830152612caf81846128c3565b90509695505050505050565b60006020820190508181036000830152612cd58184612856565b905092915050565b60006040820190508181036000830152612cf78185612856565b90508181036020830152612d0b8184612856565b90509392505050565b6000602082019050612d2960008301846128b4565b92915050565b60006020820190508181036000830152612d4981846128fc565b905092915050565b60006020820190508181036000830152612d6a81612935565b9050919050565b60006020820190508181036000830152612d8a81612958565b9050919050565b60006020820190508181036000830152612daa8161297b565b9050919050565b60006020820190508181036000830152612dca8161299e565b9050919050565b60006020820190508181036000830152612dea816129c1565b9050919050565b60006020820190508181036000830152612e0a816129e4565b9050919050565b60006020820190508181036000830152612e2a81612a07565b9050919050565b60006020820190508181036000830152612e4a81612a2a565b9050919050565b60006020820190508181036000830152612e6a81612a4d565b9050919050565b60006020820190508181036000830152612e8a81612a70565b9050919050565b60006020820190508181036000830152612eaa81612a93565b9050919050565b60006020820190508181036000830152612eca81612ab6565b9050919050565b60006020820190508181036000830152612eea81612afc565b9050919050565b60006020820190508181036000830152612f0a81612b1f565b9050919050565b60006020820190508181036000830152612f2a81612b42565b9050919050565b60006020820190508181036000830152612f4a81612b65565b9050919050565b60006020820190508181036000830152612f6a81612b88565b9050919050565b6000602082019050612f866000830184612bba565b92915050565b6000604082019050612fa16000830185612bba565b612fae6020830184612bba565b9392505050565b6000612fbf612fd0565b9050612fcb82826132a8565b919050565b6000604051905090565b600067ffffffffffffffff821115612ff557612ff46133af565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613021576130206133af565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561304d5761304c6133af565b5b61305682613419565b9050602081019050919050565b600067ffffffffffffffff82111561307e5761307d6133af565b5b61308782613419565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061311b8261322a565b91506131268361322a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561315b5761315a613322565b5b828201905092915050565b60006131718261322a565b915061317c8361322a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131b5576131b4613322565b5b828202905092915050565b60006131cb8261320a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613261578082015181840152602081019050613246565b83811115613270576000848401525b50505050565b6000600282049050600182168061328e57607f821691505b602082108114156132a2576132a1613351565b5b50919050565b6132b182613419565b810181811067ffffffffffffffff821117156132d0576132cf6133af565b5b80604052505050565b60006132e48261322a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561331757613316613322565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156133fd5760046000803e6133fa60005161342a565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f496e76616c696420616d6f756e742e0000000000000000000000000000000000600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f537570706c7920726561636865642e0000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206e6f7420617574686f72697a65640000600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b600060443d10156138cb5761394e565b6138d3612fd0565b60043d036004823e80513d602482011167ffffffffffffffff821117156138fb57505061394e565b808201805167ffffffffffffffff811115613919575050505061394e565b80602083010160043d03850181111561393657505050505061394e565b613945826020018501866132a8565b82955050505050505b90565b61395a816131c0565b811461396557600080fd5b50565b613971816131d2565b811461397c57600080fd5b50565b613988816131de565b811461399357600080fd5b50565b61399f8161322a565b81146139aa57600080fd5b5056fea26469706673582212208cf5e3316800eb1354a70d9bb1deda452c2387a3d95b21014918b3665a8d111b64736f6c63430008070033
Deployed Bytecode Sourcemap
35569:1605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23070:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22141:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35919:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35759:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35831:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22826:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35794:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24849:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36116:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36906:265;;;:::i;:::-;;36528:372;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23451:464;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35680:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36240:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20449:97;;;;;;;;;;;;;:::i;:::-;;19826:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35879:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23982:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24197:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35724:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24425:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20695:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36016:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23070:221;23156:7;23199:1;23180:21;;:7;:21;;;;23172:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23263:9;:13;23273:2;23263:13;;;;;;;;;;;:22;23277:7;23263:22;;;;;;;;;;;;;;;;23256:29;;23070:221;;;;:::o;22141:280::-;22243:4;22283:26;22268:41;;;:11;:41;;;;:102;;;;22333:37;22318:52;;;:11;:52;;;;22268:102;:147;;;;22379:36;22403:11;22379:23;:36::i;:::-;22268:147;22256:159;;22141:280;;;:::o;35919:91::-;20041:12;:10;:12::i;:::-;20030:23;;:7;:5;:7::i;:::-;:23;;;20022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35989:15:::1;35997:6;35989:7;:15::i;:::-;35919:91:::0;:::o;35759:30::-;;;;:::o;35831:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22826:99::-;22886:13;22915:4;22908:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22826:99;;;:::o;35794:30::-;;;;;;;;;;;;;:::o;24849:394::-;25058:12;:10;:12::i;:::-;25050:20;;:4;:20;;;:60;;;;25074:36;25091:4;25097:12;:10;:12::i;:::-;25074:16;:36::i;:::-;25050:60;25034:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;25185:52;25208:4;25214:2;25218:3;25223:7;25232:4;25185:22;:52::i;:::-;24849:394;;;;;:::o;36116:118::-;20041:12;:10;:12::i;:::-;20030:23;;:7;:5;:7::i;:::-;:23;;;20022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36212:16:::1;36194:15;;:34;;;;;;;;;;;;;;;;;;36116:118:::0;:::o;36906:265::-;36974:7;:5;:7::i;:::-;36958:23;;:12;:10;:12::i;:::-;:23;;;:58;;;;37001:15;;;;;;;;;;;36985:31;;:12;:10;:12::i;:::-;:31;;;36958:58;36950:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;37061:12;37087:15;;;;;;;;;;;37079:29;;37116:21;37079:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37060:82;;;37157:7;37149:16;;;;;;36943:228;36906:265::o;36528:372::-;36614:1;36605:6;:10;36597:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36674:9;;36664:6;36650:11;;:20;;;;:::i;:::-;:33;;36642:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36732:7;:5;:7::i;:::-;36716:23;;:12;:10;:12::i;:::-;:23;;;36712:109;;36783:6;36771:9;;:18;;;;:::i;:::-;36758:9;:31;;36750:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36712:109;36857:6;36843:11;;:20;;;;:::i;:::-;36829:11;:34;;;;36870:24;36876:2;36880:1;36883:6;36870:24;;;;;;;;;;;;:5;:24::i;:::-;36528:372;;:::o;23451:464::-;23577:16;23632:3;:10;23613:8;:15;:29;23605:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23697:30;23744:8;:15;23730:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23697:63;;23774:9;23769:112;23793:8;:15;23789:1;:19;23769:112;;;23843:30;23853:8;23862:1;23853:11;;;;;;;;:::i;:::-;;;;;;;;23866:3;23870:1;23866:6;;;;;;;;:::i;:::-;;;;;;;;23843:9;:30::i;:::-;23824:13;23838:1;23824:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23810:3;;;;:::i;:::-;;;23769:112;;;;23896:13;23889:20;;;23451:464;;;;:::o;35680:37::-;;;;:::o;36240:282::-;36315:9;;36310:1;36296:11;;:15;;;;:::i;:::-;:28;;36288:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;36373:7;:5;:7::i;:::-;36357:23;;:12;:10;:12::i;:::-;:23;;;36353:100;;36412:9;;36399;:22;;36391:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;36353:100;36489:1;36475:11;;:15;;;;:::i;:::-;36461:11;:29;;;;36497:19;36503:2;36507:1;36510;36497:19;;;;;;;;;;;;:5;:19::i;:::-;36240:282;:::o;20449:97::-;20041:12;:10;:12::i;:::-;20030:23;;:7;:5;:7::i;:::-;:23;;;20022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20510:30:::1;20537:1;20510:18;:30::i;:::-;20449:97::o:0;19826:81::-;19872:7;19895:6;;;;;;;;;;;19888:13;;19826:81;:::o;35879:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23982:149::-;24073:52;24092:12;:10;:12::i;:::-;24106:8;24116;24073:18;:52::i;:::-;23982:149;;:::o;24197:162::-;24296:4;24316:18;:27;24335:7;24316:27;;;;;;;;;;;;;;;:37;24344:8;24316:37;;;;;;;;;;;;;;;;;;;;;;;;;24309:44;;24197:162;;;;:::o;35724:30::-;;;;:::o;24425:353::-;24609:12;:10;:12::i;:::-;24601:20;;:4;:20;;;:60;;;;24625:36;24642:4;24648:12;:10;:12::i;:::-;24625:16;:36::i;:::-;24601:60;24585:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;24727:45;24745:4;24751:2;24755;24759:6;24767:4;24727:17;:45::i;:::-;24425:353;;;;;:::o;20695:191::-;20041:12;:10;:12::i;:::-;20030:23;;:7;:5;:7::i;:::-;:23;;;20022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20800:1:::1;20780:22;;:8;:22;;;;20772:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20852:28;20871:8;20852:18;:28::i;:::-;20695:191:::0;:::o;36016:94::-;20041:12;:10;:12::i;:::-;20030:23;;:7;:5;:7::i;:::-;:23;;;20022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36094:10:::1;36082:9;:22;;;;36016:94:::0;:::o;1560:151::-;1645:4;1680:25;1665:40;;;:11;:40;;;;1658:47;;1560:151;;;:::o;16940:92::-;16993:7;17016:10;17009:17;;16940:92;:::o;28597:82::-;28667:6;28660:4;:13;;;;;;;;;;;;:::i;:::-;;28597:82;:::o;26797:962::-;26998:7;:14;26984:3;:10;:28;26976:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27086:1;27072:16;;:2;:16;;;;27064:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27139:16;27158:12;:10;:12::i;:::-;27139:31;;27179:60;27200:8;27210:4;27216:2;27220:3;27225:7;27234:4;27179:20;:60::i;:::-;27253:9;27248:361;27272:3;:10;27268:1;:14;27248:361;;;27298:10;27311:3;27315:1;27311:6;;;;;;;;:::i;:::-;;;;;;;;27298:19;;27326:14;27343:7;27351:1;27343:10;;;;;;;;:::i;:::-;;;;;;;;27326:27;;27364:19;27386:9;:13;27396:2;27386:13;;;;;;;;;;;:19;27400:4;27386:19;;;;;;;;;;;;;;;;27364:41;;27437:6;27422:11;:21;;27414:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27552:6;27538:11;:20;27516:9;:13;27526:2;27516:13;;;;;;;;;;;:19;27530:4;27516:19;;;;;;;;;;;;;;;:42;;;;27595:6;27574:9;:13;27584:2;27574:13;;;;;;;;;;;:17;27588:2;27574:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27289:320;;;27284:3;;;;:::i;:::-;;;27248:361;;;;27652:2;27622:47;;27646:4;27622:47;;27636:8;27622:47;;;27656:3;27661:7;27622:47;;;;;;;:::i;:::-;;;;;;;;27678:75;27714:8;27724:4;27730:2;27734:3;27739:7;27748:4;27678:35;:75::i;:::-;26969:790;26797:962;;;;;:::o;29059:525::-;29204:1;29190:16;;:2;:16;;;;29182:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29253:16;29272:12;:10;:12::i;:::-;29253:31;;29293:102;29314:8;29332:1;29336:2;29340:21;29358:2;29340:17;:21::i;:::-;29363:25;29381:6;29363:17;:25::i;:::-;29390:4;29293:20;:102::i;:::-;29425:6;29404:9;:13;29414:2;29404:13;;;;;;;;;;;:17;29418:2;29404:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29480:2;29443:52;;29476:1;29443:52;;29458:8;29443:52;;;29484:2;29488:6;29443:52;;;;;;;:::i;:::-;;;;;;;;29504:74;29535:8;29553:1;29557:2;29561;29565:6;29573:4;29504:30;:74::i;:::-;29175:409;29059:525;;;;:::o;21040:177::-;21110:16;21129:6;;;;;;;;;;;21110:25;;21151:8;21142:6;;:17;;;;;;;;;;;;;;;;;;21202:8;21171:40;;21192:8;21171:40;;;;;;;;;;;;21103:114;21040:177;:::o;32573:303::-;32710:8;32701:17;;:5;:17;;;;32693:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32809:8;32771:18;:25;32790:5;32771:25;;;;;;;;;;;;;;;:35;32797:8;32771:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32851:8;32829:41;;32844:5;32829:41;;;32861:8;32829:41;;;;;;:::i;:::-;;;;;;;;32573:303;;;:::o;25701:744::-;25877:1;25863:16;;:2;:16;;;;25855:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25930:16;25949:12;:10;:12::i;:::-;25930:31;;25970:96;25991:8;26001:4;26007:2;26011:21;26029:2;26011:17;:21::i;:::-;26034:25;26052:6;26034:17;:25::i;:::-;26061:4;25970:20;:96::i;:::-;26075:19;26097:9;:13;26107:2;26097:13;;;;;;;;;;;:19;26111:4;26097:19;;;;;;;;;;;;;;;;26075:41;;26146:6;26131:11;:21;;26123:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26257:6;26243:11;:20;26221:9;:13;26231:2;26221:13;;;;;;;;;;;:19;26235:4;26221:19;;;;;;;;;;;;;;;:42;;;;26296:6;26275:9;:13;26285:2;26275:13;;;;;;;;;;;:17;26289:2;26275:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26347:2;26316:46;;26341:4;26316:46;;26331:8;26316:46;;;26351:2;26355:6;26316:46;;;;;;;:::i;:::-;;;;;;;;26371:68;26402:8;26412:4;26418:2;26422;26426:6;26434:4;26371:30;:68::i;:::-;25848:597;;25701:744;;;;;:::o;33826:195::-;;;;;;;:::o;34675:697::-;34885:15;:2;:13;;;:15::i;:::-;34881:486;;;34932:2;34915:43;;;34959:8;34969:4;34975:3;34980:7;34989:4;34915:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34911:449;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35253:6;35246:14;;;;;;;;;;;:::i;:::-;;;;;;;;34911:449;;;35288:62;;;;;;;;;;:::i;:::-;;;;;;;;34911:449;35066:48;;;35054:60;;;:8;:60;;;;35050:141;;35129:50;;;;;;;;;;:::i;:::-;;;;;;;;35050:141;34995:205;34881:486;34675:697;;;;;;:::o;35378:184::-;35444:16;35469:22;35508:1;35494:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35469:41;;35528:7;35517:5;35523:1;35517:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;35551:5;35544:12;;;35378:184;;;:::o;34027:642::-;34212:15;:2;:13;;;:15::i;:::-;34208:456;;;34259:2;34242:38;;;34281:8;34291:4;34297:2;34301:6;34309:4;34242:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34238:419;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34550:6;34543:14;;;;;;;;;;;:::i;:::-;;;;;;;;34238:419;;;34585:62;;;;;;;;;;:::i;:::-;;;;;;;;34238:419;34368:43;;;34356:55;;;:8;:55;;;;34352:136;;34426:50;;;;;;;;;;:::i;:::-;;;;;;;;34352:136;34315:182;34208:456;34027:642;;;;;;:::o;9484:308::-;9544:4;9785:1;9763:7;:19;;;:23;9756:30;;9484:308;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:327::-;9890:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:119;;;9945:79;;:::i;:::-;9907:119;10065:1;10090:52;10134:7;10125:6;10114:9;10110:22;10090:52;:::i;:::-;10080:62;;10036:116;9832:327;;;;:::o;10165:349::-;10234:6;10283:2;10271:9;10262:7;10258:23;10254:32;10251:119;;;10289:79;;:::i;:::-;10251:119;10409:1;10434:63;10489:7;10480:6;10469:9;10465:22;10434:63;:::i;:::-;10424:73;;10380:127;10165:349;;;;:::o;10520:509::-;10589:6;10638:2;10626:9;10617:7;10613:23;10609:32;10606:119;;;10644:79;;:::i;:::-;10606:119;10792:1;10781:9;10777:17;10764:31;10822:18;10814:6;10811:30;10808:117;;;10844:79;;:::i;:::-;10808:117;10949:63;11004:7;10995:6;10984:9;10980:22;10949:63;:::i;:::-;10939:73;;10735:287;10520:509;;;;:::o;11035:329::-;11094:6;11143:2;11131:9;11122:7;11118:23;11114:32;11111:119;;;11149:79;;:::i;:::-;11111:119;11269:1;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11240:117;11035:329;;;;:::o;11370:179::-;11439:10;11460:46;11502:3;11494:6;11460:46;:::i;:::-;11538:4;11533:3;11529:14;11515:28;;11370:179;;;;:::o;11555:118::-;11642:24;11660:5;11642:24;:::i;:::-;11637:3;11630:37;11555:118;;:::o;11709:732::-;11828:3;11857:54;11905:5;11857:54;:::i;:::-;11927:86;12006:6;12001:3;11927:86;:::i;:::-;11920:93;;12037:56;12087:5;12037:56;:::i;:::-;12116:7;12147:1;12132:284;12157:6;12154:1;12151:13;12132:284;;;12233:6;12227:13;12260:63;12319:3;12304:13;12260:63;:::i;:::-;12253:70;;12346:60;12399:6;12346:60;:::i;:::-;12336:70;;12192:224;12179:1;12176;12172:9;12167:14;;12132:284;;;12136:14;12432:3;12425:10;;11833:608;;;11709:732;;;;:::o;12447:109::-;12528:21;12543:5;12528:21;:::i;:::-;12523:3;12516:34;12447:109;;:::o;12562:360::-;12648:3;12676:38;12708:5;12676:38;:::i;:::-;12730:70;12793:6;12788:3;12730:70;:::i;:::-;12723:77;;12809:52;12854:6;12849:3;12842:4;12835:5;12831:16;12809:52;:::i;:::-;12886:29;12908:6;12886:29;:::i;:::-;12881:3;12877:39;12870:46;;12652:270;12562:360;;;;:::o;12928:364::-;13016:3;13044:39;13077:5;13044:39;:::i;:::-;13099:71;13163:6;13158:3;13099:71;:::i;:::-;13092:78;;13179:52;13224:6;13219:3;13212:4;13205:5;13201:16;13179:52;:::i;:::-;13256:29;13278:6;13256:29;:::i;:::-;13251:3;13247:39;13240:46;;13020:272;12928:364;;;;:::o;13298:366::-;13440:3;13461:67;13525:2;13520:3;13461:67;:::i;:::-;13454:74;;13537:93;13626:3;13537:93;:::i;:::-;13655:2;13650:3;13646:12;13639:19;;13298:366;;;:::o;13670:::-;13812:3;13833:67;13897:2;13892:3;13833:67;:::i;:::-;13826:74;;13909:93;13998:3;13909:93;:::i;:::-;14027:2;14022:3;14018:12;14011:19;;13670:366;;;:::o;14042:::-;14184:3;14205:67;14269:2;14264:3;14205:67;:::i;:::-;14198:74;;14281:93;14370:3;14281:93;:::i;:::-;14399:2;14394:3;14390:12;14383:19;;14042:366;;;:::o;14414:::-;14556:3;14577:67;14641:2;14636:3;14577:67;:::i;:::-;14570:74;;14653:93;14742:3;14653:93;:::i;:::-;14771:2;14766:3;14762:12;14755:19;;14414:366;;;:::o;14786:::-;14928:3;14949:67;15013:2;15008:3;14949:67;:::i;:::-;14942:74;;15025:93;15114:3;15025:93;:::i;:::-;15143:2;15138:3;15134:12;15127:19;;14786:366;;;:::o;15158:::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:::-;15672:3;15693:67;15757:2;15752:3;15693:67;:::i;:::-;15686:74;;15769:93;15858:3;15769:93;:::i;:::-;15887:2;15882:3;15878:12;15871:19;;15530:366;;;:::o;15902:::-;16044:3;16065:67;16129:2;16124:3;16065:67;:::i;:::-;16058:74;;16141:93;16230:3;16141:93;:::i;:::-;16259:2;16254:3;16250:12;16243:19;;15902:366;;;:::o;16274:::-;16416:3;16437:67;16501:2;16496:3;16437:67;:::i;:::-;16430:74;;16513:93;16602:3;16513:93;:::i;:::-;16631:2;16626:3;16622:12;16615:19;;16274:366;;;:::o;16646:::-;16788:3;16809:67;16873:2;16868:3;16809:67;:::i;:::-;16802:74;;16885:93;16974:3;16885:93;:::i;:::-;17003:2;16998:3;16994:12;16987:19;;16646:366;;;:::o;17018:::-;17160:3;17181:67;17245:2;17240:3;17181:67;:::i;:::-;17174:74;;17257:93;17346:3;17257:93;:::i;:::-;17375:2;17370:3;17366:12;17359:19;;17018:366;;;:::o;17390:::-;17532:3;17553:67;17617:2;17612:3;17553:67;:::i;:::-;17546:74;;17629:93;17718:3;17629:93;:::i;:::-;17747:2;17742:3;17738:12;17731:19;;17390:366;;;:::o;17762:398::-;17921:3;17942:83;18023:1;18018:3;17942:83;:::i;:::-;17935:90;;18034:93;18123:3;18034:93;:::i;:::-;18152:1;18147:3;18143:11;18136:18;;17762:398;;;:::o;18166:366::-;18308:3;18329:67;18393:2;18388:3;18329:67;:::i;:::-;18322:74;;18405:93;18494:3;18405:93;:::i;:::-;18523:2;18518:3;18514:12;18507:19;;18166:366;;;:::o;18538:::-;18680:3;18701:67;18765:2;18760:3;18701:67;:::i;:::-;18694:74;;18777:93;18866:3;18777:93;:::i;:::-;18895:2;18890:3;18886:12;18879:19;;18538:366;;;:::o;18910:::-;19052:3;19073:67;19137:2;19132:3;19073:67;:::i;:::-;19066:74;;19149:93;19238:3;19149:93;:::i;:::-;19267:2;19262:3;19258:12;19251:19;;18910:366;;;:::o;19282:::-;19424:3;19445:67;19509:2;19504:3;19445:67;:::i;:::-;19438:74;;19521:93;19610:3;19521:93;:::i;:::-;19639:2;19634:3;19630:12;19623:19;;19282:366;;;:::o;19654:::-;19796:3;19817:67;19881:2;19876:3;19817:67;:::i;:::-;19810:74;;19893:93;19982:3;19893:93;:::i;:::-;20011:2;20006:3;20002:12;19995:19;;19654:366;;;:::o;20026:108::-;20103:24;20121:5;20103:24;:::i;:::-;20098:3;20091:37;20026:108;;:::o;20140:118::-;20227:24;20245:5;20227:24;:::i;:::-;20222:3;20215:37;20140:118;;:::o;20264:379::-;20448:3;20470:147;20613:3;20470:147;:::i;:::-;20463:154;;20634:3;20627:10;;20264:379;;;:::o;20649:222::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20793:71;20861:1;20850:9;20846:17;20837:6;20793:71;:::i;:::-;20649:222;;;;:::o;20877:1053::-;21200:4;21238:3;21227:9;21223:19;21215:27;;21252:71;21320:1;21309:9;21305:17;21296:6;21252:71;:::i;:::-;21333:72;21401:2;21390:9;21386:18;21377:6;21333:72;:::i;:::-;21452:9;21446:4;21442:20;21437:2;21426:9;21422:18;21415:48;21480:108;21583:4;21574:6;21480:108;:::i;:::-;21472:116;;21635:9;21629:4;21625:20;21620:2;21609:9;21605:18;21598:48;21663:108;21766:4;21757:6;21663:108;:::i;:::-;21655:116;;21819:9;21813:4;21809:20;21803:3;21792:9;21788:19;21781:49;21847:76;21918:4;21909:6;21847:76;:::i;:::-;21839:84;;20877:1053;;;;;;;;:::o;21936:751::-;22159:4;22197:3;22186:9;22182:19;22174:27;;22211:71;22279:1;22268:9;22264:17;22255:6;22211:71;:::i;:::-;22292:72;22360:2;22349:9;22345:18;22336:6;22292:72;:::i;:::-;22374;22442:2;22431:9;22427:18;22418:6;22374:72;:::i;:::-;22456;22524:2;22513:9;22509:18;22500:6;22456:72;:::i;:::-;22576:9;22570:4;22566:20;22560:3;22549:9;22545:19;22538:49;22604:76;22675:4;22666:6;22604:76;:::i;:::-;22596:84;;21936:751;;;;;;;;:::o;22693:373::-;22836:4;22874:2;22863:9;22859:18;22851:26;;22923:9;22917:4;22913:20;22909:1;22898:9;22894:17;22887:47;22951:108;23054:4;23045:6;22951:108;:::i;:::-;22943:116;;22693:373;;;;:::o;23072:634::-;23293:4;23331:2;23320:9;23316:18;23308:26;;23380:9;23374:4;23370:20;23366:1;23355:9;23351:17;23344:47;23408:108;23511:4;23502:6;23408:108;:::i;:::-;23400:116;;23563:9;23557:4;23553:20;23548:2;23537:9;23533:18;23526:48;23591:108;23694:4;23685:6;23591:108;:::i;:::-;23583:116;;23072:634;;;;;:::o;23712:210::-;23799:4;23837:2;23826:9;23822:18;23814:26;;23850:65;23912:1;23901:9;23897:17;23888:6;23850:65;:::i;:::-;23712:210;;;;:::o;23928:313::-;24041:4;24079:2;24068:9;24064:18;24056:26;;24128:9;24122:4;24118:20;24114:1;24103:9;24099:17;24092:47;24156:78;24229:4;24220:6;24156:78;:::i;:::-;24148:86;;23928:313;;;;:::o;24247:419::-;24413:4;24451:2;24440:9;24436:18;24428:26;;24500:9;24494:4;24490:20;24486:1;24475:9;24471:17;24464:47;24528:131;24654:4;24528:131;:::i;:::-;24520:139;;24247:419;;;:::o;24672:::-;24838:4;24876:2;24865:9;24861:18;24853:26;;24925:9;24919:4;24915:20;24911:1;24900:9;24896:17;24889:47;24953:131;25079:4;24953:131;:::i;:::-;24945:139;;24672:419;;;:::o;25097:::-;25263:4;25301:2;25290:9;25286:18;25278:26;;25350:9;25344:4;25340:20;25336:1;25325:9;25321:17;25314:47;25378:131;25504:4;25378:131;:::i;:::-;25370:139;;25097:419;;;:::o;25522:::-;25688:4;25726:2;25715:9;25711:18;25703:26;;25775:9;25769:4;25765:20;25761:1;25750:9;25746:17;25739:47;25803:131;25929:4;25803:131;:::i;:::-;25795:139;;25522:419;;;:::o;25947:::-;26113:4;26151:2;26140:9;26136:18;26128:26;;26200:9;26194:4;26190:20;26186:1;26175:9;26171:17;26164:47;26228:131;26354:4;26228:131;:::i;:::-;26220:139;;25947:419;;;:::o;26372:::-;26538:4;26576:2;26565:9;26561:18;26553:26;;26625:9;26619:4;26615:20;26611:1;26600:9;26596:17;26589:47;26653:131;26779:4;26653:131;:::i;:::-;26645:139;;26372:419;;;:::o;26797:::-;26963:4;27001:2;26990:9;26986:18;26978:26;;27050:9;27044:4;27040:20;27036:1;27025:9;27021:17;27014:47;27078:131;27204:4;27078:131;:::i;:::-;27070:139;;26797:419;;;:::o;27222:::-;27388:4;27426:2;27415:9;27411:18;27403:26;;27475:9;27469:4;27465:20;27461:1;27450:9;27446:17;27439:47;27503:131;27629:4;27503:131;:::i;:::-;27495:139;;27222:419;;;:::o;27647:::-;27813:4;27851:2;27840:9;27836:18;27828:26;;27900:9;27894:4;27890:20;27886:1;27875:9;27871:17;27864:47;27928:131;28054:4;27928:131;:::i;:::-;27920:139;;27647:419;;;:::o;28072:::-;28238:4;28276:2;28265:9;28261:18;28253:26;;28325:9;28319:4;28315:20;28311:1;28300:9;28296:17;28289:47;28353:131;28479:4;28353:131;:::i;:::-;28345:139;;28072:419;;;:::o;28497:::-;28663:4;28701:2;28690:9;28686:18;28678:26;;28750:9;28744:4;28740:20;28736:1;28725:9;28721:17;28714:47;28778:131;28904:4;28778:131;:::i;:::-;28770:139;;28497:419;;;:::o;28922:::-;29088:4;29126:2;29115:9;29111:18;29103:26;;29175:9;29169:4;29165:20;29161:1;29150:9;29146:17;29139:47;29203:131;29329:4;29203:131;:::i;:::-;29195:139;;28922:419;;;:::o;29347:::-;29513:4;29551:2;29540:9;29536:18;29528:26;;29600:9;29594:4;29590:20;29586:1;29575:9;29571:17;29564:47;29628:131;29754:4;29628:131;:::i;:::-;29620:139;;29347:419;;;:::o;29772:::-;29938:4;29976:2;29965:9;29961:18;29953:26;;30025:9;30019:4;30015:20;30011:1;30000:9;29996:17;29989:47;30053:131;30179:4;30053:131;:::i;:::-;30045:139;;29772:419;;;:::o;30197:::-;30363:4;30401:2;30390:9;30386:18;30378:26;;30450:9;30444:4;30440:20;30436:1;30425:9;30421:17;30414:47;30478:131;30604:4;30478:131;:::i;:::-;30470:139;;30197:419;;;:::o;30622:::-;30788:4;30826:2;30815:9;30811:18;30803:26;;30875:9;30869:4;30865:20;30861:1;30850:9;30846:17;30839:47;30903:131;31029:4;30903:131;:::i;:::-;30895:139;;30622:419;;;:::o;31047:::-;31213:4;31251:2;31240:9;31236:18;31228:26;;31300:9;31294:4;31290:20;31286:1;31275:9;31271:17;31264:47;31328:131;31454:4;31328:131;:::i;:::-;31320:139;;31047:419;;;:::o;31472:222::-;31565:4;31603:2;31592:9;31588:18;31580:26;;31616:71;31684:1;31673:9;31669:17;31660:6;31616:71;:::i;:::-;31472:222;;;;:::o;31700:332::-;31821:4;31859:2;31848:9;31844:18;31836:26;;31872:71;31940:1;31929:9;31925:17;31916:6;31872:71;:::i;:::-;31953:72;32021:2;32010:9;32006:18;31997:6;31953:72;:::i;:::-;31700:332;;;;;:::o;32038:129::-;32072:6;32099:20;;:::i;:::-;32089:30;;32128:33;32156:4;32148:6;32128:33;:::i;:::-;32038:129;;;:::o;32173:75::-;32206:6;32239:2;32233:9;32223:19;;32173:75;:::o;32254:311::-;32331:4;32421:18;32413:6;32410:30;32407:56;;;32443:18;;:::i;:::-;32407:56;32493:4;32485:6;32481:17;32473:25;;32553:4;32547;32543:15;32535:23;;32254:311;;;:::o;32571:::-;32648:4;32738:18;32730:6;32727:30;32724:56;;;32760:18;;:::i;:::-;32724:56;32810:4;32802:6;32798:17;32790:25;;32870:4;32864;32860:15;32852:23;;32571:311;;;:::o;32888:307::-;32949:4;33039:18;33031:6;33028:30;33025:56;;;33061:18;;:::i;:::-;33025:56;33099:29;33121:6;33099:29;:::i;:::-;33091:37;;33183:4;33177;33173:15;33165:23;;32888:307;;;:::o;33201:308::-;33263:4;33353:18;33345:6;33342:30;33339:56;;;33375:18;;:::i;:::-;33339:56;33413:29;33435:6;33413:29;:::i;:::-;33405:37;;33497:4;33491;33487:15;33479:23;;33201:308;;;:::o;33515:132::-;33582:4;33605:3;33597:11;;33635:4;33630:3;33626:14;33618:22;;33515:132;;;:::o;33653:114::-;33720:6;33754:5;33748:12;33738:22;;33653:114;;;:::o;33773:98::-;33824:6;33858:5;33852:12;33842:22;;33773:98;;;:::o;33877:99::-;33929:6;33963:5;33957:12;33947:22;;33877:99;;;:::o;33982:113::-;34052:4;34084;34079:3;34075:14;34067:22;;33982:113;;;:::o;34101:184::-;34200:11;34234:6;34229:3;34222:19;34274:4;34269:3;34265:14;34250:29;;34101:184;;;;:::o;34291:168::-;34374:11;34408:6;34403:3;34396:19;34448:4;34443:3;34439:14;34424:29;;34291:168;;;;:::o;34465:147::-;34566:11;34603:3;34588:18;;34465:147;;;;:::o;34618:169::-;34702:11;34736:6;34731:3;34724:19;34776:4;34771:3;34767:14;34752:29;;34618:169;;;;:::o;34793:305::-;34833:3;34852:20;34870:1;34852:20;:::i;:::-;34847:25;;34886:20;34904:1;34886:20;:::i;:::-;34881:25;;35040:1;34972:66;34968:74;34965:1;34962:81;34959:107;;;35046:18;;:::i;:::-;34959:107;35090:1;35087;35083:9;35076:16;;34793:305;;;;:::o;35104:348::-;35144:7;35167:20;35185:1;35167:20;:::i;:::-;35162:25;;35201:20;35219:1;35201:20;:::i;:::-;35196:25;;35389:1;35321:66;35317:74;35314:1;35311:81;35306:1;35299:9;35292:17;35288:105;35285:131;;;35396:18;;:::i;:::-;35285:131;35444:1;35441;35437:9;35426:20;;35104:348;;;;:::o;35458:96::-;35495:7;35524:24;35542:5;35524:24;:::i;:::-;35513:35;;35458:96;;;:::o;35560:90::-;35594:7;35637:5;35630:13;35623:21;35612:32;;35560:90;;;:::o;35656:149::-;35692:7;35732:66;35725:5;35721:78;35710:89;;35656:149;;;:::o;35811:126::-;35848:7;35888:42;35881:5;35877:54;35866:65;;35811:126;;;:::o;35943:77::-;35980:7;36009:5;35998:16;;35943:77;;;:::o;36026:154::-;36110:6;36105:3;36100;36087:30;36172:1;36163:6;36158:3;36154:16;36147:27;36026:154;;;:::o;36186:307::-;36254:1;36264:113;36278:6;36275:1;36272:13;36264:113;;;36363:1;36358:3;36354:11;36348:18;36344:1;36339:3;36335:11;36328:39;36300:2;36297:1;36293:10;36288:15;;36264:113;;;36395:6;36392:1;36389:13;36386:101;;;36475:1;36466:6;36461:3;36457:16;36450:27;36386:101;36235:258;36186:307;;;:::o;36499:320::-;36543:6;36580:1;36574:4;36570:12;36560:22;;36627:1;36621:4;36617:12;36648:18;36638:81;;36704:4;36696:6;36692:17;36682:27;;36638:81;36766:2;36758:6;36755:14;36735:18;36732:38;36729:84;;;36785:18;;:::i;:::-;36729:84;36550:269;36499:320;;;:::o;36825:281::-;36908:27;36930:4;36908:27;:::i;:::-;36900:6;36896:40;37038:6;37026:10;37023:22;37002:18;36990:10;36987:34;36984:62;36981:88;;;37049:18;;:::i;:::-;36981:88;37089:10;37085:2;37078:22;36868:238;36825:281;;:::o;37112:233::-;37151:3;37174:24;37192:5;37174:24;:::i;:::-;37165:33;;37220:66;37213:5;37210:77;37207:103;;;37290:18;;:::i;:::-;37207:103;37337:1;37330:5;37326:13;37319:20;;37112:233;;;:::o;37351:180::-;37399:77;37396:1;37389:88;37496:4;37493:1;37486:15;37520:4;37517:1;37510:15;37537:180;37585:77;37582:1;37575:88;37682:4;37679:1;37672:15;37706:4;37703:1;37696:15;37723:180;37771:77;37768:1;37761:88;37868:4;37865:1;37858:15;37892:4;37889:1;37882:15;37909:180;37957:77;37954:1;37947:88;38054:4;38051:1;38044:15;38078:4;38075:1;38068:15;38095:183;38130:3;38168:1;38150:16;38147:23;38144:128;;;38206:1;38203;38200;38185:23;38228:34;38259:1;38253:8;38228:34;:::i;:::-;38221:41;;38144:128;38095:183;:::o;38284:117::-;38393:1;38390;38383:12;38407:117;38516:1;38513;38506:12;38530:117;38639:1;38636;38629:12;38653:117;38762:1;38759;38752:12;38776:117;38885:1;38882;38875:12;38899:102;38940:6;38991:2;38987:7;38982:2;38975:5;38971:14;38967:28;38957:38;;38899:102;;;:::o;39007:106::-;39051:8;39100:5;39095:3;39091:15;39070:36;;39007:106;;;:::o;39119:239::-;39259:34;39255:1;39247:6;39243:14;39236:58;39328:22;39323:2;39315:6;39311:15;39304:47;39119:239;:::o;39364:165::-;39504:17;39500:1;39492:6;39488:14;39481:41;39364:165;:::o;39535:227::-;39675:34;39671:1;39663:6;39659:14;39652:58;39744:10;39739:2;39731:6;39727:15;39720:35;39535:227;:::o;39768:230::-;39908:34;39904:1;39896:6;39892:14;39885:58;39977:13;39972:2;39964:6;39960:15;39953:38;39768:230;:::o;40004:225::-;40144:34;40140:1;40132:6;40128:14;40121:58;40213:8;40208:2;40200:6;40196:15;40189:33;40004:225;:::o;40235:228::-;40375:34;40371:1;40363:6;40359:14;40352:58;40444:11;40439:2;40431:6;40427:15;40420:36;40235:228;:::o;40469:224::-;40609:34;40605:1;40597:6;40593:14;40586:58;40678:7;40673:2;40665:6;40661:15;40654:32;40469:224;:::o;40699:237::-;40839:34;40835:1;40827:6;40823:14;40816:58;40908:20;40903:2;40895:6;40891:15;40884:45;40699:237;:::o;40942:229::-;41082:34;41078:1;41070:6;41066:14;41059:58;41151:12;41146:2;41138:6;41134:15;41127:37;40942:229;:::o;41177:182::-;41317:34;41313:1;41305:6;41301:14;41294:58;41177:182;:::o;41365:165::-;41505:17;41501:1;41493:6;41489:14;41482:41;41365:165;:::o;41536:180::-;41676:32;41672:1;41664:6;41660:14;41653:56;41536:180;:::o;41722:114::-;;:::o;41842:228::-;41982:34;41978:1;41970:6;41966:14;41959:58;42051:11;42046:2;42038:6;42034:15;42027:36;41842:228;:::o;42076:::-;42216:34;42212:1;42204:6;42200:14;42193:58;42285:11;42280:2;42272:6;42268:15;42261:36;42076:228;:::o;42310:227::-;42450:34;42446:1;42438:6;42434:14;42427:58;42519:10;42514:2;42506:6;42502:15;42495:35;42310:227;:::o;42543:220::-;42683:34;42679:1;42671:6;42667:14;42660:58;42752:3;42747:2;42739:6;42735:15;42728:28;42543:220;:::o;42769:169::-;42909:21;42905:1;42897:6;42893:14;42886:45;42769:169;:::o;42944:711::-;42983:3;43021:4;43003:16;43000:26;42997:39;;;43029:5;;42997:39;43058:20;;:::i;:::-;43133:1;43115:16;43111:24;43108:1;43102:4;43087:49;43166:4;43160:11;43265:16;43258:4;43250:6;43246:17;43243:39;43210:18;43202:6;43199:30;43183:113;43180:146;;;43311:5;;;;43180:146;43357:6;43351:4;43347:17;43393:3;43387:10;43420:18;43412:6;43409:30;43406:43;;;43442:5;;;;;;43406:43;43490:6;43483:4;43478:3;43474:14;43470:27;43549:1;43531:16;43527:24;43521:4;43517:35;43512:3;43509:44;43506:57;;;43556:5;;;;;;;43506:57;43573;43621:6;43615:4;43611:17;43603:6;43599:30;43593:4;43573:57;:::i;:::-;43646:3;43639:10;;42987:668;;;;;42944:711;;:::o;43661:122::-;43734:24;43752:5;43734:24;:::i;:::-;43727:5;43724:35;43714:63;;43773:1;43770;43763:12;43714:63;43661:122;:::o;43789:116::-;43859:21;43874:5;43859:21;:::i;:::-;43852:5;43849:32;43839:60;;43895:1;43892;43885:12;43839:60;43789:116;:::o;43911:120::-;43983:23;44000:5;43983:23;:::i;:::-;43976:5;43973:34;43963:62;;44021:1;44018;44011:12;43963:62;43911:120;:::o;44037:122::-;44110:24;44128:5;44110:24;:::i;:::-;44103:5;44100:35;44090:63;;44149:1;44146;44139:12;44090:63;44037:122;:::o
Swarm Source
ipfs://8cf5e3316800eb1354a70d9bb1deda452c2387a3d95b21014918b3665a8d111b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.