openadmin-dev 0.7.6__tar.gz → 0.7.8__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.
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/PKG-INFO +1 -1
- openadmin_dev-0.7.8/examples/admin/docs.py +39 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/main.py +9 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/action.py +2 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/admin_page.py +40 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/form.py +2 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/action.py +4 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/form.py +4 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/pyproject.toml +1 -1
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/uv.lock +1 -1
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/ISSUE_TEMPLATE/chore.md +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/ISSUE_TEMPLATE/feature.md +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/branch-name/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/dependency-cves/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/format/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/license/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/lint/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/security/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/spell-check/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/test/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/typecheck/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/actions/unused-code/action.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/workflows/ci.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.github/workflows/publish.yml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.gitignore +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/.python-version +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/LICENSE +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/LICENSES/AGPL-3.0-or-later.txt +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/Makefile +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/README.md +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/REUSE.toml +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/docs/assets/logo.png +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/__init__.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/__init__.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/analytics.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/authors.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/books.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/genres.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/health.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/overview.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/publishers.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/reports.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/tags.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/admin/weekdays.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/lib/__init__.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/lib/database.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/lib/lifespan.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/lib/models.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/examples/lib/seed.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/__init__.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/admin_panel.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/area_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/bar_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/component.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/counters.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/deps.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/line_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/markdown.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/page_protocol.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/pagination_params.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/pie_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/section.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/stat.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/table.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/fastapi/utils.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/__init__.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/area_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/bar_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/colors.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/component.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/http_methods.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/icons.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/line_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/markdown.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/page.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/pie_chart.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/property.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/property_type.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/section.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/spec.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/stat.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/openadmin/spec/table.py +0 -0
- {openadmin_dev-0.7.6 → openadmin_dev-0.7.8}/tests/test_hello.py +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 OpenAdmin
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
|
|
5
|
+
from openadmin import fastapi, spec
|
|
6
|
+
|
|
7
|
+
page = fastapi.AdminPage("Docs", icon="dock")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@page.markdown("Company policy 1", icon="podcast", color="blue")
|
|
11
|
+
def company_policy_1() -> spec.Markdown:
|
|
12
|
+
return """
|
|
13
|
+
# Hello World
|
|
14
|
+
|
|
15
|
+
This is new text
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
- Cake
|
|
20
|
+
- Limonade
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@page.markdown("Company policy 2")
|
|
25
|
+
def company_policy_2() -> spec.Markdown:
|
|
26
|
+
return {
|
|
27
|
+
"content": """
|
|
28
|
+
# Hello World
|
|
29
|
+
|
|
30
|
+
This is new text
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
- Cake
|
|
35
|
+
- Limonade
|
|
36
|
+
""",
|
|
37
|
+
"color": "yellow",
|
|
38
|
+
"icon": "a-arrow-up",
|
|
39
|
+
}
|
|
@@ -11,6 +11,7 @@ from .admin import (
|
|
|
11
11
|
analytics,
|
|
12
12
|
authors,
|
|
13
13
|
books,
|
|
14
|
+
docs,
|
|
14
15
|
genres,
|
|
15
16
|
health,
|
|
16
17
|
overview,
|
|
@@ -35,6 +36,14 @@ admin_panel = AdminPanel(
|
|
|
35
36
|
"Book Library Admin", description="Manage and explore the book catalog"
|
|
36
37
|
)
|
|
37
38
|
|
|
39
|
+
admin_panel.section(
|
|
40
|
+
"Docs",
|
|
41
|
+
icon="download-cloud",
|
|
42
|
+
pages=[
|
|
43
|
+
docs.page,
|
|
44
|
+
],
|
|
45
|
+
)
|
|
46
|
+
|
|
38
47
|
admin_panel.section(
|
|
39
48
|
"Library", icon="library", pages=[books.page, authors.page, publishers.page]
|
|
40
49
|
)
|
|
@@ -155,6 +155,8 @@ class AdminPage:
|
|
|
155
155
|
method=item.method,
|
|
156
156
|
url=url,
|
|
157
157
|
is_hidden=item.is_hidden,
|
|
158
|
+
icon=item.icon,
|
|
159
|
+
color=item.color,
|
|
158
160
|
query=query,
|
|
159
161
|
body=body,
|
|
160
162
|
form=form,
|
|
@@ -170,6 +172,8 @@ class AdminPage:
|
|
|
170
172
|
method=item.method,
|
|
171
173
|
url=url,
|
|
172
174
|
is_hidden=item.is_hidden,
|
|
175
|
+
icon=item.icon,
|
|
176
|
+
color=item.color,
|
|
173
177
|
query=query,
|
|
174
178
|
body=body,
|
|
175
179
|
form=form,
|
|
@@ -309,6 +313,8 @@ class AdminPage:
|
|
|
309
313
|
*,
|
|
310
314
|
description: str | None = None,
|
|
311
315
|
is_hidden: bool = False,
|
|
316
|
+
icon: spec.Icon | None = None,
|
|
317
|
+
color: spec.Color | None = None,
|
|
312
318
|
):
|
|
313
319
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
314
320
|
|
|
@@ -318,6 +324,8 @@ class AdminPage:
|
|
|
318
324
|
name=name,
|
|
319
325
|
description=description,
|
|
320
326
|
is_hidden=is_hidden,
|
|
327
|
+
icon=icon,
|
|
328
|
+
color=color,
|
|
321
329
|
id=kebab_name,
|
|
322
330
|
)
|
|
323
331
|
self.state.append(item)
|
|
@@ -334,6 +342,8 @@ class AdminPage:
|
|
|
334
342
|
*,
|
|
335
343
|
description: str | None = None,
|
|
336
344
|
is_hidden: bool = False,
|
|
345
|
+
icon: spec.Icon | None = None,
|
|
346
|
+
color: spec.Color | None = None,
|
|
337
347
|
):
|
|
338
348
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
339
349
|
|
|
@@ -343,6 +353,8 @@ class AdminPage:
|
|
|
343
353
|
name=name,
|
|
344
354
|
description=description,
|
|
345
355
|
is_hidden=is_hidden,
|
|
356
|
+
icon=icon,
|
|
357
|
+
color=color,
|
|
346
358
|
id=kebab_name,
|
|
347
359
|
)
|
|
348
360
|
self.state.append(item)
|
|
@@ -359,6 +371,8 @@ class AdminPage:
|
|
|
359
371
|
*,
|
|
360
372
|
description: str | None = None,
|
|
361
373
|
is_hidden: bool = False,
|
|
374
|
+
icon: spec.Icon | None = None,
|
|
375
|
+
color: spec.Color | None = None,
|
|
362
376
|
):
|
|
363
377
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
364
378
|
|
|
@@ -368,6 +382,8 @@ class AdminPage:
|
|
|
368
382
|
name=name,
|
|
369
383
|
description=description,
|
|
370
384
|
is_hidden=is_hidden,
|
|
385
|
+
icon=icon,
|
|
386
|
+
color=color,
|
|
371
387
|
id=kebab_name,
|
|
372
388
|
)
|
|
373
389
|
self.state.append(item)
|
|
@@ -384,6 +400,8 @@ class AdminPage:
|
|
|
384
400
|
*,
|
|
385
401
|
description: str | None = None,
|
|
386
402
|
is_hidden: bool = False,
|
|
403
|
+
icon: spec.Icon | None = None,
|
|
404
|
+
color: spec.Color | None = None,
|
|
387
405
|
):
|
|
388
406
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
389
407
|
|
|
@@ -393,6 +411,8 @@ class AdminPage:
|
|
|
393
411
|
name=name,
|
|
394
412
|
description=description,
|
|
395
413
|
is_hidden=is_hidden,
|
|
414
|
+
icon=icon,
|
|
415
|
+
color=color,
|
|
396
416
|
id=kebab_name,
|
|
397
417
|
)
|
|
398
418
|
self.state.append(item)
|
|
@@ -409,6 +429,8 @@ class AdminPage:
|
|
|
409
429
|
*,
|
|
410
430
|
description: str | None = None,
|
|
411
431
|
is_hidden: bool = False,
|
|
432
|
+
icon: spec.Icon | None = None,
|
|
433
|
+
color: spec.Color | None = None,
|
|
412
434
|
):
|
|
413
435
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
414
436
|
|
|
@@ -418,6 +440,8 @@ class AdminPage:
|
|
|
418
440
|
name=name,
|
|
419
441
|
description=description,
|
|
420
442
|
is_hidden=is_hidden,
|
|
443
|
+
icon=icon,
|
|
444
|
+
color=color,
|
|
421
445
|
id=kebab_name,
|
|
422
446
|
)
|
|
423
447
|
self.state.append(item)
|
|
@@ -434,6 +458,8 @@ class AdminPage:
|
|
|
434
458
|
*,
|
|
435
459
|
description: str | None = None,
|
|
436
460
|
is_hidden: bool = False,
|
|
461
|
+
icon: spec.Icon | None = None,
|
|
462
|
+
color: spec.Color | None = None,
|
|
437
463
|
):
|
|
438
464
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
439
465
|
|
|
@@ -443,6 +469,8 @@ class AdminPage:
|
|
|
443
469
|
name=name,
|
|
444
470
|
description=description,
|
|
445
471
|
is_hidden=is_hidden,
|
|
472
|
+
icon=icon,
|
|
473
|
+
color=color,
|
|
446
474
|
id=kebab_name,
|
|
447
475
|
)
|
|
448
476
|
self.state.append(item)
|
|
@@ -459,6 +487,8 @@ class AdminPage:
|
|
|
459
487
|
*,
|
|
460
488
|
description: str | None = None,
|
|
461
489
|
is_hidden: bool = False,
|
|
490
|
+
icon: spec.Icon | None = None,
|
|
491
|
+
color: spec.Color | None = None,
|
|
462
492
|
):
|
|
463
493
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
464
494
|
|
|
@@ -468,6 +498,8 @@ class AdminPage:
|
|
|
468
498
|
name=name,
|
|
469
499
|
description=description,
|
|
470
500
|
is_hidden=is_hidden,
|
|
501
|
+
icon=icon,
|
|
502
|
+
color=color,
|
|
471
503
|
id=kebab_name,
|
|
472
504
|
)
|
|
473
505
|
self.state.append(item)
|
|
@@ -484,6 +516,8 @@ class AdminPage:
|
|
|
484
516
|
*,
|
|
485
517
|
description: str | None = None,
|
|
486
518
|
is_hidden: bool = False,
|
|
519
|
+
icon: spec.Icon | None = None,
|
|
520
|
+
color: spec.Color | None = None,
|
|
487
521
|
):
|
|
488
522
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
489
523
|
|
|
@@ -493,6 +527,8 @@ class AdminPage:
|
|
|
493
527
|
name=name,
|
|
494
528
|
description=description,
|
|
495
529
|
is_hidden=is_hidden,
|
|
530
|
+
icon=icon,
|
|
531
|
+
color=color,
|
|
496
532
|
id=kebab_name,
|
|
497
533
|
)
|
|
498
534
|
self.state.append(item)
|
|
@@ -509,6 +545,8 @@ class AdminPage:
|
|
|
509
545
|
*,
|
|
510
546
|
description: str | None = None,
|
|
511
547
|
is_hidden: bool = False,
|
|
548
|
+
icon: spec.Icon | None = None,
|
|
549
|
+
color: spec.Color | None = None,
|
|
512
550
|
):
|
|
513
551
|
kebab_name, unique_name = self.__get_kebab_and_unique_name(name)
|
|
514
552
|
|
|
@@ -518,6 +556,8 @@ class AdminPage:
|
|
|
518
556
|
name=name,
|
|
519
557
|
description=description,
|
|
520
558
|
is_hidden=is_hidden,
|
|
559
|
+
icon=icon,
|
|
560
|
+
color=color,
|
|
521
561
|
id=kebab_name,
|
|
522
562
|
)
|
|
523
563
|
self.state.append(item)
|
|
@@ -6,7 +6,9 @@ from typing import Literal
|
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
8
|
|
|
9
|
+
from .colors import Color
|
|
9
10
|
from .http_methods import HttpMethod
|
|
11
|
+
from .icons import Icon
|
|
10
12
|
from .property import Property
|
|
11
13
|
|
|
12
14
|
|
|
@@ -16,6 +18,8 @@ class Action(BaseModel):
|
|
|
16
18
|
name: str
|
|
17
19
|
description: str | None
|
|
18
20
|
url: str
|
|
21
|
+
icon: Icon | None
|
|
22
|
+
color: Color | None
|
|
19
23
|
method: HttpMethod
|
|
20
24
|
is_hidden: bool
|
|
21
25
|
form: list[Property] | None = Field(None)
|
|
@@ -6,7 +6,9 @@ from typing import Literal
|
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
8
|
|
|
9
|
+
from .colors import Color
|
|
9
10
|
from .http_methods import HttpMethod
|
|
11
|
+
from .icons import Icon
|
|
10
12
|
from .property import Property
|
|
11
13
|
|
|
12
14
|
|
|
@@ -16,6 +18,8 @@ class Form(BaseModel):
|
|
|
16
18
|
name: str
|
|
17
19
|
description: str | None
|
|
18
20
|
url: str
|
|
21
|
+
icon: Icon | None
|
|
22
|
+
color: Color | None
|
|
19
23
|
method: HttpMethod
|
|
20
24
|
is_hidden: bool
|
|
21
25
|
form: list[Property] | None = Field(None)
|
|
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
|
|
File without changes
|