omdev 0.0.0.dev506__py3-none-any.whl → 0.0.0.dev509__py3-none-any.whl
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.
Potentially problematic release.
This version of omdev might be problematic. Click here for more details.
- omdev/.omlish-manifests.json +1 -1
- omdev/cache/data/specs.py +1 -1
- omdev/cexts/cmake.py +41 -1
- omdev/imgur.py +2 -2
- omdev/py/tools/pipdepup.py +16 -0
- omdev/pyproject/tools/buildrs.py +85 -0
- {omdev-0.0.0.dev506.dist-info → omdev-0.0.0.dev509.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev506.dist-info → omdev-0.0.0.dev509.dist-info}/RECORD +12 -11
- {omdev-0.0.0.dev506.dist-info → omdev-0.0.0.dev509.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev506.dist-info → omdev-0.0.0.dev509.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev506.dist-info → omdev-0.0.0.dev509.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev506.dist-info → omdev-0.0.0.dev509.dist-info}/top_level.txt +0 -0
omdev/.omlish-manifests.json
CHANGED
omdev/cache/data/specs.py
CHANGED
|
@@ -63,7 +63,7 @@ class UrlSpec(Spec):
|
|
|
63
63
|
|
|
64
64
|
_: dc.KW_ONLY
|
|
65
65
|
|
|
66
|
-
headers: ta.Mapping[str, str] | None = dc.field(default=None) | msh.
|
|
66
|
+
headers: ta.Mapping[str, str] | None = dc.field(default=None) | msh.with_field_options(omit_if=operator.not_)
|
|
67
67
|
|
|
68
68
|
@cached.property
|
|
69
69
|
def file_name_or_default(self) -> str:
|
omdev/cexts/cmake.py
CHANGED
|
@@ -55,6 +55,33 @@ log = logs.get_module_logger(globals())
|
|
|
55
55
|
##
|
|
56
56
|
|
|
57
57
|
|
|
58
|
+
CLANG_TIDY_COMMAND_TEMPLATE = """
|
|
59
|
+
find_program(CLANG_TIDY_EXE NAMES clang-tidy)
|
|
60
|
+
|
|
61
|
+
if(CLANG_TIDY_EXE)
|
|
62
|
+
add_custom_target(tidy
|
|
63
|
+
COMMAND ${CLANG_TIDY_EXE}
|
|
64
|
+
-p ${CMAKE_BINARY_DIR}
|
|
65
|
+
${ALL_SOURCE_FILES}
|
|
66
|
+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
67
|
+
COMMENT "Running clang-tidy on all source files"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
add_custom_target(tidy-fix
|
|
71
|
+
COMMAND ${CLANG_TIDY_EXE}
|
|
72
|
+
-p ${CMAKE_BINARY_DIR}
|
|
73
|
+
-fix
|
|
74
|
+
${ALL_SOURCE_FILES}
|
|
75
|
+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
76
|
+
COMMENT "Running clang-tidy with automatic fixes"
|
|
77
|
+
)
|
|
78
|
+
endif()
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
##
|
|
83
|
+
|
|
84
|
+
|
|
58
85
|
def _sep_str_grps(*ls: ta.Sequence[str]) -> list[str]:
|
|
59
86
|
o = []
|
|
60
87
|
for i, l in enumerate(ls):
|
|
@@ -112,6 +139,15 @@ class CmakeProjectGen:
|
|
|
112
139
|
with open(os.path.join(self.cmake_dir(), '.gitignore'), 'w') as f:
|
|
113
140
|
f.write('\n'.join(sorted(['/cmake-*', '/build'])))
|
|
114
141
|
|
|
142
|
+
def add_root_symlinks(self) -> None:
|
|
143
|
+
for fn in [
|
|
144
|
+
'.clang-tidy',
|
|
145
|
+
]:
|
|
146
|
+
check.state(os.path.isfile(sfp := os.path.abspath(os.path.join(self._prj_root, fn))))
|
|
147
|
+
dfp = os.path.join(self.cmake_dir(), fn)
|
|
148
|
+
rp = os.path.relpath(os.path.abspath(sfp), self.cmake_dir())
|
|
149
|
+
os.symlink(rp, dfp)
|
|
150
|
+
|
|
115
151
|
#
|
|
116
152
|
|
|
117
153
|
@dc.dataclass(frozen=True, kw_only=True)
|
|
@@ -218,7 +254,7 @@ class CmakeProjectGen:
|
|
|
218
254
|
['TARGET', ext_name, 'POST_BUILD'],
|
|
219
255
|
[
|
|
220
256
|
' '.join([
|
|
221
|
-
'COMMAND ${CMAKE_COMMAND} -E
|
|
257
|
+
'COMMAND ${CMAKE_COMMAND} -E',
|
|
222
258
|
f'copy $<TARGET_FILE_NAME:{ext_name}> ../../../{os.path.dirname(ext_src)}/{so_name}',
|
|
223
259
|
]),
|
|
224
260
|
'COMMAND_EXPAND_LISTS',
|
|
@@ -235,6 +271,9 @@ class CmakeProjectGen:
|
|
|
235
271
|
self.g.write(f'project({self.p.prj_name()})')
|
|
236
272
|
self.g.write('')
|
|
237
273
|
|
|
274
|
+
self.g.write('set(CMAKE_EXPORT_COMPILE_COMMANDS ON)')
|
|
275
|
+
self.g.write('')
|
|
276
|
+
|
|
238
277
|
self.g.write_var(cmake.Var(
|
|
239
278
|
f'{self.var_prefix}_INCLUDE_DIRECTORIES',
|
|
240
279
|
_sep_str_grps(
|
|
@@ -309,6 +348,7 @@ class CmakeProjectGen:
|
|
|
309
348
|
|
|
310
349
|
self.cmake_dir()
|
|
311
350
|
self.write_git_ignore()
|
|
351
|
+
self.add_root_symlinks()
|
|
312
352
|
|
|
313
353
|
out = io.StringIO()
|
|
314
354
|
clg = self._CmakeListsGen(self, out)
|
omdev/imgur.py
CHANGED
|
@@ -40,7 +40,7 @@ from .home.secrets import load_secrets
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
@dc.dataclass(frozen=True)
|
|
43
|
-
@msh.
|
|
43
|
+
@msh.update_object_options(unknown_field='x')
|
|
44
44
|
class ImageUploadData:
|
|
45
45
|
id: str
|
|
46
46
|
deletehash: str # noqa
|
|
@@ -66,7 +66,7 @@ class ImageUploadData:
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
@dc.dataclass(frozen=True)
|
|
69
|
-
@msh.
|
|
69
|
+
@msh.update_object_options(unknown_field='x')
|
|
70
70
|
class ImageUploadResponse:
|
|
71
71
|
status: int
|
|
72
72
|
success: bool
|
omdev/py/tools/pipdepup.py
CHANGED
|
@@ -327,6 +327,10 @@ class Package:
|
|
|
327
327
|
unfiltered_candidates: ta.Sequence[Candidate] | None = None
|
|
328
328
|
candidates: ta.Sequence[Candidate] | None = None
|
|
329
329
|
|
|
330
|
+
@cached.function
|
|
331
|
+
def candidates_by_version(self) -> ta.Mapping[Version, ta.Sequence[Candidate]]:
|
|
332
|
+
return col.multi_map_by(lambda c: c.version, check.not_none(self.candidates))
|
|
333
|
+
|
|
330
334
|
latest_candidate: Candidate | None = None
|
|
331
335
|
suggested_candidate: Candidate | None = None
|
|
332
336
|
|
|
@@ -511,7 +515,9 @@ def format_for_columns(pkgs: ta.Sequence[Package]) -> tuple[list[list[str]], lis
|
|
|
511
515
|
|
|
512
516
|
header = [
|
|
513
517
|
'Package',
|
|
518
|
+
|
|
514
519
|
'Current',
|
|
520
|
+
'Age',
|
|
515
521
|
|
|
516
522
|
'Suggested',
|
|
517
523
|
'Age',
|
|
@@ -543,9 +549,19 @@ def format_for_columns(pkgs: ta.Sequence[Package]) -> tuple[list[list[str]], lis
|
|
|
543
549
|
|
|
544
550
|
row = [
|
|
545
551
|
pkg.dist.raw_name,
|
|
552
|
+
|
|
546
553
|
pkg.dist.raw_version,
|
|
547
554
|
]
|
|
548
555
|
|
|
556
|
+
if (
|
|
557
|
+
(cs := pkg.candidates_by_version().get(pkg.dist.version)) and
|
|
558
|
+
# FIXME: lame and wrong lol
|
|
559
|
+
(c_ut := cs[0].upload_time()) is not None
|
|
560
|
+
):
|
|
561
|
+
row.append(human_round_td(now_utc() - c_ut))
|
|
562
|
+
else:
|
|
563
|
+
row.append('')
|
|
564
|
+
|
|
549
565
|
def add_c(c):
|
|
550
566
|
if c is None:
|
|
551
567
|
row.extend(['', ''])
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import os.path
|
|
3
|
+
import shlex
|
|
4
|
+
import shutil
|
|
5
|
+
import subprocess
|
|
6
|
+
import sys
|
|
7
|
+
import zipfile
|
|
8
|
+
|
|
9
|
+
from omlish.lite.check import check
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _main() -> None:
|
|
16
|
+
parser = argparse.ArgumentParser()
|
|
17
|
+
parser.add_argument('rs_pkg', nargs='*')
|
|
18
|
+
args = parser.parse_args()
|
|
19
|
+
|
|
20
|
+
pkgs_dir = '.pkg'
|
|
21
|
+
if not os.path.isdir(pkgs_dir):
|
|
22
|
+
raise RuntimeError(f'{pkgs_dir=} does not exist')
|
|
23
|
+
|
|
24
|
+
if not (rs_pkgs := args.rs_pkg):
|
|
25
|
+
rs_pkgs = sorted(
|
|
26
|
+
n
|
|
27
|
+
for n in os.listdir(pkgs_dir)
|
|
28
|
+
if os.path.isdir(p := os.path.join(pkgs_dir, n))
|
|
29
|
+
and n.endswith('-rs')
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
for rs_pkg in rs_pkgs:
|
|
33
|
+
print(rs_pkg)
|
|
34
|
+
|
|
35
|
+
rs_pkg_dir = os.path.join(pkgs_dir, rs_pkg)
|
|
36
|
+
|
|
37
|
+
for n in os.listdir(rs_pkg_dir):
|
|
38
|
+
p = os.path.join(rs_pkg_dir, n)
|
|
39
|
+
if not os.path.isdir(p):
|
|
40
|
+
continue
|
|
41
|
+
if n == 'dist' or n.endswith('.egg-info'):
|
|
42
|
+
shutil.rmtree(p)
|
|
43
|
+
|
|
44
|
+
subprocess.run(
|
|
45
|
+
[
|
|
46
|
+
'sh', '-c', f'{shlex.quote(sys.executable)} "$@"', '--', # sys.executable,
|
|
47
|
+
'-m',
|
|
48
|
+
'build',
|
|
49
|
+
],
|
|
50
|
+
cwd=rs_pkg_dir,
|
|
51
|
+
env={
|
|
52
|
+
**os.environ,
|
|
53
|
+
'OMLISH_PYCHARM_RUNHACK_ENABLED': '0',
|
|
54
|
+
},
|
|
55
|
+
check=True,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
dist_dir = os.path.join(rs_pkg_dir, 'dist')
|
|
59
|
+
whl_ns = [
|
|
60
|
+
n
|
|
61
|
+
for n in os.listdir(dist_dir)
|
|
62
|
+
if os.path.isfile(os.path.join(dist_dir, n))
|
|
63
|
+
and n.endswith('.whl')
|
|
64
|
+
]
|
|
65
|
+
whl_n = check.single(whl_ns)
|
|
66
|
+
whl_path = os.path.join(dist_dir, whl_n)
|
|
67
|
+
|
|
68
|
+
with zipfile.ZipFile(whl_path) as zf:
|
|
69
|
+
for zn in zf.namelist():
|
|
70
|
+
if not zn.endswith('.so'):
|
|
71
|
+
continue
|
|
72
|
+
|
|
73
|
+
zi = zf.getinfo(zn)
|
|
74
|
+
if zi.is_dir():
|
|
75
|
+
continue
|
|
76
|
+
|
|
77
|
+
print(zn)
|
|
78
|
+
|
|
79
|
+
zf.extract(zi)
|
|
80
|
+
|
|
81
|
+
print()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
if __name__ == '__main__':
|
|
85
|
+
_main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev509
|
|
4
4
|
Summary: omdev
|
|
5
5
|
Author: wrmsr
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: omlish==0.0.0.
|
|
17
|
+
Requires-Dist: omlish==0.0.0.dev509
|
|
18
18
|
Provides-Extra: all
|
|
19
19
|
Requires-Dist: black~=26.1; extra == "all"
|
|
20
20
|
Requires-Dist: pycparser~=2.23; extra == "all"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
omdev/.omlish-manifests.json,sha256=
|
|
1
|
+
omdev/.omlish-manifests.json,sha256=RoDWqg2je7u5jnJo8Gb7QuVMKsrAGNmxvFGXiLaBoUk,11671
|
|
2
2
|
omdev/README.md,sha256=IxhRiW6wAsK4XKR9lmOlpkTbX8vcNcQwqal8HelK0yU,3326
|
|
3
3
|
omdev/__about__.py,sha256=VvUiwWTVeZ3cQDNaFD-3L3juUvkoLH-o7WR4DfXGexE,1321
|
|
4
4
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
omdev/cmake.py,sha256=gu49t10_syXh_TUJs4POsxeFs8we8Y3XTOOPgIXmGvg,4608
|
|
6
|
-
omdev/imgur.py,sha256=
|
|
6
|
+
omdev/imgur.py,sha256=gzYCBH-ehX-gbL4dV7RoxPOjKcQzSfsBxsg2PMeeD6I,3131
|
|
7
7
|
omdev/pip.py,sha256=PqzAWDO_CbiZvXzJAZcCkFqWynUDls1jIgBWlrswQyA,2012
|
|
8
8
|
omdev/tagstrings.py,sha256=cBmAc9-TtOBupvGQ9G4T1jjjtzijx4ihQCBu6FezzV0,5490
|
|
9
9
|
omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -36,7 +36,7 @@ omdev/cache/data/cache.py,sha256=h5xQUxiye2exsMUWh1pDeMz_t3LEC75kvloIDg57xMI,766
|
|
|
36
36
|
omdev/cache/data/consts.py,sha256=d6W_aeMqgah6PmPYi9RA8Be54oQ4BcNCy8kDQ7FlB_Q,26
|
|
37
37
|
omdev/cache/data/defaults.py,sha256=NL_mT7kaSLm2Mk9VO5wdSu-DIcHTR1KgcihJqdSd4TY,312
|
|
38
38
|
omdev/cache/data/manifests.py,sha256=NweXxbkuLMBG1DiUFliOSYeXBrLPMIY4GA_gOZzHwho,949
|
|
39
|
-
omdev/cache/data/specs.py,sha256=
|
|
39
|
+
omdev/cache/data/specs.py,sha256=2QWn-WUCbUF6zDQXjJWtagtx2f_Zqp6Q6IVhNExKam4,2466
|
|
40
40
|
omdev/capi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
omdev/capi/darwin/__init__.py,sha256=iAlc3ReV3LJOv5X9zGME1FKeZ2yf0auUuj1I3sGSo4E,86
|
|
42
42
|
omdev/capi/darwin/aps.py,sha256=_DAGaOZYk9T1VoO22H5ZiV8F1qeTIQDO7UkYSj5UisE,1278
|
|
@@ -54,7 +54,7 @@ omdev/cc/srclangs.py,sha256=3u_APHgknuc-BPRQSDISwSzouluKsnLlBxodp-XCl_E,728
|
|
|
54
54
|
omdev/cexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
55
|
omdev/cexts/_boilerplate.cc,sha256=tUTFKyMpammFj-7bF8DbN6jv67Vn7qrwCFDoAgarof8,1753
|
|
56
56
|
omdev/cexts/build.py,sha256=JxEuqSpspnY6kWn8eB89FjcSjF4bpNgVYNeIvwmWehY,2659
|
|
57
|
-
omdev/cexts/cmake.py,sha256=
|
|
57
|
+
omdev/cexts/cmake.py,sha256=ySsPuy4va3TlKygvt2_QxKvA29nikdkETaq_Y1tAgok,11285
|
|
58
58
|
omdev/cexts/importhook.py,sha256=GZ04bE6tMQ8uQUUzGr22Rt9cwyI6kkoK4t7xpLP2Lrs,3562
|
|
59
59
|
omdev/cexts/magic.py,sha256=DglhjCXEiL28pFTN4lrmUW6ZLn6HaumR13ptyaFOez4,131
|
|
60
60
|
omdev/cexts/scan.py,sha256=94UqVgxBrAHn_VyW_ZA3-hB_R6pWIJRWqvtSBEg_O4U,1673
|
|
@@ -284,7 +284,7 @@ omdev/py/tokens/utils.py,sha256=_dlXx-_npiGeZkMZVbXaXQDGts9yY8UnEJcT_bwPj0A,2084
|
|
|
284
284
|
omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
285
285
|
omdev/py/tools/importscan.py,sha256=OYPZBg__u6On416tcmYfRTMkjr1ZlFcOAy9AafJ8iuo,4648
|
|
286
286
|
omdev/py/tools/mkrelimp.py,sha256=kQAADYW1f1Y2WbIuqWOFNWJl96oT7nqW38XPCkLIyjQ,4039
|
|
287
|
-
omdev/py/tools/pipdepup.py,sha256=
|
|
287
|
+
omdev/py/tools/pipdepup.py,sha256=mSso04OyE3rSU3l9VBQ1CpsvIRB2SM4o1AbqyUsVi2c,20594
|
|
288
288
|
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
289
289
|
omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
|
|
290
290
|
omdev/pyproject/cli.py,sha256=erEo9VT7c-Fwtq0lJbb_IkWBPqBAAtiui8Xna93yk3Y,7874
|
|
@@ -299,6 +299,7 @@ omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQ
|
|
|
299
299
|
omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
|
|
300
300
|
omdev/pyproject/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
301
301
|
omdev/pyproject/tools/aboutdeps.py,sha256=XmvSKsn3kdY0K2Llh-jhNskm4sK46Y8fWnUlPXBrI34,1592
|
|
302
|
+
omdev/pyproject/tools/buildrs.py,sha256=tL7HnkXvjF19W3C0tlxq7yJ08lceUyUH1q84Kn7-fNo,2023
|
|
302
303
|
omdev/pyproject/tools/pyversions.py,sha256=CV6qV5nlrt1or7OQVf3bYIKLfyEdjmgedQVVlr-DroM,1047
|
|
303
304
|
omdev/rs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
304
305
|
omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
|
|
@@ -380,9 +381,9 @@ omdev/tui/textual/autocomplete/widget.py,sha256=1UgWqDT0d9wD6w7MNaZBjgj0o9FohYXy
|
|
|
380
381
|
omdev/tui/textual/debug/__init__.py,sha256=RW9-Toj5_JnXBJCnRiXpXLpRA__MxG01xW1h_iNuUTY,189
|
|
381
382
|
omdev/tui/textual/debug/dominfo.py,sha256=1iH1xbZY-zUoIyfmdvSzVNjGqeeOnBcjeDI2V1Xn3rg,4401
|
|
382
383
|
omdev/tui/textual/debug/screen.py,sha256=w4cbRJWemcu5jBomGDmVtgtjiaWOS1Wkw1Mc6mu-5Zc,594
|
|
383
|
-
omdev-0.0.0.
|
|
384
|
-
omdev-0.0.0.
|
|
385
|
-
omdev-0.0.0.
|
|
386
|
-
omdev-0.0.0.
|
|
387
|
-
omdev-0.0.0.
|
|
388
|
-
omdev-0.0.0.
|
|
384
|
+
omdev-0.0.0.dev509.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
385
|
+
omdev-0.0.0.dev509.dist-info/METADATA,sha256=5N5gJW5cV8ft6Fd6_YAHcMDYE9poLnAyvhs63U7jmZo,5372
|
|
386
|
+
omdev-0.0.0.dev509.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
387
|
+
omdev-0.0.0.dev509.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
|
388
|
+
omdev-0.0.0.dev509.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
389
|
+
omdev-0.0.0.dev509.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|