python-getpaid-payu 3.0.0a5__tar.gz → 3.1.0__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.
- python_getpaid_payu-3.1.0/.github/release-drafter.yml +31 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.github/workflows/ci.yml +3 -0
- python_getpaid_payu-3.1.0/.github/workflows/release.yml +60 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/PKG-INFO +5 -5
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/README.md +1 -1
- python_getpaid_payu-3.1.0/docs/changelog.md +51 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/pyproject.toml +4 -3
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/__init__.py +1 -1
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/processor.py +3 -3
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/types.py +1 -6
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_public_api.py +2 -2
- python_getpaid_payu-3.0.0a5/docs/changelog.md +0 -22
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.gitignore +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.pre-commit-config.yaml +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.python-version +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.readthedocs.yml +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-26-readme-payu.txt +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-5-baseline-payu.txt +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/CODE_OF_CONDUCT.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/CONTRIBUTING.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/LICENSE +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/codeofconduct.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/concepts.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/conf.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/configuration.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/contributing.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/getting-started.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/index.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/license.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/reference.md +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/docs/requirements.txt +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/sandbox_keys.txt +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/client.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/py.typed +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/__init__.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/plugin.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/routes.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/signing.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/transitions.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/webhooks.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/__init__.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/conftest.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_callback.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_client.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_entry_points.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_processor.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_simulator_plugin.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_types.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/tests/test_url_construction.py +0 -0
- {python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/uv.lock +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name-template: 'v$RESOLVED_VERSION'
|
|
2
|
+
tag-template: 'v$RESOLVED_VERSION'
|
|
3
|
+
categories:
|
|
4
|
+
- title: ':boom: Breaking Changes'
|
|
5
|
+
label: 'breaking'
|
|
6
|
+
- title: ':rocket: Features'
|
|
7
|
+
label: 'enhancement'
|
|
8
|
+
- title: ':fire: Removals and Deprecations'
|
|
9
|
+
label: 'removal'
|
|
10
|
+
- title: ':beetle: Fixes'
|
|
11
|
+
label: 'bug'
|
|
12
|
+
- title: ':racehorse: Performance'
|
|
13
|
+
label: 'performance'
|
|
14
|
+
- title: ':rotating_light: Testing'
|
|
15
|
+
label: 'testing'
|
|
16
|
+
- title: ':construction_worker: Continuous Integration'
|
|
17
|
+
label: 'ci'
|
|
18
|
+
- title: ':books: Documentation'
|
|
19
|
+
label: 'documentation'
|
|
20
|
+
- title: ':hammer: Refactoring'
|
|
21
|
+
label: 'refactoring'
|
|
22
|
+
- title: ':lipstick: Style'
|
|
23
|
+
label: 'style'
|
|
24
|
+
- title: ':package: Dependencies'
|
|
25
|
+
labels:
|
|
26
|
+
- 'dependencies'
|
|
27
|
+
- 'build'
|
|
28
|
+
template: |
|
|
29
|
+
## Changes
|
|
30
|
+
|
|
31
|
+
$CHANGES
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
- master
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
release:
|
|
11
|
+
name: Release
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- name: Check out the repository
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0 # Full history needed for version detection
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
run: pip install uv
|
|
26
|
+
|
|
27
|
+
# Version is read from __init__.py (dynamic via hatch)
|
|
28
|
+
- name: Detect version from __init__.py
|
|
29
|
+
id: get-version
|
|
30
|
+
run: |
|
|
31
|
+
init_py=$(grep -A2 '\[tool\.hatch\.version\]' pyproject.toml | grep '^path\s*=' | head -1 | sed -E "s/path\s*=\s*['\"]([^'\"]+)['\"].*/\1/")
|
|
32
|
+
version=$(grep '__version__' "$init_py" | head -1 | sed -E "s/.*= ['\"]([^'\"]+)['\"].*/\1/")
|
|
33
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
34
|
+
|
|
35
|
+
- name: Check if tag already exists
|
|
36
|
+
id: check-tag
|
|
37
|
+
run: |
|
|
38
|
+
tag="v${{ steps.get-version.outputs.version }}"
|
|
39
|
+
if git rev-parse "$tag" >/dev/null 2>&1; then
|
|
40
|
+
echo "already_tagged=true" >> "$GITHUB_OUTPUT"
|
|
41
|
+
else
|
|
42
|
+
echo "already_tagged=false" >> "$GITHUB_OUTPUT"
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
- name: Tag new version
|
|
46
|
+
if: steps.check-tag.outputs.already_tagged == 'false'
|
|
47
|
+
run: |
|
|
48
|
+
tag="v${{ steps.get-version.outputs.version }}"
|
|
49
|
+
git config user.name "github-actions[bot]"
|
|
50
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
51
|
+
git tag -a "$tag" -m "Release $tag"
|
|
52
|
+
git push origin "$tag"
|
|
53
|
+
|
|
54
|
+
- name: Build package
|
|
55
|
+
run: uv build
|
|
56
|
+
|
|
57
|
+
- name: Publish package on PyPI
|
|
58
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
59
|
+
with:
|
|
60
|
+
password: ${{ secrets.PYPI_TOKEN }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-getpaid-payu
|
|
3
|
-
Version: 3.0
|
|
3
|
+
Version: 3.1.0
|
|
4
4
|
Summary: PayU payment gateway integration for python-getpaid ecosystem.
|
|
5
5
|
Project-URL: Homepage, https://github.com/django-getpaid/python-getpaid-payu
|
|
6
6
|
Project-URL: Repository, https://github.com/django-getpaid/python-getpaid-payu
|
|
@@ -9,7 +9,7 @@ Project-URL: Changelog, https://github.com/django-getpaid/python-getpaid-payu/re
|
|
|
9
9
|
Author-email: Dominik Kozaczko <dominik@kozaczko.info>
|
|
10
10
|
License: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Classifier: Development Status ::
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: License :: OSI Approved :: MIT License
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -19,10 +19,10 @@ Classifier: Topic :: Office/Business :: Financial :: Point-Of-Sale
|
|
|
19
19
|
Classifier: Typing :: Typed
|
|
20
20
|
Requires-Python: >=3.12
|
|
21
21
|
Requires-Dist: httpx>=0.27.0
|
|
22
|
-
Requires-Dist: python-getpaid-core>=3.0.
|
|
22
|
+
Requires-Dist: python-getpaid-core>=3.0.0
|
|
23
23
|
Provides-Extra: simulator
|
|
24
24
|
Requires-Dist: litestar>=2.0; extra == 'simulator'
|
|
25
|
-
Requires-Dist: python-getpaid-simulator>=3.0.
|
|
25
|
+
Requires-Dist: python-getpaid-simulator>=3.0.0; extra == 'simulator'
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
|
|
28
28
|
# python-getpaid-payu
|
|
@@ -134,7 +134,7 @@ PayU provides a sandbox environment for testing. You can use the example keys pr
|
|
|
134
134
|
## Requirements
|
|
135
135
|
|
|
136
136
|
- Python 3.12+
|
|
137
|
-
- `python-getpaid-core >= 3.0.
|
|
137
|
+
- `python-getpaid-core >= 3.0.0`
|
|
138
138
|
- `httpx >= 0.27.0`
|
|
139
139
|
|
|
140
140
|
## License
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v3.0.0 (2026-06-04)
|
|
4
|
+
|
|
5
|
+
Major stable release — PayU payment gateway integration for the python-getpaid ecosystem.
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- Complete rewrite as a framework-agnostic plugin for `python-getpaid-core` v3
|
|
10
|
+
- Requires Python 3.12+
|
|
11
|
+
- Now depends on `python-getpaid-core>=3.0.0` instead of standalone django-getpaid
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- Full PayU REST API v2.1 coverage
|
|
16
|
+
- Async HTTP client (`PayUClient`) with OAuth2 token management
|
|
17
|
+
- Payment processor (`PayUProcessor`) implementing `BaseProcessor`
|
|
18
|
+
- All order operations: create, cancel, capture, retrieve
|
|
19
|
+
- Refund operations: create, retrieve single/all
|
|
20
|
+
- Payment methods retrieval
|
|
21
|
+
- Transaction details retrieval
|
|
22
|
+
- Shop info and payout operations
|
|
23
|
+
- Token deletion
|
|
24
|
+
- Automatic amount centification/normalization
|
|
25
|
+
- Signature verification (MD5 and SHA-256)
|
|
26
|
+
- PUSH callback handling with semantic payment updates
|
|
27
|
+
- PULL status polling
|
|
28
|
+
- Full pre-authorization support (lock, charge, release)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## v0.1.0 (2026-02-14)
|
|
33
|
+
|
|
34
|
+
Initial release.
|
|
35
|
+
|
|
36
|
+
### Features
|
|
37
|
+
|
|
38
|
+
- Full PayU REST API v2.1 coverage
|
|
39
|
+
- Async HTTP client (`PayUClient`) with OAuth2 token management
|
|
40
|
+
- Payment processor (`PayUProcessor`) implementing `BaseProcessor`
|
|
41
|
+
- All order operations: create, cancel, capture, retrieve
|
|
42
|
+
- Refund operations: create, retrieve single/all
|
|
43
|
+
- Payment methods retrieval
|
|
44
|
+
- Transaction details retrieval
|
|
45
|
+
- Shop info and payout operations
|
|
46
|
+
- Token deletion
|
|
47
|
+
- Automatic amount centification/normalization
|
|
48
|
+
- Signature verification (MD5 and SHA-256)
|
|
49
|
+
- PUSH callback handling with semantic payment updates
|
|
50
|
+
- PULL status polling
|
|
51
|
+
- Full pre-authorization support (lock, charge, release)
|
|
@@ -9,7 +9,7 @@ authors = [
|
|
|
9
9
|
]
|
|
10
10
|
requires-python = '>=3.12'
|
|
11
11
|
classifiers = [
|
|
12
|
-
'Development Status ::
|
|
12
|
+
'Development Status :: 5 - Production/Stable',
|
|
13
13
|
'Intended Audience :: Developers',
|
|
14
14
|
'License :: OSI Approved :: MIT License',
|
|
15
15
|
'Programming Language :: Python :: 3.12',
|
|
@@ -19,13 +19,13 @@ classifiers = [
|
|
|
19
19
|
'Typing :: Typed',
|
|
20
20
|
]
|
|
21
21
|
dependencies = [
|
|
22
|
-
'python-getpaid-core>=3.0.
|
|
22
|
+
'python-getpaid-core>=3.0.0',
|
|
23
23
|
'httpx>=0.27.0',
|
|
24
24
|
]
|
|
25
25
|
|
|
26
26
|
[project.optional-dependencies]
|
|
27
27
|
simulator = [
|
|
28
|
-
'python-getpaid-simulator>=3.0.
|
|
28
|
+
'python-getpaid-simulator>=3.0.0',
|
|
29
29
|
'litestar>=2.0',
|
|
30
30
|
]
|
|
31
31
|
|
|
@@ -38,6 +38,7 @@ dev = [
|
|
|
38
38
|
'ruff>=0.9.0',
|
|
39
39
|
'pre-commit>=4.0',
|
|
40
40
|
'ty>=0.0.16',
|
|
41
|
+
'pip-audit>=2.7.0',
|
|
41
42
|
]
|
|
42
43
|
docs = [
|
|
43
44
|
'furo>=2024.8.6',
|
|
@@ -11,7 +11,7 @@ from typing import ClassVar
|
|
|
11
11
|
from getpaid_core.enums import PaymentEvent
|
|
12
12
|
from getpaid_core.exceptions import InvalidCallbackError
|
|
13
13
|
from getpaid_core.processor import BaseProcessor
|
|
14
|
-
from getpaid_core.types import
|
|
14
|
+
from getpaid_core.types import ChargeResult as CoreChargeResult
|
|
15
15
|
from getpaid_core.types import PaymentUpdate
|
|
16
16
|
from getpaid_core.types import RefundResult
|
|
17
17
|
from getpaid_core.types import TransactionResult
|
|
@@ -291,7 +291,7 @@ class PayUProcessor(BaseProcessor):
|
|
|
291
291
|
|
|
292
292
|
async def charge(
|
|
293
293
|
self, amount: Decimal | None = None, **kwargs
|
|
294
|
-
) ->
|
|
294
|
+
) -> CoreChargeResult:
|
|
295
295
|
"""Charge a pre-authorized (locked) payment."""
|
|
296
296
|
client = self._get_client()
|
|
297
297
|
response = await client.capture(self.payment.external_id)
|
|
@@ -299,7 +299,7 @@ class PayUProcessor(BaseProcessor):
|
|
|
299
299
|
response.get("status", {}).get("statusCode")
|
|
300
300
|
== ResponseStatus.SUCCESS
|
|
301
301
|
)
|
|
302
|
-
return
|
|
302
|
+
return CoreChargeResult(
|
|
303
303
|
amount_charged=amount or self.payment.amount_locked,
|
|
304
304
|
success=success,
|
|
305
305
|
async_call=False,
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
-
from enum import StrEnum
|
|
3
2
|
from enum import auto
|
|
4
3
|
from enum import unique
|
|
5
4
|
from typing import Any
|
|
6
5
|
from typing import TypedDict
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
class AutoName(StrEnum):
|
|
10
|
-
@staticmethod
|
|
11
|
-
def _generate_next_value_(name, start, count, last_values):
|
|
12
|
-
return name.strip("_")
|
|
7
|
+
from getpaid_core import AutoName
|
|
13
8
|
|
|
14
9
|
|
|
15
10
|
@unique
|
|
@@ -7,12 +7,12 @@ import getpaid_payu
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def test_version() -> None:
|
|
10
|
-
assert getpaid_payu.__version__ == "3.0.
|
|
10
|
+
assert getpaid_payu.__version__ == "3.0.0"
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def test_core_dependency_floor() -> None:
|
|
14
14
|
pyproject_data = tomllib.loads(Path("pyproject.toml").read_text())
|
|
15
15
|
assert (
|
|
16
|
-
"python-getpaid-core>=3.0.
|
|
16
|
+
"python-getpaid-core>=3.0.0"
|
|
17
17
|
in pyproject_data["project"]["dependencies"]
|
|
18
18
|
)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## v0.1.0 (2026-02-14)
|
|
4
|
-
|
|
5
|
-
Initial release.
|
|
6
|
-
|
|
7
|
-
### Features
|
|
8
|
-
|
|
9
|
-
- Full PayU REST API v2.1 coverage
|
|
10
|
-
- Async HTTP client (`PayUClient`) with OAuth2 token management
|
|
11
|
-
- Payment processor (`PayUProcessor`) implementing `BaseProcessor`
|
|
12
|
-
- All order operations: create, cancel, capture, retrieve
|
|
13
|
-
- Refund operations: create, retrieve single/all
|
|
14
|
-
- Payment methods retrieval
|
|
15
|
-
- Transaction details retrieval
|
|
16
|
-
- Shop info and payout operations
|
|
17
|
-
- Token deletion
|
|
18
|
-
- Automatic amount centification/normalization
|
|
19
|
-
- Signature verification (MD5 and SHA-256)
|
|
20
|
-
- PUSH callback handling with semantic payment updates
|
|
21
|
-
- PULL status polling
|
|
22
|
-
- Full pre-authorization support (lock, charge, release)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/.sisyphus/evidence/task-26-readme-payu.txt
RENAMED
|
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
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/__init__.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/plugin.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/routes.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/signing.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/transitions.py
RENAMED
|
File without changes
|
{python_getpaid_payu-3.0.0a5 → python_getpaid_payu-3.1.0}/src/getpaid_payu/simulator/webhooks.py
RENAMED
|
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
|