jettask 0.2.6__tar.gz → 0.2.7__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 (133) hide show
  1. {jettask-0.2.6 → jettask-0.2.7}/MANIFEST.in +0 -1
  2. {jettask-0.2.6 → jettask-0.2.7}/PKG-INFO +70 -2
  3. jettask-0.2.7/README.md +67 -0
  4. {jettask-0.2.6 → jettask-0.2.7}/jettask.egg-info/PKG-INFO +70 -2
  5. {jettask-0.2.6 → jettask-0.2.7}/jettask.egg-info/SOURCES.txt +1 -0
  6. {jettask-0.2.6 → jettask-0.2.7}/pyproject.toml +2 -2
  7. {jettask-0.2.6 → jettask-0.2.7}/LICENSE +0 -0
  8. {jettask-0.2.6 → jettask-0.2.7}/jettask/__init__.py +0 -0
  9. {jettask-0.2.6 → jettask-0.2.7}/jettask/config/__init__.py +0 -0
  10. {jettask-0.2.6 → jettask-0.2.7}/jettask/config/performance.py +0 -0
  11. {jettask-0.2.6 → jettask-0.2.7}/jettask/constants.py +0 -0
  12. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/__init__.py +0 -0
  13. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/app.py +0 -0
  14. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/app_importer.py +0 -0
  15. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/cli.py +0 -0
  16. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/consumer_manager.py +0 -0
  17. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/context.py +0 -0
  18. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/delay_scanner.py +0 -0
  19. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/enums.py +0 -0
  20. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/event_pool.py +0 -0
  21. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/heartbeat_process.py +0 -0
  22. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/message.py +0 -0
  23. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/offline_worker_recovery.py +0 -0
  24. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/retry.py +0 -0
  25. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/task.py +0 -0
  26. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/task_batch.py +0 -0
  27. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/unified_manager_base.py +0 -0
  28. {jettask-0.2.6 → jettask-0.2.7}/jettask/core/worker_scanner.py +0 -0
  29. {jettask-0.2.6 → jettask-0.2.7}/jettask/exceptions.py +0 -0
  30. {jettask-0.2.6 → jettask-0.2.7}/jettask/executors/__init__.py +0 -0
  31. {jettask-0.2.6 → jettask-0.2.7}/jettask/executors/asyncio.py +0 -0
  32. {jettask-0.2.6 → jettask-0.2.7}/jettask/executors/base.py +0 -0
  33. {jettask-0.2.6 → jettask-0.2.7}/jettask/executors/common.py +0 -0
  34. {jettask-0.2.6 → jettask-0.2.7}/jettask/executors/multi_asyncio.py +0 -0
  35. {jettask-0.2.6 → jettask-0.2.7}/jettask/monitor/run_backlog_collector.py +0 -0
  36. {jettask-0.2.6 → jettask-0.2.7}/jettask/monitor/stream_backlog_monitor.py +0 -0
  37. {jettask-0.2.6 → jettask-0.2.7}/jettask/monitoring/__init__.py +0 -0
  38. {jettask-0.2.6 → jettask-0.2.7}/jettask/monitoring/file_watcher.py +0 -0
  39. {jettask-0.2.6 → jettask-0.2.7}/jettask/pg_consumer/pg_consumer_v2.py +0 -0
  40. {jettask-0.2.6 → jettask-0.2.7}/jettask/pg_consumer/sql_utils.py +0 -0
  41. {jettask-0.2.6 → jettask-0.2.7}/jettask/router.py +0 -0
  42. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/__init__.py +0 -0
  43. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/add_execution_count.sql +0 -0
  44. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/add_priority_field.sql +0 -0
  45. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/add_scheduler_id.sql +0 -0
  46. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/add_scheduler_id_index.sql +0 -0
  47. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/loader.py +0 -0
  48. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/make_scheduler_id_required.sql +0 -0
  49. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/manager.py +0 -0
  50. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/migrate_interval_seconds.sql +0 -0
  51. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/models.py +0 -0
  52. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/multi_namespace_scheduler.py +0 -0
  53. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/performance_optimization.sql +0 -0
  54. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/run_scheduler.py +0 -0
  55. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/scheduler.py +0 -0
  56. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/schema.sql +0 -0
  57. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/unified_manager.py +0 -0
  58. {jettask-0.2.6 → jettask-0.2.7}/jettask/scheduler/unified_scheduler_manager.py +0 -0
  59. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/__init__.py +0 -0
  60. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/error_handler.py +0 -0
  61. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/exception_hook.py +0 -0
  62. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/helpers.py +0 -0
  63. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/logger.py +0 -0
  64. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/serializer.py +0 -0
  65. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/serializer_optimized.py +0 -0
  66. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/task_logger.py +0 -0
  67. {jettask-0.2.6 → jettask-0.2.7}/jettask/utils/traceback_filter.py +0 -0
  68. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/__init__.py +0 -0
  69. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/__main__.py +0 -0
  70. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/api.py +0 -0
  71. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/__init__.py +0 -0
  72. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/api/__init__.py +0 -0
  73. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/api/v1/__init__.py +0 -0
  74. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/api/v1/monitoring.py +0 -0
  75. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/api/v1/namespaces.py +0 -0
  76. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/api/v1/queues.py +0 -0
  77. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/api/v1/tasks.py +0 -0
  78. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/config.py +0 -0
  79. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/core/__init__.py +0 -0
  80. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/core/cache.py +0 -0
  81. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/core/database.py +0 -0
  82. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/core/exceptions.py +0 -0
  83. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/data_access.py +0 -0
  84. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/data_api.py +0 -0
  85. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/dependencies.py +0 -0
  86. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/init_meta_db.py +0 -0
  87. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/main.py +0 -0
  88. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/main_unified.py +0 -0
  89. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/main_v2.py +0 -0
  90. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/models/__init__.py +0 -0
  91. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/models/requests.py +0 -0
  92. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/models/responses.py +0 -0
  93. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/namespace_api.py +0 -0
  94. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/namespace_api_old.py +0 -0
  95. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/namespace_data_access.py +0 -0
  96. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/queue_backlog_api.py +0 -0
  97. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/queue_stats_v2.py +0 -0
  98. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/redis_monitor_api.py +0 -0
  99. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/services/__init__.py +0 -0
  100. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/start.py +0 -0
  101. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/backend/unified_api_router.py +0 -0
  102. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/cleanup_deprecated_tables.sql +0 -0
  103. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/config.py +0 -0
  104. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/db_init.py +0 -0
  105. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/frontend/index.html +0 -0
  106. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/gradio_app.py +0 -0
  107. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/integrated_gradio_app.py +0 -0
  108. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/models/__init__.py +0 -0
  109. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/models/namespace.py +0 -0
  110. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/models.py +0 -0
  111. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/multi_namespace_consumer.py +0 -0
  112. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/pg_consumer.py +0 -0
  113. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/run.py +0 -0
  114. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/run_monitor.py +0 -0
  115. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/run_webui.py +0 -0
  116. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/schema.sql +0 -0
  117. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/sql/batch_upsert_functions.sql +0 -0
  118. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/sql/init_database.sql +0 -0
  119. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/dist/assets/index-7129cfe1.css +0 -0
  120. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/dist/assets/index-8d1935cc.js +0 -0
  121. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/dist/index.html +0 -0
  122. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/index.html +0 -0
  123. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/queue.html +0 -0
  124. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/queues.html +0 -0
  125. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/static/workers.html +0 -0
  126. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/task_center.py +0 -0
  127. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/task_center_client.py +0 -0
  128. {jettask-0.2.6 → jettask-0.2.7}/jettask/webui/unified_consumer_manager.py +0 -0
  129. {jettask-0.2.6 → jettask-0.2.7}/jettask.egg-info/dependency_links.txt +0 -0
  130. {jettask-0.2.6 → jettask-0.2.7}/jettask.egg-info/entry_points.txt +0 -0
  131. {jettask-0.2.6 → jettask-0.2.7}/jettask.egg-info/requires.txt +0 -0
  132. {jettask-0.2.6 → jettask-0.2.7}/jettask.egg-info/top_level.txt +0 -0
  133. {jettask-0.2.6 → jettask-0.2.7}/setup.cfg +0 -0
@@ -1,7 +1,6 @@
1
1
  # 包含必要的文件
2
2
  include README.md
3
3
  include LICENSE
4
- include requirements.txt
5
4
  include pyproject.toml
6
5
 
7
6
  # 包含包数据
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jettask
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: A high-performance distributed task queue system with web monitoring
5
5
  Author-email: JetTask Team <support@jettask.io>
6
+ License-Expression: MIT
6
7
  Project-URL: Homepage, https://github.com/yourusername/jettask
7
8
  Project-URL: Bug Tracker, https://github.com/yourusername/jettask/issues
8
9
  Project-URL: Documentation, https://jettask.readthedocs.io
@@ -10,7 +11,6 @@ Classifier: Development Status :: 4 - Beta
10
11
  Classifier: Intended Audience :: Developers
11
12
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
12
13
  Classifier: Topic :: System :: Distributed Computing
13
- Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Programming Language :: Python :: 3.8
16
16
  Classifier: Programming Language :: Python :: 3.9
@@ -47,3 +47,71 @@ Requires-Dist: flake8>=6.0; extra == "dev"
47
47
  Requires-Dist: mypy>=1.4.0; extra == "dev"
48
48
  Requires-Dist: coverage>=7.0; extra == "dev"
49
49
  Dynamic: license-file
50
+
51
+ # JetTask
52
+
53
+ 一个高性能的分布式任务队列系统,支持Web监控界面。
54
+
55
+ ## 特性
56
+
57
+ - 🚀 高性能异步任务执行
58
+ - 📊 实时Web监控界面
59
+ - ⏰ 支持定时任务和延迟任务
60
+ - 🔄 任务重试和错误处理
61
+ - 🎯 多队列和优先级支持
62
+ - 🌍 多命名空间隔离
63
+ - 📈 任务统计和性能监控
64
+ - 🔧 简单易用的API
65
+
66
+ ## 安装
67
+
68
+ ```bash
69
+ pip install jettask
70
+ ```
71
+
72
+ ## 快速开始
73
+
74
+ ### 1. 创建任务
75
+
76
+ ```python
77
+ from jettask import JetTask
78
+
79
+ app = JetTask()
80
+
81
+ @app.task(queue="default")
82
+ async def hello_task(name):
83
+ return f"Hello, {name}!"
84
+ ```
85
+
86
+ ### 2. 启动Worker
87
+
88
+ ```bash
89
+ jettask worker -a app:app --queues default
90
+ ```
91
+
92
+ ### 3. 发送任务
93
+
94
+ ```python
95
+ result = await hello_task.send("World")
96
+ print(result) # Hello, World!
97
+ ```
98
+
99
+ ### 4. 启动Web监控界面
100
+
101
+ ```bash
102
+ # 启动API服务
103
+ jettask api
104
+
105
+ # 启动前端界面
106
+ jettask frontend
107
+ ```
108
+
109
+ 然后访问 http://localhost:3000 查看监控界面。
110
+
111
+ ## 文档
112
+
113
+ 详细文档请参见 [docs/](docs/) 目录。
114
+
115
+ ## 许可证
116
+
117
+ MIT License
@@ -0,0 +1,67 @@
1
+ # JetTask
2
+
3
+ 一个高性能的分布式任务队列系统,支持Web监控界面。
4
+
5
+ ## 特性
6
+
7
+ - 🚀 高性能异步任务执行
8
+ - 📊 实时Web监控界面
9
+ - ⏰ 支持定时任务和延迟任务
10
+ - 🔄 任务重试和错误处理
11
+ - 🎯 多队列和优先级支持
12
+ - 🌍 多命名空间隔离
13
+ - 📈 任务统计和性能监控
14
+ - 🔧 简单易用的API
15
+
16
+ ## 安装
17
+
18
+ ```bash
19
+ pip install jettask
20
+ ```
21
+
22
+ ## 快速开始
23
+
24
+ ### 1. 创建任务
25
+
26
+ ```python
27
+ from jettask import JetTask
28
+
29
+ app = JetTask()
30
+
31
+ @app.task(queue="default")
32
+ async def hello_task(name):
33
+ return f"Hello, {name}!"
34
+ ```
35
+
36
+ ### 2. 启动Worker
37
+
38
+ ```bash
39
+ jettask worker -a app:app --queues default
40
+ ```
41
+
42
+ ### 3. 发送任务
43
+
44
+ ```python
45
+ result = await hello_task.send("World")
46
+ print(result) # Hello, World!
47
+ ```
48
+
49
+ ### 4. 启动Web监控界面
50
+
51
+ ```bash
52
+ # 启动API服务
53
+ jettask api
54
+
55
+ # 启动前端界面
56
+ jettask frontend
57
+ ```
58
+
59
+ 然后访问 http://localhost:3000 查看监控界面。
60
+
61
+ ## 文档
62
+
63
+ 详细文档请参见 [docs/](docs/) 目录。
64
+
65
+ ## 许可证
66
+
67
+ MIT License
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jettask
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: A high-performance distributed task queue system with web monitoring
5
5
  Author-email: JetTask Team <support@jettask.io>
6
+ License-Expression: MIT
6
7
  Project-URL: Homepage, https://github.com/yourusername/jettask
7
8
  Project-URL: Bug Tracker, https://github.com/yourusername/jettask/issues
8
9
  Project-URL: Documentation, https://jettask.readthedocs.io
@@ -10,7 +11,6 @@ Classifier: Development Status :: 4 - Beta
10
11
  Classifier: Intended Audience :: Developers
11
12
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
12
13
  Classifier: Topic :: System :: Distributed Computing
13
- Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Programming Language :: Python :: 3.8
16
16
  Classifier: Programming Language :: Python :: 3.9
@@ -47,3 +47,71 @@ Requires-Dist: flake8>=6.0; extra == "dev"
47
47
  Requires-Dist: mypy>=1.4.0; extra == "dev"
48
48
  Requires-Dist: coverage>=7.0; extra == "dev"
49
49
  Dynamic: license-file
50
+
51
+ # JetTask
52
+
53
+ 一个高性能的分布式任务队列系统,支持Web监控界面。
54
+
55
+ ## 特性
56
+
57
+ - 🚀 高性能异步任务执行
58
+ - 📊 实时Web监控界面
59
+ - ⏰ 支持定时任务和延迟任务
60
+ - 🔄 任务重试和错误处理
61
+ - 🎯 多队列和优先级支持
62
+ - 🌍 多命名空间隔离
63
+ - 📈 任务统计和性能监控
64
+ - 🔧 简单易用的API
65
+
66
+ ## 安装
67
+
68
+ ```bash
69
+ pip install jettask
70
+ ```
71
+
72
+ ## 快速开始
73
+
74
+ ### 1. 创建任务
75
+
76
+ ```python
77
+ from jettask import JetTask
78
+
79
+ app = JetTask()
80
+
81
+ @app.task(queue="default")
82
+ async def hello_task(name):
83
+ return f"Hello, {name}!"
84
+ ```
85
+
86
+ ### 2. 启动Worker
87
+
88
+ ```bash
89
+ jettask worker -a app:app --queues default
90
+ ```
91
+
92
+ ### 3. 发送任务
93
+
94
+ ```python
95
+ result = await hello_task.send("World")
96
+ print(result) # Hello, World!
97
+ ```
98
+
99
+ ### 4. 启动Web监控界面
100
+
101
+ ```bash
102
+ # 启动API服务
103
+ jettask api
104
+
105
+ # 启动前端界面
106
+ jettask frontend
107
+ ```
108
+
109
+ 然后访问 http://localhost:3000 查看监控界面。
110
+
111
+ ## 文档
112
+
113
+ 详细文档请参见 [docs/](docs/) 目录。
114
+
115
+ ## 许可证
116
+
117
+ MIT License
@@ -1,5 +1,6 @@
1
1
  LICENSE
2
2
  MANIFEST.in
3
+ README.md
3
4
  pyproject.toml
4
5
  jettask/__init__.py
5
6
  jettask/constants.py
@@ -4,19 +4,19 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "jettask"
7
- version = "0.2.6"
7
+ version = "0.2.7"
8
8
  authors = [
9
9
  {name = "JetTask Team", email = "support@jettask.io"},
10
10
  ]
11
11
  description = "A high-performance distributed task queue system with web monitoring"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.8"
14
+ license = "MIT"
14
15
  classifiers = [
15
16
  "Development Status :: 4 - Beta",
16
17
  "Intended Audience :: Developers",
17
18
  "Topic :: Software Development :: Libraries :: Python Modules",
18
19
  "Topic :: System :: Distributed Computing",
19
- "License :: OSI Approved :: MIT License",
20
20
  "Programming Language :: Python :: 3",
21
21
  "Programming Language :: Python :: 3.8",
22
22
  "Programming Language :: Python :: 3.9",
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