PySwitchbot 2.6.0__tar.gz → 2.7.1__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.
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/PKG-INFO +9 -9
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/README.md +8 -8
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/pyproject.toml +1 -1
- pyswitchbot-2.7.1/switchbot/__version__.py +1 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parser.py +12 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/__init__.py +1 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/ceiling_light.py +5 -1
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/lock.py +11 -0
- pyswitchbot-2.6.0/switchbot/__version__.py +0 -1
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/LICENSE +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/__init__.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/__init__.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/_sensor_th.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/air_purifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/art_frame.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/blind_tilt.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/bot.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/bulb.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/ceiling_light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/climate_panel.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/contact.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/curtain.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/fan.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/hub2.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/hub3.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/hubmini_matter.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/keypad.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/keypad_vision.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/leak.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/light_strip.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/lock.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/meter.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/motion.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/plug.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/presence_sensor.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/relay_switch.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/remote.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/roller_shade.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/smart_thermostat_radiator.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/vacuum.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/adv_parsers/weather_station.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/api_config.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/air_purifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/climate.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/evaporative_humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/fan.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/hub2.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/hub3.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/lock.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/const/presence_sensor.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/__init__.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/air_purifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/art_frame.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/base_cover.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/base_light.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/blind_tilt.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/bot.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/bulb.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/contact.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/curtain.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/device.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/evaporative_humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/fan.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/humidifier.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/keypad.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/keypad_vision.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/light_strip.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/meter.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/meter_pro.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/motion.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/plug.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/relay_switch.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/roller_shade.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/smart_thermostat_radiator.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/universal_remote.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/devices/vacuum.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/discovery.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/enum.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/helpers.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/models.py +0 -0
- {pyswitchbot-2.6.0 → pyswitchbot-2.7.1}/switchbot/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PySwitchbot
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: A library to communicate with Switchbot
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -93,10 +93,10 @@ from switchbot.discovery import GetSwitchbotDevices
|
|
|
93
93
|
from switchbot.devices import lock
|
|
94
94
|
from switchbot.const import SwitchbotModel
|
|
95
95
|
|
|
96
|
-
BLE_MAC="XX:XX:XX:XX:XX:XX"
|
|
97
|
-
KEY_ID="XX"
|
|
98
|
-
ENC_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
|
99
|
-
LOCK_MODEL=SwitchbotModel.LOCK_PRO
|
|
96
|
+
BLE_MAC = "XX:XX:XX:XX:XX:XX" # The MAC of your lock
|
|
97
|
+
KEY_ID = "XX" # The key-ID of your encryption-key for your lock
|
|
98
|
+
ENC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # The encryption-key with key-ID "XX"
|
|
99
|
+
LOCK_MODEL = SwitchbotModel.LOCK_PRO # Your lock model (here we use the Lock-Pro)
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
async def main():
|
|
@@ -117,10 +117,10 @@ from switchbot.discovery import GetSwitchbotDevices
|
|
|
117
117
|
from switchbot.devices import lock
|
|
118
118
|
from switchbot.const import SwitchbotModel
|
|
119
119
|
|
|
120
|
-
BLE_MAC="XX:XX:XX:XX:XX:XX"
|
|
121
|
-
KEY_ID="XX"
|
|
122
|
-
ENC_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
|
123
|
-
LOCK_MODEL=SwitchbotModel.LOCK_PRO
|
|
120
|
+
BLE_MAC = "XX:XX:XX:XX:XX:XX" # The MAC of your lock
|
|
121
|
+
KEY_ID = "XX" # The key-ID of your encryption-key for your lock
|
|
122
|
+
ENC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # The encryption-key with key-ID "XX"
|
|
123
|
+
LOCK_MODEL = SwitchbotModel.LOCK_PRO # Your lock model (here we use the Lock-Pro)
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
async def main():
|
|
@@ -62,10 +62,10 @@ from switchbot.discovery import GetSwitchbotDevices
|
|
|
62
62
|
from switchbot.devices import lock
|
|
63
63
|
from switchbot.const import SwitchbotModel
|
|
64
64
|
|
|
65
|
-
BLE_MAC="XX:XX:XX:XX:XX:XX"
|
|
66
|
-
KEY_ID="XX"
|
|
67
|
-
ENC_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
|
68
|
-
LOCK_MODEL=SwitchbotModel.LOCK_PRO
|
|
65
|
+
BLE_MAC = "XX:XX:XX:XX:XX:XX" # The MAC of your lock
|
|
66
|
+
KEY_ID = "XX" # The key-ID of your encryption-key for your lock
|
|
67
|
+
ENC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # The encryption-key with key-ID "XX"
|
|
68
|
+
LOCK_MODEL = SwitchbotModel.LOCK_PRO # Your lock model (here we use the Lock-Pro)
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
async def main():
|
|
@@ -86,10 +86,10 @@ from switchbot.discovery import GetSwitchbotDevices
|
|
|
86
86
|
from switchbot.devices import lock
|
|
87
87
|
from switchbot.const import SwitchbotModel
|
|
88
88
|
|
|
89
|
-
BLE_MAC="XX:XX:XX:XX:XX:XX"
|
|
90
|
-
KEY_ID="XX"
|
|
91
|
-
ENC_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
|
92
|
-
LOCK_MODEL=SwitchbotModel.LOCK_PRO
|
|
89
|
+
BLE_MAC = "XX:XX:XX:XX:XX:XX" # The MAC of your lock
|
|
90
|
+
KEY_ID = "XX" # The key-ID of your encryption-key for your lock
|
|
91
|
+
ENC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # The encryption-key with key-ID "XX"
|
|
92
|
+
LOCK_MODEL = SwitchbotModel.LOCK_PRO # Your lock model (here we use the Lock-Pro)
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
async def main():
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.7.1"
|
|
@@ -898,6 +898,18 @@ SUPPORTED_TYPES: dict[str | bytes, SwitchbotSupportedType] = {
|
|
|
898
898
|
"func": process_wolock_pro,
|
|
899
899
|
"manufacturer_id": 2409,
|
|
900
900
|
},
|
|
901
|
+
b"\x00\x11\x9f\xb8": {
|
|
902
|
+
"modelName": SwitchbotModel.LOCK_ULTRA_MAX,
|
|
903
|
+
"modelFriendlyName": "Lock Ultra Max",
|
|
904
|
+
"func": process_lock2,
|
|
905
|
+
"manufacturer_id": 2409,
|
|
906
|
+
},
|
|
907
|
+
b"\x01\x11\x9f\xb8": {
|
|
908
|
+
"modelName": SwitchbotModel.LOCK_ULTRA_MAX,
|
|
909
|
+
"modelFriendlyName": "Lock Ultra Max",
|
|
910
|
+
"func": process_lock2,
|
|
911
|
+
"manufacturer_id": 2409,
|
|
912
|
+
},
|
|
901
913
|
b"\x00\x11\x07\x60": {
|
|
902
914
|
"modelName": SwitchbotModel.STANDING_FAN,
|
|
903
915
|
"modelFriendlyName": "Standing Fan",
|
|
@@ -60,7 +60,11 @@ class SwitchbotCeilingLight(SwitchbotSequenceBaseLight):
|
|
|
60
60
|
return None
|
|
61
61
|
_version_info, _data = res
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
color_temp = int.from_bytes(_data[3:5], "big")
|
|
64
|
+
if self.min_temp <= color_temp <= self.max_temp:
|
|
65
|
+
self._state["cw"] = color_temp
|
|
66
|
+
else:
|
|
67
|
+
self._state.setdefault("cw", DEFAULT_COLOR_TEMP)
|
|
64
68
|
|
|
65
69
|
return {
|
|
66
70
|
"isOn": bool(_data[1] & 0b10000000),
|
|
@@ -22,6 +22,7 @@ COMMAND_LOCK_INFO = {
|
|
|
22
22
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4f8101",
|
|
23
23
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4f8104",
|
|
24
24
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4f8107",
|
|
25
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4f8107",
|
|
25
26
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4f8102",
|
|
26
27
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4f8102",
|
|
27
28
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4f810a",
|
|
@@ -31,6 +32,7 @@ COMMAND_UNLOCK = {
|
|
|
31
32
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4e01011080",
|
|
32
33
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4e0101000080",
|
|
33
34
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4e0101000080",
|
|
35
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4e0101000080",
|
|
34
36
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4e0101000080",
|
|
35
37
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4e0101000080",
|
|
36
38
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4e0101000080",
|
|
@@ -40,6 +42,7 @@ COMMAND_UNLOCK_WITHOUT_UNLATCH = {
|
|
|
40
42
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4e010110a0",
|
|
41
43
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
42
44
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
45
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
43
46
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
44
47
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
45
48
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4e01010000a0",
|
|
@@ -49,6 +52,7 @@ COMMAND_LOCK = {
|
|
|
49
52
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0f4e01011000",
|
|
50
53
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0f4e0101000000",
|
|
51
54
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0f4e0101000000",
|
|
55
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0f4e0101000000",
|
|
52
56
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0f4e0101000000",
|
|
53
57
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0f4e0101000000",
|
|
54
58
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0f4e0101000000",
|
|
@@ -62,6 +66,7 @@ COMMAND_ENABLE_NOTIFICATIONS = {
|
|
|
62
66
|
SwitchbotModel.LOCK_LITE: f"{COMMAND_HEADER}0e01001e00008101",
|
|
63
67
|
SwitchbotModel.LOCK_PRO: f"{COMMAND_HEADER}0e01001e00008104",
|
|
64
68
|
SwitchbotModel.LOCK_ULTRA: f"{COMMAND_HEADER}0e01001e00008107",
|
|
69
|
+
SwitchbotModel.LOCK_ULTRA_MAX: f"{COMMAND_HEADER}0e01001e00008107",
|
|
65
70
|
SwitchbotModel.LOCK_VISION_PRO: f"{COMMAND_HEADER}0e01001e00008102",
|
|
66
71
|
SwitchbotModel.LOCK_VISION: f"{COMMAND_HEADER}0e01001e00008102",
|
|
67
72
|
SwitchbotModel.LOCK_PRO_WIFI: f"{COMMAND_HEADER}0e01001e0000810a",
|
|
@@ -102,6 +107,7 @@ class SwitchbotLock(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
|
|
|
102
107
|
SwitchbotModel.LOCK_PRO,
|
|
103
108
|
SwitchbotModel.LOCK_LITE,
|
|
104
109
|
SwitchbotModel.LOCK_ULTRA,
|
|
110
|
+
SwitchbotModel.LOCK_ULTRA_MAX,
|
|
105
111
|
SwitchbotModel.LOCK_VISION_PRO,
|
|
106
112
|
SwitchbotModel.LOCK_VISION,
|
|
107
113
|
SwitchbotModel.LOCK_PRO_WIFI,
|
|
@@ -143,6 +149,11 @@ class SwitchbotLock(SwitchbotSequenceDevice, SwitchbotEncryptedDevice):
|
|
|
143
149
|
|
|
144
150
|
def _parse_basic_data(self, basic_data: bytes) -> dict[str, Any]:
|
|
145
151
|
"""Parse basic data from lock."""
|
|
152
|
+
if self._model is SwitchbotModel.LOCK_ULTRA_MAX:
|
|
153
|
+
# Lock Ultra Max's basic-info response format is not documented.
|
|
154
|
+
# Its advertisement already carries the reliable battery and state
|
|
155
|
+
# data, so never overwrite that data with an unverified response.
|
|
156
|
+
return {}
|
|
146
157
|
return {
|
|
147
158
|
"battery": basic_data[1],
|
|
148
159
|
"firmware": basic_data[2] / 10.0,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "2.6.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|