pum 1.1.7__tar.gz → 1.1.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. {pum-1.1.7/pum.egg-info → pum-1.1.9}/PKG-INFO +1 -1
  2. {pum-1.1.7 → pum-1.1.9}/pum/cli.py +6 -0
  3. {pum-1.1.7 → pum-1.1.9}/pum/info.py +12 -4
  4. {pum-1.1.7 → pum-1.1.9}/pum/upgrader.py +6 -1
  5. {pum-1.1.7 → pum-1.1.9/pum.egg-info}/PKG-INFO +1 -1
  6. {pum-1.1.7 → pum-1.1.9}/test/test_upgrader.py +17 -0
  7. {pum-1.1.7 → pum-1.1.9}/.ci/setup_db.sh +0 -0
  8. {pum-1.1.7 → pum-1.1.9}/.github/dependabot.yml +0 -0
  9. {pum-1.1.7 → pum-1.1.9}/.github/workflows/deploy-to-pypi.yml +0 -0
  10. {pum-1.1.7 → pum-1.1.9}/.github/workflows/docs.yml +0 -0
  11. {pum-1.1.7 → pum-1.1.9}/.github/workflows/tests.yml +0 -0
  12. {pum-1.1.7 → pum-1.1.9}/.github/workflows/wheel.yml +0 -0
  13. {pum-1.1.7 → pum-1.1.9}/.github/workflows/windows-tests.yml +0 -0
  14. {pum-1.1.7 → pum-1.1.9}/.gitignore +0 -0
  15. {pum-1.1.7 → pum-1.1.9}/.pre-commit-config.yaml +0 -0
  16. {pum-1.1.7 → pum-1.1.9}/LICENSE +0 -0
  17. {pum-1.1.7 → pum-1.1.9}/README.md +0 -0
  18. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/changelog.md +0 -0
  19. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/dump_format.md +0 -0
  20. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/dumper.md +0 -0
  21. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/exceptions.md +0 -0
  22. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/hook_base.md +0 -0
  23. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/hook_handler.md +0 -0
  24. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/parameter_definition.md +0 -0
  25. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/parameter_type.md +0 -0
  26. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/permission.md +0 -0
  27. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/permission_type.md +0 -0
  28. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/pum_config.md +0 -0
  29. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/role.md +0 -0
  30. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/role_manager.md +0 -0
  31. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/schema_migrations.md +0 -0
  32. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/sql_content.md +0 -0
  33. {pum-1.1.7 → pum-1.1.9}/docs/docs/api/upgrader.md +0 -0
  34. {pum-1.1.7 → pum-1.1.9}/docs/docs/assets/images/favicon.ico +0 -0
  35. {pum-1.1.7 → pum-1.1.9}/docs/docs/assets/images/pum-darkmode.png +0 -0
  36. {pum-1.1.7 → pum-1.1.9}/docs/docs/assets/images/pum.png +0 -0
  37. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/baseline.md +0 -0
  38. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/check.md +0 -0
  39. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/dump.md +0 -0
  40. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/info.md +0 -0
  41. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/install.md +0 -0
  42. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/restore.md +0 -0
  43. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/role.md +0 -0
  44. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli/upgrade.md +0 -0
  45. {pum-1.1.7 → pum-1.1.9}/docs/docs/cli.md +0 -0
  46. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/config_model.md +0 -0
  47. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/configuration.md +0 -0
  48. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/demo_data_model.md +0 -0
  49. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/dependency_model.md +0 -0
  50. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/hook_model.md +0 -0
  51. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/migration_hooks_model.md +0 -0
  52. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/parameter_definition_model.md +0 -0
  53. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/permission_model.md +0 -0
  54. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/pum_model.md +0 -0
  55. {pum-1.1.7 → pum-1.1.9}/docs/docs/configuration/role_model.md +0 -0
  56. {pum-1.1.7 → pum-1.1.9}/docs/docs/getting_started.md +0 -0
  57. {pum-1.1.7 → pum-1.1.9}/docs/docs/hooks.md +0 -0
  58. {pum-1.1.7 → pum-1.1.9}/docs/docs/index.md +0 -0
  59. {pum-1.1.7 → pum-1.1.9}/docs/docs/roles.md +0 -0
  60. {pum-1.1.7 → pum-1.1.9}/docs/mkdocs.yml +0 -0
  61. {pum-1.1.7 → pum-1.1.9}/docs/requirements.txt +0 -0
  62. {pum-1.1.7 → pum-1.1.9}/docs/update_cli_docs.py +0 -0
  63. {pum-1.1.7 → pum-1.1.9}/pum/__init__.py +0 -0
  64. {pum-1.1.7 → pum-1.1.9}/pum/changelog.py +0 -0
  65. {pum-1.1.7 → pum-1.1.9}/pum/checker.py +0 -0
  66. {pum-1.1.7 → pum-1.1.9}/pum/conf/pum_config_example.yaml +0 -0
  67. {pum-1.1.7 → pum-1.1.9}/pum/config_model.py +0 -0
  68. {pum-1.1.7 → pum-1.1.9}/pum/dependency_handler.py +0 -0
  69. {pum-1.1.7 → pum-1.1.9}/pum/dumper.py +0 -0
  70. {pum-1.1.7 → pum-1.1.9}/pum/exceptions.py +0 -0
  71. {pum-1.1.7 → pum-1.1.9}/pum/hook.py +0 -0
  72. {pum-1.1.7 → pum-1.1.9}/pum/parameter.py +0 -0
  73. {pum-1.1.7 → pum-1.1.9}/pum/pum_config.py +0 -0
  74. {pum-1.1.7 → pum-1.1.9}/pum/role_manager.py +0 -0
  75. {pum-1.1.7 → pum-1.1.9}/pum/schema_migrations.py +0 -0
  76. {pum-1.1.7 → pum-1.1.9}/pum/sql_content.py +0 -0
  77. {pum-1.1.7 → pum-1.1.9}/pum.egg-info/SOURCES.txt +0 -0
  78. {pum-1.1.7 → pum-1.1.9}/pum.egg-info/dependency_links.txt +0 -0
  79. {pum-1.1.7 → pum-1.1.9}/pum.egg-info/entry_points.txt +0 -0
  80. {pum-1.1.7 → pum-1.1.9}/pum.egg-info/requires.txt +0 -0
  81. {pum-1.1.7 → pum-1.1.9}/pum.egg-info/top_level.txt +0 -0
  82. {pum-1.1.7 → pum-1.1.9}/pyproject.toml +0 -0
  83. {pum-1.1.7 → pum-1.1.9}/requirements/base.txt +0 -0
  84. {pum-1.1.7 → pum-1.1.9}/requirements/development.txt +0 -0
  85. {pum-1.1.7 → pum-1.1.9}/scripts/run_postgis.sh +0 -0
  86. {pum-1.1.7 → pum-1.1.9}/setup.cfg +0 -0
  87. {pum-1.1.7 → pum-1.1.9}/test/__init__.py +0 -0
  88. {pum-1.1.7 → pum-1.1.9}/test/data/complex_files_content/changelogs/1.2.3/complex_files_content.sql +0 -0
  89. {pum-1.1.7 → pum-1.1.9}/test/data/custom_directory/.pum.yaml +0 -0
  90. {pum-1.1.7 → pum-1.1.9}/test/data/custom_directory/my_delta_directory/1.2.3/my_delta_directory.sql +0 -0
  91. {pum-1.1.7 → pum-1.1.9}/test/data/custom_migration_schema/.pum.yaml +0 -0
  92. {pum-1.1.7 → pum-1.1.9}/test/data/custom_migration_schema/changelogs/1.2.3/custom_migration_schema.sql +0 -0
  93. {pum-1.1.7 → pum-1.1.9}/test/data/demo_data/.pum.yaml +0 -0
  94. {pum-1.1.7 → pum-1.1.9}/test/data/demo_data/changelogs/1.2.3/single_changelog.sql +0 -0
  95. {pum-1.1.7 → pum-1.1.9}/test/data/demo_data/demo_data/demo_data.sql +0 -0
  96. {pum-1.1.7 → pum-1.1.9}/test/data/dependencies/.pum.yaml +0 -0
  97. {pum-1.1.7 → pum-1.1.9}/test/data/dependencies/changelogs/1.2.3/pre_post_python_parameters.sql +0 -0
  98. {pum-1.1.7 → pum-1.1.9}/test/data/dependencies/changelogs/1.2.4/rename_created_date.sql +0 -0
  99. {pum-1.1.7 → pum-1.1.9}/test/data/dependencies/post/create_schema.sql +0 -0
  100. {pum-1.1.7 → pum-1.1.9}/test/data/dependencies/post/create_view.py +0 -0
  101. {pum-1.1.7 → pum-1.1.9}/test/data/dependencies/pre/drop_view.sql +0 -0
  102. {pum-1.1.7 → pum-1.1.9}/test/data/invalid_changelog_commit/changelogs/1.2.3/invalid_changelog.sql +0 -0
  103. {pum-1.1.7 → pum-1.1.9}/test/data/invalid_changelog_search_path/changelogs/1.2.3/invalid_changelog.sql +0 -0
  104. {pum-1.1.7 → pum-1.1.9}/test/data/min_version/.pum.yaml +0 -0
  105. {pum-1.1.7 → pum-1.1.9}/test/data/min_version/changelogs/1.2.3/roles.sql +0 -0
  106. {pum-1.1.7 → pum-1.1.9}/test/data/multiple_changelogs/changelogs/1.2.3/multiple_changelogs.sql +0 -0
  107. {pum-1.1.7 → pum-1.1.9}/test/data/multiple_changelogs/changelogs/1.2.4/rename_created_date.sql +0 -0
  108. {pum-1.1.7 → pum-1.1.9}/test/data/multiple_changelogs/changelogs/1.3.0/add_created_by_column.sql +0 -0
  109. {pum-1.1.7 → pum-1.1.9}/test/data/multiple_changelogs/changelogs/2.0.0/create_second_table.sql +0 -0
  110. {pum-1.1.7 → pum-1.1.9}/test/data/multiple_changelogs/changelogs/2.0.0/create_third_table.sql +0 -0
  111. {pum-1.1.7 → pum-1.1.9}/test/data/parameters/.pum.yaml +0 -0
  112. {pum-1.1.7 → pum-1.1.9}/test/data/parameters/changelogs/1.2.3/parameters.sql +0 -0
  113. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python/.pum.yaml +0 -0
  114. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python/changelogs/1.2.3/pre_post_python.sql +0 -0
  115. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python/changelogs/1.2.4/rename_created_date.sql +0 -0
  116. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python/post/create_schema.sql +0 -0
  117. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python/post/create_view.py +0 -0
  118. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python/pre/drop_view.sql +0 -0
  119. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_local_import/.pum.yaml +0 -0
  120. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_local_import/changelogs/1.2.3/pre_post_python_local_import.sql +0 -0
  121. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_local_import/post/create_schema.sql +0 -0
  122. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_local_import/post/create_view.py +0 -0
  123. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_local_import/post/folder/my_module.py +0 -0
  124. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_local_import/pre/drop_view.sql +0 -0
  125. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters/.pum.yaml +0 -0
  126. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters/changelogs/1.2.3/pre_post_python_parameters.sql +0 -0
  127. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters/changelogs/1.2.4/rename_created_date.sql +0 -0
  128. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters/post/create_schema.sql +0 -0
  129. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters/post/create_view.py +0 -0
  130. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters/pre/drop_view.sql +0 -0
  131. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters_broken/.pum.yaml +0 -0
  132. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters_broken/changelogs/1.2.3/pre_post_python_parameters_broken.sql +0 -0
  133. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters_broken/changelogs/1.2.4/rename_created_date.sql +0 -0
  134. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters_broken/post/create_schema.sql +0 -0
  135. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters_broken/post/create_view.py +0 -0
  136. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_python_parameters_broken/pre/drop_view.sql +0 -0
  137. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_code/.pum.yaml +0 -0
  138. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_code/changelogs/1.2.3/pre_post_sql_code.sql +0 -0
  139. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_code/changelogs/1.2.4/rename_created_date.sql +0 -0
  140. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_code/post/create_view.sql +0 -0
  141. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_code/pre/drop_view.sql +0 -0
  142. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_files/.pum.yaml +0 -0
  143. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_files/changelogs/1.2.3/pre_post_sql_files.sql +0 -0
  144. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_files/changelogs/1.2.4/rename_created_date.sql +0 -0
  145. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_files/post/create_view.sql +0 -0
  146. {pum-1.1.7 → pum-1.1.9}/test/data/pre_post_sql_files/pre/drop_view.sql +0 -0
  147. {pum-1.1.7 → pum-1.1.9}/test/data/roles/.pum.yaml +0 -0
  148. {pum-1.1.7 → pum-1.1.9}/test/data/roles/changelogs/1.2.3/roles.sql +0 -0
  149. {pum-1.1.7 → pum-1.1.9}/test/data/single_changelog/changelogs/1.2.3/single_changelog.sql +0 -0
  150. {pum-1.1.7 → pum-1.1.9}/test/test_changelog.py +0 -0
  151. {pum-1.1.7 → pum-1.1.9}/test/test_checker.py.disabled +0 -0
  152. {pum-1.1.7 → pum-1.1.9}/test/test_config.py +0 -0
  153. {pum-1.1.7 → pum-1.1.9}/test/test_dumper.py +0 -0
  154. {pum-1.1.7 → pum-1.1.9}/test/test_pum.sh +0 -0
  155. {pum-1.1.7 → pum-1.1.9}/test/test_roles.py +0 -0
  156. {pum-1.1.7 → pum-1.1.9}/test/test_schema_migrations.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pum
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: Pum stands for "Postgres Upgrades Manager". It is a Database migration management tool very similar to flyway-db or Liquibase, based on metadata tables.
5
5
  Author-email: Denis Rouzaud <denis@opengis.ch>
6
6
  License-Expression: GPL-2.0-or-later
@@ -201,6 +201,11 @@ def create_parser() -> argparse.ArgumentParser:
201
201
  parser_install.add_argument(
202
202
  "-d", "--demo-data", help="Load demo data with the given name", type=str, default=None
203
203
  )
204
+ parser_install.add_argument(
205
+ "--beta-testing",
206
+ help="This will install the module in beta testing, meaning that it will not be possible to receive any future updates.",
207
+ action="store_true",
208
+ )
204
209
 
205
210
  # Role management parser
206
211
  parser_role = subparsers.add_parser("role", help="manage roles in the database")
@@ -347,6 +352,7 @@ def cli() -> int: # noqa: PLR0912
347
352
  roles=args.roles,
348
353
  grant=args.grant,
349
354
  demo_data=args.demo_data,
355
+ beta_testing=args.beta_testing,
350
356
  )
351
357
  conn.commit()
352
358
  if args.demo_data:
@@ -3,9 +3,11 @@ import sys
3
3
  import psycopg
4
4
 
5
5
  from .pum_config import PumConfig
6
- from .schema_migrations import SchemaMigrations
6
+ from .schema_migrations import SchemaMigrations, MIGRATION_TABLE_NAME
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
+ # set to info here
10
+ logger.setLevel(logging.INFO)
9
11
 
10
12
 
11
13
  def run_info(connection: psycopg.Connection, config: PumConfig) -> None:
@@ -17,14 +19,20 @@ def run_info(connection: psycopg.Connection, config: PumConfig) -> None:
17
19
 
18
20
  """
19
21
  try:
20
- schema_migrations = SchemaMigrations(connection, config)
21
- if not schema_migrations.exists():
22
+ schema_migrations = SchemaMigrations(config=config)
23
+ if not schema_migrations.exists(connection=connection):
22
24
  logger.info(
23
- f"No migrations found in {config.pum.migration_table_schema}.{config.pum.migration_table_name}."
25
+ f"No migrations found in {config.config.pum.migration_table_schema}.{MIGRATION_TABLE_NAME}."
24
26
  )
25
27
  else:
26
28
  # Add your logic for when migrations exist; for now, we simply print a message.
27
29
  logger.info("Migrations found.")
30
+ logger.info(
31
+ f"Schema migrations table: {config.config.pum.migration_table_schema}.{MIGRATION_TABLE_NAME}"
32
+ )
33
+ logger.info(
34
+ f"Version: {schema_migrations.migration_details(connection=connection)['version']}"
35
+ )
28
36
  except Exception:
29
37
  logger.exception("An error occurred while checking for migrations.")
30
38
  sys.exit(1)
@@ -52,6 +52,7 @@ class Upgrader:
52
52
  roles: bool = False,
53
53
  grant: bool = False,
54
54
  demo_data: str | None = None,
55
+ beta_testing: bool = False,
55
56
  commit: bool = False,
56
57
  ) -> None:
57
58
  """Installs the given module
@@ -72,6 +73,10 @@ class Upgrader:
72
73
  If True, permissions will be granted to the roles.
73
74
  demo_data:
74
75
  The name of the demo data to load. If None, no demo data is loaded.
76
+ beta_testing:
77
+ If True, the module is installed in beta testing mode.
78
+ This means that the module will not be able to receive any future updates.
79
+ We strongly discourage using this for production.
75
80
  commit:
76
81
  If True, the changes will be committed to the database.
77
82
  """
@@ -108,7 +113,7 @@ class Upgrader:
108
113
  self.schema_migrations.set_baseline(
109
114
  connection=connection,
110
115
  version=changelog.version,
111
- beta_testing=False,
116
+ beta_testing=beta_testing,
112
117
  commit=False,
113
118
  changelog_files=changelog_files,
114
119
  parameters=parameters,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pum
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: Pum stands for "Postgres Upgrades Manager". It is a Database migration management tool very similar to flyway-db or Liquibase, based on metadata tables.
5
5
  Author-email: Denis Rouzaud <denis@opengis.ch>
6
6
  License-Expression: GPL-2.0-or-later
@@ -63,11 +63,28 @@ class TestUpgrader(unittest.TestCase):
63
63
  self.assertEqual(sm.baseline(conn), "1.2.3")
64
64
  self.assertEqual(sm.migration_details(conn), sm.migration_details(conn, "1.2.3"))
65
65
  self.assertEqual(sm.migration_details(conn)["version"], "1.2.3")
66
+ self.assertEqual(sm.migration_details(conn)["beta_testing"], False)
66
67
  self.assertEqual(
67
68
  sm.migration_details(conn)["changelog_files"],
68
69
  [str(changelog_file)],
69
70
  )
70
71
 
72
+ def test_install_beta_testing(self) -> None:
73
+ """Test the installation as beta testing."""
74
+ test_dir = Path("test") / "data" / "single_changelog"
75
+ cfg = PumConfig(test_dir)
76
+ sm = SchemaMigrations(cfg)
77
+ with psycopg.connect(f"service={self.pg_service}") as conn:
78
+ self.assertFalse(sm.exists(conn))
79
+ upgrader = Upgrader(
80
+ config=cfg,
81
+ )
82
+ upgrader.install(connection=conn, beta_testing=True)
83
+ self.assertTrue(sm.exists(conn))
84
+ self.assertEqual(sm.baseline(conn), "1.2.3")
85
+ self.assertEqual(sm.migration_details(conn), sm.migration_details(conn, "1.2.3"))
86
+ self.assertEqual(sm.migration_details(conn)["beta_testing"], True)
87
+
71
88
  @unittest.skipIf(
72
89
  os.name == "nt" and os.getenv("CI") == "true",
73
90
  "Test not supported on Windows CI (postgis not installed)",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes