Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
6,666 PETS
Holders
2,600
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HolyPets
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-04 */ /* _ _ ____ _ __ __ _____ ______ _______ _____ | | | |/ __ \| | \ \ / / | __ \| ____|__ __/ ____| | |__| | | | | | \ \_/ / | |__) | |__ | | | (___ | __ | | | | | \ / | ___/| __| | | \___ \ | | | | |__| | |____| | | | | |____ | | ____) | |_| |_|\____/|______|_| |_| |______| |_| |_____/ [email protected] */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @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. 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. 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); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @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; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @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 { using Address for address; // 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; } } // File: contracts/HolyPets.sol pragma solidity ^0.8.0; contract HolyPets is ERC1155, Ownable { string public constant name = "Pets"; string public constant symbol = "PETS"; uint32 public constant maxSupply = 6666; uint256 public constant unitPrice = 0.0777 ether; uint32 public totalSupply = 0; uint32 public saleStart = 1646510400; constructor(string memory uri) ERC1155(uri) {} function setURI(string memory uri) external onlyOwner { _setURI(uri); } function setSaleStart(uint32 timestamp) external onlyOwner { saleStart = timestamp; } function saleIsActive() public view returns (bool) { return saleStart <= block.timestamp; } function mint(address to, uint32 count) internal { totalSupply += count; if (count > 1) { uint256[] memory ids = new uint256[](uint256(count)); uint256[] memory amounts = new uint256[](uint256(count)); for (uint32 i = 0; i < count; i++) { ids[i] = totalSupply - count + i; amounts[i] = 1; } _mintBatch(to, ids, amounts, ""); } else { _mint(to, totalSupply - 1, 1, ""); } } function mint(uint32 count) external payable { require(saleIsActive(), "Public sale is not active."); require(count > 0, "Count must be greater than 0."); require( totalSupply + count <= maxSupply, "Count exceeds the maximum allowed supply." ); require(msg.value >= unitPrice * count, "Not enough ether."); mint(msg.sender, count); } function batchMint(address[] memory addresses) external onlyOwner { require( totalSupply + addresses.length <= maxSupply, "Count exceeds the maximum allowed supply." ); for (uint256 i = 0; i < addresses.length; i++) { mint(addresses[i], 1); } } function withdraw() external onlyOwner { address[2] memory addresses = [ 0x2EC1e3291f0889085098555A4a3AC3A451491060, 0x1F9fa3F21f92b5579c4e4d7232d9E412b0E89399 ]; uint32[2] memory shares = [ uint32(6900), uint32(3100) ]; uint256 balance = address(this).balance; for (uint32 i = 0; i < addresses.length; i++) { uint256 amount = i == addresses.length - 1 ? address(this).balance : (balance * shares[i]) / 10000; payable(addresses[i]).transfer(amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600360146101000a81548163ffffffff021916908363ffffffff160217905550636223c140600360186101000a81548163ffffffff021916908363ffffffff1602179055503480156200005857600080fd5b506040516200447d3803806200447d83398181016040528101906200007e9190620002d0565b806200009081620000b860201b60201c565b50620000b1620000a5620000d460201b60201c565b620000dc60201b60201c565b50620004a5565b8060029080519060200190620000d0929190620001a2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b090620003b6565b90600052602060002090601f016020900481019282620001d4576000855562000220565b82601f10620001ef57805160ff191683800117855562000220565b8280016001018555821562000220579182015b828111156200021f57825182559160200191906001019062000202565b5b5090506200022f919062000233565b5090565b5b808211156200024e57600081600090555060010162000234565b5090565b60006200026962000263846200034a565b62000321565b90508281526020810184848401111562000288576200028762000485565b5b6200029584828562000380565b509392505050565b600082601f830112620002b557620002b462000480565b5b8151620002c784826020860162000252565b91505092915050565b600060208284031215620002e957620002e86200048f565b5b600082015167ffffffffffffffff8111156200030a57620003096200048a565b5b62000318848285016200029d565b91505092915050565b60006200032d62000340565b90506200033b8282620003ec565b919050565b6000604051905090565b600067ffffffffffffffff82111562000368576200036762000451565b5b620003738262000494565b9050602081019050919050565b60005b83811015620003a057808201518184015260208101905062000383565b83811115620003b0576000848401525b50505050565b60006002820490506001821680620003cf57607f821691505b60208210811415620003e657620003e562000422565b5b50919050565b620003f78262000494565b810181811067ffffffffffffffff8211171562000419576200041862000451565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613fc880620004b56000396000f3fe60806040526004361061013f5760003560e01c806395d89b41116100b6578063d67b06c11161006f578063d67b06c114610428578063e73faa2d14610451578063e985e9c51461047c578063eb8d2444146104b9578063f242432a146104e4578063f2fde38b1461050d5761013f565b806395d89b4114610339578063a22cb46514610364578063a71bbebe1461038d578063a741ae1e146103a9578063ab0bcc41146103d2578063d5abeb01146103fd5761013f565b806318160ddd1161010857806318160ddd1461024f5780632eb2c2d61461027a5780633ccfd60b146102a35780634e1273f4146102ba578063715018a6146102f75780638da5cb5b1461030e5761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806306fdde03146101e75780630e89341c14610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612ab6565b610536565b60405161017891906133cd565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612bb7565b6105ff565b6040516101b59190613170565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c11565b6106e1565b005b3480156101f357600080fd5b506101fc610769565b604051610209919061318b565b60405180910390f35b34801561021e57600080fd5b5061023960048036038101906102349190612c5a565b6107a2565b604051610246919061318b565b60405180910390f35b34801561025b57600080fd5b50610264610836565b6040516102719190613411565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190612910565b61084c565b005b3480156102af57600080fd5b506102b86108ed565b005b3480156102c657600080fd5b506102e160048036038101906102dc9190612b3f565b610b2d565b6040516102ee9190613117565b60405180910390f35b34801561030357600080fd5b5061030c610c46565b005b34801561031a57600080fd5b50610323610cce565b604051610330919061303a565b60405180910390f35b34801561034557600080fd5b5061034e610cf8565b60405161035b919061318b565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190612a76565b610d31565b005b6103a760048036038101906103a29190612c87565b610d47565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190612c87565b610eae565b005b3480156103de57600080fd5b506103e7610f4e565b6040516103f49190613411565b60405180910390f35b34801561040957600080fd5b50610412610f64565b60405161041f9190613411565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612af6565b610f6a565b005b34801561045d57600080fd5b5061046661109d565b60405161047391906133cd565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906128d0565b6110a9565b6040516104b09190613170565b60405180910390f35b3480156104c557600080fd5b506104ce61113d565b6040516104db9190613170565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906129df565b611160565b005b34801561051957600080fd5b50610534600480360381019061052f91906128a3565b611201565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059e906131ed565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106da57506106d9826112f9565b5b9050919050565b6106e9611363565b73ffffffffffffffffffffffffffffffffffffffff16610707610cce565b73ffffffffffffffffffffffffffffffffffffffff161461075d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107549061332d565b60405180910390fd5b6107668161136b565b50565b6040518060400160405280600481526020017f506574730000000000000000000000000000000000000000000000000000000081525081565b6060600280546107b1906137c5565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906137c5565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b50505050509050919050565b600360149054906101000a900463ffffffff1681565b610854611363565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061089a575061089985610894611363565b6110a9565b5b6108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d0906132cd565b60405180910390fd5b6108e68585858585611385565b5050505050565b6108f5611363565b73ffffffffffffffffffffffffffffffffffffffff16610913610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109609061332d565b60405180910390fd5b60006040518060400160405280732ec1e3291f0889085098555a4a3ac3a45149106073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731f9fa3f21f92b5579c4e4d7232d9e412b0e8939973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060400160405280611af463ffffffff1663ffffffff168152602001610c1c63ffffffff1663ffffffff168152509050600047905060005b60028163ffffffff161015610b2757600060016002610a5e9190613697565b8263ffffffff1614610aab57612710848363ffffffff1660028110610a8657610a8561392b565b5b602002015163ffffffff1684610a9c919061363d565b610aa6919061360c565b610aad565b475b9050848263ffffffff1660028110610ac857610ac761392b565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b12573d6000803e3d6000fd5b50508080610b1f90613871565b915050610a3f565b50505050565b60608151835114610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a9061336d565b60405180910390fd5b6000835167ffffffffffffffff811115610b9057610b8f61395a565b5b604051908082528060200260200182016040528015610bbe5781602001602082028036833780820191505090505b50905060005b8451811015610c3b57610c0b858281518110610be357610be261392b565b5b6020026020010151858381518110610bfe57610bfd61392b565b5b6020026020010151610536565b828281518110610c1e57610c1d61392b565b5b60200260200101818152505080610c3490613828565b9050610bc4565b508091505092915050565b610c4e611363565b73ffffffffffffffffffffffffffffffffffffffff16610c6c610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061332d565b60405180910390fd5b610ccc6000611699565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f504554530000000000000000000000000000000000000000000000000000000081525081565b610d43610d3c611363565b838361175f565b5050565b610d4f61113d565b610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d859061324d565b60405180910390fd5b60008163ffffffff1611610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce9061326d565b60405180910390fd5b611a0a63ffffffff1681600360149054906101000a900463ffffffff16610dfe91906135d2565b63ffffffff161115610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061330d565b60405180910390fd5b8063ffffffff166701140bbd030c4000610e5f919061363d565b341015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e989061328d565b60405180910390fd5b610eab33826118cc565b50565b610eb6611363565b73ffffffffffffffffffffffffffffffffffffffff16610ed4610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f219061332d565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b600360189054906101000a900463ffffffff1681565b611a0a81565b610f72611363565b73ffffffffffffffffffffffffffffffffffffffff16610f90610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd9061332d565b60405180910390fd5b611a0a63ffffffff168151600360149054906101000a900463ffffffff1663ffffffff16611014919061357c565b1115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c9061330d565b60405180910390fd5b60005b8151811015611099576110868282815181106110775761107661392b565b5b602002602001015160016118cc565b808061109190613828565b915050611058565b5050565b6701140bbd030c400081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360189054906101000a900463ffffffff1663ffffffff161115905090565b611168611363565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111ae57506111ad856111a8611363565b6110a9565b5b6111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e49061322d565b60405180910390fd5b6111fa8585858585611acd565b5050505050565b611209611363565b73ffffffffffffffffffffffffffffffffffffffff16611227610cce565b73ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112749061332d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061320d565b60405180910390fd5b6112f681611699565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611381929190612566565b5050565b81518351146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c09061338d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906132ad565b60405180910390fd5b6000611443611363565b9050611453818787878787611d4f565b60005b84518110156116045760008582815181106114745761147361392b565b5b6020026020010151905060008583815181106114935761149261392b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b906132ed565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e9919061357c565b92505081905550505050806115fd90613828565b9050611456565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161167b929190613139565b60405180910390a4611691818787878787611d57565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c59061334d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118bf9190613170565b60405180910390a3505050565b80600360148282829054906101000a900463ffffffff166118ed91906135d2565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611a885760008163ffffffff1667ffffffffffffffff81111561193c5761193b61395a565b5b60405190808252806020026020018201604052801561196a5781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff81111561198f5761198e61395a565b5b6040519080825280602002602001820160405280156119bd5781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611a65578084600360149054906101000a900463ffffffff166119f691906136cb565b611a0091906135d2565b63ffffffff16838263ffffffff1681518110611a1f57611a1e61392b565b5b6020026020010181815250506001828263ffffffff1681518110611a4657611a4561392b565b5b6020026020010181815250508080611a5d90613871565b9150506119c3565b50611a8184838360405180602001604052806000815250611f3e565b5050611ac9565b611ac8826001600360149054906101000a900463ffffffff16611aab91906136cb565b63ffffffff1660016040518060200160405280600081525061215c565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b34906132ad565b60405180910390fd5b6000611b47611363565b9050611b67818787611b58886122f2565b611b61886122f2565b87611d4f565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906132ed565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb3919061357c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d309291906133e8565b60405180910390a4611d4682888888888861236c565b50505050505050565b505050505050565b611d768473ffffffffffffffffffffffffffffffffffffffff16612553565b15611f36578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611dbc959493929190613055565b602060405180830381600087803b158015611dd657600080fd5b505af1925050508015611e0757506040513d601f19601f82011682018060405250810190611e049190612be4565b60015b611ead57611e13613989565b806308c379a01415611e705750611e28613e89565b80611e335750611e72565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e67919061318b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea4906131ad565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906131cd565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa5906133ad565b60405180910390fd5b8151835114611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe99061338d565b60405180910390fd5b6000611ffc611363565b905061200d81600087878787611d4f565b60005b84518110156120c65783818151811061202c5761202b61392b565b5b602002602001015160008087848151811061204a5761204961392b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac919061357c565b9250508190555080806120be90613828565b915050612010565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161213e929190613139565b60405180910390a461215581600087878787611d57565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c3906133ad565b60405180910390fd5b60006121d6611363565b90506121f7816000876121e8886122f2565b6121f1886122f2565b87611d4f565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612256919061357c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516122d49291906133e8565b60405180910390a46122eb8160008787878761236c565b5050505050565b60606000600167ffffffffffffffff8111156123115761231061395a565b5b60405190808252806020026020018201604052801561233f5781602001602082028036833780820191505090505b50905082816000815181106123575761235661392b565b5b60200260200101818152505080915050919050565b61238b8473ffffffffffffffffffffffffffffffffffffffff16612553565b1561254b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123d19594939291906130bd565b602060405180830381600087803b1580156123eb57600080fd5b505af192505050801561241c57506040513d601f19601f820116820180604052508101906124199190612be4565b60015b6124c257612428613989565b806308c379a01415612485575061243d613e89565b806124485750612487565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c919061318b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906131ad565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612540906131cd565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612572906137c5565b90600052602060002090601f01602090048101928261259457600085556125db565b82601f106125ad57805160ff19168380011785556125db565b828001600101855582156125db579182015b828111156125da5782518255916020019190600101906125bf565b5b5090506125e891906125ec565b5090565b5b808211156126055760008160009055506001016125ed565b5090565b600061261c61261784613451565b61342c565b9050808382526020820190508285602086028201111561263f5761263e6139b0565b5b60005b8581101561266f5781612655888261276d565b845260208401935060208301925050600181019050612642565b5050509392505050565b600061268c6126878461347d565b61342c565b905080838252602082019050828560208602820111156126af576126ae6139b0565b5b60005b858110156126df57816126c58882612879565b8452602084019350602083019250506001810190506126b2565b5050509392505050565b60006126fc6126f7846134a9565b61342c565b905082815260208101848484011115612718576127176139b5565b5b612723848285613783565b509392505050565b600061273e612739846134da565b61342c565b90508281526020810184848401111561275a576127596139b5565b5b612765848285613783565b509392505050565b60008135905061277c81613f1f565b92915050565b600082601f830112612797576127966139ab565b5b81356127a7848260208601612609565b91505092915050565b600082601f8301126127c5576127c46139ab565b5b81356127d5848260208601612679565b91505092915050565b6000813590506127ed81613f36565b92915050565b60008135905061280281613f4d565b92915050565b60008151905061281781613f4d565b92915050565b600082601f830112612832576128316139ab565b5b81356128428482602086016126e9565b91505092915050565b600082601f8301126128605761285f6139ab565b5b813561287084826020860161272b565b91505092915050565b60008135905061288881613f64565b92915050565b60008135905061289d81613f7b565b92915050565b6000602082840312156128b9576128b86139bf565b5b60006128c78482850161276d565b91505092915050565b600080604083850312156128e7576128e66139bf565b5b60006128f58582860161276d565b92505060206129068582860161276d565b9150509250929050565b600080600080600060a0868803121561292c5761292b6139bf565b5b600061293a8882890161276d565b955050602061294b8882890161276d565b945050604086013567ffffffffffffffff81111561296c5761296b6139ba565b5b612978888289016127b0565b935050606086013567ffffffffffffffff811115612999576129986139ba565b5b6129a5888289016127b0565b925050608086013567ffffffffffffffff8111156129c6576129c56139ba565b5b6129d28882890161281d565b9150509295509295909350565b600080600080600060a086880312156129fb576129fa6139bf565b5b6000612a098882890161276d565b9550506020612a1a8882890161276d565b9450506040612a2b88828901612879565b9350506060612a3c88828901612879565b925050608086013567ffffffffffffffff811115612a5d57612a5c6139ba565b5b612a698882890161281d565b9150509295509295909350565b60008060408385031215612a8d57612a8c6139bf565b5b6000612a9b8582860161276d565b9250506020612aac858286016127de565b9150509250929050565b60008060408385031215612acd57612acc6139bf565b5b6000612adb8582860161276d565b9250506020612aec85828601612879565b9150509250929050565b600060208284031215612b0c57612b0b6139bf565b5b600082013567ffffffffffffffff811115612b2a57612b296139ba565b5b612b3684828501612782565b91505092915050565b60008060408385031215612b5657612b556139bf565b5b600083013567ffffffffffffffff811115612b7457612b736139ba565b5b612b8085828601612782565b925050602083013567ffffffffffffffff811115612ba157612ba06139ba565b5b612bad858286016127b0565b9150509250929050565b600060208284031215612bcd57612bcc6139bf565b5b6000612bdb848285016127f3565b91505092915050565b600060208284031215612bfa57612bf96139bf565b5b6000612c0884828501612808565b91505092915050565b600060208284031215612c2757612c266139bf565b5b600082013567ffffffffffffffff811115612c4557612c446139ba565b5b612c518482850161284b565b91505092915050565b600060208284031215612c7057612c6f6139bf565b5b6000612c7e84828501612879565b91505092915050565b600060208284031215612c9d57612c9c6139bf565b5b6000612cab8482850161288e565b91505092915050565b6000612cc0838361300d565b60208301905092915050565b612cd5816136ff565b82525050565b6000612ce68261351b565b612cf08185613549565b9350612cfb8361350b565b8060005b83811015612d2c578151612d138882612cb4565b9750612d1e8361353c565b925050600181019050612cff565b5085935050505092915050565b612d4281613711565b82525050565b6000612d5382613526565b612d5d818561355a565b9350612d6d818560208601613792565b612d76816139c4565b840191505092915050565b6000612d8c82613531565b612d96818561356b565b9350612da6818560208601613792565b612daf816139c4565b840191505092915050565b6000612dc760348361356b565b9150612dd2826139e2565b604082019050919050565b6000612dea60288361356b565b9150612df582613a31565b604082019050919050565b6000612e0d602b8361356b565b9150612e1882613a80565b604082019050919050565b6000612e3060268361356b565b9150612e3b82613acf565b604082019050919050565b6000612e5360298361356b565b9150612e5e82613b1e565b604082019050919050565b6000612e76601a8361356b565b9150612e8182613b6d565b602082019050919050565b6000612e99601d8361356b565b9150612ea482613b96565b602082019050919050565b6000612ebc60118361356b565b9150612ec782613bbf565b602082019050919050565b6000612edf60258361356b565b9150612eea82613be8565b604082019050919050565b6000612f0260328361356b565b9150612f0d82613c37565b604082019050919050565b6000612f25602a8361356b565b9150612f3082613c86565b604082019050919050565b6000612f4860298361356b565b9150612f5382613cd5565b604082019050919050565b6000612f6b60208361356b565b9150612f7682613d24565b602082019050919050565b6000612f8e60298361356b565b9150612f9982613d4d565b604082019050919050565b6000612fb160298361356b565b9150612fbc82613d9c565b604082019050919050565b6000612fd460288361356b565b9150612fdf82613deb565b604082019050919050565b6000612ff760218361356b565b915061300282613e3a565b604082019050919050565b61301681613769565b82525050565b61302581613769565b82525050565b61303481613773565b82525050565b600060208201905061304f6000830184612ccc565b92915050565b600060a08201905061306a6000830188612ccc565b6130776020830187612ccc565b81810360408301526130898186612cdb565b9050818103606083015261309d8185612cdb565b905081810360808301526130b18184612d48565b90509695505050505050565b600060a0820190506130d26000830188612ccc565b6130df6020830187612ccc565b6130ec604083018661301c565b6130f9606083018561301c565b818103608083015261310b8184612d48565b90509695505050505050565b600060208201905081810360008301526131318184612cdb565b905092915050565b600060408201905081810360008301526131538185612cdb565b905081810360208301526131678184612cdb565b90509392505050565b60006020820190506131856000830184612d39565b92915050565b600060208201905081810360008301526131a58184612d81565b905092915050565b600060208201905081810360008301526131c681612dba565b9050919050565b600060208201905081810360008301526131e681612ddd565b9050919050565b6000602082019050818103600083015261320681612e00565b9050919050565b6000602082019050818103600083015261322681612e23565b9050919050565b6000602082019050818103600083015261324681612e46565b9050919050565b6000602082019050818103600083015261326681612e69565b9050919050565b6000602082019050818103600083015261328681612e8c565b9050919050565b600060208201905081810360008301526132a681612eaf565b9050919050565b600060208201905081810360008301526132c681612ed2565b9050919050565b600060208201905081810360008301526132e681612ef5565b9050919050565b6000602082019050818103600083015261330681612f18565b9050919050565b6000602082019050818103600083015261332681612f3b565b9050919050565b6000602082019050818103600083015261334681612f5e565b9050919050565b6000602082019050818103600083015261336681612f81565b9050919050565b6000602082019050818103600083015261338681612fa4565b9050919050565b600060208201905081810360008301526133a681612fc7565b9050919050565b600060208201905081810360008301526133c681612fea565b9050919050565b60006020820190506133e2600083018461301c565b92915050565b60006040820190506133fd600083018561301c565b61340a602083018461301c565b9392505050565b6000602082019050613426600083018461302b565b92915050565b6000613436613447565b905061344282826137f7565b919050565b6000604051905090565b600067ffffffffffffffff82111561346c5761346b61395a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134985761349761395a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134c4576134c361395a565b5b6134cd826139c4565b9050602081019050919050565b600067ffffffffffffffff8211156134f5576134f461395a565b5b6134fe826139c4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061358782613769565b915061359283613769565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c7576135c661389e565b5b828201905092915050565b60006135dd82613773565b91506135e883613773565b92508263ffffffff038211156136015761360061389e565b5b828201905092915050565b600061361782613769565b915061362283613769565b925082613632576136316138cd565b5b828204905092915050565b600061364882613769565b915061365383613769565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368c5761368b61389e565b5b828202905092915050565b60006136a282613769565b91506136ad83613769565b9250828210156136c0576136bf61389e565b5b828203905092915050565b60006136d682613773565b91506136e183613773565b9250828210156136f4576136f361389e565b5b828203905092915050565b600061370a82613749565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156137b0578082015181840152602081019050613795565b838111156137bf576000848401525b50505050565b600060028204905060018216806137dd57607f821691505b602082108114156137f1576137f06138fc565b5b50919050565b613800826139c4565b810181811067ffffffffffffffff8211171561381f5761381e61395a565b5b80604052505050565b600061383382613769565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138665761386561389e565b5b600182019050919050565b600061387c82613773565b915063ffffffff8214156138935761389261389e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139a85760046000803e6139a56000516139d5565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613e9957613f1c565b613ea1613447565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ec9575050613f1c565b808201805167ffffffffffffffff811115613ee75750505050613f1c565b80602083010160043d038501811115613f04575050505050613f1c565b613f13826020018501866137f7565b82955050505050505b90565b613f28816136ff565b8114613f3357600080fd5b50565b613f3f81613711565b8114613f4a57600080fd5b50565b613f568161371d565b8114613f6157600080fd5b50565b613f6d81613769565b8114613f7857600080fd5b50565b613f8481613773565b8114613f8f57600080fd5b5056fea2646970667358221220f120489cf00ca8265a4109f0e1067a6431caf4484fae1f7d9e07d0eaa357348d64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012f00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061013f5760003560e01c806395d89b41116100b6578063d67b06c11161006f578063d67b06c114610428578063e73faa2d14610451578063e985e9c51461047c578063eb8d2444146104b9578063f242432a146104e4578063f2fde38b1461050d5761013f565b806395d89b4114610339578063a22cb46514610364578063a71bbebe1461038d578063a741ae1e146103a9578063ab0bcc41146103d2578063d5abeb01146103fd5761013f565b806318160ddd1161010857806318160ddd1461024f5780632eb2c2d61461027a5780633ccfd60b146102a35780634e1273f4146102ba578063715018a6146102f75780638da5cb5b1461030e5761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806306fdde03146101e75780630e89341c14610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612ab6565b610536565b60405161017891906133cd565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612bb7565b6105ff565b6040516101b59190613170565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c11565b6106e1565b005b3480156101f357600080fd5b506101fc610769565b604051610209919061318b565b60405180910390f35b34801561021e57600080fd5b5061023960048036038101906102349190612c5a565b6107a2565b604051610246919061318b565b60405180910390f35b34801561025b57600080fd5b50610264610836565b6040516102719190613411565b60405180910390f35b34801561028657600080fd5b506102a1600480360381019061029c9190612910565b61084c565b005b3480156102af57600080fd5b506102b86108ed565b005b3480156102c657600080fd5b506102e160048036038101906102dc9190612b3f565b610b2d565b6040516102ee9190613117565b60405180910390f35b34801561030357600080fd5b5061030c610c46565b005b34801561031a57600080fd5b50610323610cce565b604051610330919061303a565b60405180910390f35b34801561034557600080fd5b5061034e610cf8565b60405161035b919061318b565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190612a76565b610d31565b005b6103a760048036038101906103a29190612c87565b610d47565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190612c87565b610eae565b005b3480156103de57600080fd5b506103e7610f4e565b6040516103f49190613411565b60405180910390f35b34801561040957600080fd5b50610412610f64565b60405161041f9190613411565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612af6565b610f6a565b005b34801561045d57600080fd5b5061046661109d565b60405161047391906133cd565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906128d0565b6110a9565b6040516104b09190613170565b60405180910390f35b3480156104c557600080fd5b506104ce61113d565b6040516104db9190613170565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906129df565b611160565b005b34801561051957600080fd5b50610534600480360381019061052f91906128a3565b611201565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059e906131ed565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106da57506106d9826112f9565b5b9050919050565b6106e9611363565b73ffffffffffffffffffffffffffffffffffffffff16610707610cce565b73ffffffffffffffffffffffffffffffffffffffff161461075d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107549061332d565b60405180910390fd5b6107668161136b565b50565b6040518060400160405280600481526020017f506574730000000000000000000000000000000000000000000000000000000081525081565b6060600280546107b1906137c5565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906137c5565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b50505050509050919050565b600360149054906101000a900463ffffffff1681565b610854611363565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061089a575061089985610894611363565b6110a9565b5b6108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d0906132cd565b60405180910390fd5b6108e68585858585611385565b5050505050565b6108f5611363565b73ffffffffffffffffffffffffffffffffffffffff16610913610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610969576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109609061332d565b60405180910390fd5b60006040518060400160405280732ec1e3291f0889085098555a4a3ac3a45149106073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731f9fa3f21f92b5579c4e4d7232d9e412b0e8939973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060400160405280611af463ffffffff1663ffffffff168152602001610c1c63ffffffff1663ffffffff168152509050600047905060005b60028163ffffffff161015610b2757600060016002610a5e9190613697565b8263ffffffff1614610aab57612710848363ffffffff1660028110610a8657610a8561392b565b5b602002015163ffffffff1684610a9c919061363d565b610aa6919061360c565b610aad565b475b9050848263ffffffff1660028110610ac857610ac761392b565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b12573d6000803e3d6000fd5b50508080610b1f90613871565b915050610a3f565b50505050565b60608151835114610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a9061336d565b60405180910390fd5b6000835167ffffffffffffffff811115610b9057610b8f61395a565b5b604051908082528060200260200182016040528015610bbe5781602001602082028036833780820191505090505b50905060005b8451811015610c3b57610c0b858281518110610be357610be261392b565b5b6020026020010151858381518110610bfe57610bfd61392b565b5b6020026020010151610536565b828281518110610c1e57610c1d61392b565b5b60200260200101818152505080610c3490613828565b9050610bc4565b508091505092915050565b610c4e611363565b73ffffffffffffffffffffffffffffffffffffffff16610c6c610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061332d565b60405180910390fd5b610ccc6000611699565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f504554530000000000000000000000000000000000000000000000000000000081525081565b610d43610d3c611363565b838361175f565b5050565b610d4f61113d565b610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d859061324d565b60405180910390fd5b60008163ffffffff1611610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce9061326d565b60405180910390fd5b611a0a63ffffffff1681600360149054906101000a900463ffffffff16610dfe91906135d2565b63ffffffff161115610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061330d565b60405180910390fd5b8063ffffffff166701140bbd030c4000610e5f919061363d565b341015610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e989061328d565b60405180910390fd5b610eab33826118cc565b50565b610eb6611363565b73ffffffffffffffffffffffffffffffffffffffff16610ed4610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f219061332d565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b600360189054906101000a900463ffffffff1681565b611a0a81565b610f72611363565b73ffffffffffffffffffffffffffffffffffffffff16610f90610cce565b73ffffffffffffffffffffffffffffffffffffffff1614610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd9061332d565b60405180910390fd5b611a0a63ffffffff168151600360149054906101000a900463ffffffff1663ffffffff16611014919061357c565b1115611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c9061330d565b60405180910390fd5b60005b8151811015611099576110868282815181106110775761107661392b565b5b602002602001015160016118cc565b808061109190613828565b915050611058565b5050565b6701140bbd030c400081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360189054906101000a900463ffffffff1663ffffffff161115905090565b611168611363565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806111ae57506111ad856111a8611363565b6110a9565b5b6111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e49061322d565b60405180910390fd5b6111fa8585858585611acd565b5050505050565b611209611363565b73ffffffffffffffffffffffffffffffffffffffff16611227610cce565b73ffffffffffffffffffffffffffffffffffffffff161461127d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112749061332d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061320d565b60405180910390fd5b6112f681611699565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611381929190612566565b5050565b81518351146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c09061338d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611430906132ad565b60405180910390fd5b6000611443611363565b9050611453818787878787611d4f565b60005b84518110156116045760008582815181106114745761147361392b565b5b6020026020010151905060008583815181106114935761149261392b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b906132ed565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e9919061357c565b92505081905550505050806115fd90613828565b9050611456565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161167b929190613139565b60405180910390a4611691818787878787611d57565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c59061334d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118bf9190613170565b60405180910390a3505050565b80600360148282829054906101000a900463ffffffff166118ed91906135d2565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611a885760008163ffffffff1667ffffffffffffffff81111561193c5761193b61395a565b5b60405190808252806020026020018201604052801561196a5781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff81111561198f5761198e61395a565b5b6040519080825280602002602001820160405280156119bd5781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611a65578084600360149054906101000a900463ffffffff166119f691906136cb565b611a0091906135d2565b63ffffffff16838263ffffffff1681518110611a1f57611a1e61392b565b5b6020026020010181815250506001828263ffffffff1681518110611a4657611a4561392b565b5b6020026020010181815250508080611a5d90613871565b9150506119c3565b50611a8184838360405180602001604052806000815250611f3e565b5050611ac9565b611ac8826001600360149054906101000a900463ffffffff16611aab91906136cb565b63ffffffff1660016040518060200160405280600081525061215c565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b34906132ad565b60405180910390fd5b6000611b47611363565b9050611b67818787611b58886122f2565b611b61886122f2565b87611d4f565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906132ed565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb3919061357c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d309291906133e8565b60405180910390a4611d4682888888888861236c565b50505050505050565b505050505050565b611d768473ffffffffffffffffffffffffffffffffffffffff16612553565b15611f36578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611dbc959493929190613055565b602060405180830381600087803b158015611dd657600080fd5b505af1925050508015611e0757506040513d601f19601f82011682018060405250810190611e049190612be4565b60015b611ead57611e13613989565b806308c379a01415611e705750611e28613e89565b80611e335750611e72565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e67919061318b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea4906131ad565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b906131cd565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa5906133ad565b60405180910390fd5b8151835114611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe99061338d565b60405180910390fd5b6000611ffc611363565b905061200d81600087878787611d4f565b60005b84518110156120c65783818151811061202c5761202b61392b565b5b602002602001015160008087848151811061204a5761204961392b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac919061357c565b9250508190555080806120be90613828565b915050612010565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161213e929190613139565b60405180910390a461215581600087878787611d57565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c3906133ad565b60405180910390fd5b60006121d6611363565b90506121f7816000876121e8886122f2565b6121f1886122f2565b87611d4f565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612256919061357c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516122d49291906133e8565b60405180910390a46122eb8160008787878761236c565b5050505050565b60606000600167ffffffffffffffff8111156123115761231061395a565b5b60405190808252806020026020018201604052801561233f5781602001602082028036833780820191505090505b50905082816000815181106123575761235661392b565b5b60200260200101818152505080915050919050565b61238b8473ffffffffffffffffffffffffffffffffffffffff16612553565b1561254b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123d19594939291906130bd565b602060405180830381600087803b1580156123eb57600080fd5b505af192505050801561241c57506040513d601f19601f820116820180604052508101906124199190612be4565b60015b6124c257612428613989565b806308c379a01415612485575061243d613e89565b806124485750612487565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c919061318b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906131ad565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612540906131cd565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612572906137c5565b90600052602060002090601f01602090048101928261259457600085556125db565b82601f106125ad57805160ff19168380011785556125db565b828001600101855582156125db579182015b828111156125da5782518255916020019190600101906125bf565b5b5090506125e891906125ec565b5090565b5b808211156126055760008160009055506001016125ed565b5090565b600061261c61261784613451565b61342c565b9050808382526020820190508285602086028201111561263f5761263e6139b0565b5b60005b8581101561266f5781612655888261276d565b845260208401935060208301925050600181019050612642565b5050509392505050565b600061268c6126878461347d565b61342c565b905080838252602082019050828560208602820111156126af576126ae6139b0565b5b60005b858110156126df57816126c58882612879565b8452602084019350602083019250506001810190506126b2565b5050509392505050565b60006126fc6126f7846134a9565b61342c565b905082815260208101848484011115612718576127176139b5565b5b612723848285613783565b509392505050565b600061273e612739846134da565b61342c565b90508281526020810184848401111561275a576127596139b5565b5b612765848285613783565b509392505050565b60008135905061277c81613f1f565b92915050565b600082601f830112612797576127966139ab565b5b81356127a7848260208601612609565b91505092915050565b600082601f8301126127c5576127c46139ab565b5b81356127d5848260208601612679565b91505092915050565b6000813590506127ed81613f36565b92915050565b60008135905061280281613f4d565b92915050565b60008151905061281781613f4d565b92915050565b600082601f830112612832576128316139ab565b5b81356128428482602086016126e9565b91505092915050565b600082601f8301126128605761285f6139ab565b5b813561287084826020860161272b565b91505092915050565b60008135905061288881613f64565b92915050565b60008135905061289d81613f7b565b92915050565b6000602082840312156128b9576128b86139bf565b5b60006128c78482850161276d565b91505092915050565b600080604083850312156128e7576128e66139bf565b5b60006128f58582860161276d565b92505060206129068582860161276d565b9150509250929050565b600080600080600060a0868803121561292c5761292b6139bf565b5b600061293a8882890161276d565b955050602061294b8882890161276d565b945050604086013567ffffffffffffffff81111561296c5761296b6139ba565b5b612978888289016127b0565b935050606086013567ffffffffffffffff811115612999576129986139ba565b5b6129a5888289016127b0565b925050608086013567ffffffffffffffff8111156129c6576129c56139ba565b5b6129d28882890161281d565b9150509295509295909350565b600080600080600060a086880312156129fb576129fa6139bf565b5b6000612a098882890161276d565b9550506020612a1a8882890161276d565b9450506040612a2b88828901612879565b9350506060612a3c88828901612879565b925050608086013567ffffffffffffffff811115612a5d57612a5c6139ba565b5b612a698882890161281d565b9150509295509295909350565b60008060408385031215612a8d57612a8c6139bf565b5b6000612a9b8582860161276d565b9250506020612aac858286016127de565b9150509250929050565b60008060408385031215612acd57612acc6139bf565b5b6000612adb8582860161276d565b9250506020612aec85828601612879565b9150509250929050565b600060208284031215612b0c57612b0b6139bf565b5b600082013567ffffffffffffffff811115612b2a57612b296139ba565b5b612b3684828501612782565b91505092915050565b60008060408385031215612b5657612b556139bf565b5b600083013567ffffffffffffffff811115612b7457612b736139ba565b5b612b8085828601612782565b925050602083013567ffffffffffffffff811115612ba157612ba06139ba565b5b612bad858286016127b0565b9150509250929050565b600060208284031215612bcd57612bcc6139bf565b5b6000612bdb848285016127f3565b91505092915050565b600060208284031215612bfa57612bf96139bf565b5b6000612c0884828501612808565b91505092915050565b600060208284031215612c2757612c266139bf565b5b600082013567ffffffffffffffff811115612c4557612c446139ba565b5b612c518482850161284b565b91505092915050565b600060208284031215612c7057612c6f6139bf565b5b6000612c7e84828501612879565b91505092915050565b600060208284031215612c9d57612c9c6139bf565b5b6000612cab8482850161288e565b91505092915050565b6000612cc0838361300d565b60208301905092915050565b612cd5816136ff565b82525050565b6000612ce68261351b565b612cf08185613549565b9350612cfb8361350b565b8060005b83811015612d2c578151612d138882612cb4565b9750612d1e8361353c565b925050600181019050612cff565b5085935050505092915050565b612d4281613711565b82525050565b6000612d5382613526565b612d5d818561355a565b9350612d6d818560208601613792565b612d76816139c4565b840191505092915050565b6000612d8c82613531565b612d96818561356b565b9350612da6818560208601613792565b612daf816139c4565b840191505092915050565b6000612dc760348361356b565b9150612dd2826139e2565b604082019050919050565b6000612dea60288361356b565b9150612df582613a31565b604082019050919050565b6000612e0d602b8361356b565b9150612e1882613a80565b604082019050919050565b6000612e3060268361356b565b9150612e3b82613acf565b604082019050919050565b6000612e5360298361356b565b9150612e5e82613b1e565b604082019050919050565b6000612e76601a8361356b565b9150612e8182613b6d565b602082019050919050565b6000612e99601d8361356b565b9150612ea482613b96565b602082019050919050565b6000612ebc60118361356b565b9150612ec782613bbf565b602082019050919050565b6000612edf60258361356b565b9150612eea82613be8565b604082019050919050565b6000612f0260328361356b565b9150612f0d82613c37565b604082019050919050565b6000612f25602a8361356b565b9150612f3082613c86565b604082019050919050565b6000612f4860298361356b565b9150612f5382613cd5565b604082019050919050565b6000612f6b60208361356b565b9150612f7682613d24565b602082019050919050565b6000612f8e60298361356b565b9150612f9982613d4d565b604082019050919050565b6000612fb160298361356b565b9150612fbc82613d9c565b604082019050919050565b6000612fd460288361356b565b9150612fdf82613deb565b604082019050919050565b6000612ff760218361356b565b915061300282613e3a565b604082019050919050565b61301681613769565b82525050565b61302581613769565b82525050565b61303481613773565b82525050565b600060208201905061304f6000830184612ccc565b92915050565b600060a08201905061306a6000830188612ccc565b6130776020830187612ccc565b81810360408301526130898186612cdb565b9050818103606083015261309d8185612cdb565b905081810360808301526130b18184612d48565b90509695505050505050565b600060a0820190506130d26000830188612ccc565b6130df6020830187612ccc565b6130ec604083018661301c565b6130f9606083018561301c565b818103608083015261310b8184612d48565b90509695505050505050565b600060208201905081810360008301526131318184612cdb565b905092915050565b600060408201905081810360008301526131538185612cdb565b905081810360208301526131678184612cdb565b90509392505050565b60006020820190506131856000830184612d39565b92915050565b600060208201905081810360008301526131a58184612d81565b905092915050565b600060208201905081810360008301526131c681612dba565b9050919050565b600060208201905081810360008301526131e681612ddd565b9050919050565b6000602082019050818103600083015261320681612e00565b9050919050565b6000602082019050818103600083015261322681612e23565b9050919050565b6000602082019050818103600083015261324681612e46565b9050919050565b6000602082019050818103600083015261326681612e69565b9050919050565b6000602082019050818103600083015261328681612e8c565b9050919050565b600060208201905081810360008301526132a681612eaf565b9050919050565b600060208201905081810360008301526132c681612ed2565b9050919050565b600060208201905081810360008301526132e681612ef5565b9050919050565b6000602082019050818103600083015261330681612f18565b9050919050565b6000602082019050818103600083015261332681612f3b565b9050919050565b6000602082019050818103600083015261334681612f5e565b9050919050565b6000602082019050818103600083015261336681612f81565b9050919050565b6000602082019050818103600083015261338681612fa4565b9050919050565b600060208201905081810360008301526133a681612fc7565b9050919050565b600060208201905081810360008301526133c681612fea565b9050919050565b60006020820190506133e2600083018461301c565b92915050565b60006040820190506133fd600083018561301c565b61340a602083018461301c565b9392505050565b6000602082019050613426600083018461302b565b92915050565b6000613436613447565b905061344282826137f7565b919050565b6000604051905090565b600067ffffffffffffffff82111561346c5761346b61395a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134985761349761395a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134c4576134c361395a565b5b6134cd826139c4565b9050602081019050919050565b600067ffffffffffffffff8211156134f5576134f461395a565b5b6134fe826139c4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061358782613769565b915061359283613769565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c7576135c661389e565b5b828201905092915050565b60006135dd82613773565b91506135e883613773565b92508263ffffffff038211156136015761360061389e565b5b828201905092915050565b600061361782613769565b915061362283613769565b925082613632576136316138cd565b5b828204905092915050565b600061364882613769565b915061365383613769565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368c5761368b61389e565b5b828202905092915050565b60006136a282613769565b91506136ad83613769565b9250828210156136c0576136bf61389e565b5b828203905092915050565b60006136d682613773565b91506136e183613773565b9250828210156136f4576136f361389e565b5b828203905092915050565b600061370a82613749565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156137b0578082015181840152602081019050613795565b838111156137bf576000848401525b50505050565b600060028204905060018216806137dd57607f821691505b602082108114156137f1576137f06138fc565b5b50919050565b613800826139c4565b810181811067ffffffffffffffff8211171561381f5761381e61395a565b5b80604052505050565b600061383382613769565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138665761386561389e565b5b600182019050919050565b600061387c82613773565b915063ffffffff8214156138935761389261389e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156139a85760046000803e6139a56000516139d5565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613e9957613f1c565b613ea1613447565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ec9575050613f1c565b808201805167ffffffffffffffff811115613ee75750505050613f1c565b80602083010160043d038501811115613f04575050505050613f1c565b613f13826020018501866137f7565b82955050505050505b90565b613f28816136ff565b8114613f3357600080fd5b50565b613f3f81613711565b8114613f4a57600080fd5b50565b613f568161371d565b8114613f6157600080fd5b50565b613f6d81613769565b8114613f7857600080fd5b50565b613f8481613773565b8114613f8f57600080fd5b5056fea2646970667358221220f120489cf00ca8265a4109f0e1067a6431caf4484fae1f7d9e07d0eaa357348d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000012f00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uri (string): /
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 2f00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
36966:2629:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23398:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22421:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37339:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37011:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23142:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37204:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25337:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38953:639;;;;;;;;;;;;;:::i;:::-;;23795:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3026:103;;;;;;;;;;;;;:::i;:::-;;2375:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37054:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24392:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38191:420;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37432:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37240:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37101:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38619:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37147:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24619:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37539:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24859:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3284:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23398:231;23484:7;23531:1;23512:21;;:7;:21;;;;23504:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23599:9;:13;23609:2;23599:13;;;;;;;;;;;:22;23613:7;23599:22;;;;;;;;;;;;;;;;23592:29;;23398:231;;;;:::o;22421:310::-;22523:4;22575:26;22560:41;;;:11;:41;;;;:110;;;;22633:37;22618:52;;;:11;:52;;;;22560:110;:163;;;;22687:36;22711:11;22687:23;:36::i;:::-;22560:163;22540:183;;22421:310;;;:::o;37339:85::-;2606:12;:10;:12::i;:::-;2595:23;;:7;:5;:7::i;:::-;:23;;;2587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37404:12:::1;37412:3;37404:7;:12::i;:::-;37339:85:::0;:::o;37011:36::-;;;;;;;;;;;;;;;;;;;:::o;23142:105::-;23202:13;23235:4;23228:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23142:105;;;:::o;37204:29::-;;;;;;;;;;;;;:::o;25337:442::-;25578:12;:10;:12::i;:::-;25570:20;;:4;:20;;;:60;;;;25594:36;25611:4;25617:12;:10;:12::i;:::-;25594:16;:36::i;:::-;25570:60;25548:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25719:52;25742:4;25748:2;25752:3;25757:7;25766:4;25719:22;:52::i;:::-;25337:442;;;;;:::o;38953:639::-;2606:12;:10;:12::i;:::-;2595:23;;:7;:5;:7::i;:::-;:23;;;2587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39003:27:::1;:155;;;;;;;;39048:42;39003:155;;;;;;;;39105:42;39003:155;;;;;;::::0;::::1;;39171:23;:91;;;;;;;;39219:4;39171:91;;;;;;;;39246:4;39171:91;;;;;;::::0;::::1;;39275:15;39293:21;39275:39;;39332:8;39327:258;39350:16;39346:1;:20;;;39327:258;;;39388:14;39429:1;39410:16;:20;;;;:::i;:::-;39405:1;:25;;;:115;;39515:5;39502:6;39509:1;39502:9;;;;;;;;;:::i;:::-;;;;;;39492:19;;:7;:19;;;;:::i;:::-;39491:29;;;;:::i;:::-;39405:115;;;39450:21;39405:115;39388:132;;39543:9;39553:1;39543:12;;;;;;;;;:::i;:::-;;;;;;39535:30;;:38;39566:6;39535:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39373:212;39368:3;;;;;:::i;:::-;;;;39327:258;;;;38992:600;;;38953:639::o:0;23795:524::-;23951:16;24012:3;:10;23993:8;:15;:29;23985:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24081:30;24128:8;:15;24114:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24081:63;;24162:9;24157:122;24181:8;:15;24177:1;:19;24157:122;;;24237:30;24247:8;24256:1;24247:11;;;;;;;;:::i;:::-;;;;;;;;24260:3;24264:1;24260:6;;;;;;;;:::i;:::-;;;;;;;;24237:9;:30::i;:::-;24218:13;24232:1;24218:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24198:3;;;;:::i;:::-;;;24157:122;;;;24298:13;24291:20;;;23795:524;;;;:::o;3026:103::-;2606:12;:10;:12::i;:::-;2595:23;;:7;:5;:7::i;:::-;:23;;;2587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3091:30:::1;3118:1;3091:18;:30::i;:::-;3026:103::o:0;2375:87::-;2421:7;2448:6;;;;;;;;;;;2441:13;;2375:87;:::o;37054:38::-;;;;;;;;;;;;;;;;;;;:::o;24392:155::-;24487:52;24506:12;:10;:12::i;:::-;24520:8;24530;24487:18;:52::i;:::-;24392:155;;:::o;38191:420::-;38255:14;:12;:14::i;:::-;38247:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38327:1;38319:5;:9;;;38311:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37136:4;38395:32;;38409:5;38395:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;38373:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;38540:5;38528:17;;37183:12;38528:17;;;;:::i;:::-;38515:9;:30;;38507:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38580:23;38585:10;38597:5;38580:4;:23::i;:::-;38191:420;:::o;37432:99::-;2606:12;:10;:12::i;:::-;2595:23;;:7;:5;:7::i;:::-;:23;;;2587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37514:9:::1;37502;;:21;;;;;;;;;;;;;;;;;;37432:99:::0;:::o;37240:36::-;;;;;;;;;;;;;:::o;37101:39::-;37136:4;37101:39;:::o;38619:326::-;2606:12;:10;:12::i;:::-;2595:23;;:7;:5;:7::i;:::-;:23;;;2587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37136:4:::1;38718:43;;38732:9;:16;38718:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:43;;38696:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;38848:9;38843:95;38867:9;:16;38863:1;:20;38843:95;;;38905:21;38910:9;38920:1;38910:12;;;;;;;;:::i;:::-;;;;;;;;38924:1;38905:4;:21::i;:::-;38885:3;;;;;:::i;:::-;;;;38843:95;;;;38619:326:::0;:::o;37147:48::-;37183:12;37147:48;:::o;24619:168::-;24718:4;24742:18;:27;24761:7;24742:27;;;;;;;;;;;;;;;:37;24770:8;24742:37;;;;;;;;;;;;;;;;;;;;;;;;;24735:44;;24619:168;;;;:::o;37539:105::-;37584:4;37621:15;37608:9;;;;;;;;;;;:28;;;;37601:35;;37539:105;:::o;24859:401::-;25075:12;:10;:12::i;:::-;25067:20;;:4;:20;;;:60;;;;25091:36;25108:4;25114:12;:10;:12::i;:::-;25091:16;:36::i;:::-;25067:60;25045:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25207:45;25225:4;25231:2;25235;25239:6;25247:4;25207:17;:45::i;:::-;24859:401;;;;;:::o;3284:201::-;2606:12;:10;:12::i;:::-;2595:23;;:7;:5;:7::i;:::-;:23;;;2587:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3393:1:::1;3373:22;;:8;:22;;;;3365:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3449:28;3468:8;3449:18;:28::i;:::-;3284:201:::0;:::o;13776:157::-;13861:4;13900:25;13885:40;;;:11;:40;;;;13878:47;;13776:157;;;:::o;1099:98::-;1152:7;1179:10;1172:17;;1099:98;:::o;29339:88::-;29413:6;29406:4;:13;;;;;;;;;;;;:::i;:::-;;29339:88;:::o;27421:1074::-;27648:7;:14;27634:3;:10;:28;27626:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27740:1;27726:16;;:2;:16;;;;27718:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27797:16;27816:12;:10;:12::i;:::-;27797:31;;27841:60;27862:8;27872:4;27878:2;27882:3;27887:7;27896:4;27841:20;:60::i;:::-;27919:9;27914:421;27938:3;:10;27934:1;:14;27914:421;;;27970:10;27983:3;27987:1;27983:6;;;;;;;;:::i;:::-;;;;;;;;27970:19;;28004:14;28021:7;28029:1;28021:10;;;;;;;;:::i;:::-;;;;;;;;28004:27;;28048:19;28070:9;:13;28080:2;28070:13;;;;;;;;;;;:19;28084:4;28070:19;;;;;;;;;;;;;;;;28048:41;;28127:6;28112:11;:21;;28104:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28260:6;28246:11;:20;28224:9;:13;28234:2;28224:13;;;;;;;;;;;:19;28238:4;28224:19;;;;;;;;;;;;;;;:42;;;;28317:6;28296:9;:13;28306:2;28296:13;;;;;;;;;;;:17;28310:2;28296:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27955:380;;;27950:3;;;;:::i;:::-;;;27914:421;;;;28382:2;28352:47;;28376:4;28352:47;;28366:8;28352:47;;;28386:3;28391:7;28352:47;;;;;;;:::i;:::-;;;;;;;;28412:75;28448:8;28458:4;28464:2;28468:3;28473:7;28482:4;28412:35;:75::i;:::-;27615:880;27421:1074;;;;;:::o;3645:191::-;3719:16;3738:6;;;;;;;;;;;3719:25;;3764:8;3755:6;;:17;;;;;;;;;;;;;;;;;;3819:8;3788:40;;3809:8;3788:40;;;;;;;;;;;;3708:128;3645:191;:::o;33607:331::-;33762:8;33753:17;;:5;:17;;;;33745:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33865:8;33827:18;:25;33846:5;33827:25;;;;;;;;;;;;;;;:35;33853:8;33827:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33911:8;33889:41;;33904:5;33889:41;;;33921:8;33889:41;;;;;;:::i;:::-;;;;;;;;33607:331;;;:::o;37652:531::-;37727:5;37712:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37757:1;37749:5;:9;;;37745:431;;;37775:20;37820:5;37812:14;;37798:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37775:52;;37842:24;37891:5;37883:14;;37869:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37842:56;;37920:8;37915:135;37938:5;37934:9;;:1;:9;;;37915:135;;;38000:1;37992:5;37978:11;;;;;;;;;;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;37969:32;;:3;37973:1;37969:6;;;;;;;;;;:::i;:::-;;;;;;;:32;;;;;38033:1;38020:7;38028:1;38020:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;37945:3;;;;;:::i;:::-;;;;37915:135;;;;38066:32;38077:2;38081:3;38086:7;38066:32;;;;;;;;;;;;:10;:32::i;:::-;37760:350;;37745:431;;;38131:33;38137:2;38155:1;38141:11;;;;;;;;;;;:15;;;;:::i;:::-;38131:33;;38158:1;38131:33;;;;;;;;;;;;:5;:33::i;:::-;37745:431;37652:531;;:::o;26243:820::-;26445:1;26431:16;;:2;:16;;;;26423:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26502:16;26521:12;:10;:12::i;:::-;26502:31;;26546:96;26567:8;26577:4;26583:2;26587:21;26605:2;26587:17;:21::i;:::-;26610:25;26628:6;26610:17;:25::i;:::-;26637:4;26546:20;:96::i;:::-;26655:19;26677:9;:13;26687:2;26677:13;;;;;;;;;;;:19;26691:4;26677:19;;;;;;;;;;;;;;;;26655:41;;26730:6;26715:11;:21;;26707:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26855:6;26841:11;:20;26819:9;:13;26829:2;26819:13;;;;;;;;;;;:19;26833:4;26819:19;;;;;;;;;;;;;;;:42;;;;26904:6;26883:9;:13;26893:2;26883:13;;;;;;;;;;;:17;26897:2;26883:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26959:2;26928:46;;26953:4;26928:46;;26943:8;26928:46;;;26963:2;26967:6;26928:46;;;;;;;:::i;:::-;;;;;;;;26987:68;27018:8;27028:4;27034:2;27038;27042:6;27050:4;26987:30;:68::i;:::-;26412:651;;26243:820;;;;;:::o;34894:221::-;;;;;;;:::o;35875:813::-;36115:15;:2;:13;;;:15::i;:::-;36111:570;;;36168:2;36151:43;;;36195:8;36205:4;36211:3;36216:7;36225:4;36151:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36147:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36543:6;36536:14;;;;;;;;;;;:::i;:::-;;;;;;;;36147:523;;;36592:62;;;;;;;;;;:::i;:::-;;;;;;;;36147:523;36324:48;;;36312:60;;;:8;:60;;;;36308:159;;36397:50;;;;;;;;;;:::i;:::-;;;;;;;;36308:159;36231:251;36111:570;35875:813;;;;;;:::o;30738:735::-;30930:1;30916:16;;:2;:16;;;;30908:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31003:7;:14;30989:3;:10;:28;30981:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31075:16;31094:12;:10;:12::i;:::-;31075:31;;31119:66;31140:8;31158:1;31162:2;31166:3;31171:7;31180:4;31119:20;:66::i;:::-;31203:9;31198:103;31222:3;:10;31218:1;:14;31198:103;;;31279:7;31287:1;31279:10;;;;;;;;:::i;:::-;;;;;;;;31254:9;:17;31264:3;31268:1;31264:6;;;;;;;;:::i;:::-;;;;;;;;31254:17;;;;;;;;;;;:21;31272:2;31254:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31234:3;;;;;:::i;:::-;;;;31198:103;;;;31354:2;31318:53;;31350:1;31318:53;;31332:8;31318:53;;;31358:3;31363:7;31318:53;;;;;;;:::i;:::-;;;;;;;;31384:81;31420:8;31438:1;31442:2;31446:3;31451:7;31460:4;31384:35;:81::i;:::-;30897:576;30738:735;;;;:::o;29813:569::-;29980:1;29966:16;;:2;:16;;;;29958:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30033:16;30052:12;:10;:12::i;:::-;30033:31;;30077:102;30098:8;30116:1;30120:2;30124:21;30142:2;30124:17;:21::i;:::-;30147:25;30165:6;30147:17;:25::i;:::-;30174:4;30077:20;:102::i;:::-;30213:6;30192:9;:13;30202:2;30192:13;;;;;;;;;;;:17;30206:2;30192:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30272:2;30235:52;;30268:1;30235:52;;30250:8;30235:52;;;30276:2;30280:6;30235:52;;;;;;;:::i;:::-;;;;;;;;30300:74;30331:8;30349:1;30353:2;30357;30361:6;30369:4;30300:30;:74::i;:::-;29947:435;29813:569;;;;:::o;36696:198::-;36762:16;36791:22;36830:1;36816:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36791:41;;36854:7;36843:5;36849:1;36843:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36881:5;36874:12;;;36696:198;;;:::o;35123:744::-;35338:15;:2;:13;;;:15::i;:::-;35334:526;;;35391:2;35374:38;;;35413:8;35423:4;35429:2;35433:6;35441:4;35374:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35370:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35722:6;35715:14;;;;;;;;;;;:::i;:::-;;;;;;;;35370:479;;;35771:62;;;;;;;;;;:::i;:::-;;;;;;;;35370:479;35508:43;;;35496:55;;;:8;:55;;;;35492:154;;35576:50;;;;;;;;;;:::i;:::-;;;;;;;;35492:154;35447:214;35334:526;35123:744;;;;;;:::o;4663:387::-;4723:4;4931:12;4998:7;4986:20;4978:28;;5041:1;5034:4;:8;5027:15;;;4663:387;;;:::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:137::-;4598:5;4636:6;4623:20;4614:29;;4652:32;4678:5;4652:32;:::i;:::-;4553:137;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:1509::-;5665:6;5673;5681;5689;5697;5746:3;5734:9;5725:7;5721:23;5717:33;5714:120;;;5753:79;;:::i;:::-;5714:120;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6156:2;6145:9;6141:18;6128:32;6187:18;6179:6;6176:30;6173:117;;;6209:79;;:::i;:::-;6173:117;6314:78;6384:7;6375:6;6364:9;6360:22;6314:78;:::i;:::-;6304:88;;6099:303;6469:2;6458:9;6454:18;6441:32;6500:18;6492:6;6489:30;6486:117;;;6522:79;;:::i;:::-;6486:117;6627:78;6697:7;6688:6;6677:9;6673:22;6627:78;:::i;:::-;6617:88;;6412:303;6782:3;6771:9;6767:19;6754:33;6814:18;6806:6;6803:30;6800:117;;;6836:79;;:::i;:::-;6800:117;6941:62;6995:7;6986:6;6975:9;6971:22;6941:62;:::i;:::-;6931:72;;6725:288;5511:1509;;;;;;;;:::o;7026:1089::-;7130:6;7138;7146;7154;7162;7211:3;7199:9;7190:7;7186:23;7182:33;7179:120;;;7218:79;;:::i;:::-;7179:120;7338:1;7363:53;7408:7;7399:6;7388:9;7384:22;7363:53;:::i;:::-;7353:63;;7309:117;7465:2;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7436:118;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7877:3;7866:9;7862:19;7849:33;7909:18;7901:6;7898:30;7895:117;;;7931:79;;:::i;:::-;7895:117;8036:62;8090:7;8081:6;8070:9;8066:22;8036:62;:::i;:::-;8026:72;;7820:288;7026:1089;;;;;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:539::-;9159:6;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9362:1;9351:9;9347:17;9334:31;9392:18;9384:6;9381:30;9378:117;;;9414:79;;:::i;:::-;9378:117;9519:78;9589:7;9580:6;9569:9;9565:22;9519:78;:::i;:::-;9509:88;;9305:302;9075:539;;;;:::o;9620:894::-;9738:6;9746;9795:2;9783:9;9774:7;9770:23;9766:32;9763:119;;;9801:79;;:::i;:::-;9763:119;9949:1;9938:9;9934:17;9921:31;9979:18;9971:6;9968:30;9965:117;;;10001:79;;:::i;:::-;9965:117;10106:78;10176:7;10167:6;10156:9;10152:22;10106:78;:::i;:::-;10096:88;;9892:302;10261:2;10250:9;10246:18;10233:32;10292:18;10284:6;10281:30;10278:117;;;10314:79;;:::i;:::-;10278:117;10419:78;10489:7;10480:6;10469:9;10465:22;10419:78;:::i;:::-;10409:88;;10204:303;9620:894;;;;;:::o;10520:327::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:52;10822:7;10813:6;10802:9;10798:22;10778:52;:::i;:::-;10768:62;;10724:116;10520:327;;;;:::o;10853:349::-;10922:6;10971:2;10959:9;10950:7;10946:23;10942:32;10939:119;;;10977:79;;:::i;:::-;10939:119;11097:1;11122:63;11177:7;11168:6;11157:9;11153:22;11122:63;:::i;:::-;11112:73;;11068:127;10853:349;;;;:::o;11208:509::-;11277:6;11326:2;11314:9;11305:7;11301:23;11297:32;11294:119;;;11332:79;;:::i;:::-;11294:119;11480:1;11469:9;11465:17;11452:31;11510:18;11502:6;11499:30;11496:117;;;11532:79;;:::i;:::-;11496:117;11637:63;11692:7;11683:6;11672:9;11668:22;11637:63;:::i;:::-;11627:73;;11423:287;11208:509;;;;:::o;11723:329::-;11782:6;11831:2;11819:9;11810:7;11806:23;11802:32;11799:119;;;11837:79;;:::i;:::-;11799:119;11957:1;11982:53;12027:7;12018:6;12007:9;12003:22;11982:53;:::i;:::-;11972:63;;11928:117;11723:329;;;;:::o;12058:327::-;12116:6;12165:2;12153:9;12144:7;12140:23;12136:32;12133:119;;;12171:79;;:::i;:::-;12133:119;12291:1;12316:52;12360:7;12351:6;12340:9;12336:22;12316:52;:::i;:::-;12306:62;;12262:116;12058:327;;;;:::o;12391:179::-;12460:10;12481:46;12523:3;12515:6;12481:46;:::i;:::-;12559:4;12554:3;12550:14;12536:28;;12391:179;;;;:::o;12576:118::-;12663:24;12681:5;12663:24;:::i;:::-;12658:3;12651:37;12576:118;;:::o;12730:732::-;12849:3;12878:54;12926:5;12878:54;:::i;:::-;12948:86;13027:6;13022:3;12948:86;:::i;:::-;12941:93;;13058:56;13108:5;13058:56;:::i;:::-;13137:7;13168:1;13153:284;13178:6;13175:1;13172:13;13153:284;;;13254:6;13248:13;13281:63;13340:3;13325:13;13281:63;:::i;:::-;13274:70;;13367:60;13420:6;13367:60;:::i;:::-;13357:70;;13213:224;13200:1;13197;13193:9;13188:14;;13153:284;;;13157:14;13453:3;13446:10;;12854:608;;;12730:732;;;;:::o;13468:109::-;13549:21;13564:5;13549:21;:::i;:::-;13544:3;13537:34;13468:109;;:::o;13583:360::-;13669:3;13697:38;13729:5;13697:38;:::i;:::-;13751:70;13814:6;13809:3;13751:70;:::i;:::-;13744:77;;13830:52;13875:6;13870:3;13863:4;13856:5;13852:16;13830:52;:::i;:::-;13907:29;13929:6;13907:29;:::i;:::-;13902:3;13898:39;13891:46;;13673:270;13583:360;;;;:::o;13949:364::-;14037:3;14065:39;14098:5;14065:39;:::i;:::-;14120:71;14184:6;14179:3;14120:71;:::i;:::-;14113:78;;14200:52;14245:6;14240:3;14233:4;14226:5;14222:16;14200:52;:::i;:::-;14277:29;14299:6;14277:29;:::i;:::-;14272:3;14268:39;14261:46;;14041:272;13949:364;;;;:::o;14319:366::-;14461:3;14482:67;14546:2;14541:3;14482:67;:::i;:::-;14475:74;;14558:93;14647:3;14558:93;:::i;:::-;14676:2;14671:3;14667:12;14660:19;;14319:366;;;:::o;14691:::-;14833:3;14854:67;14918:2;14913:3;14854:67;:::i;:::-;14847:74;;14930:93;15019:3;14930:93;:::i;:::-;15048:2;15043:3;15039:12;15032:19;;14691:366;;;:::o;15063:::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:::-;15577:3;15598:67;15662:2;15657:3;15598:67;:::i;:::-;15591:74;;15674:93;15763:3;15674:93;:::i;:::-;15792:2;15787:3;15783:12;15776:19;;15435:366;;;:::o;15807:::-;15949:3;15970:67;16034:2;16029:3;15970:67;:::i;:::-;15963:74;;16046:93;16135:3;16046:93;:::i;:::-;16164:2;16159:3;16155:12;16148:19;;15807:366;;;:::o;16179:::-;16321:3;16342:67;16406:2;16401:3;16342:67;:::i;:::-;16335:74;;16418:93;16507:3;16418:93;:::i;:::-;16536:2;16531:3;16527:12;16520:19;;16179:366;;;:::o;16551:::-;16693:3;16714:67;16778:2;16773:3;16714:67;:::i;:::-;16707:74;;16790:93;16879:3;16790:93;:::i;:::-;16908:2;16903:3;16899:12;16892:19;;16551:366;;;:::o;16923:::-;17065:3;17086:67;17150:2;17145:3;17086:67;:::i;:::-;17079:74;;17162:93;17251:3;17162:93;:::i;:::-;17280:2;17275:3;17271:12;17264:19;;16923:366;;;:::o;17295:::-;17437:3;17458:67;17522:2;17517:3;17458:67;:::i;:::-;17451:74;;17534:93;17623:3;17534:93;:::i;:::-;17652:2;17647:3;17643:12;17636:19;;17295:366;;;:::o;17667:::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:::-;18181:3;18202:67;18266:2;18261:3;18202:67;:::i;:::-;18195:74;;18278:93;18367:3;18278:93;:::i;:::-;18396:2;18391:3;18387:12;18380:19;;18039:366;;;:::o;18411:::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:::-;18925:3;18946:67;19010:2;19005:3;18946:67;:::i;:::-;18939:74;;19022:93;19111:3;19022:93;:::i;:::-;19140:2;19135:3;19131:12;19124:19;;18783:366;;;:::o;19155:::-;19297:3;19318:67;19382:2;19377:3;19318:67;:::i;:::-;19311:74;;19394:93;19483:3;19394:93;:::i;:::-;19512:2;19507:3;19503:12;19496:19;;19155:366;;;:::o;19527:::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:::-;20041:3;20062:67;20126:2;20121:3;20062:67;:::i;:::-;20055:74;;20138:93;20227:3;20138:93;:::i;:::-;20256:2;20251:3;20247:12;20240:19;;19899:366;;;:::o;20271:::-;20413:3;20434:67;20498:2;20493:3;20434:67;:::i;:::-;20427:74;;20510:93;20599:3;20510:93;:::i;:::-;20628:2;20623:3;20619:12;20612:19;;20271:366;;;:::o;20643:108::-;20720:24;20738:5;20720:24;:::i;:::-;20715:3;20708:37;20643:108;;:::o;20757:118::-;20844:24;20862:5;20844:24;:::i;:::-;20839:3;20832:37;20757:118;;:::o;20881:115::-;20966:23;20983:5;20966:23;:::i;:::-;20961:3;20954:36;20881:115;;:::o;21002:222::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21146:71;21214:1;21203:9;21199:17;21190:6;21146:71;:::i;:::-;21002:222;;;;:::o;21230:1053::-;21553:4;21591:3;21580:9;21576:19;21568:27;;21605:71;21673:1;21662:9;21658:17;21649:6;21605:71;:::i;:::-;21686:72;21754:2;21743:9;21739:18;21730:6;21686:72;:::i;:::-;21805:9;21799:4;21795:20;21790:2;21779:9;21775:18;21768:48;21833:108;21936:4;21927:6;21833:108;:::i;:::-;21825:116;;21988:9;21982:4;21978:20;21973:2;21962:9;21958:18;21951:48;22016:108;22119:4;22110:6;22016:108;:::i;:::-;22008:116;;22172:9;22166:4;22162:20;22156:3;22145:9;22141:19;22134:49;22200:76;22271:4;22262:6;22200:76;:::i;:::-;22192:84;;21230:1053;;;;;;;;:::o;22289:751::-;22512:4;22550:3;22539:9;22535:19;22527:27;;22564:71;22632:1;22621:9;22617:17;22608:6;22564:71;:::i;:::-;22645:72;22713:2;22702:9;22698:18;22689:6;22645:72;:::i;:::-;22727;22795:2;22784:9;22780:18;22771:6;22727:72;:::i;:::-;22809;22877:2;22866:9;22862:18;22853:6;22809:72;:::i;:::-;22929:9;22923:4;22919:20;22913:3;22902:9;22898:19;22891:49;22957:76;23028:4;23019:6;22957:76;:::i;:::-;22949:84;;22289:751;;;;;;;;:::o;23046:373::-;23189:4;23227:2;23216:9;23212:18;23204:26;;23276:9;23270:4;23266:20;23262:1;23251:9;23247:17;23240:47;23304:108;23407:4;23398:6;23304:108;:::i;:::-;23296:116;;23046:373;;;;:::o;23425:634::-;23646:4;23684:2;23673:9;23669:18;23661:26;;23733:9;23727:4;23723:20;23719:1;23708:9;23704:17;23697:47;23761:108;23864:4;23855:6;23761:108;:::i;:::-;23753:116;;23916:9;23910:4;23906:20;23901:2;23890:9;23886:18;23879:48;23944:108;24047:4;24038:6;23944:108;:::i;:::-;23936:116;;23425:634;;;;;:::o;24065:210::-;24152:4;24190:2;24179:9;24175:18;24167:26;;24203:65;24265:1;24254:9;24250:17;24241:6;24203:65;:::i;:::-;24065:210;;;;:::o;24281:313::-;24394:4;24432:2;24421:9;24417:18;24409:26;;24481:9;24475:4;24471:20;24467:1;24456:9;24452:17;24445:47;24509:78;24582:4;24573:6;24509:78;:::i;:::-;24501:86;;24281:313;;;;:::o;24600:419::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:::-;25191:4;25229:2;25218:9;25214:18;25206:26;;25278:9;25272:4;25268:20;25264:1;25253:9;25249:17;25242:47;25306:131;25432:4;25306:131;:::i;:::-;25298:139;;25025:419;;;:::o;25450:::-;25616:4;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:131;25857:4;25731:131;:::i;:::-;25723:139;;25450:419;;;:::o;25875:::-;26041:4;26079:2;26068:9;26064:18;26056:26;;26128:9;26122:4;26118:20;26114:1;26103:9;26099:17;26092:47;26156:131;26282:4;26156:131;:::i;:::-;26148:139;;25875:419;;;:::o;26300:::-;26466:4;26504:2;26493:9;26489:18;26481:26;;26553:9;26547:4;26543:20;26539:1;26528:9;26524:17;26517:47;26581:131;26707:4;26581:131;:::i;:::-;26573:139;;26300:419;;;:::o;26725:::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:::-;27316:4;27354:2;27343:9;27339:18;27331:26;;27403:9;27397:4;27393:20;27389:1;27378:9;27374:17;27367:47;27431:131;27557:4;27431:131;:::i;:::-;27423:139;;27150:419;;;:::o;27575:::-;27741:4;27779:2;27768:9;27764:18;27756:26;;27828:9;27822:4;27818:20;27814:1;27803:9;27799:17;27792:47;27856:131;27982:4;27856:131;:::i;:::-;27848:139;;27575:419;;;:::o;28000:::-;28166:4;28204:2;28193:9;28189:18;28181:26;;28253:9;28247:4;28243:20;28239:1;28228:9;28224:17;28217:47;28281:131;28407:4;28281:131;:::i;:::-;28273:139;;28000:419;;;:::o;28425:::-;28591:4;28629:2;28618:9;28614:18;28606:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28706:131;28832:4;28706:131;:::i;:::-;28698:139;;28425:419;;;:::o;28850:::-;29016:4;29054:2;29043:9;29039:18;29031:26;;29103:9;29097:4;29093:20;29089:1;29078:9;29074:17;29067:47;29131:131;29257:4;29131:131;:::i;:::-;29123:139;;28850:419;;;:::o;29275:::-;29441:4;29479:2;29468:9;29464:18;29456:26;;29528:9;29522:4;29518:20;29514:1;29503:9;29499:17;29492:47;29556:131;29682:4;29556:131;:::i;:::-;29548:139;;29275:419;;;:::o;29700:::-;29866:4;29904:2;29893:9;29889:18;29881:26;;29953:9;29947:4;29943:20;29939:1;29928:9;29924:17;29917:47;29981:131;30107:4;29981:131;:::i;:::-;29973:139;;29700:419;;;:::o;30125:::-;30291:4;30329:2;30318:9;30314:18;30306:26;;30378:9;30372:4;30368:20;30364:1;30353:9;30349:17;30342:47;30406:131;30532:4;30406:131;:::i;:::-;30398:139;;30125:419;;;:::o;30550:::-;30716:4;30754:2;30743:9;30739:18;30731:26;;30803:9;30797:4;30793:20;30789:1;30778:9;30774:17;30767:47;30831:131;30957:4;30831:131;:::i;:::-;30823:139;;30550:419;;;:::o;30975:::-;31141:4;31179:2;31168:9;31164:18;31156:26;;31228:9;31222:4;31218:20;31214:1;31203:9;31199:17;31192:47;31256:131;31382:4;31256:131;:::i;:::-;31248:139;;30975:419;;;:::o;31400:::-;31566:4;31604:2;31593:9;31589:18;31581:26;;31653:9;31647:4;31643:20;31639:1;31628:9;31624:17;31617:47;31681:131;31807:4;31681:131;:::i;:::-;31673:139;;31400:419;;;:::o;31825:222::-;31918:4;31956:2;31945:9;31941:18;31933:26;;31969:71;32037:1;32026:9;32022:17;32013:6;31969:71;:::i;:::-;31825:222;;;;:::o;32053:332::-;32174:4;32212:2;32201:9;32197:18;32189:26;;32225:71;32293:1;32282:9;32278:17;32269:6;32225:71;:::i;:::-;32306:72;32374:2;32363:9;32359:18;32350:6;32306:72;:::i;:::-;32053:332;;;;;:::o;32391:218::-;32482:4;32520:2;32509:9;32505:18;32497:26;;32533:69;32599:1;32588:9;32584:17;32575:6;32533:69;:::i;:::-;32391:218;;;;:::o;32615:129::-;32649:6;32676:20;;:::i;:::-;32666:30;;32705:33;32733:4;32725:6;32705:33;:::i;:::-;32615:129;;;:::o;32750:75::-;32783:6;32816:2;32810:9;32800:19;;32750:75;:::o;32831:311::-;32908:4;32998:18;32990:6;32987:30;32984:56;;;33020:18;;:::i;:::-;32984:56;33070:4;33062:6;33058:17;33050:25;;33130:4;33124;33120:15;33112:23;;32831:311;;;:::o;33148:::-;33225:4;33315:18;33307:6;33304:30;33301:56;;;33337:18;;:::i;:::-;33301:56;33387:4;33379:6;33375:17;33367:25;;33447:4;33441;33437:15;33429:23;;33148:311;;;:::o;33465:307::-;33526:4;33616:18;33608:6;33605:30;33602:56;;;33638:18;;:::i;:::-;33602:56;33676:29;33698:6;33676:29;:::i;:::-;33668:37;;33760:4;33754;33750:15;33742:23;;33465:307;;;:::o;33778:308::-;33840:4;33930:18;33922:6;33919:30;33916:56;;;33952:18;;:::i;:::-;33916:56;33990:29;34012:6;33990:29;:::i;:::-;33982:37;;34074:4;34068;34064:15;34056:23;;33778:308;;;:::o;34092:132::-;34159:4;34182:3;34174:11;;34212:4;34207:3;34203:14;34195:22;;34092:132;;;:::o;34230:114::-;34297:6;34331:5;34325:12;34315:22;;34230:114;;;:::o;34350:98::-;34401:6;34435:5;34429:12;34419:22;;34350:98;;;:::o;34454:99::-;34506:6;34540:5;34534:12;34524:22;;34454:99;;;:::o;34559:113::-;34629:4;34661;34656:3;34652:14;34644:22;;34559:113;;;:::o;34678:184::-;34777:11;34811:6;34806:3;34799:19;34851:4;34846:3;34842:14;34827:29;;34678:184;;;;:::o;34868:168::-;34951:11;34985:6;34980:3;34973:19;35025:4;35020:3;35016:14;35001:29;;34868:168;;;;:::o;35042:169::-;35126:11;35160:6;35155:3;35148:19;35200:4;35195:3;35191:14;35176:29;;35042:169;;;;:::o;35217:305::-;35257:3;35276:20;35294:1;35276:20;:::i;:::-;35271:25;;35310:20;35328:1;35310:20;:::i;:::-;35305:25;;35464:1;35396:66;35392:74;35389:1;35386:81;35383:107;;;35470:18;;:::i;:::-;35383:107;35514:1;35511;35507:9;35500:16;;35217:305;;;;:::o;35528:246::-;35567:3;35586:19;35603:1;35586:19;:::i;:::-;35581:24;;35619:19;35636:1;35619:19;:::i;:::-;35614:24;;35716:1;35704:10;35700:18;35697:1;35694:25;35691:51;;;35722:18;;:::i;:::-;35691:51;35766:1;35763;35759:9;35752:16;;35528:246;;;;:::o;35780:185::-;35820:1;35837:20;35855:1;35837:20;:::i;:::-;35832:25;;35871:20;35889:1;35871:20;:::i;:::-;35866:25;;35910:1;35900:35;;35915:18;;:::i;:::-;35900:35;35957:1;35954;35950:9;35945:14;;35780:185;;;;:::o;35971:348::-;36011:7;36034:20;36052:1;36034:20;:::i;:::-;36029:25;;36068:20;36086:1;36068:20;:::i;:::-;36063:25;;36256:1;36188:66;36184:74;36181:1;36178:81;36173:1;36166:9;36159:17;36155:105;36152:131;;;36263:18;;:::i;:::-;36152:131;36311:1;36308;36304:9;36293:20;;35971:348;;;;:::o;36325:191::-;36365:4;36385:20;36403:1;36385:20;:::i;:::-;36380:25;;36419:20;36437:1;36419:20;:::i;:::-;36414:25;;36458:1;36455;36452:8;36449:34;;;36463:18;;:::i;:::-;36449:34;36508:1;36505;36501:9;36493:17;;36325:191;;;;:::o;36522:188::-;36561:4;36581:19;36598:1;36581:19;:::i;:::-;36576:24;;36614:19;36631:1;36614:19;:::i;:::-;36609:24;;36652:1;36649;36646:8;36643:34;;;36657:18;;:::i;:::-;36643:34;36702:1;36699;36695:9;36687:17;;36522:188;;;;:::o;36716:96::-;36753:7;36782:24;36800:5;36782:24;:::i;:::-;36771:35;;36716:96;;;:::o;36818:90::-;36852:7;36895:5;36888:13;36881:21;36870:32;;36818:90;;;:::o;36914:149::-;36950:7;36990:66;36983:5;36979:78;36968:89;;36914:149;;;:::o;37069:126::-;37106:7;37146:42;37139:5;37135:54;37124:65;;37069:126;;;:::o;37201:77::-;37238:7;37267:5;37256:16;;37201:77;;;:::o;37284:93::-;37320:7;37360:10;37353:5;37349:22;37338:33;;37284:93;;;:::o;37383:154::-;37467:6;37462:3;37457;37444:30;37529:1;37520:6;37515:3;37511:16;37504:27;37383:154;;;:::o;37543:307::-;37611:1;37621:113;37635:6;37632:1;37629:13;37621:113;;;37720:1;37715:3;37711:11;37705:18;37701:1;37696:3;37692:11;37685:39;37657:2;37654:1;37650:10;37645:15;;37621:113;;;37752:6;37749:1;37746:13;37743:101;;;37832:1;37823:6;37818:3;37814:16;37807:27;37743:101;37592:258;37543:307;;;:::o;37856:320::-;37900:6;37937:1;37931:4;37927:12;37917:22;;37984:1;37978:4;37974:12;38005:18;37995:81;;38061:4;38053:6;38049:17;38039:27;;37995:81;38123:2;38115:6;38112:14;38092:18;38089:38;38086:84;;;38142:18;;:::i;:::-;38086:84;37907:269;37856:320;;;:::o;38182:281::-;38265:27;38287:4;38265:27;:::i;:::-;38257:6;38253:40;38395:6;38383:10;38380:22;38359:18;38347:10;38344:34;38341:62;38338:88;;;38406:18;;:::i;:::-;38338:88;38446:10;38442:2;38435:22;38225:238;38182:281;;:::o;38469:233::-;38508:3;38531:24;38549:5;38531:24;:::i;:::-;38522:33;;38577:66;38570:5;38567:77;38564:103;;;38647:18;;:::i;:::-;38564:103;38694:1;38687:5;38683:13;38676:20;;38469:233;;;:::o;38708:175::-;38746:3;38769:23;38786:5;38769:23;:::i;:::-;38760:32;;38814:10;38807:5;38804:21;38801:47;;;38828:18;;:::i;:::-;38801:47;38875:1;38868:5;38864:13;38857:20;;38708:175;;;:::o;38889:180::-;38937:77;38934:1;38927:88;39034:4;39031:1;39024:15;39058:4;39055:1;39048:15;39075:180;39123:77;39120:1;39113:88;39220:4;39217:1;39210:15;39244:4;39241:1;39234:15;39261:180;39309:77;39306:1;39299:88;39406:4;39403:1;39396:15;39430:4;39427:1;39420:15;39447:180;39495:77;39492:1;39485:88;39592:4;39589:1;39582:15;39616:4;39613:1;39606:15;39633:180;39681:77;39678:1;39671:88;39778:4;39775:1;39768:15;39802:4;39799:1;39792:15;39819:183;39854:3;39892:1;39874:16;39871:23;39868:128;;;39930:1;39927;39924;39909:23;39952:34;39983:1;39977:8;39952:34;:::i;:::-;39945:41;;39868:128;39819:183;:::o;40008:117::-;40117:1;40114;40107:12;40131:117;40240:1;40237;40230:12;40254:117;40363:1;40360;40353:12;40377:117;40486:1;40483;40476:12;40500:117;40609:1;40606;40599:12;40623:102;40664:6;40715:2;40711:7;40706:2;40699:5;40695:14;40691:28;40681:38;;40623:102;;;:::o;40731:106::-;40775:8;40824:5;40819:3;40815:15;40794:36;;40731:106;;;:::o;40843:239::-;40983:34;40979:1;40971:6;40967:14;40960:58;41052:22;41047:2;41039:6;41035:15;41028:47;40843:239;:::o;41088:227::-;41228:34;41224:1;41216:6;41212:14;41205:58;41297:10;41292:2;41284:6;41280:15;41273:35;41088:227;:::o;41321:230::-;41461:34;41457:1;41449:6;41445:14;41438:58;41530:13;41525:2;41517:6;41513:15;41506:38;41321:230;:::o;41557:225::-;41697:34;41693:1;41685:6;41681:14;41674:58;41766:8;41761:2;41753:6;41749:15;41742:33;41557:225;:::o;41788:228::-;41928:34;41924:1;41916:6;41912:14;41905:58;41997:11;41992:2;41984:6;41980:15;41973:36;41788:228;:::o;42022:176::-;42162:28;42158:1;42150:6;42146:14;42139:52;42022:176;:::o;42204:179::-;42344:31;42340:1;42332:6;42328:14;42321:55;42204:179;:::o;42389:167::-;42529:19;42525:1;42517:6;42513:14;42506:43;42389:167;:::o;42562:224::-;42702:34;42698:1;42690:6;42686:14;42679:58;42771:7;42766:2;42758:6;42754:15;42747:32;42562:224;:::o;42792:237::-;42932:34;42928:1;42920:6;42916:14;42909:58;43001:20;42996:2;42988:6;42984:15;42977:45;42792:237;:::o;43035:229::-;43175:34;43171:1;43163:6;43159:14;43152:58;43244:12;43239:2;43231:6;43227:15;43220:37;43035:229;:::o;43270:228::-;43410:34;43406:1;43398:6;43394:14;43387:58;43479:11;43474:2;43466:6;43462:15;43455:36;43270:228;:::o;43504:182::-;43644:34;43640:1;43632:6;43628:14;43621:58;43504:182;:::o;43692:228::-;43832:34;43828:1;43820:6;43816:14;43809:58;43901:11;43896:2;43888:6;43884:15;43877:36;43692:228;:::o;43926:::-;44066:34;44062:1;44054:6;44050:14;44043:58;44135:11;44130:2;44122:6;44118:15;44111:36;43926:228;:::o;44160:227::-;44300:34;44296:1;44288:6;44284:14;44277:58;44369:10;44364:2;44356:6;44352:15;44345:35;44160:227;:::o;44393:220::-;44533:34;44529:1;44521:6;44517:14;44510:58;44602:3;44597:2;44589:6;44585:15;44578:28;44393:220;:::o;44619:711::-;44658:3;44696:4;44678:16;44675:26;44672:39;;;44704:5;;44672:39;44733:20;;:::i;:::-;44808:1;44790:16;44786:24;44783:1;44777:4;44762:49;44841:4;44835:11;44940:16;44933:4;44925:6;44921:17;44918:39;44885:18;44877:6;44874:30;44858:113;44855:146;;;44986:5;;;;44855:146;45032:6;45026:4;45022:17;45068:3;45062:10;45095:18;45087:6;45084:30;45081:43;;;45117:5;;;;;;45081:43;45165:6;45158:4;45153:3;45149:14;45145:27;45224:1;45206:16;45202:24;45196:4;45192:35;45187:3;45184:44;45181:57;;;45231:5;;;;;;;45181:57;45248;45296:6;45290:4;45286:17;45278:6;45274:30;45268:4;45248:57;:::i;:::-;45321:3;45314:10;;44662:668;;;;;44619:711;;:::o;45336:122::-;45409:24;45427:5;45409:24;:::i;:::-;45402:5;45399:35;45389:63;;45448:1;45445;45438:12;45389:63;45336:122;:::o;45464:116::-;45534:21;45549:5;45534:21;:::i;:::-;45527:5;45524:32;45514:60;;45570:1;45567;45560:12;45514:60;45464:116;:::o;45586:120::-;45658:23;45675:5;45658:23;:::i;:::-;45651:5;45648:34;45638:62;;45696:1;45693;45686:12;45638:62;45586:120;:::o;45712:122::-;45785:24;45803:5;45785:24;:::i;:::-;45778:5;45775:35;45765:63;;45824:1;45821;45814:12;45765:63;45712:122;:::o;45840:120::-;45912:23;45929:5;45912:23;:::i;:::-;45905:5;45902:34;45892:62;;45950:1;45947;45940:12;45892:62;45840:120;:::o
Swarm Source
ipfs://f120489cf00ca8265a4109f0e1067a6431caf4484fae1f7d9e07d0eaa357348d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.