Token
Overview ERC1155
Total Supply:
0 N/A
Holders:
93 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
NunuSeedlings
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-13 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/[email protected]/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/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "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" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (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. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 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/[email protected]/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/[email protected]/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.8.0) (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: address zero is not a valid owner" ); 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 token owner or 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: caller is not token owner or 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck( operator, address(0), to, id, amount, data ); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck( operator, address(0), to, ids, amounts, data ); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "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 `ids` and `amounts` 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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( 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: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burnBatch(account, ids, values); } } // File: nunuSeedlings.sol pragma solidity ^0.8.9; contract NunuSeedlings is ERC1155, Ownable, ERC1155Burnable { constructor() ERC1155("") {} function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint( address account, uint256 id, uint256 amount, bytes memory data ) public onlyOwner { _mint(account, id, amount, data); } function mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public onlyOwner { _mintBatch(to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200006f60201b60201c565b6200007760201b60201c565b6200049e565b80600290816200006b9190620003b7565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001bf57607f821691505b602082108103620001d557620001d462000177565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200023f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000200565b6200024b868362000200565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000298620002926200028c8462000263565b6200026d565b62000263565b9050919050565b6000819050919050565b620002b48362000277565b620002cc620002c3826200029f565b8484546200020d565b825550505050565b600090565b620002e3620002d4565b620002f0818484620002a9565b505050565b5b8181101562000318576200030c600082620002d9565b600181019050620002f6565b5050565b601f82111562000367576200033181620001db565b6200033c84620001f0565b810160208510156200034c578190505b620003646200035b85620001f0565b830182620002f5565b50505b505050565b600082821c905092915050565b60006200038c600019846008026200036c565b1980831691505092915050565b6000620003a7838362000379565b9150826002028217905092915050565b620003c2826200013d565b67ffffffffffffffff811115620003de57620003dd62000148565b5b620003ea8254620001a6565b620003f78282856200031c565b600060209050601f8311600181146200042f57600084156200041a578287015190505b62000426858262000399565b86555062000496565b601f1984166200043f86620001db565b60005b82811015620004695784890151825560018201915060208501945060208101905062000442565b8683101562000489578489015162000485601f89168262000379565b8355505b6001600288020188555050505b505050505050565b613b4980620004ae6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610294578063f242432a146102c4578063f2fde38b146102e0578063f5298aca146102fc576100ff565b8063715018a614610234578063731133e91461023e5780638da5cb5b1461025a578063a22cb46514610278576100ff565b80631f7fdffa116100d35780631f7fdffa146101b05780632eb2c2d6146101cc5780634e1273f4146101e85780636b20c45414610218576100ff565b8062fdd58e1461010457806301ffc9a71461013457806302fe5305146101645780630e89341c14610180575b600080fd5b61011e60048036038101906101199190612182565b610318565b60405161012b91906121d1565b60405180910390f35b61014e60048036038101906101499190612244565b6103e0565b60405161015b919061228c565b60405180910390f35b61017e600480360381019061017991906123ed565b6104c2565b005b61019a60048036038101906101959190612436565b6104d6565b6040516101a791906124e2565b60405180910390f35b6101ca60048036038101906101c5919061266d565b61056a565b005b6101e660048036038101906101e19190612728565b610584565b005b61020260048036038101906101fd91906128ba565b610625565b60405161020f91906129f0565b60405180910390f35b610232600480360381019061022d9190612a12565b61073e565b005b61023c6107db565b005b61025860048036038101906102539190612a9d565b6107ef565b005b610262610809565b60405161026f9190612b2f565b60405180910390f35b610292600480360381019061028d9190612b76565b610833565b005b6102ae60048036038101906102a99190612bb6565b610849565b6040516102bb919061228c565b60405180910390f35b6102de60048036038101906102d99190612bf6565b6108dd565b005b6102fa60048036038101906102f59190612c8d565b61097e565b005b61031660048036038101906103119190612cba565b610a01565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037f90612d7f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ab57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104bb57506104ba82610a9e565b5b9050919050565b6104ca610b08565b6104d381610b86565b50565b6060600280546104e590612dce565b80601f016020809104026020016040519081016040528092919081815260200182805461051190612dce565b801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b50505050509050919050565b610572610b08565b61057e84848484610b99565b50505050565b61058c610dc5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105d257506105d1856105cc610dc5565b610849565b5b610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890612e71565b60405180910390fd5b61061e8585858585610dcd565b5050505050565b6060815183511461066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290612f03565b60405180910390fd5b6000835167ffffffffffffffff811115610688576106876122c2565b5b6040519080825280602002602001820160405280156106b65781602001602082028036833780820191505090505b50905060005b8451811015610733576107038582815181106106db576106da612f23565b5b60200260200101518583815181106106f6576106f5612f23565b5b6020026020010151610318565b82828151811061071657610715612f23565b5b6020026020010181815250508061072c90612f81565b90506106bc565b508091505092915050565b610746610dc5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061078c575061078b83610786610dc5565b610849565b5b6107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c290612e71565b60405180910390fd5b6107d68383836110ee565b505050565b6107e3610b08565b6107ed60006113bc565b565b6107f7610b08565b61080384848484611482565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61084561083e610dc5565b8383611632565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6108e5610dc5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061092b575061092a85610925610dc5565b610849565b5b61096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096190612e71565b60405180910390fd5b610977858585858561179e565b5050505050565b610986610b08565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ec9061303b565b60405180910390fd5b6109fe816113bc565b50565b610a09610dc5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a4f5750610a4e83610a49610dc5565b610849565b5b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590612e71565b60405180910390fd5b610a99838383611a39565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b10610dc5565b73ffffffffffffffffffffffffffffffffffffffff16610b2e610809565b73ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b906130a7565b60405180910390fd5b565b8060029081610b959190613273565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff906133b7565b60405180910390fd5b8151835114610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613449565b60405180910390fd5b6000610c56610dc5565b9050610c6781600087878787611c7f565b60005b8451811015610d2057838181518110610c8657610c85612f23565b5b6020026020010151600080878481518110610ca457610ca3612f23565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d069190613469565b925050819055508080610d1890612f81565b915050610c6a565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610d9892919061349d565b60405180910390a4610daf81600087878787611c87565b610dbe81600087878787611c8f565b5050505050565b600033905090565b8151835114610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613449565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613546565b60405180910390fd5b6000610e8a610dc5565b9050610e9a818787878787611c7f565b60005b845181101561104b576000858281518110610ebb57610eba612f23565b5b602002602001015190506000858381518110610eda57610ed9612f23565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f72906135d8565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110309190613469565b925050819055505050508061104490612f81565b9050610e9d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110c292919061349d565b60405180910390a46110d8818787878787611c87565b6110e6818787878787611c8f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361115d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111549061366a565b60405180910390fd5b80518251146111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613449565b60405180910390fd5b60006111ab610dc5565b90506111cb81856000868660405180602001604052806000815250611c7f565b60005b83518110156113185760008482815181106111ec576111eb612f23565b5b60200260200101519050600084838151811061120b5761120a612f23565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906136fc565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061131090612f81565b9150506111ce565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161139092919061349d565b60405180910390a46113b681856000868660405180602001604052806000815250611c87565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e8906133b7565b60405180910390fd5b60006114fb610dc5565b9050600061150885611e66565b9050600061151585611e66565b905061152683600089858589611c7f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115859190613469565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161160392919061371c565b60405180910390a461161a83600089858589611c87565b61162983600089898989611ee0565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611697906137b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611791919061228c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180490613546565b60405180910390fd5b6000611817610dc5565b9050600061182485611e66565b9050600061183185611e66565b9050611841838989858589611c7f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906135d8565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461198d9190613469565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611a0a92919061371c565b60405180910390a4611a20848a8a86868a611c87565b611a2e848a8a8a8a8a611ee0565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f9061366a565b60405180910390fd5b6000611ab2610dc5565b90506000611abf84611e66565b90506000611acc84611e66565b9050611aec83876000858560405180602001604052806000815250611c7f565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a906136fc565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611c5092919061371c565b60405180910390a4611c7684886000868660405180602001604052806000815250611c87565b50505050505050565b505050505050565b505050505050565b611cae8473ffffffffffffffffffffffffffffffffffffffff166120b7565b15611e5e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611cf495949392919061382c565b6020604051808303816000875af1925050508015611d3057506040513d601f19601f82011682018060405250810190611d2d91906138a9565b60015b611dd557611d3c6138e3565b806308c379a003611d985750611d50613905565b80611d5b5750611d9a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f91906124e2565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90613a07565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390613a99565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611e8557611e846122c2565b5b604051908082528060200260200182016040528015611eb35781602001602082028036833780820191505090505b5090508281600081518110611ecb57611eca612f23565b5b60200260200101818152505080915050919050565b611eff8473ffffffffffffffffffffffffffffffffffffffff166120b7565b156120af578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611f45959493929190613ab9565b6020604051808303816000875af1925050508015611f8157506040513d601f19601f82011682018060405250810190611f7e91906138a9565b60015b61202657611f8d6138e3565b806308c379a003611fe95750611fa1613905565b80611fac5750611feb565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe091906124e2565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90613a07565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a490613a99565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612119826120ee565b9050919050565b6121298161210e565b811461213457600080fd5b50565b60008135905061214681612120565b92915050565b6000819050919050565b61215f8161214c565b811461216a57600080fd5b50565b60008135905061217c81612156565b92915050565b60008060408385031215612199576121986120e4565b5b60006121a785828601612137565b92505060206121b88582860161216d565b9150509250929050565b6121cb8161214c565b82525050565b60006020820190506121e660008301846121c2565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612221816121ec565b811461222c57600080fd5b50565b60008135905061223e81612218565b92915050565b60006020828403121561225a576122596120e4565b5b60006122688482850161222f565b91505092915050565b60008115159050919050565b61228681612271565b82525050565b60006020820190506122a1600083018461227d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122fa826122b1565b810181811067ffffffffffffffff82111715612319576123186122c2565b5b80604052505050565b600061232c6120da565b905061233882826122f1565b919050565b600067ffffffffffffffff821115612358576123576122c2565b5b612361826122b1565b9050602081019050919050565b82818337600083830152505050565b600061239061238b8461233d565b612322565b9050828152602081018484840111156123ac576123ab6122ac565b5b6123b784828561236e565b509392505050565b600082601f8301126123d4576123d36122a7565b5b81356123e484826020860161237d565b91505092915050565b600060208284031215612403576124026120e4565b5b600082013567ffffffffffffffff811115612421576124206120e9565b5b61242d848285016123bf565b91505092915050565b60006020828403121561244c5761244b6120e4565b5b600061245a8482850161216d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561249d578082015181840152602081019050612482565b60008484015250505050565b60006124b482612463565b6124be818561246e565b93506124ce81856020860161247f565b6124d7816122b1565b840191505092915050565b600060208201905081810360008301526124fc81846124a9565b905092915050565b600067ffffffffffffffff82111561251f5761251e6122c2565b5b602082029050602081019050919050565b600080fd5b600061254861254384612504565b612322565b9050808382526020820190506020840283018581111561256b5761256a612530565b5b835b818110156125945780612580888261216d565b84526020840193505060208101905061256d565b5050509392505050565b600082601f8301126125b3576125b26122a7565b5b81356125c3848260208601612535565b91505092915050565b600067ffffffffffffffff8211156125e7576125e66122c2565b5b6125f0826122b1565b9050602081019050919050565b600061261061260b846125cc565b612322565b90508281526020810184848401111561262c5761262b6122ac565b5b61263784828561236e565b509392505050565b600082601f830112612654576126536122a7565b5b81356126648482602086016125fd565b91505092915050565b60008060008060808587031215612687576126866120e4565b5b600061269587828801612137565b945050602085013567ffffffffffffffff8111156126b6576126b56120e9565b5b6126c28782880161259e565b935050604085013567ffffffffffffffff8111156126e3576126e26120e9565b5b6126ef8782880161259e565b925050606085013567ffffffffffffffff8111156127105761270f6120e9565b5b61271c8782880161263f565b91505092959194509250565b600080600080600060a08688031215612744576127436120e4565b5b600061275288828901612137565b955050602061276388828901612137565b945050604086013567ffffffffffffffff811115612784576127836120e9565b5b6127908882890161259e565b935050606086013567ffffffffffffffff8111156127b1576127b06120e9565b5b6127bd8882890161259e565b925050608086013567ffffffffffffffff8111156127de576127dd6120e9565b5b6127ea8882890161263f565b9150509295509295909350565b600067ffffffffffffffff821115612812576128116122c2565b5b602082029050602081019050919050565b6000612836612831846127f7565b612322565b9050808382526020820190506020840283018581111561285957612858612530565b5b835b81811015612882578061286e8882612137565b84526020840193505060208101905061285b565b5050509392505050565b600082601f8301126128a1576128a06122a7565b5b81356128b1848260208601612823565b91505092915050565b600080604083850312156128d1576128d06120e4565b5b600083013567ffffffffffffffff8111156128ef576128ee6120e9565b5b6128fb8582860161288c565b925050602083013567ffffffffffffffff81111561291c5761291b6120e9565b5b6129288582860161259e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129678161214c565b82525050565b6000612979838361295e565b60208301905092915050565b6000602082019050919050565b600061299d82612932565b6129a7818561293d565b93506129b28361294e565b8060005b838110156129e35781516129ca888261296d565b97506129d583612985565b9250506001810190506129b6565b5085935050505092915050565b60006020820190508181036000830152612a0a8184612992565b905092915050565b600080600060608486031215612a2b57612a2a6120e4565b5b6000612a3986828701612137565b935050602084013567ffffffffffffffff811115612a5a57612a596120e9565b5b612a668682870161259e565b925050604084013567ffffffffffffffff811115612a8757612a866120e9565b5b612a938682870161259e565b9150509250925092565b60008060008060808587031215612ab757612ab66120e4565b5b6000612ac587828801612137565b9450506020612ad68782880161216d565b9350506040612ae78782880161216d565b925050606085013567ffffffffffffffff811115612b0857612b076120e9565b5b612b148782880161263f565b91505092959194509250565b612b298161210e565b82525050565b6000602082019050612b446000830184612b20565b92915050565b612b5381612271565b8114612b5e57600080fd5b50565b600081359050612b7081612b4a565b92915050565b60008060408385031215612b8d57612b8c6120e4565b5b6000612b9b85828601612137565b9250506020612bac85828601612b61565b9150509250929050565b60008060408385031215612bcd57612bcc6120e4565b5b6000612bdb85828601612137565b9250506020612bec85828601612137565b9150509250929050565b600080600080600060a08688031215612c1257612c116120e4565b5b6000612c2088828901612137565b9550506020612c3188828901612137565b9450506040612c428882890161216d565b9350506060612c538882890161216d565b925050608086013567ffffffffffffffff811115612c7457612c736120e9565b5b612c808882890161263f565b9150509295509295909350565b600060208284031215612ca357612ca26120e4565b5b6000612cb184828501612137565b91505092915050565b600080600060608486031215612cd357612cd26120e4565b5b6000612ce186828701612137565b9350506020612cf28682870161216d565b9250506040612d038682870161216d565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612d69602a8361246e565b9150612d7482612d0d565b604082019050919050565b60006020820190508181036000830152612d9881612d5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612de657607f821691505b602082108103612df957612df8612d9f565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612e5b602e8361246e565b9150612e6682612dff565b604082019050919050565b60006020820190508181036000830152612e8a81612e4e565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612eed60298361246e565b9150612ef882612e91565b604082019050919050565b60006020820190508181036000830152612f1c81612ee0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f8c8261214c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fbe57612fbd612f52565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061302560268361246e565b915061303082612fc9565b604082019050919050565b6000602082019050818103600083015261305481613018565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061309160208361246e565b915061309c8261305b565b602082019050919050565b600060208201905081810360008301526130c081613084565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826130ec565b61313386836130ec565b95508019841693508086168417925050509392505050565b6000819050919050565b600061317061316b6131668461214c565b61314b565b61214c565b9050919050565b6000819050919050565b61318a83613155565b61319e61319682613177565b8484546130f9565b825550505050565b600090565b6131b36131a6565b6131be818484613181565b505050565b5b818110156131e2576131d76000826131ab565b6001810190506131c4565b5050565b601f821115613227576131f8816130c7565b613201846130dc565b81016020851015613210578190505b61322461321c856130dc565b8301826131c3565b50505b505050565b600082821c905092915050565b600061324a6000198460080261322c565b1980831691505092915050565b60006132638383613239565b9150826002028217905092915050565b61327c82612463565b67ffffffffffffffff811115613295576132946122c2565b5b61329f8254612dce565b6132aa8282856131e6565b600060209050601f8311600181146132dd57600084156132cb578287015190505b6132d58582613257565b86555061333d565b601f1984166132eb866130c7565b60005b82811015613313578489015182556001820191506020850194506020810190506132ee565b86831015613330578489015161332c601f891682613239565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a160218361246e565b91506133ac82613345565b604082019050919050565b600060208201905081810360008301526133d081613394565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061343360288361246e565b915061343e826133d7565b604082019050919050565b6000602082019050818103600083015261346281613426565b9050919050565b60006134748261214c565b915061347f8361214c565b925082820190508082111561349757613496612f52565b5b92915050565b600060408201905081810360008301526134b78185612992565b905081810360208301526134cb8184612992565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061353060258361246e565b915061353b826134d4565b604082019050919050565b6000602082019050818103600083015261355f81613523565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006135c2602a8361246e565b91506135cd82613566565b604082019050919050565b600060208201905081810360008301526135f1816135b5565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061365460238361246e565b915061365f826135f8565b604082019050919050565b6000602082019050818103600083015261368381613647565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006136e660248361246e565b91506136f18261368a565b604082019050919050565b60006020820190508181036000830152613715816136d9565b9050919050565b600060408201905061373160008301856121c2565b61373e60208301846121c2565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006137a160298361246e565b91506137ac82613745565b604082019050919050565b600060208201905081810360008301526137d081613794565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006137fe826137d7565b61380881856137e2565b935061381881856020860161247f565b613821816122b1565b840191505092915050565b600060a0820190506138416000830188612b20565b61384e6020830187612b20565b81810360408301526138608186612992565b905081810360608301526138748185612992565b9050818103608083015261388881846137f3565b90509695505050505050565b6000815190506138a381612218565b92915050565b6000602082840312156138bf576138be6120e4565b5b60006138cd84828501613894565b91505092915050565b60008160e01c9050919050565b600060033d11156139025760046000803e6138ff6000516138d6565b90505b90565b600060443d10613992576139176120da565b60043d036004823e80513d602482011167ffffffffffffffff8211171561393f575050613992565b808201805167ffffffffffffffff81111561395d5750505050613992565b80602083010160043d03850181111561397a575050505050613992565b613989826020018501866122f1565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006139f160348361246e565b91506139fc82613995565b604082019050919050565b60006020820190508181036000830152613a20816139e4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613a8360288361246e565b9150613a8e82613a27565b604082019050919050565b60006020820190508181036000830152613ab281613a76565b9050919050565b600060a082019050613ace6000830188612b20565b613adb6020830187612b20565b613ae860408301866121c2565b613af560608301856121c2565b8181036080830152613b0781846137f3565b9050969550505050505056fea2646970667358221220267f8a3c09862e522246df454ec66d350bd5dfb1bdfe7aeb4254bce14cdb595264736f6c63430008110033
Deployed ByteCode Sourcemap
43518:611:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25722:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24695:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43621:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25466:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43915:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27871:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26205:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43096:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2840:103;;;:::i;:::-;;43718:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2192:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26839:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27098:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3098:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42762:326;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25722:317;25853:7;25919:1;25900:21;;:7;:21;;;25878:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;26009:9;:13;26019:2;26009:13;;;;;;;;;;;:22;26023:7;26009:22;;;;;;;;;;;;;;;;26002:29;;25722:317;;;;:::o;24695:360::-;24842:4;24899:26;24884:41;;;:11;:41;;;;:110;;;;24957:37;24942:52;;;:11;:52;;;;24884:110;:163;;;;25011:36;25035:11;25011:23;:36::i;:::-;24884:163;24864:183;;24695:360;;;:::o;43621:89::-;2078:13;:11;:13::i;:::-;43687:15:::1;43695:6;43687:7;:15::i;:::-;43621:89:::0;:::o;25466:105::-;25526:13;25559:4;25552:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25466:105;;;:::o;43915:211::-;2078:13;:11;:13::i;:::-;44084:34:::1;44095:2;44099:3;44104:7;44113:4;44084:10;:34::i;:::-;43915:211:::0;;;;:::o;27871:438::-;28112:12;:10;:12::i;:::-;28104:20;;:4;:20;;;:60;;;;28128:36;28145:4;28151:12;:10;:12::i;:::-;28128:16;:36::i;:::-;28104:60;28082:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;28249:52;28272:4;28278:2;28282:3;28287:7;28296:4;28249:22;:52::i;:::-;27871:438;;;;;:::o;26205:561::-;26361:16;26436:3;:10;26417:8;:15;:29;26395:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;26528:30;26575:8;:15;26561:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26528:63;;26609:9;26604:122;26628:8;:15;26624:1;:19;26604:122;;;26684:30;26694:8;26703:1;26694:11;;;;;;;;:::i;:::-;;;;;;;;26707:3;26711:1;26707:6;;;;;;;;:::i;:::-;;;;;;;;26684:9;:30::i;:::-;26665:13;26679:1;26665:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26645:3;;;;:::i;:::-;;;26604:122;;;;26745:13;26738:20;;;26205:561;;;;:::o;43096:358::-;43272:12;:10;:12::i;:::-;43261:23;;:7;:23;;;:66;;;;43288:39;43305:7;43314:12;:10;:12::i;:::-;43288:16;:39::i;:::-;43261:66;43239:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;43414:32;43425:7;43434:3;43439:6;43414:10;:32::i;:::-;43096:358;;;:::o;2840:103::-;2078:13;:11;:13::i;:::-;2905:30:::1;2932:1;2905:18;:30::i;:::-;2840:103::o:0;43718:189::-;2078:13;:11;:13::i;:::-;43867:32:::1;43873:7;43882:2;43886:6;43894:4;43867:5;:32::i;:::-;43718:189:::0;;;;:::o;2192:87::-;2238:7;2265:6;;;;;;;;;;;2258:13;;2192:87;:::o;26839:187::-;26966:52;26985:12;:10;:12::i;:::-;26999:8;27009;26966:18;:52::i;:::-;26839:187;;:::o;27098:218::-;27242:4;27271:18;:27;27290:7;27271:27;;;;;;;;;;;;;;;:37;27299:8;27271:37;;;;;;;;;;;;;;;;;;;;;;;;;27264:44;;27098:218;;;;:::o;27388:406::-;27604:12;:10;:12::i;:::-;27596:20;;:4;:20;;;:60;;;;27620:36;27637:4;27643:12;:10;:12::i;:::-;27620:16;:36::i;:::-;27596:60;27574:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27741:45;27759:4;27765:2;27769;27773:6;27781:4;27741:17;:45::i;:::-;27388:406;;;;;:::o;3098:238::-;2078:13;:11;:13::i;:::-;3221:1:::1;3201:22;;:8;:22;;::::0;3179:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3300:28;3319:8;3300:18;:28::i;:::-;3098:238:::0;:::o;42762:326::-;42913:12;:10;:12::i;:::-;42902:23;;:7;:23;;;:66;;;;42929:39;42946:7;42955:12;:10;:12::i;:::-;42929:16;:39::i;:::-;42902:66;42880:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;43055:25;43061:7;43070:2;43074:5;43055;:25::i;:::-;42762:326;;;:::o;15788:207::-;15918:4;15962:25;15947:40;;;:11;:40;;;;15940:47;;15788:207;;;:::o;2357:132::-;2432:12;:10;:12::i;:::-;2421:23;;:7;:5;:7::i;:::-;:23;;;2413:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2357:132::o;32307:88::-;32381:6;32374:4;:13;;;;;;:::i;:::-;;32307:88;:::o;34002:939::-;34194:1;34180:16;;:2;:16;;;34172:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34281:7;:14;34267:3;:10;:28;34245:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34376:16;34395:12;:10;:12::i;:::-;34376:31;;34420:66;34441:8;34459:1;34463:2;34467:3;34472:7;34481:4;34420:20;:66::i;:::-;34504:9;34499:103;34523:3;:10;34519:1;:14;34499:103;;;34580:7;34588:1;34580:10;;;;;;;;:::i;:::-;;;;;;;;34555:9;:17;34565:3;34569:1;34565:6;;;;;;;;:::i;:::-;;;;;;;;34555:17;;;;;;;;;;;:21;34573:2;34555:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;34535:3;;;;;:::i;:::-;;;;34499:103;;;;34655:2;34619:53;;34651:1;34619:53;;34633:8;34619:53;;;34659:3;34664:7;34619:53;;;;;;;:::i;:::-;;;;;;;;34685:65;34705:8;34723:1;34727:2;34731:3;34736:7;34745:4;34685:19;:65::i;:::-;34763:170;34813:8;34844:1;34861:2;34878:3;34896:7;34918:4;34763:35;:170::i;:::-;34161:780;34002:939;;;;:::o;716:98::-;769:7;796:10;789:17;;716:98;:::o;30142:1321::-;30383:7;:14;30369:3;:10;:28;30347:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;30498:1;30484:16;;:2;:16;;;30476:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30555:16;30574:12;:10;:12::i;:::-;30555:31;;30599:60;30620:8;30630:4;30636:2;30640:3;30645:7;30654:4;30599:20;:60::i;:::-;30677:9;30672:470;30696:3;:10;30692:1;:14;30672:470;;;30728:10;30741:3;30745:1;30741:6;;;;;;;;:::i;:::-;;;;;;;;30728:19;;30762:14;30779:7;30787:1;30779:10;;;;;;;;:::i;:::-;;;;;;;;30762:27;;30806:19;30828:9;:13;30838:2;30828:13;;;;;;;;;;;:19;30842:4;30828:19;;;;;;;;;;;;;;;;30806:41;;30903:6;30888:11;:21;;30862:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;31067:6;31053:11;:20;31031:9;:13;31041:2;31031:13;;;;;;;;;;;:19;31045:4;31031:19;;;;;;;;;;;;;;;:42;;;;31124:6;31103:9;:13;31113:2;31103:13;;;;;;;;;;;:17;31117:2;31103:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30713:429;;;30708:3;;;;:::i;:::-;;;30672:470;;;;31189:2;31159:47;;31183:4;31159:47;;31173:8;31159:47;;;31193:3;31198:7;31159:47;;;;;;;:::i;:::-;;;;;;;;31219:59;31239:8;31249:4;31255:2;31259:3;31264:7;31273:4;31219:19;:59::i;:::-;31291:164;31341:8;31364:4;31383:2;31400:3;31418:7;31440:4;31291:35;:164::i;:::-;30336:1127;30142:1321;;;;;:::o;36297:1055::-;36465:1;36449:18;;:4;:18;;;36441:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36554:7;:14;36540:3;:10;:28;36518:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36649:16;36668:12;:10;:12::i;:::-;36649:31;;36693:66;36714:8;36724:4;36738:1;36742:3;36747:7;36693:66;;;;;;;;;;;;:20;:66::i;:::-;36777:9;36772:422;36796:3;:10;36792:1;:14;36772:422;;;36828:10;36841:3;36845:1;36841:6;;;;;;;;:::i;:::-;;;;;;;;36828:19;;36862:14;36879:7;36887:1;36879:10;;;;;;;;:::i;:::-;;;;;;;;36862:27;;36906:19;36928:9;:13;36938:2;36928:13;;;;;;;;;;;:19;36942:4;36928:19;;;;;;;;;;;;;;;;36906:41;;37003:6;36988:11;:21;;36962:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;37161:6;37147:11;:20;37125:9;:13;37135:2;37125:13;;;;;;;;;;;:19;37139:4;37125:19;;;;;;;;;;;;;;;:42;;;;36813:381;;;36808:3;;;;;:::i;:::-;;;;36772:422;;;;37249:1;37211:55;;37235:4;37211:55;;37225:8;37211:55;;;37253:3;37258:7;37211:55;;;;;;;:::i;:::-;;;;;;;;37279:65;37299:8;37309:4;37323:1;37327:3;37332:7;37279:65;;;;;;;;;;;;:19;:65::i;:::-;36430:922;36297:1055;;;:::o;3496:191::-;3570:16;3589:6;;;;;;;;;;;3570:25;;3615:8;3606:6;;:17;;;;;;;;;;;;;;;;;;3670:8;3639:40;;3660:8;3639:40;;;;;;;;;;;;3559:128;3496:191;:::o;32781:818::-;32948:1;32934:16;;:2;:16;;;32926:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33001:16;33020:12;:10;:12::i;:::-;33001:31;;33043:20;33066:21;33084:2;33066:17;:21::i;:::-;33043:44;;33098:24;33125:25;33143:6;33125:17;:25::i;:::-;33098:52;;33163:66;33184:8;33202:1;33206:2;33210:3;33215:7;33224:4;33163:20;:66::i;:::-;33263:6;33242:9;:13;33252:2;33242:13;;;;;;;;;;;:17;33256:2;33242:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33322:2;33285:52;;33318:1;33285:52;;33300:8;33285:52;;;33326:2;33330:6;33285:52;;;;;;;:::i;:::-;;;;;;;;33350:65;33370:8;33388:1;33392:2;33396:3;33401:7;33410:4;33350:19;:65::i;:::-;33428:163;33473:8;33504:1;33521:2;33538;33555:6;33576:4;33428:30;:163::i;:::-;32915:684;;;32781:818;;;;:::o;37495:331::-;37650:8;37641:17;;:5;:17;;;37633:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37753:8;37715:18;:25;37734:5;37715:25;;;;;;;;;;;;;;;:35;37741:8;37715:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37799:8;37777:41;;37792:5;37777:41;;;37809:8;37777:41;;;;;;:::i;:::-;;;;;;;;37495:331;;;:::o;28773:1011::-;28975:1;28961:16;;:2;:16;;;28953:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29032:16;29051:12;:10;:12::i;:::-;29032:31;;29074:20;29097:21;29115:2;29097:17;:21::i;:::-;29074:44;;29129:24;29156:25;29174:6;29156:17;:25::i;:::-;29129:52;;29194:60;29215:8;29225:4;29231:2;29235:3;29240:7;29249:4;29194:20;:60::i;:::-;29267:19;29289:9;:13;29299:2;29289:13;;;;;;;;;;;:19;29303:4;29289:19;;;;;;;;;;;;;;;;29267:41;;29356:6;29341:11;:21;;29319:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29504:6;29490:11;:20;29468:9;:13;29478:2;29468:13;;;;;;;;;;;:19;29482:4;29468:19;;;;;;;;;;;;;;;:42;;;;29553:6;29532:9;:13;29542:2;29532:13;;;;;;;;;;;:17;29546:2;29532:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29608:2;29577:46;;29602:4;29577:46;;29592:8;29577:46;;;29612:2;29616:6;29577:46;;;;;;;:::i;:::-;;;;;;;;29636:59;29656:8;29666:4;29672:2;29676:3;29681:7;29690:4;29636:19;:59::i;:::-;29708:68;29739:8;29749:4;29755:2;29759;29763:6;29771:4;29708:30;:68::i;:::-;28942:842;;;;28773:1011;;;;;:::o;35239:808::-;35382:1;35366:18;;:4;:18;;;35358:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35437:16;35456:12;:10;:12::i;:::-;35437:31;;35479:20;35502:21;35520:2;35502:17;:21::i;:::-;35479:44;;35534:24;35561:25;35579:6;35561:17;:25::i;:::-;35534:52;;35599:66;35620:8;35630:4;35644:1;35648:3;35653:7;35599:66;;;;;;;;;;;;:20;:66::i;:::-;35678:19;35700:9;:13;35710:2;35700:13;;;;;;;;;;;:19;35714:4;35700:19;;;;;;;;;;;;;;;;35678:41;;35753:6;35738:11;:21;;35730:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35872:6;35858:11;:20;35836:9;:13;35846:2;35836:13;;;;;;;;;;;:19;35850:4;35836:19;;;;;;;;;;;;;;;:42;;;;35946:1;35907:54;;35932:4;35907:54;;35922:8;35907:54;;;35950:2;35954:6;35907:54;;;;;;;:::i;:::-;;;;;;;;35974:65;35994:8;36004:4;36018:1;36022:3;36027:7;35974:65;;;;;;;;;;;;:19;:65::i;:::-;35347:700;;;;35239:808;;;:::o;38784:221::-;;;;;;;:::o;39960:220::-;;;;;;;:::o;41094:975::-;41334:15;:2;:13;;;:15::i;:::-;41330:732;;;41404:2;41387:43;;;41453:8;41484:4;41511:3;41537:7;41567:4;41387:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41366:685;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41924:6;41917:14;;;;;;;;;;;:::i;:::-;;;;;;;;41366:685;;;41973:62;;;;;;;;;;:::i;:::-;;;;;;;;41366:685;41687:48;;;41675:60;;;:8;:60;;;;41649:199;;41778:50;;;;;;;;;;:::i;:::-;;;;;;;;41649:199;41604:259;41330:732;41094:975;;;;;;:::o;42077:230::-;42170:16;42204:22;42243:1;42229:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42204:41;;42267:7;42256:5;42262:1;42256:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42294:5;42287:12;;;42077:230;;;:::o;40188:898::-;40403:15;:2;:13;;;:15::i;:::-;40399:680;;;40473:2;40456:38;;;40517:8;40548:4;40575:2;40600:6;40629:4;40456:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40435:633;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40941:6;40934:14;;;;;;;;;;;:::i;:::-;;;;;;;;40435:633;;;40990:62;;;;;;;;;;:::i;:::-;;;;;;;;40435:633;40727:43;;;40715:55;;;:8;:55;;;;40711:154;;40795:50;;;;;;;;;;:::i;:::-;;;;;;;;40711:154;40666:214;40399:680;40188:898;;;;;;:::o;4931:326::-;4991:4;5248:1;5226:7;:19;;;:23;5219:30;;4931:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:329::-;6006:6;6055:2;6043:9;6034:7;6030:23;6026:32;6023:119;;;6061:79;;:::i;:::-;6023:119;6181:1;6206:53;6251:7;6242:6;6231:9;6227:22;6206:53;:::i;:::-;6196:63;;6152:117;5947:329;;;;:::o;6282:99::-;6334:6;6368:5;6362:12;6352:22;;6282:99;;;:::o;6387:169::-;6471:11;6505:6;6500:3;6493:19;6545:4;6540:3;6536:14;6521:29;;6387:169;;;;:::o;6562:246::-;6643:1;6653:113;6667:6;6664:1;6661:13;6653:113;;;6752:1;6747:3;6743:11;6737:18;6733:1;6728:3;6724:11;6717:39;6689:2;6686:1;6682:10;6677:15;;6653:113;;;6800:1;6791:6;6786:3;6782:16;6775:27;6624:184;6562:246;;;:::o;6814:377::-;6902:3;6930:39;6963:5;6930:39;:::i;:::-;6985:71;7049:6;7044:3;6985:71;:::i;:::-;6978:78;;7065:65;7123:6;7118:3;7111:4;7104:5;7100:16;7065:65;:::i;:::-;7155:29;7177:6;7155:29;:::i;:::-;7150:3;7146:39;7139:46;;6906:285;6814:377;;;;:::o;7197:313::-;7310:4;7348:2;7337:9;7333:18;7325:26;;7397:9;7391:4;7387:20;7383:1;7372:9;7368:17;7361:47;7425:78;7498:4;7489:6;7425:78;:::i;:::-;7417:86;;7197:313;;;;:::o;7516:311::-;7593:4;7683:18;7675:6;7672:30;7669:56;;;7705:18;;:::i;:::-;7669:56;7755:4;7747:6;7743:17;7735:25;;7815:4;7809;7805:15;7797:23;;7516:311;;;:::o;7833:117::-;7942:1;7939;7932:12;7973:710;8069:5;8094:81;8110:64;8167:6;8110:64;:::i;:::-;8094:81;:::i;:::-;8085:90;;8195:5;8224:6;8217:5;8210:21;8258:4;8251:5;8247:16;8240:23;;8311:4;8303:6;8299:17;8291:6;8287:30;8340:3;8332:6;8329:15;8326:122;;;8359:79;;:::i;:::-;8326:122;8474:6;8457:220;8491:6;8486:3;8483:15;8457:220;;;8566:3;8595:37;8628:3;8616:10;8595:37;:::i;:::-;8590:3;8583:50;8662:4;8657:3;8653:14;8646:21;;8533:144;8517:4;8512:3;8508:14;8501:21;;8457:220;;;8461:21;8075:608;;7973:710;;;;;:::o;8706:370::-;8777:5;8826:3;8819:4;8811:6;8807:17;8803:27;8793:122;;8834:79;;:::i;:::-;8793:122;8951:6;8938:20;8976:94;9066:3;9058:6;9051:4;9043:6;9039:17;8976:94;:::i;:::-;8967:103;;8783:293;8706:370;;;;:::o;9082:307::-;9143:4;9233:18;9225:6;9222:30;9219:56;;;9255:18;;:::i;:::-;9219:56;9293:29;9315:6;9293:29;:::i;:::-;9285:37;;9377:4;9371;9367:15;9359:23;;9082:307;;;:::o;9395:423::-;9472:5;9497:65;9513:48;9554:6;9513:48;:::i;:::-;9497:65;:::i;:::-;9488:74;;9585:6;9578:5;9571:21;9623:4;9616:5;9612:16;9661:3;9652:6;9647:3;9643:16;9640:25;9637:112;;;9668:79;;:::i;:::-;9637:112;9758:54;9805:6;9800:3;9795;9758:54;:::i;:::-;9478:340;9395:423;;;;;:::o;9837:338::-;9892:5;9941:3;9934:4;9926:6;9922:17;9918:27;9908:122;;9949:79;;:::i;:::-;9908:122;10066:6;10053:20;10091:78;10165:3;10157:6;10150:4;10142:6;10138:17;10091:78;:::i;:::-;10082:87;;9898:277;9837:338;;;;:::o;10181:1363::-;10326:6;10334;10342;10350;10399:3;10387:9;10378:7;10374:23;10370:33;10367:120;;;10406:79;;:::i;:::-;10367:120;10526:1;10551:53;10596:7;10587:6;10576:9;10572:22;10551:53;:::i;:::-;10541:63;;10497:117;10681:2;10670:9;10666:18;10653:32;10712:18;10704:6;10701:30;10698:117;;;10734:79;;:::i;:::-;10698:117;10839:78;10909:7;10900:6;10889:9;10885:22;10839:78;:::i;:::-;10829:88;;10624:303;10994:2;10983:9;10979:18;10966:32;11025:18;11017:6;11014:30;11011:117;;;11047:79;;:::i;:::-;11011:117;11152:78;11222:7;11213:6;11202:9;11198:22;11152:78;:::i;:::-;11142:88;;10937:303;11307:2;11296:9;11292:18;11279:32;11338:18;11330:6;11327:30;11324:117;;;11360:79;;:::i;:::-;11324:117;11465:62;11519:7;11510:6;11499:9;11495:22;11465:62;:::i;:::-;11455:72;;11250:287;10181:1363;;;;;;;:::o;11550:1509::-;11704:6;11712;11720;11728;11736;11785:3;11773:9;11764:7;11760:23;11756:33;11753:120;;;11792:79;;:::i;:::-;11753:120;11912:1;11937:53;11982:7;11973:6;11962:9;11958:22;11937:53;:::i;:::-;11927:63;;11883:117;12039:2;12065:53;12110:7;12101:6;12090:9;12086:22;12065:53;:::i;:::-;12055:63;;12010:118;12195:2;12184:9;12180:18;12167:32;12226:18;12218:6;12215:30;12212:117;;;12248:79;;:::i;:::-;12212:117;12353:78;12423:7;12414:6;12403:9;12399:22;12353:78;:::i;:::-;12343:88;;12138:303;12508:2;12497:9;12493:18;12480:32;12539:18;12531:6;12528:30;12525:117;;;12561:79;;:::i;:::-;12525:117;12666:78;12736:7;12727:6;12716:9;12712:22;12666:78;:::i;:::-;12656:88;;12451:303;12821:3;12810:9;12806:19;12793:33;12853:18;12845:6;12842:30;12839:117;;;12875:79;;:::i;:::-;12839:117;12980:62;13034:7;13025:6;13014:9;13010:22;12980:62;:::i;:::-;12970:72;;12764:288;11550:1509;;;;;;;;:::o;13065:311::-;13142:4;13232:18;13224:6;13221:30;13218:56;;;13254:18;;:::i;:::-;13218:56;13304:4;13296:6;13292:17;13284:25;;13364:4;13358;13354:15;13346:23;;13065:311;;;:::o;13399:710::-;13495:5;13520:81;13536:64;13593:6;13536:64;:::i;:::-;13520:81;:::i;:::-;13511:90;;13621:5;13650:6;13643:5;13636:21;13684:4;13677:5;13673:16;13666:23;;13737:4;13729:6;13725:17;13717:6;13713:30;13766:3;13758:6;13755:15;13752:122;;;13785:79;;:::i;:::-;13752:122;13900:6;13883:220;13917:6;13912:3;13909:15;13883:220;;;13992:3;14021:37;14054:3;14042:10;14021:37;:::i;:::-;14016:3;14009:50;14088:4;14083:3;14079:14;14072:21;;13959:144;13943:4;13938:3;13934:14;13927:21;;13883:220;;;13887:21;13501:608;;13399:710;;;;;:::o;14132:370::-;14203:5;14252:3;14245:4;14237:6;14233:17;14229:27;14219:122;;14260:79;;:::i;:::-;14219:122;14377:6;14364:20;14402:94;14492:3;14484:6;14477:4;14469:6;14465:17;14402:94;:::i;:::-;14393:103;;14209:293;14132:370;;;;:::o;14508:894::-;14626:6;14634;14683:2;14671:9;14662:7;14658:23;14654:32;14651:119;;;14689:79;;:::i;:::-;14651:119;14837:1;14826:9;14822:17;14809:31;14867:18;14859:6;14856:30;14853:117;;;14889:79;;:::i;:::-;14853:117;14994:78;15064:7;15055:6;15044:9;15040:22;14994:78;:::i;:::-;14984:88;;14780:302;15149:2;15138:9;15134:18;15121:32;15180:18;15172:6;15169:30;15166:117;;;15202:79;;:::i;:::-;15166:117;15307:78;15377:7;15368:6;15357:9;15353:22;15307:78;:::i;:::-;15297:88;;15092:303;14508:894;;;;;:::o;15408:114::-;15475:6;15509:5;15503:12;15493:22;;15408:114;;;:::o;15528:184::-;15627:11;15661:6;15656:3;15649:19;15701:4;15696:3;15692:14;15677:29;;15528:184;;;;:::o;15718:132::-;15785:4;15808:3;15800:11;;15838:4;15833:3;15829:14;15821:22;;15718:132;;;:::o;15856:108::-;15933:24;15951:5;15933:24;:::i;:::-;15928:3;15921:37;15856:108;;:::o;15970:179::-;16039:10;16060:46;16102:3;16094:6;16060:46;:::i;:::-;16138:4;16133:3;16129:14;16115:28;;15970:179;;;;:::o;16155:113::-;16225:4;16257;16252:3;16248:14;16240:22;;16155:113;;;:::o;16304:732::-;16423:3;16452:54;16500:5;16452:54;:::i;:::-;16522:86;16601:6;16596:3;16522:86;:::i;:::-;16515:93;;16632:56;16682:5;16632:56;:::i;:::-;16711:7;16742:1;16727:284;16752:6;16749:1;16746:13;16727:284;;;16828:6;16822:13;16855:63;16914:3;16899:13;16855:63;:::i;:::-;16848:70;;16941:60;16994:6;16941:60;:::i;:::-;16931:70;;16787:224;16774:1;16771;16767:9;16762:14;;16727:284;;;16731:14;17027:3;17020:10;;16428:608;;;16304:732;;;;:::o;17042:373::-;17185:4;17223:2;17212:9;17208:18;17200:26;;17272:9;17266:4;17262:20;17258:1;17247:9;17243:17;17236:47;17300:108;17403:4;17394:6;17300:108;:::i;:::-;17292:116;;17042:373;;;;:::o;17421:1039::-;17548:6;17556;17564;17613:2;17601:9;17592:7;17588:23;17584:32;17581:119;;;17619:79;;:::i;:::-;17581:119;17739:1;17764:53;17809:7;17800:6;17789:9;17785:22;17764:53;:::i;:::-;17754:63;;17710:117;17894:2;17883:9;17879:18;17866:32;17925:18;17917:6;17914:30;17911:117;;;17947:79;;:::i;:::-;17911:117;18052:78;18122:7;18113:6;18102:9;18098:22;18052:78;:::i;:::-;18042:88;;17837:303;18207:2;18196:9;18192:18;18179:32;18238:18;18230:6;18227:30;18224:117;;;18260:79;;:::i;:::-;18224:117;18365:78;18435:7;18426:6;18415:9;18411:22;18365:78;:::i;:::-;18355:88;;18150:303;17421:1039;;;;;:::o;18466:943::-;18561:6;18569;18577;18585;18634:3;18622:9;18613:7;18609:23;18605:33;18602:120;;;18641:79;;:::i;:::-;18602:120;18761:1;18786:53;18831:7;18822:6;18811:9;18807:22;18786:53;:::i;:::-;18776:63;;18732:117;18888:2;18914:53;18959:7;18950:6;18939:9;18935:22;18914:53;:::i;:::-;18904:63;;18859:118;19016:2;19042:53;19087:7;19078:6;19067:9;19063:22;19042:53;:::i;:::-;19032:63;;18987:118;19172:2;19161:9;19157:18;19144:32;19203:18;19195:6;19192:30;19189:117;;;19225:79;;:::i;:::-;19189:117;19330:62;19384:7;19375:6;19364:9;19360:22;19330:62;:::i;:::-;19320:72;;19115:287;18466:943;;;;;;;:::o;19415:118::-;19502:24;19520:5;19502:24;:::i;:::-;19497:3;19490:37;19415:118;;:::o;19539:222::-;19632:4;19670:2;19659:9;19655:18;19647:26;;19683:71;19751:1;19740:9;19736:17;19727:6;19683:71;:::i;:::-;19539:222;;;;:::o;19767:116::-;19837:21;19852:5;19837:21;:::i;:::-;19830:5;19827:32;19817:60;;19873:1;19870;19863:12;19817:60;19767:116;:::o;19889:133::-;19932:5;19970:6;19957:20;19948:29;;19986:30;20010:5;19986:30;:::i;:::-;19889:133;;;;:::o;20028:468::-;20093:6;20101;20150:2;20138:9;20129:7;20125:23;20121:32;20118:119;;;20156:79;;:::i;:::-;20118:119;20276:1;20301:53;20346:7;20337:6;20326:9;20322:22;20301:53;:::i;:::-;20291:63;;20247:117;20403:2;20429:50;20471:7;20462:6;20451:9;20447:22;20429:50;:::i;:::-;20419:60;;20374:115;20028:468;;;;;:::o;20502:474::-;20570:6;20578;20627:2;20615:9;20606:7;20602:23;20598:32;20595:119;;;20633:79;;:::i;:::-;20595:119;20753:1;20778:53;20823:7;20814:6;20803:9;20799:22;20778:53;:::i;:::-;20768:63;;20724:117;20880:2;20906:53;20951:7;20942:6;20931:9;20927:22;20906:53;:::i;:::-;20896:63;;20851:118;20502:474;;;;;:::o;20982:1089::-;21086:6;21094;21102;21110;21118;21167:3;21155:9;21146:7;21142:23;21138:33;21135:120;;;21174:79;;:::i;:::-;21135:120;21294:1;21319:53;21364:7;21355:6;21344:9;21340:22;21319:53;:::i;:::-;21309:63;;21265:117;21421:2;21447:53;21492:7;21483:6;21472:9;21468:22;21447:53;:::i;:::-;21437:63;;21392:118;21549:2;21575:53;21620:7;21611:6;21600:9;21596:22;21575:53;:::i;:::-;21565:63;;21520:118;21677:2;21703:53;21748:7;21739:6;21728:9;21724:22;21703:53;:::i;:::-;21693:63;;21648:118;21833:3;21822:9;21818:19;21805:33;21865:18;21857:6;21854:30;21851:117;;;21887:79;;:::i;:::-;21851:117;21992:62;22046:7;22037:6;22026:9;22022:22;21992:62;:::i;:::-;21982:72;;21776:288;20982:1089;;;;;;;;:::o;22077:329::-;22136:6;22185:2;22173:9;22164:7;22160:23;22156:32;22153:119;;;22191:79;;:::i;:::-;22153:119;22311:1;22336:53;22381:7;22372:6;22361:9;22357:22;22336:53;:::i;:::-;22326:63;;22282:117;22077:329;;;;:::o;22412:619::-;22489:6;22497;22505;22554:2;22542:9;22533:7;22529:23;22525:32;22522:119;;;22560:79;;:::i;:::-;22522:119;22680:1;22705:53;22750:7;22741:6;22730:9;22726:22;22705:53;:::i;:::-;22695:63;;22651:117;22807:2;22833:53;22878:7;22869:6;22858:9;22854:22;22833:53;:::i;:::-;22823:63;;22778:118;22935:2;22961:53;23006:7;22997:6;22986:9;22982:22;22961:53;:::i;:::-;22951:63;;22906:118;22412:619;;;;;:::o;23037:229::-;23177:34;23173:1;23165:6;23161:14;23154:58;23246:12;23241:2;23233:6;23229:15;23222:37;23037:229;:::o;23272:366::-;23414:3;23435:67;23499:2;23494:3;23435:67;:::i;:::-;23428:74;;23511:93;23600:3;23511:93;:::i;:::-;23629:2;23624:3;23620:12;23613:19;;23272:366;;;:::o;23644:419::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23897:9;23891:4;23887:20;23883:1;23872:9;23868:17;23861:47;23925:131;24051:4;23925:131;:::i;:::-;23917:139;;23644:419;;;:::o;24069:180::-;24117:77;24114:1;24107:88;24214:4;24211:1;24204:15;24238:4;24235:1;24228:15;24255:320;24299:6;24336:1;24330:4;24326:12;24316:22;;24383:1;24377:4;24373:12;24404:18;24394:81;;24460:4;24452:6;24448:17;24438:27;;24394:81;24522:2;24514:6;24511:14;24491:18;24488:38;24485:84;;24541:18;;:::i;:::-;24485:84;24306:269;24255:320;;;:::o;24581:233::-;24721:34;24717:1;24709:6;24705:14;24698:58;24790:16;24785:2;24777:6;24773:15;24766:41;24581:233;:::o;24820:366::-;24962:3;24983:67;25047:2;25042:3;24983:67;:::i;:::-;24976:74;;25059:93;25148:3;25059:93;:::i;:::-;25177:2;25172:3;25168:12;25161:19;;24820:366;;;:::o;25192:419::-;25358:4;25396:2;25385:9;25381:18;25373:26;;25445:9;25439:4;25435:20;25431:1;25420:9;25416:17;25409:47;25473:131;25599:4;25473:131;:::i;:::-;25465:139;;25192:419;;;:::o;25617:228::-;25757:34;25753:1;25745:6;25741:14;25734:58;25826:11;25821:2;25813:6;25809:15;25802:36;25617:228;:::o;25851:366::-;25993:3;26014:67;26078:2;26073:3;26014:67;:::i;:::-;26007:74;;26090:93;26179:3;26090:93;:::i;:::-;26208:2;26203:3;26199:12;26192:19;;25851:366;;;:::o;26223:419::-;26389:4;26427:2;26416:9;26412:18;26404:26;;26476:9;26470:4;26466:20;26462:1;26451:9;26447:17;26440:47;26504:131;26630:4;26504:131;:::i;:::-;26496:139;;26223:419;;;:::o;26648:180::-;26696:77;26693:1;26686:88;26793:4;26790:1;26783:15;26817:4;26814:1;26807:15;26834:180;26882:77;26879:1;26872:88;26979:4;26976:1;26969:15;27003:4;27000:1;26993:15;27020:233;27059:3;27082:24;27100:5;27082:24;:::i;:::-;27073:33;;27128:66;27121:5;27118:77;27115:103;;27198:18;;:::i;:::-;27115:103;27245:1;27238:5;27234:13;27227:20;;27020:233;;;:::o;27259:225::-;27399:34;27395:1;27387:6;27383:14;27376:58;27468:8;27463:2;27455:6;27451:15;27444:33;27259:225;:::o;27490:366::-;27632:3;27653:67;27717:2;27712:3;27653:67;:::i;:::-;27646:74;;27729:93;27818:3;27729:93;:::i;:::-;27847:2;27842:3;27838:12;27831:19;;27490:366;;;:::o;27862:419::-;28028:4;28066:2;28055:9;28051:18;28043:26;;28115:9;28109:4;28105:20;28101:1;28090:9;28086:17;28079:47;28143:131;28269:4;28143:131;:::i;:::-;28135:139;;27862:419;;;:::o;28287:182::-;28427:34;28423:1;28415:6;28411:14;28404:58;28287:182;:::o;28475:366::-;28617:3;28638:67;28702:2;28697:3;28638:67;:::i;:::-;28631:74;;28714:93;28803:3;28714:93;:::i;:::-;28832:2;28827:3;28823:12;28816:19;;28475:366;;;:::o;28847:419::-;29013:4;29051:2;29040:9;29036:18;29028:26;;29100:9;29094:4;29090:20;29086:1;29075:9;29071:17;29064:47;29128:131;29254:4;29128:131;:::i;:::-;29120:139;;28847:419;;;:::o;29272:141::-;29321:4;29344:3;29336:11;;29367:3;29364:1;29357:14;29401:4;29398:1;29388:18;29380:26;;29272:141;;;:::o;29419:93::-;29456:6;29503:2;29498;29491:5;29487:14;29483:23;29473:33;;29419:93;;;:::o;29518:107::-;29562:8;29612:5;29606:4;29602:16;29581:37;;29518:107;;;;:::o;29631:393::-;29700:6;29750:1;29738:10;29734:18;29773:97;29803:66;29792:9;29773:97;:::i;:::-;29891:39;29921:8;29910:9;29891:39;:::i;:::-;29879:51;;29963:4;29959:9;29952:5;29948:21;29939:30;;30012:4;30002:8;29998:19;29991:5;29988:30;29978:40;;29707:317;;29631:393;;;;;:::o;30030:60::-;30058:3;30079:5;30072:12;;30030:60;;;:::o;30096:142::-;30146:9;30179:53;30197:34;30206:24;30224:5;30206:24;:::i;:::-;30197:34;:::i;:::-;30179:53;:::i;:::-;30166:66;;30096:142;;;:::o;30244:75::-;30287:3;30308:5;30301:12;;30244:75;;;:::o;30325:269::-;30435:39;30466:7;30435:39;:::i;:::-;30496:91;30545:41;30569:16;30545:41;:::i;:::-;30537:6;30530:4;30524:11;30496:91;:::i;:::-;30490:4;30483:105;30401:193;30325:269;;;:::o;30600:73::-;30645:3;30600:73;:::o;30679:189::-;30756:32;;:::i;:::-;30797:65;30855:6;30847;30841:4;30797:65;:::i;:::-;30732:136;30679:189;;:::o;30874:186::-;30934:120;30951:3;30944:5;30941:14;30934:120;;;31005:39;31042:1;31035:5;31005:39;:::i;:::-;30978:1;30971:5;30967:13;30958:22;;30934:120;;;30874:186;;:::o;31066:543::-;31167:2;31162:3;31159:11;31156:446;;;31201:38;31233:5;31201:38;:::i;:::-;31285:29;31303:10;31285:29;:::i;:::-;31275:8;31271:44;31468:2;31456:10;31453:18;31450:49;;;31489:8;31474:23;;31450:49;31512:80;31568:22;31586:3;31568:22;:::i;:::-;31558:8;31554:37;31541:11;31512:80;:::i;:::-;31171:431;;31156:446;31066:543;;;:::o;31615:117::-;31669:8;31719:5;31713:4;31709:16;31688:37;;31615:117;;;;:::o;31738:169::-;31782:6;31815:51;31863:1;31859:6;31851:5;31848:1;31844:13;31815:51;:::i;:::-;31811:56;31896:4;31890;31886:15;31876:25;;31789:118;31738:169;;;;:::o;31912:295::-;31988:4;32134:29;32159:3;32153:4;32134:29;:::i;:::-;32126:37;;32196:3;32193:1;32189:11;32183:4;32180:21;32172:29;;31912:295;;;;:::o;32212:1395::-;32329:37;32362:3;32329:37;:::i;:::-;32431:18;32423:6;32420:30;32417:56;;;32453:18;;:::i;:::-;32417:56;32497:38;32529:4;32523:11;32497:38;:::i;:::-;32582:67;32642:6;32634;32628:4;32582:67;:::i;:::-;32676:1;32700:4;32687:17;;32732:2;32724:6;32721:14;32749:1;32744:618;;;;33406:1;33423:6;33420:77;;;33472:9;33467:3;33463:19;33457:26;33448:35;;33420:77;33523:67;33583:6;33576:5;33523:67;:::i;:::-;33517:4;33510:81;33379:222;32714:887;;32744:618;32796:4;32792:9;32784:6;32780:22;32830:37;32862:4;32830:37;:::i;:::-;32889:1;32903:208;32917:7;32914:1;32911:14;32903:208;;;32996:9;32991:3;32987:19;32981:26;32973:6;32966:42;33047:1;33039:6;33035:14;33025:24;;33094:2;33083:9;33079:18;33066:31;;32940:4;32937:1;32933:12;32928:17;;32903:208;;;33139:6;33130:7;33127:19;33124:179;;;33197:9;33192:3;33188:19;33182:26;33240:48;33282:4;33274:6;33270:17;33259:9;33240:48;:::i;:::-;33232:6;33225:64;33147:156;33124:179;33349:1;33345;33337:6;33333:14;33329:22;33323:4;33316:36;32751:611;;;32714:887;;32304:1303;;;32212:1395;;:::o;33613:220::-;33753:34;33749:1;33741:6;33737:14;33730:58;33822:3;33817:2;33809:6;33805:15;33798:28;33613:220;:::o;33839:366::-;33981:3;34002:67;34066:2;34061:3;34002:67;:::i;:::-;33995:74;;34078:93;34167:3;34078:93;:::i;:::-;34196:2;34191:3;34187:12;34180:19;;33839:366;;;:::o;34211:419::-;34377:4;34415:2;34404:9;34400:18;34392:26;;34464:9;34458:4;34454:20;34450:1;34439:9;34435:17;34428:47;34492:131;34618:4;34492:131;:::i;:::-;34484:139;;34211:419;;;:::o;34636:227::-;34776:34;34772:1;34764:6;34760:14;34753:58;34845:10;34840:2;34832:6;34828:15;34821:35;34636:227;:::o;34869:366::-;35011:3;35032:67;35096:2;35091:3;35032:67;:::i;:::-;35025:74;;35108:93;35197:3;35108:93;:::i;:::-;35226:2;35221:3;35217:12;35210:19;;34869:366;;;:::o;35241:419::-;35407:4;35445:2;35434:9;35430:18;35422:26;;35494:9;35488:4;35484:20;35480:1;35469:9;35465:17;35458:47;35522:131;35648:4;35522:131;:::i;:::-;35514:139;;35241:419;;;:::o;35666:191::-;35706:3;35725:20;35743:1;35725:20;:::i;:::-;35720:25;;35759:20;35777:1;35759:20;:::i;:::-;35754:25;;35802:1;35799;35795:9;35788:16;;35823:3;35820:1;35817:10;35814:36;;;35830:18;;:::i;:::-;35814:36;35666:191;;;;:::o;35863:634::-;36084:4;36122:2;36111:9;36107:18;36099:26;;36171:9;36165:4;36161:20;36157:1;36146:9;36142:17;36135:47;36199:108;36302:4;36293:6;36199:108;:::i;:::-;36191:116;;36354:9;36348:4;36344:20;36339:2;36328:9;36324:18;36317:48;36382:108;36485:4;36476:6;36382:108;:::i;:::-;36374:116;;35863:634;;;;;:::o;36503:224::-;36643:34;36639:1;36631:6;36627:14;36620:58;36712:7;36707:2;36699:6;36695:15;36688:32;36503:224;:::o;36733:366::-;36875:3;36896:67;36960:2;36955:3;36896:67;:::i;:::-;36889:74;;36972:93;37061:3;36972:93;:::i;:::-;37090:2;37085:3;37081:12;37074:19;;36733:366;;;:::o;37105:419::-;37271:4;37309:2;37298:9;37294:18;37286:26;;37358:9;37352:4;37348:20;37344:1;37333:9;37329:17;37322:47;37386:131;37512:4;37386:131;:::i;:::-;37378:139;;37105:419;;;:::o;37530:229::-;37670:34;37666:1;37658:6;37654:14;37647:58;37739:12;37734:2;37726:6;37722:15;37715:37;37530:229;:::o;37765:366::-;37907:3;37928:67;37992:2;37987:3;37928:67;:::i;:::-;37921:74;;38004:93;38093:3;38004:93;:::i;:::-;38122:2;38117:3;38113:12;38106:19;;37765:366;;;:::o;38137:419::-;38303:4;38341:2;38330:9;38326:18;38318:26;;38390:9;38384:4;38380:20;38376:1;38365:9;38361:17;38354:47;38418:131;38544:4;38418:131;:::i;:::-;38410:139;;38137:419;;;:::o;38562:222::-;38702:34;38698:1;38690:6;38686:14;38679:58;38771:5;38766:2;38758:6;38754:15;38747:30;38562:222;:::o;38790:366::-;38932:3;38953:67;39017:2;39012:3;38953:67;:::i;:::-;38946:74;;39029:93;39118:3;39029:93;:::i;:::-;39147:2;39142:3;39138:12;39131:19;;38790:366;;;:::o;39162:419::-;39328:4;39366:2;39355:9;39351:18;39343:26;;39415:9;39409:4;39405:20;39401:1;39390:9;39386:17;39379:47;39443:131;39569:4;39443:131;:::i;:::-;39435:139;;39162:419;;;:::o;39587:223::-;39727:34;39723:1;39715:6;39711:14;39704:58;39796:6;39791:2;39783:6;39779:15;39772:31;39587:223;:::o;39816:366::-;39958:3;39979:67;40043:2;40038:3;39979:67;:::i;:::-;39972:74;;40055:93;40144:3;40055:93;:::i;:::-;40173:2;40168:3;40164:12;40157:19;;39816:366;;;:::o;40188:419::-;40354:4;40392:2;40381:9;40377:18;40369:26;;40441:9;40435:4;40431:20;40427:1;40416:9;40412:17;40405:47;40469:131;40595:4;40469:131;:::i;:::-;40461:139;;40188:419;;;:::o;40613:332::-;40734:4;40772:2;40761:9;40757:18;40749:26;;40785:71;40853:1;40842:9;40838:17;40829:6;40785:71;:::i;:::-;40866:72;40934:2;40923:9;40919:18;40910:6;40866:72;:::i;:::-;40613:332;;;;;:::o;40951:228::-;41091:34;41087:1;41079:6;41075:14;41068:58;41160:11;41155:2;41147:6;41143:15;41136:36;40951:228;:::o;41185:366::-;41327:3;41348:67;41412:2;41407:3;41348:67;:::i;:::-;41341:74;;41424:93;41513:3;41424:93;:::i;:::-;41542:2;41537:3;41533:12;41526:19;;41185:366;;;:::o;41557:419::-;41723:4;41761:2;41750:9;41746:18;41738:26;;41810:9;41804:4;41800:20;41796:1;41785:9;41781:17;41774:47;41838:131;41964:4;41838:131;:::i;:::-;41830:139;;41557:419;;;:::o;41982:98::-;42033:6;42067:5;42061:12;42051:22;;41982:98;;;:::o;42086:168::-;42169:11;42203:6;42198:3;42191:19;42243:4;42238:3;42234:14;42219:29;;42086:168;;;;:::o;42260:373::-;42346:3;42374:38;42406:5;42374:38;:::i;:::-;42428:70;42491:6;42486:3;42428:70;:::i;:::-;42421:77;;42507:65;42565:6;42560:3;42553:4;42546:5;42542:16;42507:65;:::i;:::-;42597:29;42619:6;42597:29;:::i;:::-;42592:3;42588:39;42581:46;;42350:283;42260:373;;;;:::o;42639:1053::-;42962:4;43000:3;42989:9;42985:19;42977:27;;43014:71;43082:1;43071:9;43067:17;43058:6;43014:71;:::i;:::-;43095:72;43163:2;43152:9;43148:18;43139:6;43095:72;:::i;:::-;43214:9;43208:4;43204:20;43199:2;43188:9;43184:18;43177:48;43242:108;43345:4;43336:6;43242:108;:::i;:::-;43234:116;;43397:9;43391:4;43387:20;43382:2;43371:9;43367:18;43360:48;43425:108;43528:4;43519:6;43425:108;:::i;:::-;43417:116;;43581:9;43575:4;43571:20;43565:3;43554:9;43550:19;43543:49;43609:76;43680:4;43671:6;43609:76;:::i;:::-;43601:84;;42639:1053;;;;;;;;:::o;43698:141::-;43754:5;43785:6;43779:13;43770:22;;43801:32;43827:5;43801:32;:::i;:::-;43698:141;;;;:::o;43845:349::-;43914:6;43963:2;43951:9;43942:7;43938:23;43934:32;43931:119;;;43969:79;;:::i;:::-;43931:119;44089:1;44114:63;44169:7;44160:6;44149:9;44145:22;44114:63;:::i;:::-;44104:73;;44060:127;43845:349;;;;:::o;44200:106::-;44244:8;44293:5;44288:3;44284:15;44263:36;;44200:106;;;:::o;44312:183::-;44347:3;44385:1;44367:16;44364:23;44361:128;;;44423:1;44420;44417;44402:23;44445:34;44476:1;44470:8;44445:34;:::i;:::-;44438:41;;44361:128;44312:183;:::o;44501:711::-;44540:3;44578:4;44560:16;44557:26;44586:5;44554:39;44615:20;;:::i;:::-;44690:1;44672:16;44668:24;44665:1;44659:4;44644:49;44723:4;44717:11;44822:16;44815:4;44807:6;44803:17;44800:39;44767:18;44759:6;44756:30;44740:113;44737:146;;;44868:5;;;;44737:146;44914:6;44908:4;44904:17;44950:3;44944:10;44977:18;44969:6;44966:30;44963:43;;;44999:5;;;;;;44963:43;45047:6;45040:4;45035:3;45031:14;45027:27;45106:1;45088:16;45084:24;45078:4;45074:35;45069:3;45066:44;45063:57;;;45113:5;;;;;;;45063:57;45130;45178:6;45172:4;45168:17;45160:6;45156:30;45150:4;45130:57;:::i;:::-;45203:3;45196:10;;44544:668;;;;;44501:711;;:::o;45218:239::-;45358:34;45354:1;45346:6;45342:14;45335:58;45427:22;45422:2;45414:6;45410:15;45403:47;45218:239;:::o;45463:366::-;45605:3;45626:67;45690:2;45685:3;45626:67;:::i;:::-;45619:74;;45702:93;45791:3;45702:93;:::i;:::-;45820:2;45815:3;45811:12;45804:19;;45463:366;;;:::o;45835:419::-;46001:4;46039:2;46028:9;46024:18;46016:26;;46088:9;46082:4;46078:20;46074:1;46063:9;46059:17;46052:47;46116:131;46242:4;46116:131;:::i;:::-;46108:139;;45835:419;;;:::o;46260:227::-;46400:34;46396:1;46388:6;46384:14;46377:58;46469:10;46464:2;46456:6;46452:15;46445:35;46260:227;:::o;46493:366::-;46635:3;46656:67;46720:2;46715:3;46656:67;:::i;:::-;46649:74;;46732:93;46821:3;46732:93;:::i;:::-;46850:2;46845:3;46841:12;46834:19;;46493:366;;;:::o;46865:419::-;47031:4;47069:2;47058:9;47054:18;47046:26;;47118:9;47112:4;47108:20;47104:1;47093:9;47089:17;47082:47;47146:131;47272:4;47146:131;:::i;:::-;47138:139;;46865:419;;;:::o;47290:751::-;47513:4;47551:3;47540:9;47536:19;47528:27;;47565:71;47633:1;47622:9;47618:17;47609:6;47565:71;:::i;:::-;47646:72;47714:2;47703:9;47699:18;47690:6;47646:72;:::i;:::-;47728;47796:2;47785:9;47781:18;47772:6;47728:72;:::i;:::-;47810;47878:2;47867:9;47863:18;47854:6;47810:72;:::i;:::-;47930:9;47924:4;47920:20;47914:3;47903:9;47899:19;47892:49;47958:76;48029:4;48020:6;47958:76;:::i;:::-;47950:84;;47290:751;;;;;;;;:::o
Swarm Source
ipfs://267f8a3c09862e522246df454ec66d350bd5dfb1bdfe7aeb4254bce14cdb5952