TB2J 0.9.9.15__tar.gz → 0.9.9.16__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 (116) hide show
  1. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/PKG-INFO +11 -3
  2. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/Jdownfolder.py +2 -2
  3. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/Jtensor.py +2 -1
  4. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/io_exchange.py +13 -1
  5. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J.egg-info/PKG-INFO +11 -3
  6. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J.egg-info/requires.txt +11 -1
  7. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_downfold.py +12 -2
  8. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/setup.py +6 -3
  9. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/LICENSE +0 -0
  10. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/README.md +0 -0
  11. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/MAE.py +0 -0
  12. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/MAEGreen.py +0 -0
  13. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/Oiju.py +0 -0
  14. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/Oiju_epc.py +0 -0
  15. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/__init__.py +0 -0
  16. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/anisotropy.py +0 -0
  17. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/basis.py +0 -0
  18. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/citation.py +0 -0
  19. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/contour.py +0 -0
  20. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/density_matrix.py +0 -0
  21. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/epc.py +0 -0
  22. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/exchange.py +0 -0
  23. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/exchangeCL2.py +0 -0
  24. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/exchange_params.py +0 -0
  25. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/exchange_pert.py +0 -0
  26. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/exchange_qspace.py +0 -0
  27. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/external/__init__.py +0 -0
  28. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/external/p_tqdm.py +0 -0
  29. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/gpaw_wrapper.py +0 -0
  30. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/green.py +0 -0
  31. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/greentest.py +0 -0
  32. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/__init__.py +0 -0
  33. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/__init__.py +0 -0
  34. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/abacus_api.py +0 -0
  35. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/abacus_wrapper.py +0 -0
  36. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/gen_exchange_abacus.py +0 -0
  37. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/orbital_api.py +0 -0
  38. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/stru_api.py +0 -0
  39. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/test_density_matrix.py +0 -0
  40. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/test_read_HRSR.py +0 -0
  41. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/abacus/test_read_stru.py +0 -0
  42. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/gpaw_interface.py +0 -0
  43. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/lawaf_interface.py +0 -0
  44. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/manager.py +0 -0
  45. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/siesta_interface.py +0 -0
  46. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/interfaces/wannier90_interface.py +0 -0
  47. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/__init__.py +0 -0
  48. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/io_multibinit.py +0 -0
  49. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/io_tomsasd.py +0 -0
  50. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/io_txt.py +0 -0
  51. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/io_uppasd.py +0 -0
  52. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_exchange/io_vampire.py +0 -0
  53. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/io_merge.py +0 -0
  54. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/kpoints.py +0 -0
  55. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/__init__.py +0 -0
  56. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/io_exchange2.py +0 -0
  57. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/magnon3.py +0 -0
  58. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/magnon_band.py +0 -0
  59. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/magnon_dos.py +0 -0
  60. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/magnon_io.py +0 -0
  61. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/magnon_math.py +0 -0
  62. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/plot.py +0 -0
  63. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/plot_magnon_dos_cli.py +0 -0
  64. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/magnon/structure.py +0 -0
  65. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/__init__.py +0 -0
  66. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/auto_kpath.py +0 -0
  67. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/fermi.py +0 -0
  68. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/fibonacci_sphere.py +0 -0
  69. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/kR_convert.py +0 -0
  70. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/lowdin.py +0 -0
  71. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mathutils/rotate_spin.py +0 -0
  72. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/myTB.py +0 -0
  73. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/mycfr.py +0 -0
  74. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/orbital_magmom.py +0 -0
  75. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/orbmap.py +0 -0
  76. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/pauli.py +0 -0
  77. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/pert.py +0 -0
  78. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/plot.py +0 -0
  79. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/rotate_atoms.py +0 -0
  80. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/rotate_siestaDM.py +0 -0
  81. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/sisl_wrapper.py +0 -0
  82. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/__init__.py +0 -0
  83. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/base_parser.py +0 -0
  84. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/constants.py +0 -0
  85. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/hamiltonian.py +0 -0
  86. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/hamiltonian_terms.py +0 -0
  87. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/plot.py +0 -0
  88. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/qsolver.py +0 -0
  89. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/spin_api.py +0 -0
  90. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/spin_xml.py +0 -0
  91. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/spinham/supercell.py +0 -0
  92. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/symmetrize_J.py +0 -0
  93. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/tensor_rotate.py +0 -0
  94. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/thetaphi.py +0 -0
  95. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/utest.py +0 -0
  96. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/utils.py +0 -0
  97. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/versioninfo.py +0 -0
  98. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/wannier/__init__.py +0 -0
  99. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/wannier/w90_parser.py +0 -0
  100. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J/wannier/w90_tb_parser.py +0 -0
  101. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J.egg-info/SOURCES.txt +0 -0
  102. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J.egg-info/dependency_links.txt +0 -0
  103. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J.egg-info/entry_points.txt +0 -0
  104. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/TB2J.egg-info/top_level.txt +0 -0
  105. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_eigen.py +0 -0
  106. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_magnon.py +0 -0
  107. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_magnon2.py +0 -0
  108. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_magnon_dos.py +0 -0
  109. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_merge.py +0 -0
  110. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_plot_magnon_bands.py +0 -0
  111. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_rotate.py +0 -0
  112. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/TB2J_rotateDM.py +0 -0
  113. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/abacus2J.py +0 -0
  114. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/siesta2J.py +0 -0
  115. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/scripts/wann2J.py +0 -0
  116. {tb2j-0.9.9.15 → tb2j-0.9.9.16}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TB2J
3
- Version: 0.9.9.15
3
+ Version: 0.9.9.16
4
4
  Summary: TB2J: First principle to Heisenberg exchange J using tight-binding Green function method
5
5
  Author: Xu He
6
6
  Author-email: mailhexu@gmail.com
@@ -24,16 +24,24 @@ Requires-Dist: packaging>=20.0
24
24
  Requires-Dist: HamiltonIO>=0.2.4
25
25
  Requires-Dist: pre-commit
26
26
  Requires-Dist: sympair>0.1.0
27
- Requires-Dist: sisl>=0.9.0
28
27
  Requires-Dist: tomli>=2.0.0
29
28
  Requires-Dist: tomli-w>=1.0.0
30
- Requires-Dist: netcdf4
29
+ Provides-Extra: siesta
30
+ Requires-Dist: sisl>=0.9.0; extra == "siesta"
31
+ Requires-Dist: netcdf4; extra == "siesta"
32
+ Provides-Extra: lawaf
33
+ Requires-Dist: lawaf==0.2.3; extra == "lawaf"
34
+ Provides-Extra: all
35
+ Requires-Dist: sisl>=0.9.0; extra == "all"
36
+ Requires-Dist: netcdf4; extra == "all"
37
+ Requires-Dist: lawaf==0.2.3; extra == "all"
31
38
  Dynamic: author
32
39
  Dynamic: author-email
33
40
  Dynamic: classifier
34
41
  Dynamic: description
35
42
  Dynamic: license
36
43
  Dynamic: license-file
44
+ Dynamic: provides-extra
37
45
  Dynamic: requires-dist
38
46
  Dynamic: requires-python
39
47
  Dynamic: summary
@@ -94,7 +94,7 @@ class PWFDownfolder:
94
94
  # anchors={(0, 0, 0): (-1, -2, -3, -4)},
95
95
  # anchors={(0, 0, 0): ()},
96
96
  # use_proj=True,
97
- enhance_Amn=0.0,
97
+ enhance_Amn=1.4,
98
98
  )
99
99
  params.update(kwargs)
100
100
  wann.set_parameters(**params)
@@ -176,7 +176,7 @@ class JDownfolder_pickle:
176
176
  self.nsite = self.nM + self.nL
177
177
 
178
178
  def _downfold(self, **kwargs):
179
- JR2 = self.exc.get_full_Jtensor_for_Rlist(asr=True)
179
+ JR2 = self.exc.get_full_Jtensor_for_Rlist(order="i3j3_2D", asr=True)
180
180
  if self.method.lower() == "lowdin":
181
181
  d = JDownfolder(
182
182
  JR2,
@@ -64,8 +64,9 @@ def decompose_J_tensor(Jtensor):
64
64
  :returns:
65
65
 
66
66
  """
67
+ Jtensor = Jtensor.real
67
68
  Jiso = np.average(np.diag(Jtensor))
68
- Dm = (Jtensor - Jtensor.T) / 2.0
69
+ Dm = (Jtensor - Jtensor.T).real / 2.0
69
70
  D = np.array((Dm[1, 2], Dm[2, 0], Dm[0, 1]), dtype=float)
70
71
  Jani = (Jtensor + Jtensor.T) / 2 - np.eye(3) * Jiso
71
72
  return Jiso, D, Jani
@@ -430,8 +430,20 @@ Generation time: {now.strftime("%y/%m/%d %H:%M:%S")}
430
430
  for i in range(n):
431
431
  sum_JRi = np.sum(np.sum(Jmat, axis=0)[i])
432
432
  Jmat[iR0][i, i] -= sum_JRi
433
+ elif order == "i3j3_2D":
434
+ Jmat = np.zeros((nR, n3, n3), dtype=float)
435
+ for iR, R in enumerate(self.Rlist):
436
+ Jmat[iR] = self.get_full_Jtensor_for_one_R_i3j3(
437
+ R, Jiso=Jiso, Jani=Jani, DMI=DMI
438
+ ).reshape((n3, n3))
439
+ if asr:
440
+ iR0 = np.argmin(np.linalg.norm(self.Rlist, axis=1))
441
+ assert np.linalg.norm(self.Rlist[iR0]) == 0
442
+ for i in range(n3):
443
+ sum_JRi = np.sum(np.sum(Jmat, axis=0)[i])
444
+ Jmat[iR0][i, i] -= sum_JRi
433
445
  else:
434
- raise ValueError("order must be either 'i3j3' or 'ij33'.")
446
+ raise ValueError("order must be either 'i3j3' or 'ij33', or 'i3j3_2D'.")
435
447
  return Jmat
436
448
 
437
449
  def write_pickle(self, path="TB2J_results", fname="TB2J.pickle"):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TB2J
3
- Version: 0.9.9.15
3
+ Version: 0.9.9.16
4
4
  Summary: TB2J: First principle to Heisenberg exchange J using tight-binding Green function method
5
5
  Author: Xu He
6
6
  Author-email: mailhexu@gmail.com
@@ -24,16 +24,24 @@ Requires-Dist: packaging>=20.0
24
24
  Requires-Dist: HamiltonIO>=0.2.4
25
25
  Requires-Dist: pre-commit
26
26
  Requires-Dist: sympair>0.1.0
27
- Requires-Dist: sisl>=0.9.0
28
27
  Requires-Dist: tomli>=2.0.0
29
28
  Requires-Dist: tomli-w>=1.0.0
30
- Requires-Dist: netcdf4
29
+ Provides-Extra: siesta
30
+ Requires-Dist: sisl>=0.9.0; extra == "siesta"
31
+ Requires-Dist: netcdf4; extra == "siesta"
32
+ Provides-Extra: lawaf
33
+ Requires-Dist: lawaf==0.2.3; extra == "lawaf"
34
+ Provides-Extra: all
35
+ Requires-Dist: sisl>=0.9.0; extra == "all"
36
+ Requires-Dist: netcdf4; extra == "all"
37
+ Requires-Dist: lawaf==0.2.3; extra == "all"
31
38
  Dynamic: author
32
39
  Dynamic: author-email
33
40
  Dynamic: classifier
34
41
  Dynamic: description
35
42
  Dynamic: license
36
43
  Dynamic: license-file
44
+ Dynamic: provides-extra
37
45
  Dynamic: requires-dist
38
46
  Dynamic: requires-python
39
47
  Dynamic: summary
@@ -8,7 +8,17 @@ packaging>=20.0
8
8
  HamiltonIO>=0.2.4
9
9
  pre-commit
10
10
  sympair>0.1.0
11
- sisl>=0.9.0
12
11
  tomli>=2.0.0
13
12
  tomli-w>=1.0.0
13
+
14
+ [all]
15
+ sisl>=0.9.0
16
+ netcdf4
17
+ lawaf==0.2.3
18
+
19
+ [lawaf]
20
+ lawaf==0.2.3
21
+
22
+ [siesta]
23
+ sisl>=0.9.0
14
24
  netcdf4
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  import argparse
3
- import os
4
- import sys
3
+
5
4
  from TB2J.Jdownfolder import JDownfolder_pickle
5
+ from TB2J.versioninfo import print_license
6
6
 
7
7
 
8
8
  def main():
@@ -73,6 +73,15 @@ def main():
73
73
  if len(args.ligands) == []:
74
74
  print("List of ligand elements cannot be empty")
75
75
 
76
+ print_license()
77
+ print("Input path:", args.inpath)
78
+ print("Output path:", args.outpath)
79
+ print("Magnetic cation elements:", args.metals)
80
+ print("Ligand elements:", args.ligands)
81
+ print("k-mesh:", args.qmesh)
82
+ print("Downfolding method:", args.method)
83
+ print("Downfolding only isotropic part:", args.iso_only)
84
+ print("Begining downfolding the exchange parameters:")
76
85
  JDownfolder_pickle(
77
86
  inpath=args.inpath,
78
87
  metals=args.metals,
@@ -82,6 +91,7 @@ def main():
82
91
  iso_only=args.iso_only,
83
92
  method=args.method,
84
93
  )
94
+ print("Downfolding finished. Results are saved in:", args.outpath)
85
95
 
86
96
 
87
97
  main()
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  from setuptools import find_packages, setup
3
3
 
4
- __version__ = "0.9.9.15"
4
+ __version__ = "0.9.9.16"
5
5
 
6
6
  long_description = """TB2J is a Python package aimed to compute automatically the magnetic interactions (superexchange and Dzyaloshinskii-Moriya) between atoms of magnetic crystals from DFT Hamiltonian based on Wannier functions or Linear combination of atomic orbitals. It uses the Green's function method and take the local rigid spin rotation as a perturbation. The package can take the output from Wannier90, which is interfaced with many density functional theory codes or from codes based on localised orbitals. A minimal user input is needed, which allows for an easily integration into a high-throughput workflows. """
7
7
 
@@ -46,11 +46,14 @@ setup(
46
46
  "HamiltonIO>=0.2.4",
47
47
  "pre-commit",
48
48
  "sympair>0.1.0",
49
- "sisl>=0.9.0",
50
49
  "tomli>=2.0.0",
51
50
  "tomli-w>=1.0.0",
52
- "netcdf4",
53
51
  ],
52
+ extras_require={
53
+ "siesta": ["sisl>=0.9.0", "netcdf4"],
54
+ "lawaf": ["lawaf==0.2.3"],
55
+ "all": ["sisl>=0.9.0", "netcdf4", "lawaf==0.2.3"],
56
+ },
54
57
  classifiers=[
55
58
  "Development Status :: 3 - Alpha",
56
59
  "Programming Language :: Python :: 3",
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