imt-ring 1.6.39__tar.gz → 1.6.42__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {imt_ring-1.6.39 → imt_ring-1.6.42}/PKG-INFO +1 -1
- {imt_ring-1.6.39 → imt_ring-1.6.42}/pyproject.toml +1 -1
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/imt_ring.egg-info/PKG-INFO +1 -1
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/base.py +6 -2
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/sim2real/sim2real.py +29 -5
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_custom_joints.py +5 -5
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_maths.py +6 -3
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_ml_utils.py +1 -1
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_random.py +2 -1
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_train.py +5 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/readme.md +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/setup.cfg +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/imt_ring.egg-info/SOURCES.txt +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/imt_ring.egg-info/dependency_links.txt +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/imt_ring.egg-info/requires.txt +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/imt_ring.egg-info/top_level.txt +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algebra.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/_random.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/custom_joints/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/custom_joints/rr_imp_joint.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/custom_joints/rr_joint.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/custom_joints/rsaddle_joint.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/custom_joints/suntay.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/dynamics.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/base.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/batch.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/finalize_fns.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/motion_artifacts.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/pd_control.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/setup_fns.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/generator/types.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/jcalc.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/kinematics.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/algorithms/sensors.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/base.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/branched.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/exclude/knee_trans_dof.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/exclude/standard_sys.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/exclude/standard_sys_rr_imp.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/inv_pendulum.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/knee_flexible_imus.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/spherical_stiff.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/symmetric.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_all_1.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_all_2.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_ang0_pos0.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_control.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_double_pendulum.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_free.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_kinematics.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_morph_system/four_seg_seg1.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_morph_system/four_seg_seg3.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_randomize_position.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_sensors.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_three_seg_seg2.xml +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/test_examples.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/xml/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/xml/abstract.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/xml/from_xml.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/xml/test_from_xml.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/xml/test_to_xml.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/xml/to_xml.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/maths.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/callbacks.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/ml_utils.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/optimizer.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/params/0x13e3518065c21cd8.pickle +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/params/0x1d76628065a71e0f.pickle +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/ringnet.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/rnno_v1.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/train.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/ml/training_loop.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/rendering/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/rendering/base_render.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/rendering/mujoco_render.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/rendering/vispy_render.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/rendering/vispy_visuals.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/sim2real/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/spatial.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/sys_composer/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/sys_composer/delete_sys.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/sys_composer/inject_sys.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/sys_composer/morph_sys.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/backend.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/batchsize.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/colab.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/dataloader.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/dataloader_torch.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/hdf5.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/normalizer.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/path.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/randomize_sys.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/register_gym_envs/__init__.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/register_gym_envs/saddle.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/utils/utils.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_algebra.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_base.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_dynamics.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_generator.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_jcalc.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_jit.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_kinematics.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_motion_artifacts.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_pd_control.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_quickstart_example.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_randomize.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_rcmg.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_render.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_sensors.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_sim2real.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_sys_composer.py +0 -0
- {imt_ring-1.6.39 → imt_ring-1.6.42}/tests/test_utils.py +0 -0
@@ -297,8 +297,12 @@ class NoGraph_FilterWrapper(AbstractFilterWrapper):
|
|
297
297
|
|
298
298
|
if self._quat_normalize:
|
299
299
|
assert yhat.shape[-1] == 4, f"yhat.shape={yhat.shape}"
|
300
|
-
|
301
|
-
|
300
|
+
|
301
|
+
# for exporting neural networks to ONNX format, you will have to use
|
302
|
+
# the first version, but for neural network training the second version
|
303
|
+
# is required
|
304
|
+
# yhat = yhat / jnp.linalg.norm(yhat, axis=-1, keepdims=True)
|
305
|
+
yhat = ring.maths.safe_normalize(yhat)
|
302
306
|
|
303
307
|
return yhat, state
|
304
308
|
|
@@ -1,13 +1,14 @@
|
|
1
1
|
from typing import Optional, Tuple
|
2
2
|
|
3
3
|
import jax
|
4
|
+
import tree_utils
|
5
|
+
|
4
6
|
from ring import algebra
|
5
7
|
from ring import base
|
6
8
|
from ring import io
|
7
9
|
from ring import maths
|
8
10
|
from ring.algorithms import generator
|
9
11
|
from ring.algorithms import jcalc
|
10
|
-
import tree_utils
|
11
12
|
|
12
13
|
|
13
14
|
def xs_from_raw(
|
@@ -189,7 +190,14 @@ def delete_to_world_pos_rot(sys: base.System, xs: base.Transform) -> base.Transf
|
|
189
190
|
|
190
191
|
|
191
192
|
def randomize_to_world_pos_rot(
|
192
|
-
key: jax.Array,
|
193
|
+
key: jax.Array,
|
194
|
+
sys: base.System,
|
195
|
+
xs: base.Transform,
|
196
|
+
config: jcalc.MotionConfig,
|
197
|
+
world_joint: str = "free",
|
198
|
+
cor: bool = False,
|
199
|
+
overwrite_q_ref: jax.Array = None,
|
200
|
+
damping=None,
|
193
201
|
) -> base.Transform:
|
194
202
|
"""Replace the transforms of all links that connect to the worldbody
|
195
203
|
by randomize transforms.
|
@@ -210,14 +218,30 @@ def randomize_to_world_pos_rot(
|
|
210
218
|
<x_xy>
|
211
219
|
<options dt="0.01"/>
|
212
220
|
<worldbody>
|
213
|
-
<body name="free" joint="free"
|
221
|
+
<body name="free" joint="free" damping="15.0 15.0 15.0 25.0 25.0 25.0">
|
222
|
+
<geom type="box" mass="1" dim="0.1 0.1 0.1"/>
|
223
|
+
</body>
|
214
224
|
</worldbody>
|
215
225
|
</x_xy>
|
216
226
|
"""
|
217
|
-
|
218
227
|
free_sys = io.load_sys_from_str(free_sys_str)
|
228
|
+
|
229
|
+
dynamic_simulation = True if overwrite_q_ref is not None else False
|
230
|
+
|
231
|
+
if world_joint != "free":
|
232
|
+
if dynamic_simulation:
|
233
|
+
assert damping is not None
|
234
|
+
free_sys = free_sys.change_joint_type("free", world_joint, new_damp=damping)
|
235
|
+
|
219
236
|
_, xs_free = generator.RCMG(
|
220
|
-
free_sys,
|
237
|
+
free_sys,
|
238
|
+
config,
|
239
|
+
finalize_fn=lambda key, q, x, sys: (q, x),
|
240
|
+
cor=cor,
|
241
|
+
dynamic_simulation=dynamic_simulation,
|
242
|
+
dynamic_simulation_kwargs=dict(
|
243
|
+
overwrite_q_ref=(overwrite_q_ref, free_sys.idx_map("q"))
|
244
|
+
),
|
221
245
|
).to_lazy_gen()(key)
|
222
246
|
xs_free = xs_free.take(0, axis=0)
|
223
247
|
xs_free = xs_free.take(free_sys.name_to_idx("free"), axis=1)
|
@@ -41,7 +41,7 @@ def test_virtual_input_joint_axes_rr_joint():
|
|
41
41
|
X = pipeline_load_data_X(sys)
|
42
42
|
|
43
43
|
np.testing.assert_allclose(
|
44
|
-
|
44
|
+
X["seg1"]["joint_axes"],
|
45
45
|
np.repeat(np.array([[0.0, 1, 0]]), 1000, axis=0),
|
46
46
|
atol=2e-6,
|
47
47
|
)
|
@@ -55,7 +55,7 @@ def test_virtual_input_joint_axes_rr_joint():
|
|
55
55
|
X = pipeline_load_data_X(sys_rr)
|
56
56
|
|
57
57
|
np.testing.assert_allclose(
|
58
|
-
X["seg1"]["joint_axes"],
|
58
|
+
-X["seg1"]["joint_axes"],
|
59
59
|
np.repeat(-joint_axes[1:2], 1000, axis=0),
|
60
60
|
atol=2e-6,
|
61
61
|
rtol=5e-4,
|
@@ -83,13 +83,13 @@ def test_virtual_input_joint_axes_rr_imp_joint():
|
|
83
83
|
X = pipeline_load_data_X(sys_rr_imp)
|
84
84
|
|
85
85
|
np.testing.assert_allclose(
|
86
|
-
|
86
|
+
X["seg1"]["joint_axes"],
|
87
87
|
np.repeat(joint_axes[1:2], 1000, axis=0),
|
88
88
|
atol=0.01,
|
89
89
|
rtol=0.02,
|
90
90
|
)
|
91
91
|
np.testing.assert_allclose(
|
92
|
-
|
92
|
+
X["seg3"]["joint_axes"],
|
93
93
|
np.repeat(joint_axes[3:4], 1000, axis=0),
|
94
94
|
atol=0.01,
|
95
95
|
rtol=0.032,
|
@@ -101,7 +101,7 @@ def test_virtual_input_joint_axes_rr_imp_joint():
|
|
101
101
|
X = pipeline_load_data_X(sys)
|
102
102
|
|
103
103
|
np.testing.assert_allclose(
|
104
|
-
|
104
|
+
X["seg1"]["joint_axes"],
|
105
105
|
np.repeat(np.array([[0.0, 1, 0]]), 1000, axis=0),
|
106
106
|
atol=2e-6,
|
107
107
|
)
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import jax
|
2
2
|
import jax.numpy as jnp
|
3
3
|
import numpy as np
|
4
|
-
from ring import maths
|
5
4
|
import tree_utils
|
6
5
|
|
6
|
+
from ring import maths
|
7
|
+
|
7
8
|
|
8
9
|
def test_quat_rot_axis_are_inverse():
|
9
10
|
q = maths.quat_random(
|
@@ -12,7 +13,8 @@ def test_quat_rot_axis_are_inverse():
|
|
12
13
|
)
|
13
14
|
)
|
14
15
|
axis, angle = maths.quat_to_rot_axis(q)
|
15
|
-
|
16
|
+
# since jax >= v0.5 it (for some reason) returns q -> -q
|
17
|
+
assert tree_utils.tree_close(q, -maths.quat_rot_axis(axis, angle))
|
16
18
|
|
17
19
|
|
18
20
|
def test_3x3_are_inverse():
|
@@ -23,7 +25,8 @@ def test_3x3_are_inverse():
|
|
23
25
|
)
|
24
26
|
mat = maths.quat_to_3x3(q)
|
25
27
|
|
26
|
-
|
28
|
+
# since jax >= v0.5 it (for some reason) returns q -> -q
|
29
|
+
np.testing.assert_allclose(q, -maths.quat_from_3x3(mat), rtol=1e-5, atol=1e-5)
|
27
30
|
np.testing.assert_allclose(
|
28
31
|
mat, maths.quat_to_3x3(maths.quat_from_3x3(mat)), rtol=1e-5, atol=1e-5
|
29
32
|
)
|
@@ -149,7 +149,7 @@ def test_wandb_logger():
|
|
149
149
|
logger.log({"awesome_array": np.array(1.0)})
|
150
150
|
logger.log({"awesome_string": "yay"})
|
151
151
|
|
152
|
-
root = Path(__file__).parent.
|
152
|
+
root = Path(__file__).parent.joinpath("test_ml_utils_assets")
|
153
153
|
|
154
154
|
logger.log_image(str(root.joinpath("image1.png")))
|
155
155
|
logger.log_image(str(root.joinpath("image2.png")))
|
@@ -18,7 +18,8 @@ from ring.algorithms._random import _resolve_range_of_motion
|
|
18
18
|
def test_delta_ang_min_max(
|
19
19
|
range_of_motion, range_of_motion_method, delta_ang_min, delta_ang_max
|
20
20
|
):
|
21
|
-
|
21
|
+
# add more patience if `delta_ang_max` is small (thus very unlikely)
|
22
|
+
max_iter = 200 if delta_ang_max == 0.1 else 100
|
22
23
|
t_min, t_max = 0.1, 3.1
|
23
24
|
for seed in range(10):
|
24
25
|
for prev_phi in [-3.0, 0.0, 3.0]:
|
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
|
{imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_morph_system/four_seg_seg1.xml
RENAMED
File without changes
|
{imt_ring-1.6.39 → imt_ring-1.6.42}/src/ring/io/examples/test_morph_system/four_seg_seg3.xml
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
|
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
|