bec-lib 4.0.2__tar.gz → 4.0.3__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.
- {bec_lib-4.0.2 → bec_lib-4.0.3}/PKG-INFO +1 -1
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/device.py +6 -6
- {bec_lib-4.0.2 → bec_lib-4.0.3}/pyproject.toml +1 -1
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_devices.py +45 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/.gitignore +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/README.md +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/_print_versions.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/acl_login.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/actors.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/alarm_handler.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/atlas_models.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/bec_errors.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/bec_service.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/bec_yaml_loader.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/bl_state_manager.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/bl_states.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/builtin_actor_hli.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/callback_handler.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/channel_monitor.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/client.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/codecs.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/config_helper.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/config_values.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/configs/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/configs/demo_config.yaml +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/configs/openapi_schema.json +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/connector.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/dap_plugin_objects.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/dap_plugins.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/devicemanager.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/endpoints.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/file_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/live_scan_data.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/lmfit_serializer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/logger.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/macro_update_handler.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/messages.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/messaging_hooks.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/messaging_services.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/metadata_schema.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/numpy_encoder.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/observer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/pdf_writer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/plugin_helper.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/procedures/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/procedures/helper.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/procedures/hli.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/procedures/status.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/queue_items.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/redis_connector/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/redis_connector/constants.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/redis_connector/hli.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/redis_connector/managed_redis_connection.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/redis_connector/streams.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/redis_connector/validation.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/request_context.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/request_items.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_args.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_data_container.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_history.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_input_validator.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_items.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_manager.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_number_container.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_repeat.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scan_report.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scans.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/scibec_validator.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/script_executor.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/serialization.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/serialization_registry.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/service_config.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/signature_serializer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/tests/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/tests/fixtures.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/tests/test_config.yaml +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/tests/test_service_config.yaml +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/tests/utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/user_macros.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/copier_jinja_filters.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/deprecation.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/import_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/json_extended.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/_constants.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/_util.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/create/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/create/device.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/create/scan.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/create/templates/scan.py.jinja +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/plugin_manager/main.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/proxy.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/pydantic_pretty_print.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/rpc_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/scan_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/threading_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/bec_lib/utils/user_acls_test.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/__init__.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/_additional_for_signature_serializer_test.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/conftest.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_acl_login.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_alarm_handler.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_atlas_models.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_beamline_states.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_bec_logger.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_bec_messages.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_bec_service.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_callback_handler.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_channel_monitor.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_client.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_config_helper.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_core_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_dap_plugins.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_data_container.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_deprecation.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_device_hashing.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_device_manager.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_file_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_hli_connector_fakeredis.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_hli_redis_connector.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_import_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_jinja_plugins.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_lmfit_serializer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_managed_config_values.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_managed_redis_connection.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_messaging_hooks.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_messaging_service.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_metadata_schema.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_observer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_pdf_writer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_plugin_helper.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_plugin_manager.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_plugin_system.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_pydantic_pretty_print.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_queue_items.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_redis_connector_fakeredis.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_context.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_data.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_history.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_items.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_manager.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_object.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_repeat.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scan_report.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_scibec_validator.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_script_executor.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_serializer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_signature_serializer.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_signature_serializer_with_future_import.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_stream_subs.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_user_macros.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_utils.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/tests/test_yaml_loader.py +0 -0
- {bec_lib-4.0.2 → bec_lib-4.0.3}/util_scripts/init_config.py +0 -0
|
@@ -254,11 +254,6 @@ class DeviceBase:
|
|
|
254
254
|
if self._info:
|
|
255
255
|
self._parse_info()
|
|
256
256
|
|
|
257
|
-
# the following lambda is needed to support customized RPC methods with
|
|
258
|
-
# doc strings and function signatures.
|
|
259
|
-
# pylint: disable=unnecessary-lambda
|
|
260
|
-
self.run = lambda *args, **kwargs: self._run(*args, **kwargs)
|
|
261
|
-
|
|
262
257
|
def _run(self, *args, fcn=None, cached=False, **kwargs):
|
|
263
258
|
device, func_call = self._get_rpc_func_name(fcn=fcn)
|
|
264
259
|
|
|
@@ -582,7 +577,12 @@ class DeviceBase:
|
|
|
582
577
|
self._custom_rpc_methods[user_access_name] = DeviceBase(
|
|
583
578
|
name=user_access_name, info=descr, parent=self
|
|
584
579
|
)
|
|
585
|
-
|
|
580
|
+
# Use a separate callable so RPC metadata stays local to each method.
|
|
581
|
+
setattr(
|
|
582
|
+
self,
|
|
583
|
+
user_access_name,
|
|
584
|
+
functools.partial(self._custom_rpc_methods[user_access_name]._run),
|
|
585
|
+
)
|
|
586
586
|
setattr(getattr(self, user_access_name), "__doc__", descr.get("doc"))
|
|
587
587
|
setattr(
|
|
588
588
|
getattr(self, user_access_name),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import inspect
|
|
1
2
|
from typing import Any, Callable, Literal
|
|
2
3
|
from unittest import mock
|
|
3
4
|
|
|
@@ -25,6 +26,7 @@ from bec_lib.device import (
|
|
|
25
26
|
)
|
|
26
27
|
from bec_lib.devicemanager import DeviceContainer, DeviceManagerBase
|
|
27
28
|
from bec_lib.endpoints import MessageEndpoints
|
|
29
|
+
from bec_lib.signature_serializer import signature_to_dict
|
|
28
30
|
from bec_lib.tests.fixtures import device_manager_class
|
|
29
31
|
from bec_lib.tests.utils import ClientMock, ConnectorMock, get_device_info_mock
|
|
30
32
|
|
|
@@ -45,6 +47,49 @@ def fixture_dev(bec_client_mock: ClientMock | BECClient):
|
|
|
45
47
|
yield bec_client_mock.device_manager.devices
|
|
46
48
|
|
|
47
49
|
|
|
50
|
+
@pytest.mark.parametrize("device_cls", [DeviceBase, Device, Signal, ComputedSignal, Positioner])
|
|
51
|
+
def test_device_does_not_expose_internal_run(device_cls):
|
|
52
|
+
device = device_cls(name="test")
|
|
53
|
+
assert "run" not in dir(device)
|
|
54
|
+
with pytest.raises(AttributeError):
|
|
55
|
+
getattr(device, "run")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@pytest.mark.parametrize("nested", [False, True])
|
|
59
|
+
def test_custom_rpc_methods_preserve_metadata_and_dispatch(nested, dm_with_override):
|
|
60
|
+
def run(value: int, *, wait: bool = True) -> str:
|
|
61
|
+
"""Run the hardware operation."""
|
|
62
|
+
|
|
63
|
+
def other() -> int:
|
|
64
|
+
"""Another hardware operation."""
|
|
65
|
+
|
|
66
|
+
methods = {
|
|
67
|
+
method.__name__: {
|
|
68
|
+
"type": "func",
|
|
69
|
+
"doc": method.__doc__,
|
|
70
|
+
"signature": signature_to_dict(method),
|
|
71
|
+
}
|
|
72
|
+
for method in (run, other)
|
|
73
|
+
}
|
|
74
|
+
access = {"controller": {"device_class": "Controller", "info": methods}} if nested else methods
|
|
75
|
+
device = Device(name="test", info={"custom_user_access": access}, parent=dm_with_override)
|
|
76
|
+
target = device.controller if nested else device
|
|
77
|
+
prefix = "controller." if nested else ""
|
|
78
|
+
|
|
79
|
+
for method in (run, other):
|
|
80
|
+
proxy_method = getattr(target, method.__name__)
|
|
81
|
+
assert proxy_method.__doc__ == method.__doc__
|
|
82
|
+
assert inspect.signature(proxy_method) == inspect.signature(method).replace(
|
|
83
|
+
return_annotation=inspect.Signature.empty
|
|
84
|
+
)
|
|
85
|
+
method_device = target._custom_rpc_methods[method.__name__]
|
|
86
|
+
assert not hasattr(method_device, "run")
|
|
87
|
+
with mock.patch.object(method_device, "_run_rpc_call", return_value="result") as rpc_call:
|
|
88
|
+
args, kwargs = ((3,), {"wait": False}) if method is run else ((), {})
|
|
89
|
+
assert proxy_method(*args, **kwargs) == "result"
|
|
90
|
+
rpc_call.assert_called_once_with("test", f"{prefix}{method.__name__}", *args, **kwargs)
|
|
91
|
+
|
|
92
|
+
|
|
48
93
|
def test_nested_device_root(dev: Any):
|
|
49
94
|
assert dev.dyn_signals.name == "dyn_signals"
|
|
50
95
|
assert dev.dyn_signals.messages.name == "messages"
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|