{ "package": "semver", "version": "3.0.4", "stubs_only": "no", "py_typed": "YES", "pypi": { "upload_time": "2025-01-24T13:19:27.617118Z", "requires_python": ">=3.7", "size": 269730, "sha256": "afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602" }, "metadata": { "Metadata-Version": [ "2.2" ], "Name": [ "semver" ], "Version": [ "3.0.4" ], "Summary": [ "Python helper for Semantic Versioning (https://semver.org)" ], "Author-email": [ "Kostiantyn Rybnikov , Tom Schraitle " ], "Maintainer-email": [ "Tom Schraitle , Sebastien Celles " ], "License": [ "Copyright (c) 2013, Konstantine Rybnikov\n All rights reserved.\n \n Redistribution and use in source and binary forms, with or without modification,\n are permitted provided that the following conditions are met:\n \n Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n \n Redistributions in binary form must reproduce the above copyright notice, this\n list of conditions and the following disclaimer in the documentation and/or\n other materials provided with the distribution.\n \n Neither the name of the python-semver org nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n \n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n " ], "Project-URL": [ "GitHub Homepage, https://github.com/python-semver/python-semver", "Changelog, https://python-semver.readthedocs.io/en/latest/changelog.html", "Documentation, https://python-semver.rtfd.io", "Releases, https://github.com/python-semver/python-semver/releases", "Bug Tracker, https://github.com/python-semver/python-semver/issues" ], "Classifier": [ "Environment :: Web Environment", "Intended Audience :: Developers", "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules" ], "Requires-Python": [ ">=3.7" ], "Description-Content-Type": [ "text/x-rst" ], "License-File": [ "LICENSE.txt" ] }, "module_reports": [ { "path": "semver/_deprecated.py", "symbol_reports": [ { "kind": "function", "name": "semver._deprecated.bump_build", "n_typed": 0, "n_any": 0, "n_untyped": 3, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "semver._deprecated.bump_major", "n_typed": 0, "n_any": 0, "n_untyped": 2, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver._deprecated.compare", "n_typed": 3, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "attr", "name": "semver._deprecated.createparser", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 }, { "kind": "function", "name": "semver._deprecated.finalize_version", "n_typed": 0, "n_any": 0, "n_untyped": 2, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "attr", "name": "semver._deprecated.cmd_check", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 }, { "kind": "function", "name": "semver._deprecated.max_ver", "n_typed": 0, "n_any": 0, "n_untyped": 3, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "semver._deprecated.parse_version_info", "n_typed": 0, "n_any": 0, "n_untyped": 2, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver._deprecated.match", "n_typed": 0, "n_any": 0, "n_untyped": 3, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "attr", "name": "semver._deprecated.cmd_bump", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 }, { "kind": "attr", "name": "semver._deprecated.main", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 }, { "kind": "attr", "name": "semver._deprecated.cmd_nextver", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 }, { "kind": "function", "name": "semver._deprecated.bump_minor", "n_typed": 0, "n_any": 0, "n_untyped": 2, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver._deprecated.replace", "n_typed": 0, "n_any": 0, "n_untyped": 3, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "semver._deprecated.bump_patch", "n_typed": 0, "n_any": 0, "n_untyped": 2, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver._deprecated.format_version", "n_typed": 0, "n_any": 0, "n_untyped": 6, "n_overloads": 1, "n_typable": 6, "n_params": 5, "n_function_overloads": 1, "n_function_params": 5 }, { "kind": "function", "name": "semver._deprecated.bump_prerelease", "n_typed": 0, "n_any": 0, "n_untyped": 3, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "semver._deprecated.min_ver", "n_typed": 0, "n_any": 0, "n_untyped": 3, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "semver._deprecated.parse", "n_typed": 0, "n_any": 0, "n_untyped": 2, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "attr", "name": "semver._deprecated.cmd_compare", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 }, { "kind": "attr", "name": "semver._deprecated.process", "n_typed": 0, "n_any": 0, "n_untyped": 1, "n_typable": 1 } ], "type_ignores": [], "name": "semver._deprecated", "names": [ "semver._deprecated.bump_build", "semver._deprecated.bump_major", "semver._deprecated.bump_minor", "semver._deprecated.bump_patch", "semver._deprecated.bump_prerelease", "semver._deprecated.cmd_bump", "semver._deprecated.cmd_check", "semver._deprecated.cmd_compare", "semver._deprecated.cmd_nextver", "semver._deprecated.compare", "semver._deprecated.createparser", "semver._deprecated.finalize_version", "semver._deprecated.format_version", "semver._deprecated.main", "semver._deprecated.match", "semver._deprecated.max_ver", "semver._deprecated.min_ver", "semver._deprecated.parse", "semver._deprecated.parse_version_info", "semver._deprecated.process", "semver._deprecated.replace" ], "n_typable": 46, "n_typed": 3, "n_any": 0, "n_untyped": 43, "n_functions": 14, "n_function_overloads": 14, "n_function_params": 25, "n_methods": 0, "n_method_overloads": 0, "n_method_params": 0, "n_classes": 0, "n_attrs": 7, "n_properties": 0, "n_type_ignores": 0 }, { "path": "semver/__about__.py", "symbol_reports": [ { "kind": "attr", "name": "semver.__about__.__maintainer__", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.__about__.SEMVER_SPEC_VERSION", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.__about__.__description__", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.__about__.__author__", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.__about__.__version__", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.__about__.__maintainer_email__", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.__about__.__author_email__", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 } ], "type_ignores": [], "name": "semver.__about__", "names": [ "semver.__about__.SEMVER_SPEC_VERSION", "semver.__about__.__author__", "semver.__about__.__author_email__", "semver.__about__.__description__", "semver.__about__.__maintainer__", "semver.__about__.__maintainer_email__", "semver.__about__.__version__" ], "n_typable": 0, "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_functions": 0, "n_function_overloads": 0, "n_function_params": 0, "n_methods": 0, "n_method_overloads": 0, "n_method_params": 0, "n_classes": 0, "n_attrs": 7, "n_properties": 0, "n_type_ignores": 0 }, { "path": "semver/version.py", "symbol_reports": [ { "kind": "class", "name": "semver.version.Version", "methods": [ { "kind": "function", "name": "Version.__init__", "n_typed": 5, "n_any": 0, "n_untyped": 1, "n_overloads": 1, "n_typable": 6, "n_params": 5, "n_function_overloads": 1, "n_function_params": 5 }, { "kind": "function", "name": "Version._nat_cmp", "n_typed": 3, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "Version.to_tuple", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.to_dict", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.__iter__", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version._increment_string", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.bump_major", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.bump_minor", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.bump_patch", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.bump_prerelease", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.bump_build", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.compare", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.next_version", "n_typed": 3, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "Version.__eq__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__ne__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__lt__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__le__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__gt__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__ge__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__getitem__", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.__repr__", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.__str__", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.__hash__", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.finalize_version", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "Version.match", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.parse", "n_typed": 3, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 3, "n_params": 2, "n_function_overloads": 1, "n_function_params": 2 }, { "kind": "function", "name": "Version.replace", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.is_valid", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "Version.is_compatible", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 } ], "properties": [ { "kind": "property", "name": "Version.major", "n_typed": 1, "n_any": 0, "n_untyped": 1, "n_typable": 2 }, { "kind": "property", "name": "Version.minor", "n_typed": 1, "n_any": 0, "n_untyped": 1, "n_typable": 2 }, { "kind": "property", "name": "Version.patch", "n_typed": 1, "n_any": 0, "n_untyped": 1, "n_typable": 2 }, { "kind": "property", "name": "Version.prerelease", "n_typed": 1, "n_any": 0, "n_untyped": 1, "n_typable": 2 }, { "kind": "property", "name": "Version.build", "n_typed": 1, "n_any": 0, "n_untyped": 1, "n_typable": 2 } ], "attrs": [ { "kind": "attr", "name": "Version.NAMES", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 }, { "kind": "attr", "name": "Version._LAST_NUMBER", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 }, { "kind": "attr", "name": "Version._REGEX_TEMPLATE", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 }, { "kind": "attr", "name": "Version._REGEX", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 }, { "kind": "attr", "name": "Version._REGEX_OPTIONAL_MINOR_AND_PATCH", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 } ], "n_typable": 70, "n_typed": 64, "n_any": 0, "n_untyped": 6, "n_functions": 0, "n_function_overloads": 0, "n_function_params": 0, "n_methods": 29, "n_method_overloads": 29, "n_method_params": 26, "n_attrs": 5, "n_properties": 5 }, { "kind": "attr", "name": "semver.version.Comparator", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 }, { "kind": "attr", "name": "semver.version.T", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 }, { "kind": "attr", "name": "semver.version.Comparable", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_typable": 1 }, { "kind": "attr", "name": "semver.version.T_cmp", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 } ], "type_ignores": [ { "kind": "type", "rules": null }, { "kind": "type", "rules": null } ], "name": "semver.version", "names": [ "semver.version.Comparable", "semver.version.Comparator", "semver.version.T", "semver.version.T_cmp", "semver.version.Version" ], "n_typable": 72, "n_typed": 66, "n_any": 0, "n_untyped": 6, "n_functions": 0, "n_function_overloads": 0, "n_function_params": 0, "n_methods": 29, "n_method_overloads": 29, "n_method_params": 26, "n_classes": 1, "n_attrs": 9, "n_properties": 5, "n_type_ignores": 2 }, { "path": "semver/__init__.py", "symbol_reports": [ { "kind": "attr", "name": "semver.VersionInfo", "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_typable": 0 } ], "type_ignores": [], "name": "semver", "names": [ "semver.VersionInfo" ], "n_typable": 0, "n_typed": 0, "n_any": 0, "n_untyped": 0, "n_functions": 0, "n_function_overloads": 0, "n_function_params": 0, "n_methods": 0, "n_method_overloads": 0, "n_method_params": 0, "n_classes": 0, "n_attrs": 1, "n_properties": 0, "n_type_ignores": 0 }, { "path": "semver/cli.py", "symbol_reports": [ { "kind": "function", "name": "semver.cli.createparser", "n_typed": 1, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 1, "n_params": 0, "n_function_overloads": 1, "n_function_params": 0 }, { "kind": "function", "name": "semver.cli.cmd_compare", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver.cli.cmd_bump", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver.cli.process", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver.cli.cmd_nextver", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver.cli.cmd_check", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 }, { "kind": "function", "name": "semver.cli.main", "n_typed": 2, "n_any": 0, "n_untyped": 0, "n_overloads": 1, "n_typable": 2, "n_params": 1, "n_function_overloads": 1, "n_function_params": 1 } ], "type_ignores": [], "name": "semver.cli", "names": [ "semver.cli.cmd_bump", "semver.cli.cmd_check", "semver.cli.cmd_compare", "semver.cli.cmd_nextver", "semver.cli.createparser", "semver.cli.main", "semver.cli.process" ], "n_typable": 13, "n_typed": 13, "n_any": 0, "n_untyped": 0, "n_functions": 7, "n_function_overloads": 7, "n_function_params": 6, "n_methods": 0, "n_method_overloads": 0, "n_method_params": 0, "n_classes": 0, "n_attrs": 0, "n_properties": 0, "n_type_ignores": 0 } ], "typecheckers": {}, "n_modules": 5, "n_typable": 131, "n_typed": 82, "n_any": 0, "n_untyped": 49, "n_functions": 21, "n_function_overloads": 21, "n_function_params": 31, "n_methods": 29, "n_method_params": 26, "n_method_overloads": 29, "n_classes": 1, "n_attrs": 24, "n_properties": 5, "type_ignores": [ { "kind": "type", "rules": null }, { "kind": "type", "rules": null } ], "n_type_ignores": 2 }